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.
| Archive | For |
|---|---|
| luir-0.4.0-linux-x86_64.tar.gz | Most Linux, glibc 2.18 or newer |
| luir-0.4.0-linux-x86_64-static.tar.gz | Any Linux, statically linked |
| luir-0.4.0-linux-arm64.tar.gz | Raspberry Pi 4 and 5, ARM servers |
| luir-0.4.0-linux-arm64-static.tar.gz | The same, statically linked |
| luir-0.4.0-windows-x86_64.zip | Windows 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.
