For a while now I’ve been using Cloudflare Email Routing on several domains as a way to keep my email organized — and also for privacy. It’s a pretty top-tier tool that Cloudflare basically gives you for free if you’ve got your domain with them.

The issue with most of these Cloudflare services is that the UI is pretty much built for companies, not for day-to-day use. If you’ve used it, you’ll know that jumping into the Cloudflare dashboard every time you want to quickly create an alias is kind of a pain in the ass — especially on mobile.

So to fix that, I built vuzon: a simple, self-hostable, mobile-optimized web interface that connects straight to the Cloudflare API to manage Email Routing.

Main features

  • Create aliases/rules.
  • Recipient management.
  • Enable/disable rules.
  • Responsive UI and PWA.

Self-hosted version

To install it on your own server, you’re in full control of everything and it works with your Cloudflare account and domains. I've included a guide.

Public version (beta)

If you don’t want to self-host it, I’m also building vuzon as a service, where each user runs things using subdomains.


Quick install using docker compose

This will vary a lot depending on what machine you’re running Docker on, but yeah — the basic idea is this:

1) Create and configure the .env

# Token with edit permissions for Email Routing in your zone and account
CF_API_TOKEN=your_cloudflare_api_token
DOMAIN=yourdomain.com

# Credentials to access the vuzon panel
AUTH_USER=admin
AUTH_PASS=your_secure_password

# Public URL (optional, just for reference)
BASE_URL=https://vuzon.yourdomain.com

# Port where the service will be exposed
VUZON_PORT=8001

# Cookies secret
SESSION_SECRET=your_secure_secret

Note: CF_API_TOKEN needs Read & Edit permissions for Email Routing Addresses (Account) and Email Routing Rules (Zone).

2) Create docker-compose.yml

services:
  vuzon:
    container_name: vuzon
    image: ghcr.io/kernel-nomad/vuzon
    env_file:
      - .env
    restart: unless-stopped
    ports:
      - "${VUZON_PORT:-8001}:8001"
    volumes:
      - ./sessions:/app/sessions

Once it’s up, you’ll be able to access the interface at http://localhost:8001 (or your server IP) and log in with the username and password you set in the .env.