Change log

Version 1.0.1 [2022-05-11]

  • Fixed modem-manager configuration for OpenWrt 21
  • Fixed WiFi interface configuration for OpenWrt 21

Version 1.0.0 [2022-04-20]


  • Added support for the new DSA bridge syntax to the OpenWrt backend
  • Added support for Wireguard and Wireguard/VXLAN
  • Added support for Wireguard interfaces in OpenWrt backend
  • Added support for VXLAN interfaces in OpenWrt backend
  • Added auth_nocache proprety to the OpenVpn backend
  • Added support for OpenVPN tls-auth option, the OpenVPN backend will automatically create a file for the key present in “tls_auth” field and update the value of the “tls-auth” parameter
  • Added proto to remote setting of the OpenVpn backend
  • Added support for IEEE 802.11w configurations to the OpenWrt backend
  • Added support for Wifi6 / IEEE 802.11ax to the OpenWrt backend
  • Added support for basic IEEE 802.11r options to the OpenWrt backend
  • Added support for WPA3 to the OpenWrt backend
  • Added support for EAP-PEAP as auth method in WPA2 enterprise wifi client configuration of OpenWrt backend
  • Removed option of 2.4GHz radio for 802.11ac from the OpenWrt backend


Backward incompatible changes

  • By default, the OpenWrt backend now generates bridge syntax in the new DSA compatible format, to override this, dsa=False must be passed during the initialization of the backend


  • Dropped support for Python 3.6
  • Added support for Python 3.8 and 3.9
  • Upgraded Jinja to 3.0
  • Upgraded jsonschema to 3.2.x
  • Upgraded to openwisp-utils 1.0.x and reformatted code with latest version of the black formatter

Other changes

  • Simplified bridging of wifi interfaces in the OpenWrt backend: users can now simply add a wifi interface to a bridge and forget about having to update also the attached networks of the OpenWrt configuration


  • Ensured values are always deep copied when using merge_config, without this change the different schemas remain interwined and a dynamic change to one part which is reused by other schemas will affect different backends inadvertently
  • The file path is not allowed to be an empty string anymore
  • Ignored duplicate list elements when merging templates: detect identical elements present in both lists to avoid adding the duplicate to the result; this is needed because some templates may share one or multiple common files and these do not not have to be duplicated
  • Fixed typo in EAP TTLS protocol enum_title of OpenWrt backend: it was showing EAP-PEAP even though TTLS was set
  • Fixed madwifi driver for legacy systems
  • Fixed comp-lzo option for legacy OpenVPN in OpenWisp1 backend
  • Fixed UCI format backward compatibility with OpenWISP 1 This fix is needed to allow workarounds in the code of OpenWISP-Firmware to keep working also with OpenWISP 2

Version 0.9.1 [2021-02-15]

  • [fix] Removed mtu_disc from auto_client method because it causes issues on most OpenWRT systems
  • [fix] Avoided maxLength on PIN property to allow configuration variables
  • [change] Add missing TLS ciphers to OpenVPN

Version 0.9.0 [2020-11-18]

  • [change] Potentially backward incompatible: added support for dialup interfaces (ppp, pppoe, pppoa, 3g, qmi, ncm, wwan, pptp, 6in4, aiccu or l2tp) to openwrt backend. This change is backward incompatible if the same type of configuration was achieved using a workaround, in these cases the configuration will have to be upgraded to use the new format.
  • [feature] Added support for modem manager interfaces

Version 0.8.2 [2020-08-17]

  • [fix] Fixed bug in OpenWRT backend validation for ip_rules/src

Version 0.8.1 [2020-05-28]

  • Fixed bug that prevented overriding the contents of a file present in a template and caused the file to be duplicated instead of overwritten
  • Fixed bug affecting backward conversion of switch VLAN on OpenWRT

Version 0.8.0 [2020-04-03]

  • Changed default file mode for certificate files generated with from 0644 to 0600

Version 0.7.0 [2020-01-14]

  • Dropped support for python 2.7
  • Updated github buttons in documentation which were causing an unintended redirect
  • Updated the jsonschema library to version 3.x

Version 0.6.4 [2019-12-09]

  • #113: [bugfix] Made “encryption none” explicit in OpenWRT
  • 5ddc201: [bugfix] Fixed invalid UCI name bug in default OpenWRT renderer
  • #118: [bugfix] Fixed TypeError: can only concatenate list (not "str") to list
  • #137: [tests] Migrated tests to nose2

Version 0.6.3 [2018-07-09]

  • #106 [extensions] Query backends from installed packages (thanks to @EdoPut)
  • #109 [doc] Added reference to plugin interface (thanks to @EdoPut)
  • #99 [cli] print traceback fully if the verbose flag is passed (thanks to @EdoPut)
  • #108 [openvpn] Added more options to the OpenVPN backend (thanks to @okraits)

