Create a private chat room, share the link, and chat. The room disappears after 10 minutes (or you can destroy it manually). All messages are encrypted client-side using AES-256-GCM - the server never sees your encryption keys or plaintext messages.
- Private rooms - Create a room, share the link, and start chatting without an account.
- End-to-end encrypted messages - Messages are encrypted in the browser with AES-256-GCM before they leave your device.
- Keys stay out of the server - Room keys are shared through the URL fragment, so they are never sent in API requests.
- No accounts or tracking - Just Between Us does not ask for signups or collect personal profile data.
- Real-time chat - Messages show up as they are sent, without refreshing the page.
- Fast by default - Built with Elysia (Bun-first framwork), Turbopack, and React Compiler for a snappy development and runtime experience.
- Short-lived by design - Rooms expire after 10 minutes, and you can destroy a room manually when you are done.
- Minimal PWA - A small, responsive interface that can be installed and still has a basic offline fallback.
Diagram: Just Between Us app architecture, encryption, and real-time flow.
🔗 View Interactive Flow Diagram on tldraw
- Next.js 16 - React framework with App Router
- React 19 - Latest React with React Compiler
- Tailwind CSS v4 - Modern utility-first CSS framework
- TanStack Query - Powerful data synchronization for React
- Elysia - Fast, type-safe web framework (Bun runtime)
- Upstash Redis - Serverless Redis for data persistence
- Upstash Realtime - Real-time messaging infrastructure
- Zod - TypeScript-first schema validation
- TypeScript 5.0 - Type-safe development
- Turbopack - Next-generation bundler for fast development
- ESLint - Code linting and quality
- React Compiler - Automatic React optimization
- Bun - Fast JavaScript runtime and package manager
- Serwist - Service worker library for PWA functionality and offline support
- Node.js 18+ or Bun (recommended)
- Upstash Redis account (free tier available)
-
Clone the repository
git clone <repository-url> cd justbetweenus
-
Install dependencies
bun install # or npm install -
Set up environment variables
Create a
.env.localfile in the root directory:UPSTASH_REDIS_REST_URL=your_redis_url UPSTASH_REDIS_REST_TOKEN=your_redis_token
-
Run the development server
bun dev # or npm run dev -
Open your browser
Navigate to http://localhost:3000
Just Between Us uses true end-to-end encryption to ensure your messages remain private. All encryption happens client-side using the browser's Web Crypto API - no external dependencies required.
- AES-256-GCM Encryption - Industry-standard authenticated encryption
- Zero-Knowledge Architecture - Server never sees encryption keys or plaintext messages
- Secure Key Exchange - Keys shared via URL fragments (never transmitted to server)
- Unique IV per Message - Each message uses a random initialization vector for forward secrecy
- Client-Side Only - All encryption/decryption happens in your browser
For a detailed explanation of the encryption flow, key generation, message encryption, and security guarantees, see the End-to-End Encryption Documentation.
This project is open source and available under the MIT License.
Contributions, issues, and feature requests are welcome! Feel free to check the issues page.
Built with ❤️ using Next.js, React, and modern web technologies