TR-069 provisioning that actually scales.
GoACS is an open-source Auto Configuration Server managing 44,000+ CPE devices in production. Rewritten from the ground up in Go.

Everything an ISP actually needs on day one.
Full CWMP session handling
Inform, GetParameterValues/Names, SetParameterValues, AddObject/DeleteObject, Reboot, FactoryReset, Download, TransferComplete, and fault handling — the whole session lifecycle.
Per-device and global task queue
Queue reboots, factory resets, firmware uploads, object add/delete, or Lua scripts against one device — or push a task across the whole fleet at once.
Provisioning rules engine
Match on CWMP events, request types, or parameter conditions, and auto-run a Lua script on the device the moment it connects. No manual per-device work.
Priority-ordered parameter templates
Assign templates to devices with priority, so the right configuration always wins when more than one template applies.
Live device logs
Watch a session happen in real time over Socket.IO, or pull paginated log and fault history for anything that already ran.
JWT REST API + Vue 3 panel
Every action in the admin panel is a documented REST call — build your own tooling on the same API the UI uses.
The panel your NOC will actually enjoy.
Your whole fleet, one view
The dashboard and device list surface every CPE — status, identity, and what it last reported — the moment it checks in.


Drill into any parameter, on demand
Open a device to see its full parameter tree, request live values with a Connection Request, or force re-provisioning without waiting for the next Inform.

Automate provisioning, then watch it happen
Write a provisioning rule once, queue a task once, and watch it execute across devices in the live log stream.


Why we threw away the PHP.
GoACS started as a Laravel + Vue 2 application. It worked — until concurrent CWMP sessions became the bottleneck. Go handles thousands of simultaneous device sessions per instance without the thread-per-request ceiling PHP hits.
The rewrite kept the parts worth keeping — a Vue 3 + PrimeVue admin panel, a provisioning rules engine, parameter templates — and replaced everything underneath: a new REST API, a single static binary, goroutine-per-session concurrency.
The Go REST API is not wire-compatible with the PHP version — this is a new product, not an upgrade.
Targets TR-069 Amendment 5, TR-106 Amendment 6, and TR-181 Issue 2 Amendment 2.
Test it without a single CPE on your desk.
goacs-clientis a companion CLI that simulates CPE devices talking CWMP — Inform, GetParameterValues/SetParameterValues, Connection Requests — against a running GoACS instance.
Point it at your ACS to verify provisioning rules, parameter templates, and the whole session lifecycle end-to-end before rolling out to real hardware, or just use it as a quick health-check against a deployment that's already live.
go run . --acs http://localhost:7547 --devices 5Deploy your own ACS.
Point your first CPE at GoACS in ten minutes.
docker compose up -d goacs-db && go run main.go migrate && go run main.goGoACS © 2026 — open source, no attribution required to run it.