- Vue 43.4%
- Go 16.1%
- CSS 11.9%
- TypeScript 11.6%
- NSIS 10%
- Other 7%
| .claude | ||
| build | ||
| docs | ||
| frontend | ||
| internal | ||
| scripts | ||
| .gitignore | ||
| app.go | ||
| go.mod | ||
| go.sum | ||
| main.go | ||
| README.md | ||
| wails.json | ||
Cloudflare Manager
A cross-platform desktop application for managing Cloudflare DNS records. Built with Wails v2 (Go + WebView2/WebKit) and a Nuxt 4 + Vue 3 + Tailwind CSS v4 frontend.
The API token is stored in the operating system's native credential store —
never on disk in plain text — and every DNS operation (list, create, edit,
delete) is performed through a typed Go wrapper around the official
cloudflare-go SDK.
Features
- Secure token storage — the Cloudflare API token is validated against the live API before it is persisted, then stored in the OS keychain (Windows Credential Manager / macOS Keychain / Secret Service on Linux).
- Zone (domain) sidebar — browse all zones the token can read, with connection status and one-click refresh.
- DNS records table — search and filter by record type, with per-type badges, formatted TTL, proxy status, and zone status.
- Create / edit records — form-based entry for
A,AAAA,CNAME,TXT,MX,NS,SRV,CAA,PTRandHTTPSrecords, including priority (MX/SRV) and proxied (A/AAAA/CNAME) fields. - Locked-record protection — records managed by Cloudflare (e.g. created
by Apps, Argo Tunnel, or Cloudflare itself) are detected via their
metaflags, flagged with a lock icon, and protected from editing or deletion both in the UI and on the backend. - Smart name handling — record names are entered as relative subdomains
(
www,@, or a bare label) and expanded to a full FQDN before dispatch; editing strips the zone suffix back off. - Delete confirmation and toast notifications for every operation.
Tech Stack
| Layer | Technology |
|---|---|
| Shell | Wails v2 (v2.13) |
| Backend | Go (1.25+), cloudflare-go/v7, go-keyring |
| Frontend | Nuxt 4, Vue 3, Tailwind CSS v4, Vite |
| UI | Hand-rolled components (modal, toast, table, sidebar) |
Prerequisites
- Go 1.25 or later
- Node.js 18+ and npm
- Wails CLI v2.13:
go install github.com/wailsapp/wails/v2/cmd/wails@latest - Platform build dependencies for Wails (Windows: WebView2; macOS: Xcode Command Line Tools; Linux: WebKit2GTK).
Development
Install the frontend dependencies, then run in dev mode (hot reload):
cd frontend
npm install
cd ..
wails dev
wails dev builds the Go backend, starts the Nuxt dev server, and opens the
app with live reload for both layers.
Building a Release Binary
wails build
This runs npm run generate (static Nuxt export), regenerates the Wails JS
bindings from the Go methods, and compiles the executable to
build/bin/cloudflare-manager (.exe on Windows).
Platform-specific targets:
wails build --platform windows/amd64 # Windows x64
wails build --platform darwin/universal # macOS universal
wails build --platform darwin/arm64 # macOS Apple Silicon
wails build --platform darwin # macOS Intel
wails build --platform linux/amd64 # Linux x64
Helper scripts are included under scripts/ for the common cases
(e.g. scripts/build-windows.sh, scripts/build-macos.sh).
Usage
- Connect — on first launch, paste a Cloudflare API token. The token is verified against the API and then stored in the OS keychain.
- Select a domain — the sidebar lists every zone the token can read.
- Manage records — search, filter, create, edit, and delete DNS records from the table. Locked (Cloudflare-managed) records show a lock icon and cannot be edited or deleted.
- Disconnect — the sidebar removes the stored token and resets the app.
Creating an API Token
In the Cloudflare dashboard, go to My Profile → API Tokens → Create Token and grant at least:
- Zone → DNS → Edit (read + write)
A token with Zone → DNS → Read is enough to browse records but not to modify them.
Project Structure
cloudflare-manager/
├── main.go # Wails entry point (window options, assets)
├── app.go # Bound methods exposed to the frontend
├── wails.json # Wails project configuration
├── internal/
│ ├── cfservice/ # Cloudflare API wrapper + DTOs
│ │ ├── service.go # zones / DNS CRUD, validation, error mapping
│ │ └── types.go # Zone, DNSRecord, RecordInput DTOs
│ └── securestore/ # OS keyring token storage (go-keyring)
├── frontend/
│ ├── nuxt.config.ts # Tailwind plugin, SSR off, static export
│ ├── app/
│ │ ├── app.vue # Root layout + modal orchestration
│ │ ├── components/ # Sidebar, table, forms, modal, toasts
│ │ ├── composables/ # useCloudflare, useToast
│ │ ├── utils/dns.ts # type badges, TTL/status formatting
│ │ ├── assets/css/ # Tailwind v4 theme
│ │ └── wailsjs/ # Generated bindings (do not edit)
│ └── package.json
├── scripts/ # Build helper scripts
└── build/ # Wails build assets & output
See docs/ for the architecture and
development guide.
License
Private / internal project. No license granted unless stated otherwise.