v0.1.0

Talk over your local network.

No cloud. No accounts. One command, a QR code, and any device with a browser can join the chat.

npm install -g talklan

Quick start

  1. Start a room.
    talklan --room "Game Night"
  2. Scan the QR with your phone camera โ€” or open the printed URL. Both devices need the same Wi-Fi. No token, no link to type: the lobby lists every room.
  3. Pick a display name and start talking. Attach files with ๐Ÿ“Ž, quote with Reply, invite the next person from the header.

Need several rooms? Pass --room more than once, or create rooms (optionally password-locked) right from the lobby.

Options

FlagWhat it does
--room <name>Create a room (repeatable; default one room). --password locks every startup room
--port <n>Listen port (default 8787; auto-bumps unless explicit)
--password <value>Lock startup rooms with a password (never in URLs or logs)
--expires <10m|30m|1h|2h>Auto-shutdown lifetime (default 30m; never to run until Ctrl+C)
--max-users <n>Cap participants per room (default unlimited; full rooms can retry)
--max-file-size <size>Max upload: bytes or kb/mb/gb (default 50mb)
--history-file <path>Write the room log as JSON on shutdown (otherwise everything vanishes)
--no-qrHide the QR code
--no-browserHide the host join hint
--verboseExtra event logging (counts only, never contents)

Canonical reference: README on npm ยท talklan --help

Rooms & passwords

talklan --room "Game Night" --room "Study" --password s3cret
talklan --room "Party" --expires 2h --history-file ./party.json

Locked rooms show a password form; each room has its own messages, presence, file uploads, and invite link (/?room=<id> with its own QR). Passwords are scrypt hashes and live in memory only โ€” they die when the server stops, manually or at expiry.

Security

  • Messages stay on your LAN โ€” nothing is sent to any outside server.
  • Every chat, join, and upload is validated server-side; malformed input gets an error, never a crash.
  • Chat renders with textContent only โ€” usernames can't inject HTML or spoof system messages.
  • Uploads use generated IDs, sanitized names, size limits, and streaming; path traversal is blocked and tested.
  • No telemetry, no accounts, no database. Stop the server and the rooms are gone.

FAQ

Phone can't connect?

Same Wi-Fi? Server still running? Correct LAN IP (not 127.0.0.1)? PC firewall allowing Node.js? Router guest isolation off? If your PC has several addresses, try the Also try URLs printed under the banner.

QR won't scan?

Type the printed URL manually โ€” it's the bare address, no token to get wrong.

Where did the chat go after stopping?

Rooms are temporary by design. Pass --history-file ./night.json if you want a JSON log written on shutdown.

Port busy?

Pick another with --port 8790, or omit --port to auto-increment.

How do I make a private room?

Create it from the lobby with a password, or start the server with --password. Locked rooms show ๐Ÿ”’ and ask for the password before joining.

Can I use this over the internet?

TalkLAN is LAN-only on purpose โ€” no accounts, no cloud relay. It works wherever the devices share a network: home, office, classroom, hotspot.