revelrylabs/elixir-nodejs
58.1
Adequate · 18 September 2026
364
lines of production code
Elixir
with JavaScript
1
measurement over time
What this system is
This system is an Elixir library that provides a robust bridge for executing JavaScript modules from within an Erlang/Elixir application. It manages a local Node.js runtime via a supervised worker pool, allowing Elixir code to synchronously or asynchronously invoke Node.js functions, including support for ESM modules and large payloads. The library handles process lifecycle, error reporting, and terminal output isolation to ensure stable interaction between the two runtimes.
Features
Introduces NodeJS bridge with configurable workers, ESM support, and robust error handling
This change adds a new NodeJS bridge library (lib/nodejs) that allows calling Node.js modules from Elixir via a supervised pool of workers. Users can now start a NodeJS supervisor with a configurable path, pool size, and custom worker module. The bridge supports importing ESM modules (via .mjs detection or explicit option), handles binary responses, and includes a unique prefix to prevent terminal corruption and cross-contamination of responses between concurrent requests. It also introduces a NodeJS.Error exception for better error reporting and configurable timeouts for both individual calls and worker lifecycle.
lib/nodejs · high confidence
New Node.js bridge server for executing JavaScript modules
A new \priv/server.js\ file introduces a Node.js bridge that allows the application to dynamically import and execute JavaScript modules (both CommonJS and ESM) from the Erlang/Elixir side. This server listens for JSON-RPC-style commands via stdin, resolves modules respecting \NODE\_PATH\, handles both synchronous and asynchronous function results, and returns structured responses (including error details) via stdout with a specific prefix to avoid console log interference. It also supports chunked output to handle large payloads.
priv · high confidence
Behavioural changes
Migrate configuration syntax to Elixir 1.10+ import Config
The application configuration has been updated to use the modern \import Config\ syntax instead of the deprecated \use Mix.Config\. This change aligns the codebase with current Elixir standards, ensuring compatibility with newer versions of the language and its build tools.
config · high confidence
Replace external render service with local Node.js bridge
The library has replaced the previous \ServerSideRender\ plug—which forwarded HTML requests to an external rendering service via HTTP—with a new \NodeJS\ module that acts as a generic bridge to a local Node.js process. This change removes the dependency on an external service URL and instead manages the Node.js runtime directly within the application's supervision tree, allowing callers to invoke Node.js functions synchronously or asynchronously from Elixir code.
lib · high confidence
Stabilize Node.js integration with debug message handling and terminal fixes
The Node.js bridge now includes a \debug\_mode\ configuration option that properly handles stdout/stderr messages from the Node.js runtime, preventing "unexpected message" errors and crashes during process termination. Additionally, this release fixes terminal corruption issues that occurred when running inside an iEx session, ensuring stable interaction with the Node.js processes.
(repo-wide) · high confidence
Test coverage
Added JavaScript test fixtures for module loading and terminal output; Added comprehensive Node.js bridge tests and removed React server render tests.
Dependencies
Dependency overhaul and project rebranding to NodeJS
The project has been renamed from ServerSideRender to NodeJS (version 3.1.4) with a significant update to its dependency graph and build configuration. The \mix.exs\ file now targets Elixir \~\> 1.12 and replaces the previous HTTP and process management stack (plug, httpoison, porcelain, confex, retry) with Jason, Poolboy, and ssl\_verify\_fun, while adding ExDoc for documentation. The \mix.lock\ reflects these changes, updating core libraries such as Jason to 1.2.2, Poolboy to 1.5.2, and ExDoc to 0.33.0, alongside various transitive dependency bumps. Additionally, a \priv/package.json\ file was added to explicitly define the Node.js package type as CommonJS, and the package metadata was updated to include maintainers, licenses, and source links.
(dependencies) · 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
Baseline
- First survey — no prior run to compare against. CAI 58.
Lenses
- Code Health 71
- Architecture 69
- Maturity 53
- Readiness 55
- Security 77
Changes since last survey
- 156 commits — 141 feature/other, 15 fixes
By area
- (root) — 82 commits
- (repo) — 35 commits
- lib/nodejs — 19 commits
- test/nodejs_test.exs — 6 commits
- .github/workflows — 3 commits
- test/js — 3 commits
- lib/react_render.ex — 2 commits
- priv/package.json — 2 commits
- .github/.dependabot.yml — 1 commit
- lib/react_render — 1 commit
- priv/server.js — 1 commit
- test/react_render_test.exs — 1 commit
Notable commits
- fix: Add possible fix for failing worker processes
- fix: Added a binary option - fixes #14
- fix: Fix #14 by adding a binary option (#16)
- fix: Fix NODE_PATH for Windows (#36)
- fix: Fix response cross-contamination via request-response correlation UIDs
- fix: Merge branch 'master' into bug/timeout-exit
- fix: Merge pull request #3 from revelrylabs/bug/timeout-exit
- fix: fix mix.exs
- fix: fix tests
- fix: fix: Do npm install in test directory
- fix: fix: implement handle_info/2 (#94)
- fix: fix: remove manager in mix.exs (#87)
- fix: fix: remove override in mix.exs (#86)
- fix: fix: terminal corruption when running in iEX (#91)
- fix: fix: trap timeout exits and turn them into errors
- change: :space_invader:
- change: Add CHANGELOG.md
- change: Add failing test for console.log statements
- change: Add failing test for crashing worker process
- change: Add failing test for implementation leak on timeouts
- …and 136 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
revelrylabs/elixir-nodejs 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 18 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 7300f98a85154e2ffb46c02c46851b9a84b83435 — 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-5d04157a340d.