Zaid Humaimidi 6f3ce6f7c8 refactor: replace array-based expressions with typed class hierarchy
Replace the old Lisp-like array expression representation
(["AND", ["PARAM", ...], ...]) with a class hierarchy rooted in
an abstract Expression class (Literal, Parameter, Binary, Unary,
FunctionCall, Conditional). This gives compile-time type safety
to expression construction, evaluation, and pattern matching.

Key changes:
- New lib/common/expression.ts defines the class hierarchy with
  map/evaluate/toString methods
- Rewrite parser as hand-rolled recursive descent, removing the
  parsimmon dependency
- Extend Path with a colon separator to unify parameter identity
  and attributes into a single address space (e.g.
  "Device.WiFi.SSID.1.Name:writable"). The colon field tracks
  how many trailing segments are attribute qualifiers. PathSet
  rewritten with separate param/attr segment indexes
- Flatten device attribute representation in the UI to
  colon-delimited keys mirroring the new path syntax
2026-03-12 14:58:20 -07:00
2024-03-21 13:06:33 -07:00
2026-03-12 14:25:25 -07:00
2014-02-10 03:51:59 +03:00
2026-03-12 14:28:07 -07:00

GenieACS

This is the development branch for GenieACS v1.3. It is unstable and not ready for production use. For the latest stable release, see the v1.2 branch.

GenieACS is a high performance Auto Configuration Server (ACS) for remote management of TR-069 enabled devices. It utilizes a declarative and fault tolerant configuration engine for automating complex provisioning scenarios at scale. It's battle-tested to handle hundreds of thousands and potentially millions of concurrent devices.

Quick Start

Install Node.js and MongoDB. Refer to their corresponding documentation for installation instructions. The supported versions are:

  • Node.js: 12.3+
  • MongoDB: 3.6+

Install GenieACS from NPM:

sudo npm install -g genieacs

To build from source instead, clone this repo or download the source archive then cd into the source directory then run:

npm install
npm run build

Finally, run the following services (found under ./dist/bin/ if building from source):

genieacs-cwmp

This is the service that the CPEs will communicate with. It listens on port 7547 by default. Configure the ACS URL in your devices accordingly.

You may optionally use genieacs-sim as a dummy TR-069 simulator if you don't have a CPE at hand.

genieacs-nbi

This is the northbound interface module. It exposes a REST API on port 7557 by default. This one is only required if you have an external system integrating with GenieACS using this API.

genieacs-fs

This is the file server from which the CPEs will download firmware images and such. It listens on port 7567 by default.

genieacs-ui

This serves the web based user interface. It listens on port 3000 by default. You must pass --ui-jwt-secret argument to supply the secret key used for signing browser cookies:

genieacs-ui --ui-jwt-secret secret

The UI has plenty of configuration options. When you open GenieACS's UI in a browser you'll be greeted with a database initialization wizard to help you populate some initial configuration.

Visit docs.genieacs.com for more documentation and a complete installation guide for production deployments.

Support

The forum is a good place to get guidance and help from the community. Head on over and join the conversation!

For commercial support options, please visit genieacs.com.

License

Copyright 2013-2026 GenieACS Inc. GenieACS is released under the AGPLv3 license terms.

S
Description
A fast and lightweight TR-069 Auto Configuration Server (ACS)
Readme AGPL-3.0
5.1 MiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 97.5%
CSS 1.7%
JavaScript 0.5%
Dockerfile 0.2%