Take the program
333 is a small program you leave running on a computer you can spare, where it answers whenever another copy of it knocks.
The file for that machine is 333-x86_64-linux. Light, the same client without the terminal screen, is 333-light-x86_64-linux. Both carry Tor.
On Linux or a Mac
In a terminal. The installer picks the file for the machine it runs on, checks it against the release's SHA256SUMS, and puts it at ~/.local/bin/333. It starts nothing and needs no password. Read it first; it is short.
curl -fsSL https://the333.dev/install.sh | sh
For Light, end it with sh -s -- --light in place of sh.
Or by hand, without the installer
The same steps, one at a time. The grep line prints OK before anything moves, and nothing after it runs if it does not.
cd "$(mktemp -d)" base=https://github.com/needmoretruth/333/releases/latest/download curl -fLO "$base/333-x86_64-linux" curl -fLO "$base/SHA256SUMS" grep -E ' \*?333-x86_64-linux$' SHA256SUMS | sha256sum -c - && chmod +x 333-x86_64-linux && mkdir -p ~/.local/bin && mv 333-x86_64-linux ~/.local/bin/333
That is Linux on x86-64. On a Mac, use shasum -a 256 in place of sha256sum, and the Mac file from the table below; anywhere else, the name from the table.
On Windows
In PowerShell. The installer fetches the Windows file, checks it against the release's SHA256SUMS, and puts it at %LOCALAPPDATA%\Programs\333\333.exe. It starts nothing, needs no administrator, and adds that folder to your PATH only if you add -AddToPath. Read it first; it is short.
irm https://the333.dev/install.ps1 | iex
For Light, run it this way instead. -AddToPath goes at the end in the same way.
& ([scriptblock]::Create((irm https://the333.dev/install.ps1))) -Light
Or by hand, without the installer
The same steps, one at a time. The file is moved into place only if its hash is the one SHA256SUMS gives, and the last line says which happened.
$base = "https://github.com/needmoretruth/333/releases/latest/download"
$file = "333-x86_64-windows.exe"
$dir = "$env:LOCALAPPDATA\Programs\333"
Invoke-WebRequest -UseBasicParsing "$base/SHA256SUMS" -OutFile "$env:TEMP\SHA256SUMS"
Invoke-WebRequest -UseBasicParsing "$base/$file" -OutFile "$env:TEMP\$file"
$want = (Select-String "[ *]$file`$" "$env:TEMP\SHA256SUMS").Line.Split(" ")[0]
if ((Get-FileHash "$env:TEMP\$file").Hash -eq $want) { New-Item -ItemType Directory -Force $dir | Out-Null; Move-Item -Force "$env:TEMP\$file" "$dir\333.exe"; "OK: $dir\333.exe" } else { "It does not match SHA256SUMS. Nothing was installed." }
Every file
For anybody the guess above is wrong for, or who would rather take the file through the browser. Standard has the terminal screen, Light does not, and both carry Tor. They run from 15 megabytes on a Mac to 24 on 64-bit ARM.
| Your machine | Standard, then Light |
|---|---|
| Linux, desktop or server | Standard 333- |
| Raspberry Pi 3, 4 or 5 on 64-bit, and other 64-bit ARM Linux | Standard 333- |
| Raspberry Pi Zero, or any Pi on 32-bit | Standard 333- |
| Mac, Apple silicon | Standard 333- |
| Mac, Intel | Standard 333- |
| Windows | Standard 333- |
A file taken through the browser still has to be checked against SHA256SUMS, made executable, and put on your PATH, which is what the commands above do. Nothing here is signed by a developer certificate, so a Mac or Windows may refuse to open a file that came through the browser until you tell it otherwise. If none of these fits, or you would rather not run a file somebody else built, the repository says how to build it on Ubuntu, Debian, Fedora, Arch, macOS and Windows.
Then, in order
- Be handed the file. This site's node is awake at all hours:
The first
333 join 333:158.69.112.10:3333joinalso makes your node's name, a key whose name begins with 333, which takes a moment. Any address on the board works the same way. - Start it.
It runs in the background from now on, after you log out and after a reboot. If it says
333 startshut, your router keeps others out:333 start --torneeds no router change. - Check on it.
333 statussays whether it is running, where others can reach it, and how many of us are answering.333 logsshows what it wrote. - Stop it whenever you want:
333 stop. It stays stopped after a reboot until you run333 startagain.
To watch it work instead, 333 run runs it in this terminal with its screen; q stops it. 333 on its own says what state your node is in and what to type next, and 333 help lists every command.
If nobody is on the board and this site's node is gone, somebody has to be first: 333 begin refuses while anybody is there, and otherwise starts a line of your own, with nobody having signed for it, which anybody reading your record can see.
Nothing starts until you start it.
The installer puts one file in place and runs nothing. Your node first answers anybody, and first leaves its address at the meeting point, when you run 333 start or 333 run yourself, and that command is the moment you agreed.