The format is based on Keep a Changelog.
- fix: file stores draw permission ids from one sequence, and renumber repeated ids at startup
- fix: file store user, group and permission reads hide revoked permissions, and a regrant gets a new id
- fix: reject create conflicts and duplicate permission targets
- fix(sql): seed ns export types coredns & native for 2.x upgrade
- fix: server stop waits for the stores to disconnect
- fix: GET /zone/{id}/ns reads nameservers through the zone store
- fix(mysql): read v2 group permission rows, and save partial permission changes
- fix: file store login checks the group in user@group
- fix: zone record PUT keeps the rdata it is not given, and a type change drops the old rdata
- create: allocate ids internally and reject caller-supplied ids
- zone:
nameserversholds the zone's nameserver ids on every store, and POST /zone defaults it to the group's usable nameservers - fix: one live zone per name, ignoring case and a trailing dot
- fix(sql): lowercase existing zone names, and the zone in record names
- fix: one random, self describing session row per login, expired ones swept at login, and mysql throttles the activity touch
- fix: a token is valid only while its session row exists, so logout revokes it, and any authenticated request counts as activity
- fix: destroying a group, user or zone on json or toml takes its nameservers, sessions or records with it, as mysql does
- fix: moving a user moves their permission rows to the new group
3.0.3 - 2026-07-27
- many updates for data stores and NS backends
- feat(mysql): new NS columns: engine, listen, publisher, transport, dnssec
- change: */store/toml -> */store/file
- change(sql/*.sql): made setup non-destructive
- feat: self describing password hashes (#56)
3.0.2 - 2026-07-25
- dep(rr): bump version
- fix: generate conf.d/http.toml on 1st start
- fix(sql): quote mysql 8 keyword rank
- fix: subgroup searching
- feat: paginate zone records (#53)
- toml backend (#49)
- add: TOML stores for group, nameserver, permission, session (#47)
- move mysql teardown/disconnect into mysql classes
- fix: don't log sensitive information
- routes file reorg (#46)
- factories for groups (#44)
- ci: remove local codeql config (#43)
- ci: update permissions to be explicit (#42)
- docker compose support + env var config overrides (#40)
- decorate user & group with permissions
- add some missing PUT routes
- better error handling validation errors
- constraining views by GID
- zone record factory & subclasses
- zone factory & subclasses
- user factory, toml, mysql, mongodb, elastic classes
- config: replace .yaml with .toml
- zone_record can be empty, default 0
- feat(zone records): create and delete
- feat(zone): use DataTable for list, added search/limit options
- routes/zr: add extra data about ZR parse failures
- lib/zone: add limit option
- lib/nameserver.js: handle null fields from DB
- routes/zone: report zone name on validation failure
- dep(eslint): upgraded to v9
- dep(*): bump versions to latest
- feat(conf.d/http): added tls
- feat(session): added JWT for session auth
- feat(zone): removed location
- feat(routes/zone_record): added, fixes #17
- change(routes/users): result is always array
- change(routes/ns): GET id is optional, result is always array
- change(routes/zone): GET id is optional, result is always array
- feat(lib/zone): added, with tests, fixes #22
- feat(lib/zone_record): added, with tests, fixes #23
- feat: default GET sets deleted=false
- group, nameserver, permission, user, zone
- sql: return indicative boolean for delete
- test(zr): added maps from NT SQL 2 to dns-rr std formats
- feat(lib/nameserver): added, with tests
- feat(routes/nameserver): added, with tests
- routes/permission: added GET, POST, DELETE
- permission.get: default search with deleted=0
- session.put: added
- session: store user/group info in cookie (saves DB trips)
- mysql(insert, select, update, delete): return just the query
- lib/group.get: convert booleans
- lib/user.get: convert booleans