Anonyma is a secure, privacy-first anonymous messaging and broadcast platform. It enables users to communicate without revealing their identities while providing modern social features including message reactions, comments, typing indicators, and real-time updates.
- Anonymous peer-to-peer messaging with thread-based conversations
- Real-time message delivery via Server-Sent Events
- Message reactions with enhanced emoji picker
- Read receipts for sent messages
- Full-text message search across conversations
- Message editing with complete edit history
- Soft deletion of messages and threads
- Message and conversation pinning
- Real-time typing indicators
- Auto-saving message drafts with restoration
- Global broadcast board visible to all users
- Optional anonymous posting
- Threaded comment system with reactions
- Real-time view tracking and statistics
- Customizable user profiles
- User blocking and management
- Active user discovery
- Dark and light theme support with persistence
- Audio notifications for new messages
- Browser desktop notifications
- Comprehensive emoji library with search
- Smooth animations and transitions
- Fully responsive design
- Rust with Axum 0.8 web framework
- PostgreSQL database with SQLx
- Authkestra for authentication (GitHub OAuth and local credentials)
- Server-Sent Events for real-time updates
- Structured logging with Tracing
- React 18 with Vite build tool
- TypeScript for type safety
- Tailwind CSS for styling
- shadcn/ui component library
- TanStack Query for state management
- Framer Motion for animations
- Lucide React for icons
- Complete Implementation Status - Detailed feature documentation
- Architecture and Design - System architecture overview
- Backend Development - Backend API documentation
- Frontend Development - Frontend development guide
- Rust (latest stable version)
- Node.js 18 or higher
- PostgreSQL 14 or higher
- Docker (optional, for containerized database)
Using Docker:
docker-compose up -dUsing local PostgreSQL:
createdb anonymacd backend
cp .env.example .env
# Configure DATABASE_URL, HOST, PORT, APP_SCHEME, FRONTEND_URL, and OAuth credentials in .env
cargo build
cargo runThe backend server will start on http://localhost:3000
cd frontend
cp .env.example .env
# Configure VITE_API_URL and VITE_FRONTEND_URL in .env
npm install
npm run devThe frontend application will be accessible at http://localhost:8080
- Navigate to http://localhost:8080
- Choose authentication method:
- "Authenticate via GitHub" for OAuth login
- "Authenticate with Password" for local credentials
- For local authentication, enter a username and password (minimum 6 characters)
- Begin using the application
To test messaging between multiple users, use separate browser profiles:
Chrome or Edge:
- Create multiple browser profiles via the profile menu
- Open the application in each profile with different user accounts
Firefox:
- Use Firefox profiles or container tabs
- Alternatively, use different browsers simultaneously
Backend tests:
cd backend
cargo test
cargo clippyFrontend tests:
cd frontend
npm run test
npm run lintPOST /auth/register- Register new user with username and passwordPOST /auth/login- Authenticate with credentialsGET /auth/github- Initiate GitHub OAuth flowGET /logout- End current session
GET /api/me- Retrieve current user profilePOST /api/me- Update profile informationGET /api/users- List all active usersPOST /api/users/{id}/block- Block specified userPOST /api/users/{id}/unblock- Unblock specified userGET /api/users/blocked- Retrieve blocked users list
POST /api/messages- Send new messageGET /api/messages/inbox- Retrieve inbox messagesGET /api/messages/search- Search messages by contentGET /api/conversations- List all conversationsPOST /api/messages/{id}/react- Add emoji reactionPOST /api/messages/{id}/edit- Edit message contentDELETE /api/messages/{id}/delete- Delete messageDELETE /api/conversations/{thread_id}/delete- Delete conversationPOST /api/messages/{id}/pin- Pin or unpin messagePOST /api/conversations/{thread_id}/pin- Pin or unpin conversationPOST /api/conversations/{thread_id}/typing- Send typing indicator
GET /api/broadcasts- List all broadcastsPOST /api/broadcasts- Create new broadcastPOST /api/broadcasts/{id}/view- Track broadcast viewGET /api/broadcasts/{id}/comments- Retrieve commentsPOST /api/broadcasts/{id}/comments- Create commentPOST /api/broadcasts/comments/{id}/react- React to commentDELETE /api/broadcasts/comments/{id}/delete- Delete comment
GET /api/preferences- Retrieve user preferencesPOST /api/preferences- Update user preferences
GET /api/sse- Server-Sent Events stream for live updates
The system is architected with privacy as a core principle. Sender identities are stored server-side for reply routing but are never exposed to message recipients. Recipients see only "Anonymous Agent" for incoming messages, ensuring complete sender anonymity.
- HTTP-only session cookies prevent cross-site scripting attacks
- Argon2 password hashing provides secure credential storage
- Soft deletion preserves audit trails while removing content from view
- User blocking prevents unwanted communication
- Secure session management via Authkestra
The application uses a single comprehensive migration file containing 13 tables. See ARCHITECTURE.md for the complete Entity-Relationship diagram and detailed schema documentation.
users- User accounts and authenticationmessages- Peer-to-peer messages with threadingbroadcasts- Public broadcast messages
user_preferences- User settings and preferencesmessage_reactions- Emoji reactions on messagesmessage_edits- Message modification historypinned_messages- User-pinned messagespinned_threads- User-pinned conversationstyping_indicators- Real-time typing stateuser_blocks- Blocked user relationshipsbroadcast_views- Broadcast view trackingbroadcast_comments- Comments on broadcastsbroadcast_comment_reactions- Reactions on comments
All core features are fully implemented and functional:
- Anonymous peer-to-peer messaging with threading
- Full-text message search
- Message editing with history tracking
- Message and thread deletion
- Message and conversation pinning
- Real-time typing indicators
- Read receipts for message tracking
- Auto-saving message drafts
- Enhanced emoji reactions
- User blocking and management
- Public broadcasts with view tracking
- Threaded comment system
- Dark and light theme support
- Audio and browser notifications
- Real-time updates via Server-Sent Events
Contributions are welcome. Please ensure all tests pass and code follows the established style guidelines before submitting pull requests.
This project is licensed under the MIT License. See the LICENSE file for details.
This project is built with:
- Axum - Web framework
- shadcn/ui - UI component library
- Authkestra - Authentication framework
- Lucide - Icon library