Cliff

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

PlatformArchitecture
Windowsx86_64 (amd64)
Linuxx86_64 (amd64)
LinuxARM64
macOSIntel (amd64)
macOSApple Silicon (arm64)

From a prebuilt package

Download a cliff-<version>-<platform>-<arch>.zip from the releases page, extract it, and run:

cliff start

What's in the package

cliff.exe / cliff

Managing the daemon

The cliff CLI provides commands for controlling the daemon:

CommandWhat it does
cliff startStart the daemon in the background
cliff stopStop the running daemon gracefully
cliff statusShow daemon status, PID, version, and uptime
cliff updateCheck for and apply updates
cliff uninstallRemove Cliff from this machine
cliff versionPrint version information
cliff helpShow 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

ToolVersionNotes
Node.js22 or newerFor building the web frontend
Go1.23 or newerFor building the daemon binary
GitanyFor 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 Cliff

Build the full package

npm run build

This runs daemon:package, which:

  1. Builds the Next.js frontend into static assets (build:daemon-web)
  2. Compiles the Go daemon binary with version/commit metadata
  3. Packages everything into dist/cliff/ with runner scripts

Start the packaged daemon

npm start

This 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 dev

Open http://localhost:3000. The first visit creates the local admin account. Uses hot reload.

For LAN-accessible development:

npm run dev:lan

Build the static web assets first, then run the daemon:

npm run build:daemon-web
npm run daemon:run

Open http://localhost:8080.

Production-like build and start:

npm run build
npm start

This builds the full package and starts the packaged daemon.

Useful scripts

CommandDescription
npm run devNext.js dev server with hot reload
npm run dev:lanDev server accessible from LAN
npm run buildFull build + package into dist/cliff/
npm run build:daemon-webBuild only the static web assets
npm run daemon:buildBuild only the Go binary
npm run daemon:runRun the daemon (after building web assets)
npm run daemon:stopStop a running daemon
npm run daemon:statusShow daemon status
npm run daemon:testRun Go tests
npm run lintRun ESLint
npm run verifyFull 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:

MetricValue
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.

On this page