From e85d0b946e598578f2b05910b5dcbe1b7c3acd02 Mon Sep 17 00:00:00 2001
From: Linus Rath <139418639+rathlinus@users.noreply.github.com>
Date: Fri, 13 Mar 2026 13:14:08 +0100
Subject: [PATCH] chore: rename JMAP Webmail to Bulwark Webmail and update all
URLs
---
.env.example | 6 ++--
CONTRIBUTING.md | 12 ++++----
Dockerfile | 6 ++--
README.md | 16 +++++-----
ROADMAP.md | 6 ++--
app/api/dev-jmap/[...path]/route.ts | 26 ++++++++--------
app/layout.tsx | 2 +-
docker-compose.yml | 2 +-
instrumentation.node.ts | 6 ++--
package-lock.json | 4 +--
package.json | 10 +++---
setup.sh | 32 ++++++++++----------
specifications/addon-plugin-theme-concept.md | 12 ++++----
stores/email-store.ts | 8 ++---
14 files changed, 74 insertions(+), 74 deletions(-)
diff --git a/.env.example b/.env.example
index 668a2442..60c77c5d 100644
--- a/.env.example
+++ b/.env.example
@@ -1,4 +1,4 @@
-# JMAP Webmail — Production Configuration
+# Bulwark Webmail — Production Configuration
# Copy this file to .env.local and fill in your values.
# For development with the built-in mock server, see .env.dev.example instead.
@@ -7,7 +7,7 @@
# =============================================================================
# App name displayed in the UI
-APP_NAME=JMAP Webmail
+APP_NAME=Bulwark Webmail
# URL of your JMAP-compatible mail server (required)
JMAP_SERVER_URL=https://your-jmap-server.com
@@ -94,5 +94,5 @@ JMAP_SERVER_URL=https://your-jmap-server.com
# These are baked into the bundle at build time. The runtime variables above
# take priority when both are set.
#
-# NEXT_PUBLIC_APP_NAME=JMAP Webmail
+# NEXT_PUBLIC_APP_NAME=Bulwark Webmail
# NEXT_PUBLIC_JMAP_SERVER_URL=https://your-jmap-server.com
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index d430667c..1fe024a4 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,6 +1,6 @@
-# Contributing to JMAP Webmail
+# Contributing to Bulwark Webmail
-Thank you for your interest in contributing to JMAP Webmail! This document provides guidelines and information for contributors.
+Thank you for your interest in contributing to Bulwark Webmail! This document provides guidelines and information for contributors.
## Getting Started
@@ -8,8 +8,8 @@ Thank you for your interest in contributing to JMAP Webmail! This document provi
1. **Fork and clone** the repository:
```bash
- git clone https://github.com/root-fr/jmap-webmail.git
- cd jmap-webmail
+ git clone https://github.com/bulwarkmail/webmail.git
+ cd webmail
```
2. **Install dependencies**:
@@ -156,7 +156,7 @@ docs: update README with keyboard shortcuts
## Project Structure
```
-jmap-webmail/
+webmail/
├── app/ # Next.js App Router pages
│ └── [locale]/ # Locale-aware routing
├── components/ # React components
@@ -187,4 +187,4 @@ If you have questions about contributing, feel free to:
- Open an issue for discussion
- Check existing issues and pull requests
-Thank you for helping improve JMAP Webmail!
+Thank you for helping improve Bulwark Webmail!
diff --git a/Dockerfile b/Dockerfile
index e7f62c72..24dbfea0 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -8,10 +8,10 @@ RUN npx next build --webpack
FROM node:24-alpine AS runner
-LABEL org.opencontainers.image.title="JMAP Webmail"
+LABEL org.opencontainers.image.title="Bulwark Webmail"
LABEL org.opencontainers.image.description="Modern webmail client built with Next.js and the JMAP protocol"
-LABEL org.opencontainers.image.source="https://github.com/root-fr/jmap-webmail"
-LABEL org.opencontainers.image.url="https://github.com/root-fr/jmap-webmail"
+LABEL org.opencontainers.image.source="https://github.com/bulwarkmail/webmail"
+LABEL org.opencontainers.image.url="https://github.com/bulwarkmail/webmail"
LABEL org.opencontainers.image.licenses="MIT"
LABEL org.opencontainers.image.vendor="root.cloud"
diff --git a/README.md b/README.md
index 49a09975..b1b6f79d 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# JMAP Webmail
+# Bulwark Webmail
A webmail client for [Stalwart Mail Server](https://stalw.art/), built with Next.js and the JMAP protocol.
@@ -126,7 +126,7 @@ Stalwart is a mail server written in Rust with native JMAP support, not IMAP/SMT
### Deployment
-- Pre-built Docker images on [Docker Hub](https://hub.docker.com/r/rootfr/jmap-webmail) and [GHCR](https://ghcr.io/root-fr/jmap-webmail) (amd64/arm64)
+- Pre-built Docker images on [Docker Hub](https://hub.docker.com/r/bulwarkmail/webmail) and [GHCR](https://ghcr.io/bulwarkmail/webmail) (amd64/arm64)
- Multi-stage build with standalone output
- Runtime environment variables (no rebuild needed)
- Health check endpoint
@@ -153,8 +153,8 @@ Stalwart is a mail server written in Rust with native JMAP support, not IMAP/SMT
### Installation
```bash
-git clone https://github.com/root-fr/jmap-webmail.git
-cd jmap-webmail
+git clone https://github.com/bulwarkmail/webmail.git
+cd webmail
npm install
cp .env.example .env.local
```
@@ -215,10 +215,10 @@ npm start
```bash
# Pre-built image
-docker run -p 3000:3000 -e JMAP_SERVER_URL=https://mail.example.com rootfr/jmap-webmail:latest
+docker run -p 3000:3000 -e JMAP_SERVER_URL=https://mail.example.com bulwarkmail/webmail:latest
# From GHCR
-docker run -p 3000:3000 -e JMAP_SERVER_URL=https://mail.example.com ghcr.io/root-fr/jmap-webmail:latest
+docker run -p 3000:3000 -e JMAP_SERVER_URL=https://mail.example.com ghcr.io/bulwarkmail/webmail:latest
# With docker compose
cp .env.example .env.local
@@ -226,8 +226,8 @@ cp .env.example .env.local
docker compose up -d
# Build from source
-docker build -t jmap-webmail .
-docker run -p 3000:3000 -e JMAP_SERVER_URL=https://mail.example.com jmap-webmail
+docker build -t bulwark-webmail .
+docker run -p 3000:3000 -e JMAP_SERVER_URL=https://mail.example.com bulwark-webmail
```
## Keyboard shortcuts
diff --git a/ROADMAP.md b/ROADMAP.md
index 5db27f06..bdd2fbec 100644
--- a/ROADMAP.md
+++ b/ROADMAP.md
@@ -1,6 +1,6 @@
-# JMAP Webmail - Roadmap
+# Bulwark Webmail - Roadmap
-This document tracks the development status and planned features for JMAP Webmail.
+This document tracks the development status and planned features for Bulwark Webmail.
## Completed Features
@@ -230,7 +230,7 @@ This document tracks the development status and planned features for JMAP Webmai
- [x] Health check endpoint
- [x] Docker support (multi-stage build, docker-compose, standalone output)
- [x] Structured server-side logger (text/JSON format, configurable level)
-- [x] Pre-built Docker image on [Docker Hub](https://hub.docker.com/r/rootfr/jmap-webmail) and [GHCR](https://ghcr.io/root-fr/jmap-webmail) with multi-arch support (amd64/arm64)
+- [x] Pre-built Docker image on [Docker Hub](https://hub.docker.com/r/bulwarkmail/webmail) and [GHCR](https://ghcr.io/bulwarkmail/webmail) with multi-arch support (amd64/arm64)
- [x] GitHub Actions CI/CD for automated image publishing on releases
- [x] CVE remediation: remove npm from production image, upgrade Alpine packages
- [x] Server-side update check (logs newer version availability on startup)
diff --git a/app/api/dev-jmap/[...path]/route.ts b/app/api/dev-jmap/[...path]/route.ts
index f8398fc3..d44f2c55 100644
--- a/app/api/dev-jmap/[...path]/route.ts
+++ b/app/api/dev-jmap/[...path]/route.ts
@@ -108,14 +108,14 @@ const emails: MockEmail[] = [
id: 'email-001', threadId: 'thread-001', mailboxIds: { 'mb-inbox': true }, keywords: {}, size: 4200, receivedAt: daysAgo(0),
from: [{ name: 'Sophie Müller', email: 'sophie@eurotech.example' }],
to: [{ name: 'Dev User', email: 'dev@localhost' }], cc: [],
- subject: 'Willkommen bei JMAP Webmail!',
- preview: 'Hallo! This is a sample email to help you get started with the JMAP Webmail development environment.',
+ subject: 'Willkommen bei Bulwark Webmail!',
+ preview: 'Hallo! This is a sample email to help you get started with the Bulwark Webmail development environment.',
hasAttachment: false,
textBody: [{ partId: 'p1', blobId: 'blob-001', size: 280, type: 'text/plain' }],
htmlBody: [{ partId: 'p2', blobId: 'blob-002', size: 420, type: 'text/html' }],
bodyValues: {
- p1: { value: 'Hallo!\n\nThis is a sample email to help you get started with the JMAP Webmail development environment.\n\nFeel free to explore the UI — all data here is mock data.\n\nBeste Grüße,\nSophie' },
- p2: { value: '
Hallo!
This is a sample email to help you get started with the JMAP Webmail development environment.
Feel free to explore the UI — all data here is mock data.
Beste Grüße,
Sophie
' },
+ p1: { value: 'Hallo!\n\nThis is a sample email to help you get started with the Bulwark Webmail development environment.\n\nFeel free to explore the UI — all data here is mock data.\n\nBeste Grüße,\nSophie' },
+ p2: { value: 'Hallo!
This is a sample email to help you get started with the Bulwark Webmail development environment.
Feel free to explore the UI — all data here is mock data.
Beste Grüße,
Sophie
' },
},
},
{
@@ -154,7 +154,7 @@ const emails: MockEmail[] = [
id: 'email-004', threadId: 'thread-004', mailboxIds: { 'mb-inbox': true }, keywords: { '$label:red': true }, size: 6200, receivedAt: daysAgo(0),
from: [{ name: 'GitHub Notifications', email: 'notifications@github.com' }],
to: [{ name: 'Dev User', email: 'dev@localhost' }], cc: [],
- subject: '[jmap-webmail] New issue: Add dark mode toggle (#42)',
+ subject: '[bulwark-webmail] New issue: Add dark mode toggle (#42)',
preview: 'A new issue has been opened by @contributor. It would be great to have a dark mode toggle in the settings panel.',
hasAttachment: false,
textBody: [{ partId: 'p1', blobId: 'blob-007', size: 350, type: 'text/plain' }],
@@ -236,8 +236,8 @@ const emails: MockEmail[] = [
textBody: [{ partId: 'p1', blobId: 'blob-034', size: 380, type: 'text/plain' }],
htmlBody: [{ partId: 'p2', blobId: 'blob-035', size: 520, type: 'text/html' }],
bodyValues: {
- p1: { value: 'Salut,\n\nI just pushed the contact vCard import feature (JMAP-342). Could you review when you get a chance?\n\nPR: https://github.example/jmap-webmail/pull/342\n\nKey changes:\n- New vCard parser with v3/v4 support\n- Batch import with progress indicator\n- Duplicate detection and merge UI\n- Unit tests for edge cases\n\nMerci d\'avance,\nÉlise' },
- p2: { value: 'Salut,
I just pushed the contact vCard import feature (JMAP-342). Could you review when you get a chance?
PR: jmap-webmail/pull/342
Key changes:
- New vCard parser with v3/v4 support
- Batch import with progress indicator
- Duplicate detection and merge UI
- Unit tests for edge cases
Merci d\'avance,
Élise
' },
+ p1: { value: 'Salut,\n\nI just pushed the contact vCard import feature (JMAP-342). Could you review when you get a chance?\n\nPR: https://github.example/bulwark-webmail/pull/342\n\nKey changes:\n- New vCard parser with v3/v4 support\n- Batch import with progress indicator\n- Duplicate detection and merge UI\n- Unit tests for edge cases\n\nMerci d\'avance,\nÉlise' },
+ p2: { value: 'Salut,
I just pushed the contact vCard import feature (JMAP-342). Could you review when you get a chance?
PR: bulwark-webmail/pull/342
Key changes:
- New vCard parser with v3/v4 support
- Batch import with progress indicator
- Duplicate detection and merge UI
- Unit tests for edge cases
Merci d\'avance,
Élise
' },
},
},
{
@@ -407,7 +407,7 @@ const emails: MockEmail[] = [
textBody: [{ partId: 'p1', blobId: 'blob-063', size: 350, type: 'text/plain' }],
htmlBody: [],
bodyValues: {
- p1: { value: '¡Hola!\n\nThe new brand guidelines are finalized. Key updates:\n\n- Primary color shifted to #7c3aed (from #6366f1)\n- New typography scale (Inter for body, Cal Sans for headings)\n- Updated icon set (Lucide → custom icon font)\n- Dark mode color tokens added\n\nI\'ve also updated the Figma component library. Link: figma.example/jmap-webmail-v2\n\nBrand guidelines PDF attached.\n\nMaría' },
+ p1: { value: '¡Hola!\n\nThe new brand guidelines are finalized. Key updates:\n\n- Primary color shifted to #7c3aed (from #6366f1)\n- New typography scale (Inter for body, Cal Sans for headings)\n- Updated icon set (Lucide → custom icon font)\n- Dark mode color tokens added\n\nI\'ve also updated the Figma component library. Link: figma.example/bulwark-webmail-v2\n\nBrand guidelines PDF attached.\n\nMaría' },
},
attachments: [
{ partId: 'att10', blobId: 'blob-att-010', size: 3200000, name: 'Markenrichtlinien-v2.pdf', type: 'application/pdf' },
@@ -430,14 +430,14 @@ const emails: MockEmail[] = [
id: 'email-039', threadId: 'thread-034', mailboxIds: { 'mb-inbox': true }, keywords: {}, size: 3400, receivedAt: hoursAgo(0.25),
from: [{ name: 'CI/CD Pipeline', email: 'ci@github.example' }],
to: [{ name: 'Dev User', email: 'dev@localhost' }], cc: [],
- subject: '❌ Build failed: main — jmap-webmail #1337',
+ subject: '❌ Build failed: main — bulwark-webmail #1337',
preview: 'Build #1337 on branch main failed. 2 test(s) failed in email-sanitization.test.ts.',
hasAttachment: false,
textBody: [{ partId: 'p1', blobId: 'blob-060', size: 450, type: 'text/plain' }],
htmlBody: [{ partId: 'p2', blobId: 'blob-061', size: 600, type: 'text/html' }],
bodyValues: {
- p1: { value: '❌ Build #1337 FAILED\n\nRepository: jmap-webmail\nBranch: main\nCommit: a3f9c21 "fix: sanitize CSS in email body"\nTriggered by: @elise-moreau\n\nFailed tests:\n ✗ email-sanitization.test.ts > should strip javascript: URLs\n ✗ email-sanitization.test.ts > should handle nested style tags\n\nPassed: 247 | Failed: 2 | Skipped: 0\nDuration: 42.0s\n\nView full logs: https://github.example/jmap-webmail/actions/runs/1337' },
- p2: { value: '❌ Build #1337 FAILED
| Repository | jmap-webmail |
| Branch | main |
| Commit | a3f9c21 "fix: sanitize CSS in email body" |
Failed tests:
- ❌
email-sanitization.test.ts > should strip javascript: URLs - ❌
email-sanitization.test.ts > should handle nested style tags
Passed: 247 | Failed: 2 | Skipped: 0
' },
+ p1: { value: '❌ Build #1337 FAILED\n\nRepository: bulwark-webmail\nBranch: main\nCommit: a3f9c21 "fix: sanitize CSS in email body"\nTriggered by: @elise-moreau\n\nFailed tests:\n ✗ email-sanitization.test.ts > should strip javascript: URLs\n ✗ email-sanitization.test.ts > should handle nested style tags\n\nPassed: 247 | Failed: 2 | Skipped: 0\nDuration: 42.0s\n\nView full logs: https://github.example/bulwark-webmail/actions/runs/1337' },
+ p2: { value: '❌ Build #1337 FAILED
| Repository | bulwark-webmail |
| Branch | main |
| Commit | a3f9c21 "fix: sanitize CSS in email body" |
Failed tests:
- ❌
email-sanitization.test.ts > should strip javascript: URLs - ❌
email-sanitization.test.ts > should handle nested style tags
Passed: 247 | Failed: 2 | Skipped: 0
' },
},
},
// =====================================================================
@@ -729,8 +729,8 @@ const IDENTITIES = [
email: 'dev@localhost',
replyTo: null,
bcc: null,
- textSignature: '-- \nDev User\nJMAP Webmail Developer',
- htmlSignature: '--
Dev User
JMAP Webmail Developer
',
+ textSignature: '-- \nDev User\nBulwark Webmail Developer',
+ htmlSignature: '--
Dev User
Bulwark Webmail Developer
',
mayDelete: false,
},
];
diff --git a/app/layout.tsx b/app/layout.tsx
index caf6c46b..4811e25c 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -15,7 +15,7 @@ const geistMono = Geist_Mono({
});
export const metadata: Metadata = {
- title: "JMAP Webmail",
+ title: "Bulwark Webmail",
description: "Minimalist webmail client using JMAP protocol",
};
diff --git a/docker-compose.yml b/docker-compose.yml
index 9b5c3166..5de56760 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,6 +1,6 @@
services:
webmail:
- image: ghcr.io/rathlinus/jmap-webmail:latest
+ image: ghcr.io/bulwarkmail/webmail:latest
ports:
- "3000:3000"
env_file:
diff --git a/instrumentation.node.ts b/instrumentation.node.ts
index f2985a30..ceaeed5e 100644
--- a/instrumentation.node.ts
+++ b/instrumentation.node.ts
@@ -1,7 +1,7 @@
import { readFileSync } from "fs";
const VERSION_CHECK_URL =
- "https://raw.githubusercontent.com/root-fr/jmap-webmail/main/VERSION";
+ "https://raw.githubusercontent.com/bulwarkmail/webmail/main/VERSION";
const SEMVER_RE = /^\d+\.\d+\.\d+$/;
@@ -19,7 +19,7 @@ const pkg = JSON.parse(
readFileSync(`${process.cwd()}/package.json`, "utf-8")
);
const current: string = pkg.version ?? "0.0.0";
-console.info(`JMAP Webmail v${current}`);
+console.info(`Bulwark Webmail v${current}`);
if (process.env.NODE_ENV === "production") {
fetch(VERSION_CHECK_URL, {
@@ -36,7 +36,7 @@ if (process.env.NODE_ENV === "production") {
if (!SEMVER_RE.test(remote)) return;
if (compareVersions(current, remote) > 0) {
console.info(
- `Update available: v${remote} — https://github.com/root-fr/jmap-webmail`
+ `Update available: v${remote} — https://github.com/bulwarkmail/webmail`
);
}
})
diff --git a/package-lock.json b/package-lock.json
index 7ced2c66..2cfc5dab 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,11 +1,11 @@
{
- "name": "jmap-webmail",
+ "name": "bulwark-webmail",
"version": "1.1.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "jmap-webmail",
+ "name": "bulwark-webmail",
"version": "1.1.2",
"license": "MIT",
"dependencies": {
diff --git a/package.json b/package.json
index 9f602d5a..64e954b7 100644
--- a/package.json
+++ b/package.json
@@ -1,16 +1,16 @@
{
- "name": "jmap-webmail",
+ "name": "bulwark-webmail",
"version": "1.1.2",
- "description": "A modern JMAP webmail client built for Stalwart Mail Server",
+ "description": "Bulwark Webmail — a modern webmail client built for Stalwart Mail Server",
"author": "Matthieu MALVACHE ",
"license": "MIT",
"repository": {
"type": "git",
- "url": "git+https://github.com/root-fr/jmap-webmail.git"
+ "url": "git+https://github.com/bulwarkmail/webmail.git"
},
- "homepage": "https://github.com/root-fr/jmap-webmail",
+ "homepage": "https://github.com/bulwarkmail/webmail",
"bugs": {
- "url": "https://github.com/root-fr/jmap-webmail/issues"
+ "url": "https://github.com/bulwarkmail/webmail/issues"
},
"keywords": [
"jmap",
diff --git a/setup.sh b/setup.sh
index dd727d50..891c7a13 100644
--- a/setup.sh
+++ b/setup.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
# =============================================================================
-# JMAP Webmail - Interactive Setup Script
+# Bulwark Webmail - Interactive Setup Script
# =============================================================================
set -euo pipefail
@@ -51,7 +51,7 @@ set -u
ENV_FILE="${SCRIPT_DIR}/.env.local"
# Config values (defaults)
-CFG_APP_NAME="JMAP Webmail"
+CFG_APP_NAME="Bulwark Webmail"
CFG_JMAP_SERVER_URL=""
CFG_STALWART_FEATURES="true"
CFG_OAUTH_ENABLED="false"
@@ -396,9 +396,9 @@ draw_header() {
echo ""
if [[ "$DRY_RUN" == true ]]; then
- box "JMAP WEBMAIL SETUP -- DRY RUN" "$MAGENTA"
+ box "BULWARK WEBMAIL SETUP -- DRY RUN" "$MAGENTA"
else
- box "JMAP WEBMAIL SETUP" "$CYAN"
+ box "BULWARK WEBMAIL SETUP" "$CYAN"
fi
echo ""
@@ -444,7 +444,7 @@ screen_welcome() {
local version
version=$(cat "${SCRIPT_DIR}/VERSION" 2>/dev/null || echo "dev")
- print_center "${BOLD}Welcome to JMAP Webmail${RESET}"
+ print_center "${BOLD}Welcome to Bulwark Webmail${RESET}"
print_center "${DIM}v${version}${RESET}"
echo ""
echo ""
@@ -542,7 +542,7 @@ screen_server_config() {
draw_header
section_header 1 "Server Configuration" \
- "Point JMAP Webmail at your mail server."
+ "Point Bulwark Webmail at your mail server."
echo -e " ${BOLD}General${RESET}"
echo -e " ${DIM}This name appears in the browser tab and on the login page.${RESET}"
@@ -719,7 +719,7 @@ screen_logging_config() {
draw_header
section_header 4 "Logging" \
- "Control how JMAP Webmail writes logs."
+ "Control how Bulwark Webmail writes logs."
echo -e " ${BOLD}Log Format${RESET}"
echo ""
@@ -788,7 +788,7 @@ screen_deployment() {
draw_header
section_header 6 "Deployment Method" \
- "Choose how you want to run JMAP Webmail."
+ "Choose how you want to run Bulwark Webmail."
local docker_available=false
command -v docker &>/dev/null && docker_available=true
@@ -940,7 +940,7 @@ write_env_file() {
cat > "$ENV_FILE" << ENVEOF
# =============================================================================
-# JMAP Webmail -- Configuration
+# Bulwark Webmail -- Configuration
# Generated by setup.sh on $(date '+%Y-%m-%d %H:%M:%S')
# =============================================================================
@@ -1026,7 +1026,7 @@ run_deployment() {
echo -e " ${DIM}[dry-run] Would start: npm start (port ${CFG_PORT})${RESET}"
;;
"docker")
- echo -e " ${DIM}[dry-run] Would run: docker pull ghcr.io/rathlinus/jmap-webmail:latest${RESET}"
+ echo -e " ${DIM}[dry-run] Would run: docker pull ghcr.io/bulwarkmail/webmail:latest${RESET}"
echo -e " ${DIM}[dry-run] Would start: container on port ${CFG_PORT}${RESET}"
;;
"compose")
@@ -1063,8 +1063,8 @@ run_deployment() {
"docker")
echo -e " ${BOLD}Pulling Docker image...${RESET}"
echo ""
- (docker pull ghcr.io/rathlinus/jmap-webmail:latest 2>&1) &
- spinner $! "Pulling ghcr.io/rathlinus/jmap-webmail:latest"
+ (docker pull ghcr.io/bulwarkmail/webmail:latest 2>&1) &
+ spinner $! "Pulling ghcr.io/bulwarkmail/webmail:latest"
echo ""
echo -e " ${OK} Image pulled!"
@@ -1072,11 +1072,11 @@ run_deployment() {
echo -e " ${BOLD}To run the container:${RESET}"
echo ""
echo -e " ${CYAN}docker run -d \\${RESET}"
- echo -e " ${CYAN} --name jmap-webmail \\${RESET}"
+ echo -e " ${CYAN} --name bulwark-webmail \\${RESET}"
echo -e " ${CYAN} -p ${CFG_PORT}:3000 \\${RESET}"
echo -e " ${CYAN} --env-file .env.local \\${RESET}"
echo -e " ${CYAN} --restart unless-stopped \\${RESET}"
- echo -e " ${CYAN} ghcr.io/rathlinus/jmap-webmail:latest${RESET}"
+ echo -e " ${CYAN} ghcr.io/bulwarkmail/webmail:latest${RESET}"
;;
"compose")
@@ -1136,7 +1136,7 @@ screen_complete() {
echo ""
hr
echo ""
- print_center "${DIM}Thank you for using JMAP Webmail!${RESET}"
+ print_center "${DIM}Thank you for using Bulwark Webmail!${RESET}"
echo ""
}
@@ -1217,7 +1217,7 @@ elif [[ -r /dev/tty ]] 2>/dev/null && (echo < /dev/tty) 2>/dev/null; then
else
echo "Error: No interactive terminal available."
echo "Download and run the script directly instead:"
- echo " curl -fsSL https://raw.githubusercontent.com/rathlinus/jmap-webmail/main/setup.sh -o setup.sh"
+ echo " curl -fsSL https://raw.githubusercontent.com/bulwarkmail/webmail/main/setup.sh -o setup.sh"
echo " bash setup.sh --dry-run"
exit 1
fi
diff --git a/specifications/addon-plugin-theme-concept.md b/specifications/addon-plugin-theme-concept.md
index eaf457ad..b67e21ee 100644
--- a/specifications/addon-plugin-theme-concept.md
+++ b/specifications/addon-plugin-theme-concept.md
@@ -24,7 +24,7 @@
## 1. Overview
-This document describes a system that allows the JMAP Webmail application to be extended through **themes** (visual customization) and **plugins** (functional extensions). Together, these are called **addons**.
+This document describes a system that allows the Bulwark Webmail application to be extended through **themes** (visual customization) and **plugins** (functional extensions). Together, these are called **addons**.
### Design Goals
@@ -240,7 +240,7 @@ A plugin exports a single `activate` function and optionally a `deactivate` func
```ts
// index.ts — Plugin entry point
-import type { PluginContext } from "@jmap-webmail/addon-api";
+import type { PluginContext } from "@bulwarkmail/addon-api";
export function activate(ctx: PluginContext) {
// Register a sidebar section
@@ -817,7 +817,7 @@ Some hooks allow plugins to transform data flowing through them. For example, `e
ctx.hooks.on("email:compose:before-send", (draft) => {
return {
...draft,
- htmlBody: draft.htmlBody + "Sent from JMAP Webmail
",
+ htmlBody: draft.htmlBody + "Sent from Bulwark Webmail
",
};
});
```
@@ -866,8 +866,8 @@ useHostTheme(): { mode: "light" | "dark"; resolvedMode: "light" | "dark" };
### Phase 3: Developer Experience
-- [ ] Create `@jmap-webmail/addon-api` — TypeScript type definitions package.
-- [ ] Create `create-jmap-addon` CLI scaffolding tool.
+- [ ] Create `@bulwarkmail/addon-api` — TypeScript type definitions package.
+- [ ] Create `create-bulwark-addon` CLI scaffolding tool.
- [ ] Write addon developer documentation with examples.
- [ ] Build a sample plugin (e.g., email translation) as a reference.
- [ ] Add dev mode: hot-reload addons from local filesystem.
@@ -896,7 +896,7 @@ nord-theme/
`addon.json`:
```json
{
- "id": "org.nordtheme.jmap-webmail",
+ "id": "org.nordtheme.bulwark-webmail",
"name": "Nord",
"version": "1.0.0",
"type": "theme",
diff --git a/stores/email-store.ts b/stores/email-store.ts
index c0f3eeda..5fd2eafe 100644
--- a/stores/email-store.ts
+++ b/stores/email-store.ts
@@ -1280,8 +1280,8 @@ export const useEmailStore = create((set, get) => ({
receivedAt: new Date().toISOString(),
from: [{ name: "GitHub", email: "notifications@github.com" }],
to: [{ email: "you@example.com" }],
- subject: "[jmap-webmail] New pull request #42: Add OAuth2 module",
- preview: "dependabot[bot] opened a pull request in root-fr/jmap-webmail. This PR adds a comprehensive authentication module with OAuth2 PKCE support...",
+ subject: "[bulwark-webmail] New pull request #42: Add OAuth2 module",
+ preview: "dependabot[bot] opened a pull request in bulwarkmail/webmail. This PR adds a comprehensive authentication module with OAuth2 PKCE support...",
hasAttachment: false,
},
{
@@ -1358,8 +1358,8 @@ export const useEmailStore = create((set, get) => ({
receivedAt: new Date(Date.now() - 172800000).toISOString(),
from: [{ name: "Vercel", email: "notifications@vercel.com" }],
to: [{ email: "you@example.com" }],
- subject: "Deployment successful: jmap-webmail \u2192 Production",
- preview: "Your project jmap-webmail has been deployed to production. Build completed in 47s. All checks passed. Preview: https://jmap-webmail.vercel.app...",
+ subject: "Deployment successful: bulwark-webmail \u2192 Production",
+ preview: "Your project bulwark-webmail has been deployed to production. Build completed in 47s. All checks passed. Preview: https://bulwark-webmail.vercel.app...",
hasAttachment: false,
},
{