Modern open-source webmail client for Stalwart Mail Server, built on the JMAP protocol.
Kolumba is a purpose-built webmail client for Stalwart Mail Server. Unlike general-purpose email clients, Kolumba speaks JMAP natively - no IMAP translation, no provider-specific APIs. Just point it at your Stalwart instance and go.
Name origin: Columba = Latin for dove/pigeon (the classic mail carrier bird)
- Native JMAP - Full RFC 8620/8621 implementation
- Secure by Design - Credentials never reach the browser; all JMAP communication is proxied through server functions
- Modern UI - Clean, minimal interface inspired by modern email clients
- Keyboard Shortcuts - Power user friendly (
j/knavigate,ccompose,rreply,earchive, and more) - Dark Mode - First-class dark mode support
- Responsive - Works on desktop, tablet, and mobile
- Self-Hostable - Deploy via Docker or serverless platforms
Coming soon
- Bun (v1.0+) or Node.js (v20+)
- A running Stalwart Mail Server instance with JMAP enabled
New to Stalwart? See our Stalwart Setup Guide for step-by-step instructions on setting up Stalwart Mail Server with Docker, configuring JMAP, and creating user accounts.
# Clone the repository
git clone https://github.com/satriadhikara/kolumba.git
cd kolumba
# Install dependencies
bun install
# Start development server
bun run devOpen http://localhost:3000 and log in with your Stalwart credentials.
SESSION_SECRET=your-32-character-secret-here # Required for productionNote: The JMAP URL is entered per-user at login, not configured globally.
# Build the image
docker build -t kolumba .
# Run the container
docker run -p 3000:3000 -e SESSION_SECRET=your-secret kolumbaversion: '3.8'
services:
kolumba:
build: .
ports:
- '3000:3000'
environment:
- SESSION_SECRET=your-32-character-secret-here
restart: unless-stoppedKolumba supports deployment to:
- Vercel - Zero-config deployment
- Cloudflare Workers - Via adapter
- AWS Lambda - Via adapter
- Framework: TanStack Start (React 19 meta-framework)
- Routing: TanStack Router (file-based)
- UI: shadcn/ui with Tailwind CSS v4
- Icons: HugeIcons
- Font: Geist
- Protocol: JMAP (RFC 8620, RFC 8621)
Browser (React) → TanStack Server Functions → Stalwart JMAP API
All JMAP communication happens server-side, keeping credentials secure and enabling deployment on both serverless and traditional platforms.
src/
├── routes/ # File-based routing
├── server/ # Server functions (auth, JMAP operations)
├── lib/jmap/ # JMAP protocol implementation
├── components/
│ ├── mail/ # Email-specific components
│ └── ui/ # shadcn/ui components
└── hooks/ # React hooks (keyboard shortcuts, etc.)
| Key | Action |
|---|---|
j / k |
Navigate messages |
c |
Compose new email |
r |
Reply |
a |
Reply all |
f |
Forward |
e |
Archive |
# |
Delete |
s |
Star/unstar |
u |
Mark unread |
Esc |
Close/back |
# Start dev server
bun run dev
# Run tests
bun run test
# Lint code
bun run lint
# Format and fix
bun run check
# Production build
bun run build- Login / authentication
- Mailbox navigation
- Message list with pagination
- Message detail view
- Compose / Reply / Forward
- Mark read/unread, star/unstar
- Move, delete, archive
- Search
- Keyboard shortcuts
- Dark mode
- Responsive design
- Email threading / conversation view
- Contacts / address book (JMAP Contacts)
- Calendar (JMAP Calendars)
- Push notifications (JMAP EventSource)
- Attachment preview
- Multi-account support
- Advanced filters / rules
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: add 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.
- Stalwart Mail Server - The excellent mail server this client is built for
- TanStack - For the amazing React ecosystem
- shadcn/ui - For the beautiful UI components
- mail0 - For UI/UX inspiration
Kolumba - Modern webmail for the self-hosted era.