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.

GoACS dashboard showing fleet-wide device, inform, and fault counts
5 years
in production
44,000+
devices managed
ZTE · Kaon · Gaoke
verified CPE vendors
TR-069 Amd 5
protocol compliance

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.

GoACS admin panel — dashboardGoACS admin panel — device list

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.

GoACS admin panel — device detail

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.

GoACS admin panel — provisioning rulesGoACS admin panel — task queue
screenshot pending: live-logs

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 5

Deploy 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.go

GoACS © 2026 — open source, no attribution required to run it.