NemoMemo

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 git to clone.

1. Run NemoMemo

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 | sh

Windows (PowerShell, with Docker Desktop):

irm https://trynemomemo.com/install.ps1 | iex

Then 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:latest

Then 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 -d

Option 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.js

Want 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 .env

Uncomment what you want (every setting is commented out to start), then apply it:

How you installedHow to apply .env
Install scriptNEMOMEMO_ENV_FILE=.env curl -fsSL https://trynemomemo.com/install.sh | sh
Dockeradd --env-file .env to docker run
Composeenv_file: [.env] on the service, then docker compose up -d
From sourceset -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, _PASS and _FROM together. Set three and email stays off without complaining, because NemoMemo is designed to run happily without mail.
  • Docker users should leave NEMOMEMO_DATA alone. 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.