Install NeoRecall
NeoRecall requires Node.js 20 or newer and a supported 64-bit host. It does not install or run speech-recognition or language-model weights. Before processing recordings, configure a hosted provider or separately deploy compatible transcription and language-model endpoints.
Repository installer
NeoRecall is no longer published to the npm registry. The repository installer
clones NeoRecall from GitHub, links the global neorecall command to that
checkout, and runs the guided install:
bash <(curl -fsSL https://raw.githubusercontent.com/NeoLabs-Systems/NeoRecall/main/install.sh)
It asks for two things:
- Install directory — defaults to
~/NeoRecall. The directory must be empty or already be a NeoRecall checkout. - Release channel —
stabletracks themainbranch,betatracksbeta. The choice is written to~/.neorecall/.envand reused by later updates.
Git, Node.js 20 or newer, and npm are required. The checkout ships the built web client, so the Flutter SDK is only needed to develop the clients, not to run the server.
The install then creates ~/.neorecall, runs database migrations, downloads and
verifies the small models NeoRecall runs itself — multilingual search embeddings,
a voice-activity detector, and speaker diarization, about 165 MB in total — and
probes ffmpeg and sqlite-vec. Speech recognition and language models are never
downloaded or started; configure those services through .env, or in the app
under Admin › Providers after installation. The first account created on a
server is its admin.
Open http://localhost:4500 after neorecall status reports a running service.
Use a reverse proxy with TLS before exposing the server outside a trusted
network.
Install from the desktop app
The macOS and Windows apps can perform the whole setup without a terminal. On the server screen, choose Set up NeoRecall on this computer: the app checks for Git, Node.js, and npm, clones the selected channel, installs dependencies, links the CLI, starts the service, and connects to it — showing each step as it runs. If a prerequisite is missing, the app names it and links to the download instead of failing silently.
Next it asks you to create your account. The first account on a server is its admin, so right after signing up the app opens Admin › Providers for the two services NeoRecall does not run itself: the transcription service and the language model that writes memories. Pick a provider, paste a key, let the app list the available models, and press Save and test — the test transcribes a bundled sample recording and asks the model for a one-word answer, reporting each leg separately. These settings are stored encrypted in the database and can be changed later on the same page.
Admins
Admin is a role on an ordinary account, not a separate login. The first account created on a server becomes its admin and sees an Admin page in the app: overview, users and usage limits, jobs, AI requests, the audit log, backups, providers and processing thresholds, with a search box across all of them. Admin routes accept only a signed-in session — API keys and OAuth tokens never reach them — and the role is re-read on every request, so a change applies at once.
neorecall admin # list admin accounts
neorecall admin grant <username> # make an account an admin
neorecall admin revoke <username> # remove admin from an account
NEORECALL_ADMIN_USERS (comma-separated usernames) grants admin to those
accounts on every start, which suits Docker deployments. Register the accounts
first, then list them: the list only grants admin to accounts that already
exist, and a listed name that has no account yet is reserved — nobody can
register it until it is removed from the list. The list is additive: removing a
name does not revoke it, and an account revoked with the CLI stays revoked.
Every start logs which accounts are admins.
Admin accounts can't delete themselves or be disabled from the app; revoke
admin first. Installs from before this change keep their first account as
admin — check the start-up log or neorecall status after upgrading. The old
ADMIN_USERNAME, ADMIN_PASSWORD and ADMIN_API_KEY values grant nothing and
are removed from ~/.neorecall/.env on the next start. Scripts that called the
old admin API with ADMIN_API_KEY sign in as an admin account instead
(POST /api/v1/auth/login) and send its session token to /api/v1/admin/*;
API keys and OAuth tokens are refused there. Because an admin session can
change where recordings are sent for transcription, turn on two-factor
authentication for admin accounts.
Manual checkout
git clone --branch main https://github.com/NeoLabs-Systems/NeoRecall.git ~/NeoRecall
cd ~/NeoRecall
npm install --omit=dev
npm link
neorecall channel stable
neorecall install
Updating
neorecall update # latest commit on the configured channel
neorecall update beta # switch channel and update
update fetches the channel branch, discards local changes to tracked files,
backs up runtime data, reinstalls dependencies, re-verifies the local models, and
restarts the service. An older global package installation is migrated to a Git
checkout on the first neorecall update; runtime data in ~/.neorecall is kept.
Docker Compose
docker compose build
docker compose run --rm neorecall node bin/neorecall.js setup
docker compose up -d
The compose volume contains the database, local search model, logs, and temporary processing files. Provider credentials come from a local .env or encrypted admin settings; no credentials are baked into the image.
Service commands
neorecall status
neorecall logs
neorecall stop
neorecall channel
neorecall reset-password USERNAME
neorecall reset-password USERNAME --password-file PATH
macOS uses a LaunchAgent and Linux uses a systemd user service when available. On unsupported service managers, neorecall start launches the supervisor directly.