erlnets/nksip
54.6
Adequate · 23 September 2026
22.4k
lines of production code
Erlang
primary language
5
measurements over time
What this system is
NkSIP is a SIP application framework that manages call states, dialogs, and proxy routing through a modular plugin architecture. The system supports SIP extensions such as reliable provisional responses, event composition, and GRUU registration, while providing a configurable runtime environment for logging and database connectivity. It includes a test suite for validating authentication, core operations, and forking proxy behavior.
How it got here
2013 — NkSIP 0.6.0 release and build system migration
14 changes.
The project released NkSIP version 0.6.0, introducing a new internal data model and core modules for SIP call and dialog management. This release coincided with a migration to the Rebar3 build system and the removal of legacy components, including old header files, test suites, and sample applications.
2016–2019 — SIP stack and testing infrastructure
4 changes.
This period focused on establishing the core SIP communication capabilities and testing infrastructure. The team implemented new NkSIP plugins for reliable responses, event composition, debugging, and GRUU support, while also adding dummy modules and configuration files to support the runtime environment. Additionally, a comprehensive test suite was introduced to validate authentication, core SIP operations, and forking proxy behavior.
Features
Added dummy Erlang modules for SIP and service callbacks
Two new Erlang source files, srv\_id\_dummy.erl and srv\_id\_dummy\_old.erl, were added to the documentation source directory. These modules provide dummy implementations that delegate SIP-related callbacks (such as update, subscribe, and register) to nksip\_callbacks, and service-related callbacks to nkservice\_callbacks. The older module also includes additional registrar and tutorial server callback stubs.
_priv/doc\src · medium confidence
Initial documentation structure and release history for NkSIP
The documentation directory now contains the complete set of static documentation files for NkSIP, including a main README, a detailed changelog, an authors list, and a roadmap. The changelog explicitly lists the feature set for versions 0.1.0 through 0.5.0, covering the extraction of non-SIP functionality into separate projects (NkLIB, NkPACKET, NkSERVICE), the new plugin system, and various SIP protocol extensions. The roadmap outlines the completed v0.4 and v0.5 milestones, as well as future plans for v0.6 and beyond.
doc · high confidence
New NkSIP header and record definitions
The NkSIP library introduces new header files that define core data structures for the SIP stack. The \nksip.hrl\ file adds records for SIP messages (\sipmsg\), requests/replies, VIA headers, and INVITE states, alongside logging macros. New files \nksip\_call.hrl\, \nksip\_event\_compositor.hrl\, \nksip\_registrar.hrl\, \nksip\_uac\_auto\_outbound.hrl\, and \nksip\_uac\_auto\_register.hrl\ define records for call transactions, subscriptions, registration contacts, and automatic registration states. These changes provide the internal data models required for the SIP implementation.
include · medium confidence
New NkSIP plugins for 100rel, event compositor, debug, and GRUU support
Added new NkSIP plugins to the system: the 100rel plugin handles reliable provisional responses and PRACK messages; the event compositor plugin manages state for PUBLISH requests per RFC 3903; the debug plugin enables deep debugging of SIP messages and events; and the GRUU plugin supports global and temporary GRUUs for SIP registrations. Each plugin includes its core logic, callbacks, and plugin configuration files.
src/plugins · high confidence
NkSIP framework version 0.6.0 release
The NkSIP framework has been updated to version 0.6.0, as defined in the new \nksip.app.src\ file. This release introduces a comprehensive set of internal modules for managing SIP calls, dialogs, and events, including \nksip\_call\, \nksip\_call\_dialog\, \nksip\_call\_event\, \nksip\_call\_fork\, \nksip\_call\_lib\, \nksip\_call\_proxy\, and \nksip\_call\_srv\. These modules provide the core logic for handling SIP transactions, call states, and proxy routing, forming the foundation of the SIP application layer.
src · high confidence
Removals
Removal of NkSIP load test sample application
The NkSIP load test sample application and its associated library modules have been removed from the repository. This removes the \nksip\_loadtest\ Erlang modules and application source file, which previously provided a suite for benchmarking NkSIP performance using UDP, TCP, and TLS transports.
_samples/nksip\loadtest · high confidence
Removal of legacy NkSIP core modules and assets
The NkSIP library has removed a large set of core Erlang modules (including \nksip\, \nksip\_auth\, \nksip\_config\, \nksip\_counters\, \nksip\_dialog\, \nksip\_dialog\_fsm\, \nksip\_dialog\_lib\, \nksip\_dialog\_proxy\, and \nksip\_dialog\_uac\) along with the \nksip.app.src\ application file and embedded SSL certificates (\cert.pem\, \key.pem\). This indicates a significant architectural change or refactoring of the NkSIP framework, likely removing deprecated or legacy components in favor of a new implementation.
nksip/src · high confidence
Removal of nksip header file
The nksip.hrl header file, which defined common types, macros, and records (including transport, sipmsg, uri, and dialog structures), has been removed from the project.
nksip/include · high confidence
Removal of the NkSIP PBX sample application
The NkSIP PBX sample application and its associated callback module (nksip\_pbx\_sipapp.erl) have been removed from the repository. This change eliminates the example SIP proxy and registrar implementation that previously allowed endpoints to register and call each other using registered URIs, including features for monitoring endpoint speed and routing based on response times.
_samples/nksip\pbx · high confidence
Removed NkSIP overview documentation
The \nksip/doc/overview.edoc\ file has been deleted from the repository. This removal eliminates the primary introductory documentation for the NkSIP framework, which previously detailed core concepts such as SipApps, transactions, dialogs, and session handling.
nksip/doc · high confidence
Removed NkSIP sample application documentation
The documentation for the NkSIP load test and PBX sample applications has been removed from the repository, indicating these samples are no longer included in the main project.
_samples/nksip\_loadtest/doc, samples/nksip\pbx/doc · high confidence
Behavioural changes
Added shell configuration for NKS service, database, and logging
A new configuration file (config/shell.config) was introduced, defining settings for the NKS service (including HTTP URLs and external host), the NK domain (specifying CockroachDB as the database driver, PostgreSQL connection details, and API endpoints), and logging via Lager with specific file and console handlers. This change establishes the runtime environment setup for the application's shell mode.
config · high confidence
Migrated build system to Rebar3 and updated core dependencies
The project has migrated its build system from Rebar2 to Rebar3, updating the Makefile to use the 'rebar3' command and adding new build targets like 'tree' and 'upgrade'. The 'rebar.config' file was restructured to include a new 'samples/nksip\_tutorial' subdirectory. Additionally, external dependencies were updated: 'lager' and 'ranch' were replaced with 'nklib', 'nkpacket', and 'nkserver' from the NetComposer GitHub repositories, and a 'rebar.lock' file was added to pin dependency versions and hashes for reproducible builds.
(repo-wide) · high confidence
Removed load test configuration file
The app.config file for the nksip\_loadtest sample has been removed. This file previously contained configuration settings for the NkSIP application, the load test application itself, the Lager logging library, and SASL. Its removal indicates that the sample project no longer relies on this specific configuration setup.
_samples/nksip\loadtest/priv · medium confidence
Removed sample PBX configuration files
The sample PBX application configuration (app.config) and VM arguments (vm.args) have been removed from the samples/nksip\_pbx/priv directory. This eliminates the default logging setup for nksip, nksip\_pbx, and lager, as well as the Erlang node startup parameters previously defined for the sample project.
_samples/nksip\pbx/priv · high confidence
Updated application configuration and VM arguments for nksip
The application configuration (app.config) was added to define settings for nksip, lager, and SASL, including log file paths, console backends, and colorized output. The VM arguments (vm.args) were updated to include additional dependency paths (cowboy, cowlib, goldrush, gun, jsx, nkdocker, nklib, nkpacket, nkservice, luerl, wsock, plugins, and nksip ebin directories), rename the node to 'nksip\_shell', and increase the maximum number of processes.
priv · high confidence
Test coverage
Added test suite for authentication, core SIP operations, and forking proxy behavior; Removal of legacy NkSIP test suite.
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 49 → 55 (+5.2)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 94 → 85 (-8.8)
- Architecture 99 → 99 (+0.2)
- Maturity 41 → 39 (-2.1)
- Readiness 26 → 42 (+16.1)
- Security 95 → 95 (+0.0)
- Event Sourcing 100 → 100 (+0.0)
Resolved (6)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- No exposed public API
- Test reliability not included
- complexity unreadable for .erl, .hrl — churn × complexity hotspots could not be measured
- dormant codebase — no living knowledge left to concentrate
New (155)
- Coverage not measured — no coverage collector is wired up
- Dependency hygiene PARTLY measured — rebar3 pinning read, dependency currency not (no rebar.lock-pinned Hex declaration to grade)
- Documentation: no contributor guidance (README.md)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (10 lines × 2) (src/nksip_call_uac_dialog.erl)
- Duplicated block (10 lines × 2) (src/nksip_call_uac_transp.erl)
- Duplicated block (10 lines × 2) (src/nksip_headers.erl)
- Duplicated block (10 lines × 2) (src/plugins/nksip_registrar_plugin.erl)
- Duplicated block (10 lines × 3) (src/nksip_call_uac_dialog.erl)
- Duplicated block (11 lines × 2) (src/nksip_call_uac_dialog.erl)
- Duplicated block (11 lines × 2) (src/nksip_parse.erl)
- Duplicated block (11 lines × 2) (src/nksip_sdp.erl)
- Duplicated block (12 lines × 2) (src/nksip_call_uac_make.erl)
- Duplicated block (13 lines × 2) (src/nksip_call_uac_make.erl)
- Duplicated block (14 lines × 2) (src/nksip_call_uac_dialog.erl)
- Duplicated block (14 lines × 2) (src/nksip_call_uac_make.erl)
- Duplicated block (15–16 lines × 2) (src/nksip_call_dialog.erl)
- Duplicated block (16–18 lines × 2) (src/nksip_call_uac_dialog.erl)
- Duplicated block (17 lines × 2) (src/nksip_call_uac_dialog.erl)
- …and 135 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
erlnets/nksip 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 23 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 7fbcc66806635dc8ecc5d11c30322e4d1df36f0a — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-955b9cee9818.