A modern, privacy-focused webmail client built with Next.js and the JMAP protocol.
This webmail client is designed to work seamlessly with Stalwart Mail Server - a modern, secure, and blazingly fast mail server written in Rust.
Why Stalwart?
- Modern Architecture: Built from the ground up with Rust for performance and safety
- JMAP-Native: First-class support for the JMAP protocol (not just IMAP/SMTP bolted on)
- Privacy-Focused: Self-hosted, no third-party dependencies, full control over your data
- Feature-Rich: Supports JMAP, IMAP, SMTP, ManageSieve, and more
Stalwart GitHub | Documentation
- Read, compose, reply, reply-all, and forward emails
- Full HTML email rendering with security sanitization
- Attachment upload and download
- Draft auto-save with discard confirmation
- Email threading with Gmail-style inline expansion
- Mark as read/unread, star/unstar
- Archive and delete with configurable behavior
- Color tags/labels for email organization
- Full-text search
- Clean, minimalist three-pane layout
- Dark and light theme support
- Responsive design for mobile and desktop
- Keyboard shortcuts for power users
- Drag-and-drop email organization
- Right-click context menus
- Smooth animations and transitions
- Infinite scroll pagination
- Push notifications via JMAP EventSource
- Real-time unread counts
- Live email arrival notifications
- Connection status indicator
- External content blocked by default
- HTML sanitization with DOMPurify
- SPF/DKIM/DMARC status indicators
- No password storage (session-based auth)
- Shared folder support with proper permissions
- English and French language support
- Automatic browser language detection
- Persistent language preference
- Framework: Next.js 16 with App Router
- Language: TypeScript
- Styling: Tailwind CSS v4
- State Management: Zustand
- JMAP Client: jmap-jam
- i18n: next-intl
- Icons: Lucide React
- Node.js 18+
- A JMAP-compatible mail server (we recommend Stalwart)
# Clone the repository
git clone https://github.com/root-fr/jmap-webmail.git
cd jmap-webmail
# Install dependencies
npm install
# Copy environment configuration
cp .env.example .env.localEdit .env.local with your settings:
# App name displayed in the UI
NEXT_PUBLIC_APP_NAME=My Webmail
# Your JMAP server URL
NEXT_PUBLIC_JMAP_SERVER_URL=https://mail.example.com# Start development server
npm run dev
# Type checking
npm run typecheck
# Linting
npm run lint# Build for production
npm run build
# Start production server
npm start| Key | Action |
|---|---|
j / k |
Navigate between emails |
Enter / o |
Open selected email |
Esc |
Close viewer / deselect |
c |
Compose new email |
r |
Reply |
R / a |
Reply all |
f |
Forward |
s |
Toggle star |
e |
Archive |
# / Delete |
Delete |
u |
Mark as unread |
/ |
Focus search |
x |
Expand/collapse thread |
? |
Show shortcuts help |
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
See ROADMAP.md for planned features and development status.
- Stalwart Labs for creating an excellent JMAP mail server
- The JMAP working group for the protocol specification
- All contributors and users of this project
This project is licensed under the MIT License - see the LICENSE file for details.





