Motivations and Goals

In this page we explain the goals of this project and the motivations that led us on this path.


Federico Capoano (@nemesisdesign) has written in detail the motivations that brought us here in a blog post: netjsonconfig: convert NetJSON to OpenWRT UCI.


The main goal of this library is to replace the configuration generation feature that is shipped in OpenWISP Manager.

We have learned a lot from OpenWISP Manager, one of the most important lessons we learned is that the configuration generation feature must be a library decoupled from web framework specific code (eg Rails, Django), this brings many advantages:

  • the project can evolve indipendently from the rest of the OpenWISP modules
  • easier to use and integrate in other projects
  • more people can use it and contribute
  • easier maintainance
  • easier to document

Another important goal is to build a tool which is flexible and powerful. We do not want to limit our system to OpenWISP Firmware only, we want to be able to control vanilla OpenWRT devices or other OpenWRT based devices too.

We did this by starting out with the OpenWrt backend first, only afterwards we built the OpenWisp backend on top of it.

To summarize, our goals are:

  • build a reusable library to generate router configurations from NetJSON objects
  • support the widely used router specific unix/linux distributions
  • provide good and extensive documentation
  • keep it simple stupid
  • avoid complexity unless extremely necessary
  • provide ways to add custom configuration options easily
  • provide ways to extend the library
  • encourage contributions