Installation
Install
Section titled “Install”Prebuilt binaries for macOS (Apple Silicon and Intel) and Linux (x64 and arm64), by any of three
routes. All three install the same binary: the one attached to the latest
release, verified against its SHA256SUMS.
Homebrew
Section titled “Homebrew”brew install candril/tap/laneThe tap is candril/homebrew-tap; brew upgrade picks
up new releases.
nix run github:candril/lane # run it oncenix profile install github:candril/lane # keep itOr as a flake input — inputs.lane.url = "github:candril/lane", then
inputs.lane.packages.${system}.default. The flake packages the release binary; the release
workflow writes its release.json, so nix run and nix flake update land on the newest release.
Installer script
Section titled “Installer script”curl -fsSL https://raw.githubusercontent.com/candril/lane/main/scripts/install.sh | bashThe installer detects your platform, downloads the latest release, verifies its SHA256 against the
release’s SHA256SUMS, and puts lane in /usr/local/bin. Two variables change that:
LANE_INSTALL_DIR=~/.local/bin … # somewhere else on your PATHLANE_VERSION=0.1.0 … # a specific releaseOr download lane-<os>-<arch>.gz from the releases page by hand, gunzip it, and put it on
your PATH.
From source
Section titled “From source”lane is a Bun application, so a clone runs as it is:
git clone https://github.com/candril/lane.gitcd lanebun installbun scripts/build.ts # → dist/lane, a standalone binaryWith just: just build, or just install-bin to build and copy
it to ~/.local/bin. just dev runs from source with hot reload, just mock the same against
the demo board.
Requirements
Section titled “Requirements”- A Jira Cloud account and an API token.
- A terminal with truecolor and a decent Unicode set. Anything modern (WezTerm, Ghostty, kitty, iTerm2, Alacritty) is fine.
- Bun 1.x only if you build from source.
Try it first
Section titled “Try it first”lane --mockopens an offline demo board — a fictional web shop’s sprint, with sub-tasks, epics, sprints, a
backlog, and seeded descriptions and history — so you can learn the keymap before touching a real
board. Press ? for the shortcut dialog, q to quit.
Credentials
Section titled “Credentials”lane needs three things: the instance URL, your account email, and an API token.
The token comes from the environment, and only from there — it is never read from or written to a config file:
export JIRA_API_TOKEN="…" # https://id.atlassian.com/manage-profile/security/api-tokensThe server URL and account email are read from the
jira CLI YAML, so if you already use that tool
there is nothing new to set up:
server: https://acme.atlassian.netlogin: you@acme.comPoint elsewhere with JIRA_CONFIG_FILE, or per board with
jira_config — which is how a single
lane session can span two Jira instances.
First run
Section titled “First run”lane always starts, whatever the state of your credentials. If Jira is unreachable — no token,
no server:, no network — it says so on the normal screen and opens the demo board instead of
dying. With Jira reachable but no config.toml, it says that too: there is nothing to build
tabs from until you describe a board.
To see your own work, write a config.toml — start from
Getting Started.
Files lane writes
Section titled “Files lane writes”| Path | What |
|---|---|
$XDG_CONFIG_HOME/lane/config.toml |
Your config. lane only reads this. |
$XDG_CACHE_HOME/lane/cache.json |
Last snapshot per board, for instant boot. |
$XDG_CACHE_HOME/lane/state.json |
Active tab and each tab’s view/filter/grouping. |
$XDG_STATE_HOME/lane/tabs.json |
The tabs you made yourself. |
XDG_CONFIG_HOME defaults to ~/.config, XDG_CACHE_HOME to ~/.cache, XDG_STATE_HOME to
~/.local/state. The cache and state files are best-effort: deleting them costs you one refresh
and your restored session, nothing more.