UnifiOptimizer is a local-first network administration tool. It runs on your own
machine (a Mac mini, a Pi, or a small server), talks to a UniFi controller on
your own network, and writes everything it collects to a local SQLite file
(data/netadmin.db). It has no cloud backend, no telemetry, and no phone-home.
Nothing leaves your network unless you configure an optional integration
(Home Assistant MQTT) or hand an issue dossier to an external LLM yourself.
- Controller credentials (API key, or username/password) and the JWT signing
secret live only in
data/secrets.env(chmod 600), or in the macOS Keychain where available. This file is gitignored and must never be committed. - No credential is ever written to
data/netadmin.db, to any tracked config file, or to a generated report. - The web UI never stores controller credentials in browser storage. The
browser holds only a short-lived JWT (7-day expiry,
SameSitecookie). - Controller access in the current build is read-only: GETs plus a small set of documented read-query POSTs. The fix/apply engine, when enabled, never acts on its own — every change requires an explicit action in the UI or CLI and captures a full before-state for one-click revert.
- Bind the daemon to
127.0.0.1(the default). Do not expose port 8765 to an untrusted network without putting it behind your own authenticated proxy. - CORS is pinned to configured origins; a wildcard is never allowed.
- Use a dedicated, revocable controller API key rather than an admin password where your controller supports it.
- Rotate the controller credential if it may have been reused or exposed.
If you find a security issue, please report it privately rather than opening a public issue.
- Contact: please report privately through this repository's Security tab → Report a vulnerability (GitHub private security advisories). Do not open a public issue for a suspected vulnerability.
- Please include: affected version/commit, reproduction steps, and impact.
- This is a personal open-source project with no formal SLA. Expect a best-effort acknowledgement; fixes ship on a best-effort basis.
Please do not include real credentials, controller hostnames, or packet captures in a report. Sanitize before sending.