A minimalist, brutalist chat application with end-to-end encryption support. Built as a lightweight alternative to Slack with a focus on simplicity and security.
- Real-time messaging with WebSocket connections
- End-to-end encryption using Web Crypto API (AES-GCM)
- Workspaces and channels for organized communication
- Direct messages between users
- Threaded conversations for focused discussions
- Quote/reply functionality for contextual responses
- Link aggregation with voting system
- Image sharing (workspace setting)
- Voice calls using WebRTC
- Three themes: light, dark, and brutalist
- Inbox view for tracking mentions and replies
- World view for discovering content across channels
- Frontend: React + Vite
- Backend: Node.js + Express + Socket.io
- Database: SQLite with better-sqlite3
- Authentication: JWT
- Encryption: Web Crypto API (PBKDF2 + AES-GCM)
- Clone the repository:
git clone https://github.com/yourusername/minimal-chat.git
cd minimal-chat- Install dependencies:
npm install- Create a
.envfile in the root directory:
JWT_SECRET=your-super-secret-jwt-key-change-in-production
PORT=3035
CLIENT_URL=http://localhost:3033- Start the development servers:
npm run devThis will start:
- Frontend at http://localhost:3033
- Backend at http://localhost:3035
- Create an account: Sign up with a username and password
- Create a workspace: Set up your first workspace
- Create channels: Add channels for different topics
- Invite team members: Share the workspace with others
- Enable encryption: Create encrypted channels for sensitive discussions
To create an encrypted channel:
- Click the
+button next to "Channels" - Enter a channel name
- Check "🔒 enable end-to-end encryption"
- Choose a strong password (or use the suggested one)
- Share the password securely with channel members
- Passwords are never sent to the server
- All encryption/decryption happens client-side
- Uses PBKDF2 with 100,000 iterations for key derivation
- AES-GCM for authenticated encryption
- Each message has a unique salt and IV
minimal-chat/
├── client/ # React frontend
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── services/ # API and crypto services
│ │ └── stores/ # State management
│ └── index.html
├── server/ # Express backend
│ ├── api/ # REST endpoints
│ ├── db/ # Database setup and migrations
│ └── websocket/ # Socket.io handlers
├── package.json
└── vite.config.js
npm run dev- Start both frontend and backend in development modenpm run client:dev- Start only the frontendnpm run server:dev- Start only the backendnpm run build- Build for productionnpm start- Run production server
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with React and Vite for fast development
- Uses Socket.io for real-time communication
- Encryption implementation inspired by Signal's approach to E2EE
- Brutalist design philosophy for minimal, functional UI