Lurker is a self-hosted modern IRC client with a retro flair, most easily described as "your personal IRCCloud, with Weechat looks".
Lurker runs as an always-on server that stays connected to IRC on your behalf, keeps full message history, and lets you reattach from any browser — desktop or mobile — picking up exactly where you left off. Open it on as many devices and tabs as you like; read state, settings, and history stay in sync everywhere; when all clients are disconnected, auto-away sets your status, and web push notifications inform you of highlights. Oh, and the icon rules.
- Always-on and multi-user. Each invited user connects to their own set of IRC networks, and Lurker stays connected when they're away.
- Full history and search. Every message is stored and searchable. Auto-away triggers after your last client disconnects, and smart push notifications fire on highlights.
- IRC with Modern Convienences. Peer presence, automatic nick regain, join/part summarization, tab nickname completion, message drafts, saved messages, user notes, and a searchable channel browser w/ cache.
- Image uploads. Paste, drag, or pick an image; Lurker optimizes it, uploads it to x0.at or catbox.moe, inserts the link into your message, and keeps a history of all your uploads.
- Customizable UI. The beautiful retro terminal-style interface has 40+ settings to customize it how you want, and you can freely pin and rearrange channels and DMs.
- Installable. Lurker is a PWA — install it as a native-feeling app on your phone, Mac, or PC straight from the browser.
- Built-in bouncer. Opt-in, TLS-by-default IRC listener: attach any client — from mIRC to modern IRCv3 clients like Halloy, gamja, and Goguma — to your always-on connection. Speaks SASL, network discovery (
soju.im/bouncer-networks), and on-demand scrollback (draft/chathistory) for capable clients, with history playback on attach for the rest. See the self-hosting guide.
<cfuser> amiantos: holy shit, you made something better than irccloud<amigojapan> great, now that amiantos's chat client is catching up to IRC cloud, I think I can switch to it as my daily driver<skdoo> amiantos makes cool shit<jadeia> lurker is really nice. this is streets ahead of irccloud in terms of design and ease of use.
- Server — TypeScript on Node (run via
tsx), Express,irc-framework,ws,better-sqlite3,sharp,web-push - Client — TypeScript, Vue 3, Vite, Pinia,
vue-router - Tooling — Vitest, oxlint, oxfmt
curl -O https://raw.githubusercontent.com/amiantos/lurker/main/docker-compose.yml
docker compose up -dThen open http://localhost:8015 and create your admin account. Username + password is the default; passkeys are optional. See SELF_HOSTING.md for the full guide — reverse proxy + HTTPS, enabling passkeys, push notifications, updating, and backups.
Don't want to run a server yourself? Lurker.Chat is official managed hosting: an always-on Lurker instance with backups, updates, and HTTPS handled for you — $5/mo, with a 14-day money-back guarantee.
Stand up a public, HTTPS-enabled Lurker on a fresh droplet from a single pasted script — no SSH required, with passkeys, web push, and TLS all configured for you. Step-by-step instructions are in docs/digitalocean.md.
npm run install:all
npm run client:build
npm startThe server listens on port 8010 by default and stores everything in ./data/. Override with the envvars documented in .env.example.
npm run install:all
cp .env.example .env # defaults assume the local hostname documented in the file
npm run devNote on install scripts. A few dependencies build native code or fetch a platform binary at install time —
better-sqlite3(root),esbuild(root anddocs/), andsharp/workerd(docs/). Each is pre-approved in that workspace'sallowScriptsallowlist, so npm runs them without prompting;core-jsis intentionally denied — its only install script prints a funding message. Thevue_clientworkspace has no install-script dependencies, so it has no allowlist. TheallowScriptsfield is ignored by npm older than 11.16.
- Self-hosting guide — reverse proxy + HTTPS, passkeys, web push, updating, backups, and troubleshooting.
- Deploy on DigitalOcean — the one-shot droplet walkthrough.
- MCP & HTTP API — drive Lurker from agents, scripts, or other external tools.
- Chat in #lurker on Libera.Chat.
- Discuss Lurker and read my devlog over on The Eye of Providence.
- Say hi — I'm amiantos on Libera.Chat and MansionNET.
Mozilla Public License 2.0 — see LICENSE.
