Install on Linux
Install Subshell Server on a Linux machine, run it as a service, and open its setup page.
Install Subshell Server on an x86-64 or arm64 Linux machine, start it as a background service, and open its setup page in a browser.
Before you start
- A Linux machine you can sign in to, x86-64 or arm64.
- A browser on that machine, or on another device on the same network.
- tmux, or a way to install it.
initchecks for tmux before it writes anything; an interactive run whose machine lacks it can install it on the spot withapt-getordnf. Declining that offer endsinitwith nothing written, so installing tmux and re-running is the whole fix.
Install and start the server
-
Open a terminal on the machine that will run the server and run the install script:
curl -fsSL https://subshell.sh/install-server.sh | bashThe script finds your platform, downloads the newest
cli-serverrelease, and checks the download against the release's published.sha256digest before it runs anything. It installs the binary to~/.local/bin/subshell-serverand startssubshell-server init. -
initasks for the port, address, base URL, extra trusted origins, and database path. Each question has a default, so you can press Enter through them. If~/.local/binis not on yourPATH, it offers to add it: yes, the default, appendsexport PATH="$HOME/.local/bin:$PATH"to~/.zprofile, creating that file if needed, and to~/.zshrconly if one already exists. -
Answer the last question, which decides how the server runs:
Run Subshell Server in the background and start it at login?Choose Yes. This installs a per-user systemd service, with no sudo. With
--yes, every question above is answered yes at once, each by an announced line. A run with no terminal to ask installs no service, prints the PATH line as instructions instead of an offer, and says what it skipped. On a host that also lacks tmux, the run stops at that check first, with nothing written. -
When
initfinishes, it prints the address to open:Open http://localhost:3080/setup in a browser to create the admin account.
Open the setup page
Open that address in a browser and create the first account. That first account is the administrator.
Do this before others can reach the machine
The setup page is public until the first account exists, so you can create one. On a shared network, anyone who opens the page before you creates the administrator account instead.
With the account created, continue to Your first subshell.
Notes
- The binary is self-contained: the web UI is embedded, so the machine needs no Bun, no checkout, and no separate frontend to serve.
initstores its settings in~/.config/subshell-server/config.envand generates the sign-in secret once. A second run keeps the existing secret.- Every configuration question
initasks has an environment-variable spelling for unattended runs; Install by hand lists them. The database path is the exception: it keeps its default unless you runinit --db-pathyourself. The PATH offer and the tmux check have no variable at all: a terminal gets those questions, and--yesanswers them. - To reach the server from another machine, browse to an address that machine can reach and that the instance trusts. Networking and addresses explains which addresses a browser can sign in from.
- If something looks wrong, run
subshell-server statusfirst. It reports the active settings, whether tmux and the port are up, and whether the admin account exists, and it does this without starting anything. - A machine outside the published targets (
linux-x64,linux-arm64,darwin-arm64,darwin-x64) is refused by name, never silently mis-resolved.
Other install methods
Install on macOS · the desktop setup app · Docker
Edit on GitHubLast updated on