Version 0.6.2 [2017-08-29]

  • #78 [base] Added support for multiple renderers
  • #94 [schema] Made bssid not required for wireless stations
  • #97 [python2] Fixed py2-ipaddress related unicode bug

Version 0.6.1 [2017-07-05]

  • 5ddc201: [general] Avoid default mutable arguments
  • dde3c9b: [openvpn] Added explicit list_identifiers attribute
  • 8c26cd6: [docs] Updated outdated OpenWRT rendering examples
  • 5f8483e: [openwrt] Fixed repeated bridge gateway case
  • #84 [exceptions] Improved validation errors (thanks to @EdoPut)
  • #85 [openwrt] Added “vid” option in “switch”
  • #86 [openwrt] Added support for “ip6gw” option
  • #70 [feature] Backward conversion
  • #87 [openwrt] Removed automatic timezone

Version 0.6.0 [2017-06-01]

  • #70 [general] Preliminary work for backward conversion, more info in the OpenWISP Mailing List
  • #58: [openwrt] Dropped obsolete code in OpenVpn converter
  • #59: [openwrt] Improved multiple ip address output

Version 0.5.6 [2017-05-24]

  • #69: [docs] Improved contributing guidelines (thanks to @EdoPut)
  • #71: [bin] Added validate to available methods of command line tool (thanks to @EdoPut)
  • 845ed83: [version] Improved get_version to follow PEP440
  • #73: [netjson] Fixed compatibility with NetJSON specification

Version 0.5.5.post1 [2017-04-18]

  • d481781: [docs] Added OpenWRT PPPoE example
  • beb435b: [docs] Fixed Basic Concepts summary

Version 0.5.5 [2017-03-15]

  • #65: [openwrt] Added missing zonename attribute

Version 0.5.4.post1 [2017-03-07]

  • 4aaecae: [docs] Added documentation regarding template overrides

Version 0.5.4 [2017-02-14]

Version 0.5.3 [2017-01-17]

  • #56: [general] Implemented smarter merge mechanism
  • #57: [openwrt] Fixed interface enabled bug
  • 7a152a3: [openwrt] Renamed enabled to disabled in OpenVPN section (for consistency)

Version 0.5.2 [2016-12-29]

  • #55: [vars] Fixed broken evaluation of multiple variables

Version 0.5.1 [2016-09-22]

  • b486c4d: [openvpn] corrected wrong client mode, renamed to p2p
  • c7e51c6: [openvpn] added pull option for clients
  • dde3128: [openvpn] differentiate server between manual, routed and bridged

Version 0.5.0 [2016-09-19]

  • added OpenVpn backend
  • afbc3a3: [openwisp] fixed openvpn integration (partially backward incompatible)
  • 1234c34: [context] improved flexibility of configuration variables
  • #54: [openwrt] fixed netmask issue on ipv4

Version 0.4.5 [2016-09-05]

  • #53: [docs] avoid ambiguity on dashes in context
  • #52: [schema] added countries list as enum for radios (thanks to @zachantre)

Version 0.4.4 [2016-06-27]

  • #50: [openwrt] add logical name to all generated configuration items

Version 0.4.3 [2016-04-23]

  • c588e5d: [openwrt] avoid adding dns and dns_search if proto is none

Version 0.4.2 [2016-04-11]

  • 92f9a43: [schema] added human readable values for mode access_point and 802.11s
  • #47: [openwrt] improved encryption support
  • 1a4c493: [openwrt] igmp_snooping now correctlt defaults to True
  • #49: [schema] added descriptions and titles

Version 0.4.1 [2016-04-04]

  • b903c6f: [schema] corrected wrong ipv4 minLength and maxLength
  • de98ae6: [schema] fixed interface minLength attribute
  • 4679282: [schema] added regexp pattern for interface mac address (can be empty)
  • 067b471: [schema] switched order between MTU and MAC address properties
  • 26b62dd: [schema] added pattern for wireless BSSID attribute
  • 11da509: [openwrt] added regexp pattern to maclist elements
  • b061ee4: [openwrt] fixed empty output bug if addresses is empty list
  • 7f74209: [openwrt] removed support for chanbw for types ath5k and ath9k (backward incompatible change)
  • #46: [schema] introduced different profiles for radio settings
  • 6ab9d5b [openwrt] added support for “Automatic Channel Selection”
  • #48: [openwrt] improved support for config lists
  • 9f93776: [openwrt] simplified definition of custom interface “proto” options
  • a5f63f0: [openwrt] allow to override general dns and dns_search settings
  • 1b58f97: [schema] added stp (spanning tree protocol) property on bridge interfaces
  • bfbf23d: [openwrt] added igmp_snooping property on bridge interfaces
  • 269c7bf: [openwrt] added isolate property on wireless access points
  • 2cbc242: [openwrt] fixed autostart when False
  • 85bd7dc: [openwrt] fixed mac address override on interfaces
  • 45159e8: [openwrt] allow overriding htmode option
  • b218f7d: [schema] added enum_titles in encryption protocols
  • ef8c296: [schema] validate general hostname format
  • 2f23cfd: [schema] validate interface ipv4 address format
  • 612959e: [openwrt] validate ntp server hostname format
  • f1116f0: [schema] validate dns_search hostname format #42
  • 372d634 [openwrt] do not set dns to dhcp interfaces

