a terminal client for Lurker, written in Rust


on this page

Installing luir

luir is a single binary with nothing to install alongside it. Take a prebuilt one from a release, or build it yourself with Cargo.

Download a release

The current release is 0.4.0, from 2026-09-18. Older releases are on the releases page.

ArchiveFor
luir-0.4.0-linux-x86_64.tar.gzMost Linux, glibc 2.18 or newer
luir-0.4.0-linux-x86_64-static.tar.gzAny Linux, statically linked
luir-0.4.0-linux-arm64.tar.gzRaspberry Pi 4 and 5, ARM servers
luir-0.4.0-linux-arm64-static.tar.gzThe same, statically linked
luir-0.4.0-windows-x86_64.zipWindows 10 and 11

Not sure which Linux build? Take linux-x86_64. If it will not start and complains about glibc, or you are on a musl system such as Alpine, take linux-x86_64-static instead. The same goes for the arm64 pair.

Each archive holds a single directory with luir in it (luir.exe on Windows), the README and the licence.

Linux

tar xzf luir-0.4.0-linux-x86_64.tar.gz
install -Dm755 luir-0.4.0-linux-x86_64/luir ~/.local/bin/luir

Many distributions already have ~/.local/bin on your PATH. If luir is not found, add this to your shell's startup file:

export PATH="$HOME/.local/bin:$PATH"

Or install it for every user instead:

sudo install -m755 luir-0.4.0-linux-x86_64/luir /usr/local/bin/luir

Windows

Unzip the archive, move luir.exe into a folder on your PATH, and run luir from a terminal such as Windows Terminal.

macOS

There is no prebuilt macOS binary yet. Apple's SDK licence is what stands in the way, since the release builds are cross-compiled from Linux. Build it from source instead.

Building from source

You need Rust 1.98 or newer, and a C toolchain with CMake: the TLS backend (aws-lc-sys) and the bundled Lua (mlua) are both compiled from C.

git clone https://git.xfnet.org/jnewing/luir.git
cd luir
cargo install --path .

Cargo puts the binary in ~/.cargo/bin, which a rustup install already adds to your PATH.

First run

luir

The first run writes a starter config and stops there:

Welcome to luir.

A starter config was written to:
  /home/you/.config/luir

  config.lua   pulls the rest together
  server.lua   which Lurker to talk to, and how to log in
  ui.lua       layout, marks, borders, spacing
  theme.lua    colours
  status.lua   the status bar
  keys.lua     bindings and aliases

Set `url` in server.lua, then run luir again. The first time it connects
it asks you to approve it in a browser, so it never needs your password.

Open server.lua and set your instance's address:

url = "https://lurker.example.com",

Run luir again. On Lurker 2.3.0 or newer it prints an address for approving it in your browser, and asks for the code the approval page shows. Paste that in and it connects, and from then on it signs in by itself.

An older server has no browser sign-in, so set username and password in server.lua as well. server.lua covers every way to sign in, including over SSH and from scripts.

The config lives in a different place on each platform. Inside luir, /config prints the path it loaded.

Platform Directory
Linux ~/.config/luir/, or $XDG_CONFIG_HOME/luir/ when that is set
Windows %APPDATA%\lurker\luir\config\
macOS ~/Library/Application Support/chat.lurker.luir/

Trying it without a server

luir --demo

Runs the real interface against made-up channels and people, without connecting to anything. It needs no configuration, so it works straight after installing, and it is the easy way to try colour schemes.

Commands and options

Command
luir Start the client
luir login Approve luir on the server in a browser, and keep the token it gets
luir logout Revoke luir's approval on the server, and forget its token
luir help Print a summary of all this, or luir help login for one command
Option
-c, --config PATH Use this config file instead of the default location. Works with login and logout too
--init Write the starter config and exit. Files already there are left alone
--demo Run against synthetic data, without connecting
--list-actions Print every bindable action with its current keys, and exit
--dbg Log everything, every frame in and out included, to luir-debug.log beside the config, and show it live in a debug buffer
--log-file PATH Append logs to this file. With --dbg, sets where the debug log goes
-V, --version Print the version and exit
-h, --help Print a summary of these and exit

Environment variables

Variable
LUIR_CONFIG The config file to use, as --config does, which wins if both are given. It names the file itself, such as /path/to/config.lua, not the directory holding it
LURKER_TOKEN A Lurker token, tried before anything else, including a token kept from approving luir
LUIR_LOG A log filter to use in place of the default when logging to a file

Upgrading

Replace the binary with the new one. Your config is never rewritten: options added in a new release take their defaults until you set them, and luir --init writes any starter file that did not exist when you installed, without touching the ones you have.

Reporting a bug

Run /version inside luir and include what it prints: the build, the client protocol version, and the protocol the server speaks. For the detail of what went wrong, luir --dbg records every frame in and out. That log includes message content, so read it before you share it.

Reports go to the issue tracker.