- Category
- Social
- Rank
- No. 894Tools index
Previous survey · No. 878 ·
- Pricing
- Open Source
- Type
- TOOL
- Builder
- knadh
- GitHub
- 986 stars
- Latest release
- v0.1.1
- Date
About
Instant disposable web chat server — single Go binary, ephemeral rooms, no signup, Vue front end.
What it does
Niltalk hosts short-lived, password-gated chat spaces that participants join through a browser. It carries messages, typing signals, presence changes, and room disposal events over WebSockets. Operators control room lifetime, capacity, message limits, rate limits, storage, and appearance through configuration.
Why it's ranked here
Niltalk has a focused design and unusually flexible self-hosting options for a small chat service. Password hashing, expiring rooms, configurable limits, three state backends, and optional Tor hosting make it practical. However, concrete storage defects weaken confidence in the file and Redis modes without local fixes.
What's good
Room identifiers and session identifiers come from cryptographic randomness, while passwords use bcrypt hashes. Rooms enforce configurable peer capacity, message size, queue size, lifetime, and sending rate. New participants can receive a bounded cache of recent events. Operators may replace the bundled templates and static assets.
Tradeoffs
This is disposable group chat, not durable messaging. Cached chat events live inside an active room rather than the selected state backend. The file backend appears unable to load an existing state file because its existence check is reversed. Redis session expiry passes a method value instead of computed seconds, which likely makes session creation fail.
How to use it well
Use Niltalk for temporary conversations where one person can host a service, create a password-protected room, and share its link out of band. Memory mode suits truly temporary use; test persistence carefully before choosing file or Redis storage. It does not cover searchable history, accounts, long-term archives, or broader collaboration workflows.
Technical notes+
main.go loads layered TOML, environment, and CLI configuration, selects store/mem, store/fs, or store/redis, registers HTTP routes, and serves WebSockets through handlers.go. internal/hub/room.go serializes room activity through channels and keeps payloadCache only in process memory. handlers.go hashes passwords with bcrypt and stores cookie-backed sessions. Two defects deserve attention: store/fs/fs.go uses os.IsExist(err) after os.Stat, so a successfully found file does not enter the load branch; store/redis/redis.go sends ttl.Seconds rather than ttl.Seconds() when setting session expiry. Also, respondJSON calls WriteHeader before setting Content-Type, so the JSON header may not be emitted. tor.go creates a persistent Ed25519 onion-service key through the chosen store.
Observed
- License
- AGPL3
- Primary language
- Go
- Packaging
- Downloadable binary and official Docker image
- Interfaces
- Browser interface, HTTP JSON endpoints, WebSocket chat transport, and CLI configuration flags
- State backends
- In-memory, file, and Redis
- Optional hosting mode
- Tor v3 onion service with Tor installed
- Frontend structure
- Bundled HTML, JavaScript, and CSS assets can be replaced at runtime
Read from README.md, go.mod, Makefile, main.go, internal/hub/hub.go, internal/hub/peer.go, internal/hub/room.go, tor.go, handlers.go, store/store.go, store/fs/fs.go, store/mem/mem.go, static/static/app.js, static/static/lib.js, store/redis/redis.go.
What it can do
Create instant chat room
Room name or URL path → Ephemeral chat room with unique URL
Join chat room without registration
Chat room URL → Access to real-time chat interface
Send real-time messages
Text message → Message displayed to all room participants
Receive real-time messages
Active chat room connection → Live stream of messages from other participants
Deploy chat server
Single Go binary file → Running web chat server instance
Auto-dispose chat rooms
Inactive chat room after timeout → Deleted room with no persistent data
Tags
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.
