# Goflare Dynamic DNS updater for Cloudflare. Keeps your DNS records pointing at your current public IP, even when it changes. ## How It Works Goflare runs a configurable cron job that periodically fetches your public IP from multiple providers (with fallback) and compares it against the DNS records you've configured. When a change is detected, it updates the records via the Cloudflare REST API. You manage your Cloudflare zones and DNS records through a web UI. Records can be marked as **static** to exclude them from automatic updates. The cron schedule and the list of IP lookup providers (with fallback) are configurable at runtime in **Settings**. ### Stack - **Backend:** Go, SQLite (WAL mode), session-based auth, raw Cloudflare API calls (no SDK). - **Frontend:** Vue 3 SPA with Tailwind CSS and shadcn-vue components. - **Single binary** that serves both the API and the frontend. On first run, open the app in your browser and create your account (setup page); after that you log in as usual. ## Docker ### Build ```bash docker build -t goflare . ``` ### Run ```bash docker run -p 8080:8080 -v ./data:/app/data -e GOFLARE_SESSION_SECRET=changeme goflare ``` Mount `/app/data` to persist the SQLite database across container restarts. ### Environment Variables | Variable | Default | Description | |---|---|---| | `GOFLARE_PORT` | `:8080` | Server listen address | | `GOFLARE_DB_PATH` | `/app/data/goflare.db` | SQLite database path | | `GOFLARE_SESSION_SECRET` | (random) | Set for sessions to survive restarts | | `GOFLARE_FRONTEND_DIR` | `/app/frontend` | Path to built frontend assets | ### Docker Compose ```yaml services: goflare: build: . ports: - "8080:8080" volumes: - ./data:/app/data environment: - GOFLARE_SESSION_SECRET=changeme ``` ## Local development - `just run` — build (sqlc + frontend + go) and run the server (serves API and frontend from `bin/goflare`). - `just frontend-dev` — run the Vite dev server with API proxy to the Go backend (run the backend separately, e.g. `go run ./cmd/goflare`). - `just gen` — regenerate sqlc only (after changing `sql/schema/` or `sql/queries/`). - `just clean` — remove `bin/` and `frontend/dist/`.