Version 0.4.0 [2016-03-22]

  • #40: [openwrt] added support for ULA prefix
  • #44: [schema] added none to encryption choices
  • #45: [schema] improved address definition
  • #43: [openwrt] improved static routes
  • #41: [schema] added wds property & removed wds mode
  • #36: [schema] added specific settings for 802.11s (mesh) mode
  • 3f6d2c6: [schema] removed NetJSON type from schema
  • 04c6058: [openwrt] made file mode property required (backward incompatible change)
  • 00e784e: [openwrt] added default switch settings
  • dd708cb: [openwrt] added NTP default settings
  • f4148e4: [schema] removed txqueuelen from interface definition
  • 574a48d: [schema] added title and type to bridge_members
  • c6276f2: [schema] MTU title and minimum value
  • d8ab0e0: [schema] added minLength to interface name
  • 67a0916: [schema] added minLength to radio name
  • 258892e: [schema] added possible ciphers
  • 2751fe3: [schema] improved definition of wireless interface fields
  • 478ef16: [openwrt] added wmm property for wireless access points
  • b9a14f3: [schema] added minLength and maxLength to interface mac property
  • 526c2d1: [schema] added minLength and maxLength to wireless bssid property
  • c8c95d6: [schema] improved ordering and titles of wireless properties
  • a226e90: [openwrt] ignore advanced wifi options if zero
  • e008ef6: [openwrt] added macfilter to wireless access points
  • c70ab76: [openwrt] fixed empty dns and dns-search bug
  • 778615a: [openwrt] increased network maxLength

Version 0.3.7 [2016-02-19]

  • 007da6e: renamed “Coordinated Universal Time” to “UTC”
  • 2c1e72e: fixed ‘tx_power’ KeyError, introduced in 71b083e
  • aa8b485: added utils.evaluate_vars function
  • 7323491: simplified implementation of configuration variables

Version 0.3.6 [2016-02-17]

Version 0.3.5 [2016-02-10]

  • 18ecf28: removed hardware and operating_system sections
  • 75c259d: reordered schema sections
  • 010ca98: file contents can now be only strings (backward incompatible change)
  • e2bb3b2: added non-standard propertyOrder attributes to schemas to facilitate UI ordering
  • #37: [schema] radio tx_power not required anymore
  • #38: [openwrt schema] hardened file mode contraints
  • c2cc3fc: [schema] added minlength and maxlength to hostname

Version 0.3.4 [2016-01-14]

  • #35 wifi inherits disabled from interface

Version 0.3.3 [2015-12-18]

  • 219f638 [cli] fixed binary standard output for generate method
  • a0b1373 removed timestamp from generated configuration archive to ensure reliable checksums

Version 0.3.2 [2015-12-11]

  • #31 added files in render output
  • #32 generate now returns an in-memory file object
  • badf292 updated command line utility script and examples
  • #33 added write method
  • 5ff7360 [cli] positional config param is now --config or -c
  • 28de4a5 [cli] marked required arguments: --config, --backend and --method
  • f55cc4a [cli] added --arg option to pass arguments to methods

Version 0.3.1 [2015-12-02]

  • 69197ed added “details” attribute to ValidationError
  • 0005186 avoid modifying original config argument

Version 0.3 [2015-11-30]

  • #18 added OpenWisp backend
  • 66ee96 added file permission feature
  • #19 added sphinx documentation (published at
  • 30348e hardened ntp server option schema for OpenWrt backend
  • c31375 added madwifi to the allowed drivers in schema OpenWrt backend
  • #30 updated schema according to latest NetJSON spec

Version 0.2 [2015-11-23]

  • #20 added support for array of lines in files
  • #21 date is now correctly set in tar.gz files
  • 82cc5e configuration archive is now compatible with sysupgrade -r
  • #22 improved and simplified bridging
  • #23 do not ignore interfaces with no addresses
  • #24 restricted schema for interface names
  • #25 added support for logical interface names
  • #26 merge_dict now returns a copy of all the elements
  • d22d59 restricted SSID to 32 characters
  • #27 improved wireless definition
  • #28 removed “enabled” in favour of “disabled”

Version 0.1 [2015-10-20]

  • Added OpenWrt Backend
  • Added command line utility netjsonconfig
  • Added multiple templating feature
  • Added file inclusion feature