Happier Docs
Deployment

Self-host runtime (installer vs runner)

Understand the supported ways to run a self-hosted Happier Server, and what each option installs/manages.

Happier currently supports two different self-host “shapes”:

  1. a managed install (service + config) driven by happier relay host …
  2. a runner that simply downloads/verifies artifacts and starts the server process (@happier-dev/relay-server)

They are complementary, but they are not the same thing.

For a complete “what updates automatically vs manually” matrix across all shipped assets (desktop/mobile/web, CLI installers, Docker images, and runners), see: Updates.

Use happier relay host install when you want:

  • the server installed as a managed service (user/system mode)
  • a repeatable install-or-update command for your selected channel

First, install the Happier CLI: see CLI install.

Install locally:

happier relay host install --mode system

Install remotely over SSH:

happier relay host install --ssh user@host --mode system

After install, you manage it with:

happier relay host status
happier relay host start
happier relay host stop
happier relay host restart

To update, rerun happier relay host install (it installs or updates to the latest version in that channel).

The relay server package is a server runner:

  • it fetches the server runtime by rolling tag (server-stable / server-preview / server-dev)
  • verifies and extracts it into a cache
  • optionally fetches the UI web bundle (ui-web-stable / ui-web-preview / ui-web-dev)
  • sets HAPPIER_SERVER_UI_DIR (if UI is enabled)
  • then starts the extracted happier-server binary

This is ideal when:

  • you run the server in Docker (or any process supervisor you already have)
  • you want updates to happen on restart (no managed install / no scheduler)
  • you do not want hstack installing services/timers/tasks on the host

Example (local runner):

npx --yes --package @happier-dev/relay-server happier-server --help

Important: because this is a runner, happier relay host … service controls do not apply to it.

Choosing between them

  • If you want a service and hstack-managed lifecycle → use Option A.
  • If you already have a process manager (Docker/Compose/systemd/nomad/k8s) and just want a runner → use Option B.

If you’re unsure, start with Docker (runner) and switch to a managed install later.

On this page