A chat server built on uWebSockets.js that offers an alternative to XMPP, with a Node.js backend, MongoDB and Redis.
onetimesecret/onetimesecret
Share passwords and sensitive text through single-use links that self-destruct after one view, keeping them out of chat logs and inboxes.
Open-source alternative to:Privnote
- Stars
- 2,989
- Forks
- 457
- Open issues
- 256
- Last commit
- 5 hours ago
What is it?
Onetime Secret lets you share sensitive information such as passwords through a link that can be opened only once. Messages sent over email or chat often persist in many places, so the content is exposed long after it was meant to be read. A one-time link removes itself after it is viewed, so only the intended recipient sees the contents.
The project is written in Ruby and uses Redis for storage. It can be run quickly with Docker by pointing it at a Redis instance and setting a persistent secret key. For production, the self-hosting setup adds a reverse proxy, PostgreSQL and RabbitMQ, plus authentication options including MFA and WebAuthn. A hosted version is available at onetimesecret.com.
The code is released under the MIT license.
Key features
- 01Links can be viewed only once and self-destruct after viewing.
- 02Runs with Docker and Redis for a quick start.
- 03Supports a full self-hosted setup with PostgreSQL and RabbitMQ.
- 04Offers authentication options including MFA and WebAuthn.
- 05Includes a command-line tool for managing accounts.
Use cases
- Sending a password to a colleague over chat without leaving it in message history.
- Sharing credentials or API keys by email with a link that expires after one view.
- Hosting a private secret-sharing service for a team or organization.
Quick start
- 1
Start Redis
docker run -p 6379:6379 -d redis:trixie - 2
Generate and store a persistent secret key (back it up)
openssl rand -hex 32 > .ots_secret && chmod 600 .ots_secret - 3
Run Onetime Secret with Docker
docker run -p 3000:3000 -d --name onetimesecret --add-host=host.docker.internal:host-gateway -e REDIS_URL=redis://host.docker.internal:6379/0 -e SECRET="$(cat .ots_secret)" -e HOST=localhost:3000 -e SSL=false onetimesecret/onetimesecret:v0.26.14 - 4
Create an admin account at localhost:3000 via the CLI
docker exec onetimesecret bin/ots customers create me@example.com --role colonel
Things to know
- Losing the SECRET key makes existing secrets unreadable, so it must be backed up.
- Production use requires SSL and self-hosting hardening; full authentication needs PostgreSQL and RabbitMQ.
In collections
Topics
FAQ
- What is onetimesecret?
- Share passwords and sensitive text through single-use links that self-destruct after one view, keeping them out of chat logs and inboxes. Onetime Secret lets you share sensitive information such as passwords through a link that can be opened only once. Messages sent over email or chat often persist in many places, so the content is exposed long after it was meant to be read. A one-time link removes itself after it is viewed, so only the intended recipient sees the contents.
- Is onetimesecret free to use? What license does it have?
- onetimesecret is open source under the MIT license. Check the license terms before using it in commercial products.
- Is onetimesecret still maintained?
- Actively maintained. The last commit to onetimesecret was on Nov 7, 2026.
- What can I use onetimesecret for?
- Sending a password to a colleague over chat without leaving it in message history. Sharing credentials or API keys by email with a link that expires after one view. Hosting a private secret-sharing service for a team or organization.
- How do I install onetimesecret?
- Start Redis: docker run -p 6379:6379 -d redis:trixie Generate and store a persistent secret key (back it up): openssl rand -hex 32 > .ots_secret && chmod 600 .ots_secret Run Onetime Secret with Docker: docker run -p 3000:3000 -d --name onetimesecret --add-host=host.docker.internal:host-gateway -e REDIS_URL=redis://host.docker.internal:6379/0 -e SECRET="$(cat .ots_secret)" -e HOST=localhost:3000 -e SSL=false onetimesecret/onetimesecret:v0.26.14 Create an admin account at localhost:3000 via the CLI: docker exec onetimesecret bin/ots customers create me@example.com --role colonel
- Where can I get onetimesecret?
- The source code and installation instructions are on GitHub: https://github.com/onetimesecret/onetimesecret
Summary generated by AI from the project's README. GitHub stats refresh daily.
Related projects
A end-to-end encrypted messaging app and network that uses no user identifiers, with iOS, Android, desktop and terminal clients.
Docker-based configuration for deploying a full self-hosted Stoat chat instance, including back-end, web front-end, file server and proxies.
Build scripts that produce the Docker images for the Snikket self-hosted personal messaging server.
A self-hosted AI workspace combining chat, agents, deep research, documents, email, notes, calendar and local model workflows.
Self-hostable, open source service for sharing self-destructing encrypted notes and files, inspired by PrivNote, with a Rust backend and Svelte frontend.