Installation
openoms ships as one oms binary. Install it with one command, or build it from source.
Overview
Section titled “Overview”oms is a single executable: the server, the web cockpit and the command-line tool in one
file. It needs no runtime, and the cockpit is embedded. Its only outside dependency is a
PostgreSQL 16 database, which oms init can start for you in
Docker.
Installation
Section titled “Installation”curl -fsSL https://openoms.dev/install.sh | shHomebrew (macOS on Apple Silicon, Linux x86_64):
brew install maxkuttner/tap/openomsOr add the tap once, then use the short name:
brew tap maxkuttner/tapbrew install openomsThe formula is named openoms; the command it installs is oms, already on your PATH.
Runs openoms and PostgreSQL 16 together with Docker Compose:
mkdir openoms && cd openomscurl -fsSLO https://openoms.dev/compose.yaml[ -f .env ] || echo "POSTGRES_PASSWORD=$(openssl rand -hex 24)" > .envdocker compose run --rm oms initdocker compose up -doms init asks one thing, the cockpit admin password (Enter generates one). Then open
http://localhost:3001/cockpit/.
- compose.yaml runs the
ghcr.io/maxkuttner/openomsimage (amd64 and arm64) next topostgres:16. - The cockpit is published on this machine only (
127.0.0.1:3001). On a remote server, reach it through an SSH tunnel or Tailscale. - Data lives in two volumes:
openoms_oms-config(oms.tomland its master key) andopenoms_oms-pgdata(the database). Keep.env: it holds the database superuser password, and the.envline above never replaces an existing one. - Back up the master key once the server runs:
docker compose cp oms:/config/oms.toml ./oms.toml.backup.
The install script downloads the latest release for your platform, checks it against the
release’s SHA256SUMS, and puts it in ~/.local/bin. It needs no sudo and starts
nothing. Read install.sh on GitHub
before you pipe it into a shell. When it finishes, it offers to run oms init.
To check that oms was installed:
oms --versionAdd oms to your PATH
Section titled “Add oms to your PATH”If ~/.local/bin is not on your PATH, the install script asks before adding it to
~/.zshrc, ~/.bashrc (~/.bash_profile on macOS) or fish’s config.fish. Say yes and
open a new terminal.
If you said no, use another shell, or ran the script without a terminal, add it yourself:
export PATH="$HOME/.local/bin:$PATH"Build from source
Section titled “Build from source”For any other platform. You need Rust (stable), cmake with a C++ compiler (the embedded
FIX engine is C++), OpenSSL 3 (brew install openssl@3 on macOS) and Node 22 for the
cockpit.
git clone https://github.com/maxkuttner/openoms.git && cd openoms(cd cockpit && npm ci && npm run build) # build the cockpit first: it is embeddedcargo build --releasecp target/release/oms ~/.local/bin/A binary built without the cockpit bundle serves a 404 at /cockpit/.
Upgrading
Section titled “Upgrading”Once installed, oms upgrades itself:
oms updateoms update --check only reports whether a newer release exists. A binary a package
manager or container owns refuses to overwrite itself and names the command to use:
| Installed with | Upgrade |
|---|---|
| Homebrew | brew upgrade openoms |
| Docker Compose | docker compose pull && docker compose run --rm oms database migrate && docker compose up -d |
| From source | git pull, then rebuild |
After upgrading outside Docker, apply new database migrations; see Updating.
Installing older versions
Section titled “Installing older versions”curl -fsSL https://openoms.dev/install.sh | OMS_VERSION=v0.4.0 shInside WSL 2, use the macOS & Linux command.
From source: git checkout v0.4.0, then build as above.
An installed oms can also move to a specific release, older or newer:
oms update --version v0.4.0Direct downloads
Section titled “Direct downloads”Every release is on the
GitHub releases page. Download a
tarball, check it against SHA256SUMS, and put oms on your PATH.
Latest version downloads
Section titled “Latest version downloads”- SHA256SUMS:
checksums for both tarballs. Verify with
shasum -a 256 -c SHA256SUMS --ignore-missing.
Requirements
Section titled “Requirements”| Platform | Architecture | Minimum |
|---|---|---|
| macOS | Apple Silicon (arm64) | macOS on M1 or newer |
| Linux | x86_64 | glibc and OpenSSL 3 (Ubuntu 22.04, Debian 12 or newer) |
| Anything else | any | build from source |
The server also needs PostgreSQL 16, either your own or one oms init starts in Docker.
Uninstall
Section titled “Uninstall”rm ~/.local/bin/omsInside WSL 2, use the macOS & Linux command.
brew uninstall openomsbrew untap maxkuttner/tapIn the directory with compose.yaml:
docker compose down # stops openoms and Postgres, keeps the volumesdocker compose down -v # also deletes the database and oms.toml with its master keyOutside Docker, this leaves your configuration and data. To remove those too:
rm -r ~/.config/oms # config and master keydocker rm -f oms-postgres && docker volume rm oms-pgdata # only if oms init started Postgres in Docker