dnsimple/dns_erlang
67.6
Adequate · 2 October 2026
11.4k
lines of production code
Erlang
primary language
2
measurements over time
What this system is
This system is an Erlang library for parsing and manipulating DNS messages and resource records. It provides core functionality for encoding and decoding DNS data, including support for EDNS COOKIE and Extended DNS Errors, and introduces JSON serialization capabilities for easy integration with other systems. The project has recently modernized its tooling, migrated its test suite to Common Test, and automated documentation generation to ensure code and RFC references remain synchronized.
Features
Automated generation of JSON documentation and RFC support lists
Added two new Erlang scripts, \generate\_json\_docs.escript\ and \generate\_rfc\_list.escript\, to automate the creation of static documentation. The JSON docs script parses record definitions and encoding rules to produce a \JSON\_FORMAT.md\ file, while the RFC list script scans source files for RFC references to generate a \RFC\_LIST.md\ file, ensuring documentation stays synchronized with the codebase.
scripts · high confidence
Introduce JSON encoding/decoding for DNS records
Users can now convert DNS messages and resource records to and from JSON maps using the new \dns\_json\ module. This adds \to\_map/1\ and \from\_map/1\ functions that handle standard record types (A, AAAA, MX, SVCB, etc.) as well as message structures, with a corresponding \JSON\_FORMAT.md\ documentation file describing the field mappings and encoding rules (e.g., IP addresses as strings, base64 for binary data).
src · high confidence
Removals
Removed priv/overview.edoc and priv/wire\_samples.txt
The project has removed the \priv/overview.edoc\ documentation source and the \priv/wire\_samples.txt\ test data file. These files are no longer included in the distribution, which may affect local documentation generation and the availability of pre-recorded DNS wire samples for testing.
priv · high confidence
Behavioural changes
DNS record type definitions and test suite refactored
The library has removed the \dns\_tests.hrl\ header, eliminating the embedded EUnit test cases that were previously included via this file. Additionally, the internal record definitions in \dns\_records.hrl\ and \dns\_terms.hrl\ have been updated to use numeric constants for DNS classes and types instead of atom representations, and the include paths for internal headers have been adjusted to use relative paths.
include · high confidence
Project tooling and documentation overhaul
The repository has been restructured to improve developer experience and CI reliability. The build system now mandates Erlang/OTP 27 and uses rebar3 exclusively, replacing the legacy rebar2 setup. Code formatting is enforced via erlfmt, and linting is handled by rebar3\_lint and markdownlint. Documentation generation is automated, with static JSON format docs and an auto-generated RFC support list. New configuration files (.markdownlint.yaml, .yamllint, AGENTS.md, CLAUDE.md) and updated documentation (README.md, CONTRIBUTING.md, CHANGELOG.md) standardize project guidelines and AI agent interactions.
(repo-wide) · high confidence
Test coverage
Migrate test suite to Common Test and add comprehensive coverage
The project has migrated its test infrastructure from eunit to the Erlang/OTP Common Test (ct) framework, introducing a suite of new test modules including dns\_SUITE, dns\_cookie\_SUITE, dns\_domain\_SUITE, dns\_ede\_SUITE, dns\_json\_SUITE, and dns\_names\_SUITE. These tests provide extensive coverage for DNS message encoding/decoding, EDNS COOKIE handling (RFC 7873), Extended DNS Errors (RFC 8914), JSON transcoding, domain name operations, and various record types such as SVCB, DNSSEC, and LOC.
test · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 66 → 68 (+1.6)
- Rubric changed (rubric-2026.09.12 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 85 → 85 (+0.0)
- Architecture 94 → 80 (-14.1)
- Maturity 58 → 58 (+0.0)
- Readiness 76 → 68 (-8.0)
- Security 61 → 81 (+19.3)
- Event Sourcing 100 → 100 (+0.0)
Resolved (4)
- Coverage not measured — no coverage collector is wired up
- Documentation: no usage examples (README.md)
- Hotspot: src/dns_domain.erl (src/dns_domain.erl)
- Off-boarding risk: anonymized user #1
New (2)
- Off-boarding risk: anonymized user #1
- Projects may be oversized for their cohesion
Changes since last survey
- 2 commits — 2 feature/other, 0 fixes
By area
- (root) — 2 commits
Notable commits
- change: Carry the SVCB ech parameter as base64 in JSON
- change: Update plugins so hex publish loads a compatible hex_core
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
dnsimple/dns_erlang was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 2 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 6ac2bf7986af7240f06f1715c246038c166921c4 — the exact code this score is about.
- Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.