Installation
Manual install, prebuilt packages, and building Cliff from source.
Cliff ships as a single self-contained binary. No Docker, no Node.js runtime, no external database — just download and run.
Just want it running fast?
The one-command installer is covered in Quick Start. This page covers manual downloads and building from source.
Supported platforms
| Platform | Architecture |
|---|---|
| Windows | x86_64 (amd64) |
| Linux | x86_64 (amd64) |
| Linux | ARM64 |
| macOS | Intel (amd64) |
| macOS | Apple Silicon (arm64) |
From a prebuilt package
Download a cliff-<version>-<platform>-<arch>.zip from the releases page, extract it, and run:
cliff startWhat's in the package
Managing the daemon
The cliff CLI provides commands for controlling the daemon:
| Command | What it does |
|---|---|
cliff start | Start the daemon in the background |
cliff stop | Stop the running daemon gracefully |
cliff status | Show daemon status, PID, version, and uptime |
cliff update | Check for and apply updates |
cliff uninstall | Remove Cliff from this machine |
cliff version | Print version information |
cliff help | Show all commands and flags |
Build from source
Cliff is open source under the GPL-3.0 license. You can build it yourself from the GitHub repository.
Prerequisites
| Tool | Version | Notes |
|---|---|---|
| Node.js | 22 or newer | For building the web frontend |
| Go | 1.23 or newer | For building the daemon binary |
| Git | any | For cloning the repo |
No CGO
The daemon must cross-compile cleanly with CGO_ENABLED=0. Do not introduce CGO dependencies.
Steps
Clone the repository
git clone https://github.com/W1seGit/Cliff.git
cd CliffInstall dependencies
npm installBuild the full package
npm run buildThis runs daemon:package, which:
- Builds the Next.js frontend into static assets (
build:daemon-web) - Compiles the Go daemon binary with version/commit metadata
- Packages everything into
dist/cliff/with runner scripts
Start the packaged daemon
npm startThis runs the packaged daemon from dist/cliff/. Open http://localhost:8080 in your browser.
Development
For development, you can run the frontend and daemon separately:
npm run devOpen http://localhost:3000. The first visit creates the local admin account. Uses hot reload.
For LAN-accessible development:
npm run dev:lanBuild the static web assets first, then run the daemon:
npm run build:daemon-web
npm run daemon:runOpen http://localhost:8080.
Production-like build and start:
npm run build
npm startThis builds the full package and starts the packaged daemon.
Useful scripts
| Command | Description |
|---|---|
npm run dev | Next.js dev server with hot reload |
npm run dev:lan | Dev server accessible from LAN |
npm run build | Full build + package into dist/cliff/ |
npm run build:daemon-web | Build only the static web assets |
npm run daemon:build | Build only the Go binary |
npm run daemon:run | Run the daemon (after building web assets) |
npm run daemon:stop | Stop a running daemon |
npm run daemon:status | Show daemon status |
npm run daemon:test | Run Go tests |
npm run lint | Run ESLint |
npm run verify | Full verification suite (lint + tests + smoke tests) |
After installing
Open the dashboard
Open http://localhost:8080 in your browser (or http://<your-server-ip>:8080 from another device on the same network).
Create your admin account
On first visit, you'll be prompted to create a local admin account. This is stored entirely on your machine.
Add a server
Create a new server or import an existing one from the dashboard.
Hit Start
Select your server in the sidebar and click Start. You're running.
Resource usage
Cliff is designed to be lightweight. At idle:
| Metric | Value |
|---|---|
| RAM | ~13 MB |
| CPU | < 1% |
| Threads | ~19 |
| Binary size | ~13 MB |
| Web assets | ~1.4 MB |
There are no background services, no containers, and no external processes to manage. Stop the daemon and everything stops cleanly.