Skip to content
ordo
GitHub Get ordo Install

Install the ordo server

Set up your own ordo server with the installer or run it from source. This guide covers requirements, settings, updates, and what the app reports.

The installer sets up a server. The app chooses where it connects.

New installs of the app use ordo Cloud. To use a server of your own instead, choose Use your own server on the sign-in screen and enter its address — see section 5.

On this page

  1. 1. Quick install
  2. 2. Requirements
  3. 3. Manual install
  4. 4. Keeping it updated
  5. 5. ordo Cloud or your server
  6. 6. Telemetry
On this page
  1. 1. Quick install
  2. 2. Requirements
  3. 3. Manual install
  4. 4. Keeping it updated
  5. 5. ordo Cloud or your server
  6. 6. Telemetry

1. Quick install

On a Linux or macOS machine, run:

bash
curl -fsSL https://ordo.axolet.com/install | bash

The script checks Node.js and pnpm, offering to install pnpm if needed. It downloads the latest release into ~/ordo, verifies its published SHA-256 checksum, and opens the setup wizard. The wizard asks about the port, accounts, sign-up codes, mail, network, and whether to start the server. It shows a summary, then writes a commented apps/server/.env, installs dependencies, builds the server, and creates the SQLite database. Release files are downloaded before setup begins.

https://ordo.axolet.com/install is the installer script. You can read it before piping it into bash.

Flags

  • --yes

    Skip every question. Settings take their defaults, and the server is left stopped. For scripts and CI; combine with the setup flags below.

  • --release v0.3.1

    Install a specific version instead of the latest stable.

  • ORDO_DIR=/opt/ordo

    An environment variable, set before the command, that chooses the install folder. The default is ~/ordo. The folder must be empty or new.

  • --port 8080

    With --yes, answer individual wizard questions on the command line. The same works for --registration, --email-verification, --smtp-url, --trust-proxy, and --start or --no-start (by default the server is left stopped).

  • uninstall

    Stops the server and removes the install folder, database included. It asks first; --yes skips the question and --dry-run shows what would happen. A database stored outside the folder is left in place.

  • --help

    Prints the full usage.

Unattended, with settings

bash
curl -fsSL https://ordo.axolet.com/install | bash -s -- --yes --port 8080 --trust-proxy 1

Start the server when it finishes:

bash
cd ~/ordo/apps/server
NODE_ENV=production pnpm start

From another terminal, check that it responds. Use the port you chose during setup (the default is 3000):

bash
curl http://127.0.0.1:3000/api/server/info

To keep the server running after you close the terminal, see the systemd unit at deploy/systemd-ordo.service.example. The repo also has nginx and Caddy HTTPS examples in deploy/. For a full walkthrough, including each wizard question, see docs/SERVER-SETUP.md.

2. Requirements

  • A Linux or macOS machine

    For example, a VPS, a home server, or a Raspberry Pi that stays on.

  • Node.js 22.13 or newer

    Check with node -v. If needed, install it from nodejs.org.

  • pnpm 11

    Optional. If it is missing, the installer offers to install it for you, pinned to the version the release expects.

  • A free port

    Default 3000. The installer suggests the next one if something already sits there.

  • SMTP credentials

    Optional. Without mail, sign-up codes print to the server log.

Nothing else: the database is SQLite (a file), the web server is built in, and the two secrets — JWT_SECRET for signing sessions and LIBRARY_KEK for wrapping per-library encryption keys — are generated for you during setup.

3. Manual install

To run from source instead of a release, you need Node.js 22.13+ and pnpm 11. Clone the repo and install:

bash
git clone https://github.com/axoletlabs/ordo
cd ordo
pnpm install

Generate the Prisma client and start the server in development:

bash
pnpm --filter @ordo/server db:generate
pnpm --filter @ordo/server dev

For the Android app from the same checkout:

bash
pnpm --filter @ordo/shared build
pnpm --filter @ordo/mobile start

Settings and environment

