Getting started
From zero to your first memo in about two minutes.
Prerequisites
You need exactly one of the following:
- Docker (the fast path — options A, B, C all use it) — install Docker Engine on Linux, or Docker Desktop on macOS/Windows. Nothing else; you don't even need to clone the repository, and the install script will point you at the right Docker setup if it's missing.
- Node.js 22+ and pnpm (only if you'd rather run from source) — plus
gitto clone.
1. Run NemoMemo
Option A — the install script (recommended)
One command. It checks that Docker is there (and tells you exactly what to do if it isn't), pulls the image, starts NemoMemo with a persistent data volume, and waits until your reef answers.
Linux and macOS:
curl -fsSL https://trynemomemo.com/install.sh | shWindows (PowerShell, with Docker Desktop):
irm https://trynemomemo.com/install.ps1 | iexThen open http://localhost:5230. Re-running the same command later upgrades in
place — it pulls the newest image and recreates the container while keeping your data
volume. Prefer a different port or names? Set NEMOMEMO_PORT, NEMOMEMO_VOLUME,
NEMOMEMO_CONTAINER, or NEMOMEMO_IMAGE in your environment first, e.g.
NEMOMEMO_PORT=5231 curl -fsSL https://trynemomemo.com/install.sh | sh.
Turning on email, transcripts or dictation? Put those in an env file and point
the script at it with NEMOMEMO_ENV_FILE — see
Turning features on below.
(Piping a script to your shell is a trust decision — the script is short and lives in
the repo at install.sh
/ install.ps1, so
read it first if you like. It only talks to Docker.)
Option B — plain Docker
The same thing the script does, by hand:
docker run -d --name nemomemo --restart unless-stopped \
-p 5230:5230 \
-v nemomemo-data:/app/data \
ghcr.io/davidallmon/nemomemo:latestThen open http://localhost:5230. Add --env-file .env to that command when you
want any of the optional features.
Option C — Docker Compose
services:
nemomemo:
image: ghcr.io/davidallmon/nemomemo:latest
ports:
- "5230:5230"
volumes:
- nemomemo-data:/app/data
env_file: [.env] # optional — delete this line if you have no .env
restart: unless-stopped
volumes:
nemomemo-data:docker compose up -dOption D — from source
git clone https://github.com/DavidAllmon/nemomemo.git
cd nemomemo
pnpm install --filter '!@nemomemo/site' # the app only; skips the website
pnpm build
NEMOMEMO_WEB_DIST=web/dist node server/dist/index.jsWant one-click cloud hosting instead? See Deploy.
Turning features on
NemoMemo needs no configuration to run — everything below is optional, and the reef works fine without any of it. When you do want something, it comes from one env file. Copy the annotated template from the repo:
curl -fsSLO https://raw.githubusercontent.com/DavidAllmon/nemomemo/main/.env.example
cp .env.example .envUncomment what you want (every setting is commented out to start), then apply it:
| How you installed | How to apply .env |
|---|---|
| Install script | NEMOMEMO_ENV_FILE=.env curl -fsSL https://trynemomemo.com/install.sh | sh |
| Docker | add --env-file .env to docker run |
| Compose | env_file: [.env] on the service, then docker compose up -d |
| From source | set -a; . ./.env; set +a before starting the server |
Already running? Environment variables are fixed when a container is created, so adding them means recreating it. Your memos live in the data volume, not the container, so this keeps everything:
docker rm -f nemomemo
NEMOMEMO_ENV_FILE=.env curl -fsSL https://trynemomemo.com/install.sh | sh(On Compose, docker compose up -d does the recreate for you.)
The full list of settings — with defaults and what each one does — is in Deploy → Configuration. Two worth knowing before you start:
- Email needs all four
NEMOMEMO_SMTP_HOST,_USER,_PASSand_FROMtogether. Set three and email stays off without complaining, because NemoMemo is designed to run happily without mail. - Docker users should leave
NEMOMEMO_DATAalone. The image already points it at/app/data, which is your mounted volume. Overriding it to a relative path writes your memos inside the container instead, where the next upgrade discards them. To change the port you're visiting, change the port mapping (-p 8080:5230), not the variable.
2. Create the reef keeper
The first account you create becomes the admin — NemoMemo calls this the reef keeper. Pick a username, your email, and a password on the "Set up your reef" screen — no third-party sign-ins to configure. (Your email is your account's anchor: with email set up, it powers password resets and member invites; without it, it's simply saved for later.)
3. Write your first memo
The editor sits at the top of your Home timeline — and it's what-you-see-is-what-you-get:
type **bold** and it turns bold as you finish, # starts a heading, [ ] makes a
clickable checkbox, or just use the toolbar. Add a #tag, pick a visibility, and press
Save (or ⌘+Enter). That's the whole loop.
4. Learn the three visibilities
- Private — only you.
- Protected — anyone signed in on your instance.
- Public — anyone at all, when the instance is in public mode.
5. Meet Dory
See that little fish button next to Save? That's a Dory memo — the memo will be forgotten automatically in 24 hours. Try it with something disposable.
Where your data lives
Everything is in the /app/data volume (or the data/ directory for source installs):
one SQLite database plus your uploads. That's the entire footprint — see
Deploy → Backups before you rely on it.