โ† Dashboard ยท Docs ยทQuickstart

Grove Quickstart

<!-- grove:last-verified v1.98 -->

Get your own Grove cell running in 5 minutes.


Option A: Join via Invite (Recommended)

Someone with Grove sends you an invite link like:


https://grove.nook.li/invite/abc123...

In a Browser

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

From Terminal


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.)


Option B: Manual Install

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.)

What the installer does for you

version+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).

stack 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.


First Steps

1. Password

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.

2. Name your cell

Go to โš™๏ธ Settings โ†’ set your cell name (how peers see you).

3. Add peers

4. Upload files

๐Ÿ“ Files tab โ†’ drag files onto the upload zone โ†’ done. Files encrypt and sync automatically.

5. Share with friends

6. Back up your keys!

โš™๏ธ Settings โ†’ Backup Keys โ†’ save the ZIP somewhere safe.

If you lose your keys, your encrypted files are gone forever.


What Happens Next


System Requirements