Every server setting lives in apps/server/.env, and apps/server/.env.example documents each key with its default — a fresh checkout works without editing anything. The keys you are most likely to touch:

  • PORT, LISTEN_HOST

    The port the server listens on (default 3000) and the address it binds. 127.0.0.1 is this machine only; 0.0.0.0 adds the LAN.

  • REGISTRATION_ENABLED

    Allow sign-ups after the first account. The first account can always register, so a private instance can still be created.

  • EMAIL_VERIFICATION_REQUIRED

    Require a one-time email code when signing up. Without mail configured, the code prints to the server log.

  • SMTP_URL, SMTP_FROM, SMTP_REQUIRED

    The SMTP connection URL, the sender address people see, and whether mail failures are errors instead of falling back to the log.

  • TRUST_PROXY

    Set to 1 when nginx, Caddy, or Cloudflare sits in front, so rate limiting sees real visitor addresses.

  • JWT_SECRET, LIBRARY_KEK

    The two generated secrets: one signs sessions, one wraps per-library encryption keys. Losing them invalidates sessions or encrypted libraries, so back them up.

In production, start with NODE_ENV=production pnpm start from apps/server, as in section 1.

4. Keeping it updated

From the install folder. Your .env, the database, automatic pre-migration backups, and avatars are kept; a running server is stopped, migrated, and started again:

bash
cd ~/ordo
./scripts/deploy-server update

The menu lists published versions — move with the arrow keys, or type a tag to jump straight to it. Non-interactive: ./scripts/deploy-server update --yes [--release v0.3.1].

Back up apps/server/prisma/ordo.db and apps/server/.env, which contains the secrets. If avatars are stored on the filesystem, back up their directory too: by default, apps/server/prisma/ordo-avatars, or the path set by AVATAR_DIR. Restore the files and run ./scripts/deploy-server once to apply any pending migrations, including to an older database file.

To remove ordo entirely: curl -fsSL https://ordo.axolet.com/install | bash -s -- uninstall. It asks first, stops the server, and deletes the folder and its database; a database stored outside the folder is left in place.

5. ordo Cloud or your server

New installs of the app sign into ordo Cloud, operated by Axolet. To keep your library on your own machine instead, choose Use your own server on the sign-in screen, agree that you operate it, and enter the address — for example https://ordo.example.com behind a proxy, or http://192.168.1.20:3000 on your LAN.

You can switch later under Settings → Hosting. Switching signs you out, and libraries are not copied between servers: your ordo Cloud library stays on ordo Cloud, and your self-hosted library stays on your server.

When you run your own server, you are responsible for keeping it online, updated, and backed up. Axolet does not operate it. On the network side, the server binds 127.0.0.1 by default — for anything internet-facing, put nginx or Caddy in front and set TRUST_PROXY=1. Ready-made configs live in the repo’s deploy/ folder.

6. Telemetry

The official production app sends anonymous daily counts to ordo Cloud so Axolet can see whether installs are opening and reaching a server. A server you host receives none of this telemetry. The report does not include your server’s address or hosting mode.

The daily payload has exactly six fields:

json
{
  "installId": "11111111-1111-4111-8111-111111111111",
  "day": "2026-09-30",
  "opens": 3,
  "timeouts": 0,
  "serverErrors": 0,
  "signInFailures": 0
}

The install ID is a random UUID created and stored on the device — not an account or device ID. Counters are cumulative for a UTC day, capped at 500, and flushed with a 15-minute gap when they change; retries merge by maximum, never by addition. The client reports only on the production build channel, outside development.

Deliberately excluded: app version, exact event timestamps, startup timing buckets, platform, hosting mode, account or sign-in flags, bookmark content, account ID, email, device name, and the address of any server — yours included. The connection’s IP address is used by the rate limiter and is not stored on the record. The data is anonymous daily counters, so there is no retention job; the full telemetry documentation lists every field, and the privacy policy covers ordo Cloud.

ordo
GitHub AGPL-3.0 Install Privacy Terms Security
© 2026 Axolet · an Axolet Labs project