No description
  • Vue 43.4%
  • Go 16.1%
  • CSS 11.9%
  • TypeScript 11.6%
  • NSIS 10%
  • Other 7%
Find a file
2026-08-29 22:32:12 +07:00
.claude Initialize Commit 2026-08-02 01:28:28 +07:00
build Refactor code structure for improved readability and maintainability 2026-08-29 22:32:12 +07:00
docs Initialize Commit 2026-08-02 01:28:28 +07:00
frontend Refactor code structure for improved readability and maintainability 2026-08-29 22:32:12 +07:00
internal Refactor code structure for improved readability and maintainability 2026-08-29 22:32:12 +07:00
scripts Initialize Commit 2026-08-02 01:28:28 +07:00
.gitignore Initialize Commit 2026-08-02 01:28:28 +07:00
app.go Refactor code structure for improved readability and maintainability 2026-08-29 22:32:12 +07:00
go.mod Initialize Commit 2026-08-02 01:28:28 +07:00
go.sum Initialize Commit 2026-08-02 01:28:28 +07:00
main.go Initialize Commit 2026-08-02 01:28:28 +07:00
README.md Initialize Commit 2026-08-02 01:28:28 +07:00
wails.json Initialize Commit 2026-08-02 01:28:28 +07:00

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, PTR and HTTPS records, 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 meta flags, 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

  1. Connect — on first launch, paste a Cloudflare API token. The token is verified against the API and then stored in the OS keychain.
  2. Select a domain — the sidebar lists every zone the token can read.
  3. 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.
  4. 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.