A Vue 3 email client using JMAP (JSON Meta Application Protocol) for email.
The easiest way to get started is using the dev container which provides a consistent environment:
# Start the dev container
docker compose -f .devcontainer/docker-compose.yml up -d
# Open in VS Code with Dev Containers extension, or run commands directly:
docker compose -f .devcontainer/docker-compose.yml exec app npm run dev
Access the app at http://localhost:3000
If you prefer local development:
# Clone and install
git clone <repository-url>
cd thundermail-vue
npm install
# Configure JMAP server (required)
export JMAP_SERVER_URL="https://your-jmap-server.com"
# Start development server
npm run dev
Set your JMAP server endpoint before running:
# Environment variable
export JMAP_SERVER_URL="https://your-jmap-server.com"
# Or create .env.local file
echo "JMAP_SERVER_URL=https://your-jmap-server.com" > .env.local
- Login: Enter your username and app password for the JMAP server
- Browse Mailboxes: Use the sidebar to navigate between different mailboxes
- View Emails: Click on emails in the message list to view their content
- Compose: Click the "Compose" button to write new emails
- Reply/Delete: Use the action buttons in the email detail view
See BUILD.md for production build instructions.
src/
├── components/ # Vue components
├── composables/ # Vue composables (main business logic)
├── services/ # JMAP client service
├── assets/ # Global styles and CSS variables
├── App.vue # Main application component
└── main.js # Application entry point
- Vue 3: Modern reactive framework with Composition API
- Vite: Fast build tool and dev server
- JMAP: JSON Meta Application Protocol for email
- Quill.js: Rich text editor for email composition
- @tanstack/vue-query: Syncing client/server data state
- @tanstack/vue-virtual: High-performance virtual scrolling