<!-- grove:last-verified v1.98 -->
Get your own Grove cell running in 5 minutes.
Someone with Grove sends you an invite link like:
https://grove.nook.li/invite/abc123...
1. Open the link (freshly โ the page hands you a current installer; a stale one is rejected)
2. Enter your name
3. Click ๐ฒ Join the Grove
4. Download and run the install script
5. Dashboard opens at http://localhost:5678
curl -s https://grove.nook.li/invite/abc123... | bash
The script will:
> ๐ Choose your password. Whenever there's a terminal โ including an interactive curl โฆ | bash over SSH โ the installer prompts you to choose a password, typed twice so a typo can't lock you out. Only a genuinely non-interactive run with no terminal at all (automation/cloud-init) auto-generates a random password and prints it once at the end โ Password: โฆ Save this!, your only copy. Change it later in โ๏ธ Settings.
> Joining is approval-gated. Running the script sends a join request โ you land in an "awaiting owner approval" state and are not connected yet. The inviter must Approve you before peering completes. (The installer also signs a key-proof; an out-of-date installer is refused, so always re-open a fresh invite link.)
The supported path is install.sh โ it pins every dependency by hash
(pip โฆ --require-hashes), sets up the service, and handles the password flow
above. Run it directly if you have the repo:
bash install.sh
If you must wire it up by hand instead:
# 1. Create Grove directory and get the code (from a peer or release)
mkdir -p ~/.grove/assets
cp grove.py web.py acme.py acme_jws.py watchdog.py ~/.grove/
cp -r assets/. ~/.grove/assets/ # copy the WHOLE dir โ the guitar-tab
# renderer needs Bravura.woff2, not just html/css/js
# 2. Install deps (install.sh normally does this hash-pinned; unpinned here)
pip3 install flask flask-socketio cryptography requests websockets pynacl gevent gevent-websocket markdown zeroconf
# 3. Start
cd ~/.grove && python3 web.py
A manually-started cell with no password set opens at http://localhost:5678 on
the /setup page โ set your password there. (An install.sh cell skips
/setup and boots straight to /login, since the password was set at install.)
--require-hashes againstversion+sha256-pinned constraints; if you opt into GroveAI, llama.cpp is built
from a pinned tag and the starter model is sha256-verified (deleted on mismatch).
Set up GroveAI? [y/N] builds the local LLMstack but leaves it stopped โ you Start it from the AI tab when you want it.
auto-starts on boot; the installer prints the start/stop/logs commands.
Already set during install (prompted, or auto-generated + printed under curl | bash).
Only a manual Option-B cell shows a /setup page on first visit. Otherwise you
go straight to /login.
Go to โ๏ธ Settings โ set your cell name (how peers see you).
๐ Files tab โ drag files onto the upload zone โ done. Files encrypt and sync automatically.
โ๏ธ Settings โ Backup Keys โ save the ZIP somewhere safe.
If you lose your keys, your encrypted files are gone forever.