Install Titen
Install the Titen CLI on macOS, Linux, WSL, or Windows, or add the SDK with your JavaScript package manager.
macOS, Linux, and WSL
The installer adds Bun when it is missing or older than 1.2, then installs the
titen command for your current user. It does not use sudo, start a service,
or create a Titen database.
curl -fsSL https://titen.dev/install.sh | bash
The default installer succeeds only when titen resolves by name after the
install. If Bun’s global bin directory is not on PATH, it prints a predictable
TITEN_BIN=/absolute/path/to/titen line and exits non-zero instead of reporting
a ready CLI that another process cannot start.
Automation that intentionally invokes the absolute binary can request only that path on stdout:
TITEN_BIN="$(curl -fsSL https://titen.dev/install.sh | bash -s -- --print-path)"
"$TITEN_BIN" --version
Installation progress and errors stay on stderr in --print-path mode. The
installer does not edit a shell profile; add the printed directory to PATH
yourself only when command-by-name use is desired.
To review it first:
curl -fsSL https://titen.dev/install.sh -o install.sh
less install.sh
bash install.sh
Windows
Run this in Windows PowerShell 5.1 or PowerShell 7. The installer does not need Administrator access and does not change your execution policy.
irm https://titen.dev/install.ps1 | iex
To review it first:
irm https://titen.dev/install.ps1 -OutFile install.ps1
Get-Content .\install.ps1
& .\install.ps1
Pin a version
Installers accept latest or one exact stable version. A pin never accepts a
range or prerelease by accident.
curl -fsSL https://titen.dev/install.sh | bash -s -- --version 0.5.7
& ([scriptblock]::Create((irm https://titen.dev/install.ps1))) -Version 0.5.7
Both installers finish by running titen --version. Installing the CLI alone
does not bootstrap an organization, print an API key, or start a server.
Package managers
The npm package is named titen-memory; the executable is named titen. Bun
must be on PATH for every one of these commands: the published binary is a Bun
program, so on a Node-only machine it exits with
titen: error: bun was not found on PATH. The install.sh and install.ps1
above add Bun when it is missing; a package manager does not.
| Use | Bun | npm | pnpm |
|---|---|---|---|
| Global CLI | bun add -g titen-memory@latest |
npm i -g titen-memory@latest |
pnpm add -g titen-memory@latest |
| One command | bunx --bun titen-memory@latest --version |
npx titen-memory@latest --version |
pnpm dlx titen-memory@latest --version |
| Project SDK | bun add titen-memory |
npm i titen-memory |
pnpm add titen-memory |
Yarn can install the SDK with yarn add titen-memory. Its Node-owned yarn dlx
runner cannot execute Titen’s Bun TypeScript CLI, so use bunx --bun for a
one-off CLI command instead.
Update or remove
Rerun the installer to update to npm latest, or pass an exact version to move
to that release. Remove the package with the manager that installed it:
bun remove -g titen-memory
# npm uninstall -g titen-memory
# pnpm remove -g titen-memory
Removing the package does not delete a Titen database, configuration, backup, or API key. Those files belong to you and remain where you created them.
Start Titen
There is nothing left to configure. With neither TITEN_MCP_URL nor
TITEN_API_KEY in the environment, titen mcp opens or creates
~/.titen/memory.db, provisions its own organization, workspace, project, and
owner as real rows, and speaks MCP over stdio in the same process:
titen mcp
No key to paste, no HTTP hop, nothing sent off the machine. Retrieval is lexical FTS in this mode. Point an agent host at it with the agent integration guide.
Or run the service over HTTP
Several agents, several machines, the REST API, or the dashboard need the served path instead. Create the first organization once, save the printed key, then run the local service:
titen bootstrap --org "My Org"
titen serve
Both commands resolve the same user-scoped ~/.titen/service.db from every working
directory. bootstrap prints the absolute path it created; serve refuses a missing store
instead of starting an empty database that rejects the key. Existing ./titen.db stores
from releases before 0.8.0 remain usable with an explicit absolute --db on every service
command and are never moved automatically.
Start the packaged dashboard
The npm package includes the dashboard build and same-origin adapter from that exact release. With the API running on loopback, start the dashboard on its separate loopback port:
TITEN_DASHBOARD_LIVE=true \
TITEN_DASHBOARD_AUTH=session \
TITEN_API_URL=http://127.0.0.1:8787 \
titen dashboard
Open http://127.0.0.1:4322/dashboard/. For remote access, keep both processes
on loopback and use the documented private HTTPS ingress; the installer never
publishes either listener or stores dashboard credentials.
Continue with the Quickstart to check readiness. Setting
TITEN_MCP_URL and TITEN_API_KEY then switches titen mcp from the local
store to that instance; setting exactly one of the two is an error rather than a
guess.