A self-hostable web interface for imapsync, the email migration tool. Provides a friendly form for kicking off IMAP-to-IMAP migrations and a real-time view of sync progress.
- Real-time sync progress over WebSockets, with polling as a fallback
- Per-user log isolation — each browser session gets its own private log directory
- Live log viewer, download, and per-file deletion (with confirmation)
- Form persistence in
localStorage - Mobile-responsive UI
- Runs in a single Docker container
- Backend: Node.js + Express + Socket.IO (
server.js) - Frontend: React SPA (
client/) - Engine: imapsync (bundled in the image)
- Container: Multi-stage Docker build on
ubuntu:20.04
docker compose build
docker compose up -dThe container exposes the web UI on port 80 by default (see
docker-compose.yml). Open http://localhost/ and fill in the source and
destination IMAP credentials to start a migration.
Health check:
curl http://localhost/api/healthThe React frontend is baked into the Docker image at build time, so any frontend change requires a rebuild:
docker compose down
docker compose build --no-cache
docker compose up -dTo iterate on the client outside Docker:
cd client
npm install
npm run build.
├── server.js # Node.js backend (Express + Socket.IO)
├── client/ # React frontend
│ ├── public/
│ └── src/
├── Dockerfile # Multi-stage build
├── docker-compose.yml
├── logs/ # Per-user imapsync log files (created at runtime)
└── tmp/ # Temporary sync files
Copyright (C) 2026 Mythfinity Ltd.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.
The full license text is in LICENSE.
Because this project is licensed under the AGPL, if you run a modified version of it as a network service, you must offer the users of that service the Corresponding Source of your modified version.
This project ships with a "Source code" link in the application footer
(client/src/App.js) pointing at this repository, which satisfies §13 for
unmodified deployments. If you fork and modify this code, please update
that link to point at your fork so your users can obtain your corresponding
source.
This project bundles and invokes imapsync,
which is distributed under its own license — see the imapsync project for
details. All other dependencies are listed in package.json and
client/package.json and are governed by their respective licenses.