moonpolysoft/dynomite
36.1
Weak · 23 September 2026
9.7k
lines of production code
Erlang
with JavaScript
5
measurements over time
What this system is
Dynomite is a distributed key-value store that supports get, put, has, and delete operations via a custom protocol and Thrift RPC. It provides native C extensions for hashing and bloom filters, alongside Erlang-based storage and configuration modules. The system includes comprehensive client libraries for Ruby, Python, and C, as well as CLI tools for benchmarking and cluster management.
How it got here
2008 — Dynomite protocol and tooling expansion
18 changes.
This period focused on expanding the Dynomite protocol to support get, put, has, and delete operations, alongside the introduction of a Ruby CLI dispatcher and a Python client library. The codebase was enriched with Thrift RPC support, web-based cluster visualization, and comprehensive test suites for both Erlang and client libraries.
2009 — Thrift integration and benchmarking tools
4 changes.
This period focused on expanding the Dynomite interface by adding autogenerated Ruby bindings for the Thrift service and introducing native C drivers for hashing and bloom filters. Additionally, the project updated its release configuration to include Mochiweb and Thrift dependencies, while replacing the previous benchmarking tool with a new Erlang-based distributed benchmarking script.
Features
Add Thrift RPC framework and transport implementations
The project now includes the Thrift RPC framework, providing Erlang implementations for binary and HTTP transports, a client for connecting to Thrift services, and a processor for handling incoming requests. This enables the application to communicate with other services using the Thrift protocol.
deps/thrift · high confidence
Add Thrift-generated Erlang code for the Dynomite service
The gen-erl directory now includes auto-generated Erlang files (dynomite\_types, dynomite\_thrift, and related headers) that implement the Dynomite service interface defined in if/dynomite.thrift. This adds support for get, put, has, and remove operations, allowing the Erlang client to interact with the Dynomite key-value store via the Thrift protocol.
gen-erl, if · medium confidence
Add native C drivers for bloom filter, FNV, and MurmurHash2
Added new C extensions providing a persistent bloom filter implementation and native FNV and MurmurHash2 hashing algorithms, each exposed via Erlang drivers (bloom\_drv, fnv\_drv, murmur\_drv) to allow efficient set membership testing and hash computation from the application layer.
c · high confidence
Add shared CLI options for node and cluster name
A new shared CLI configuration file (common.rb) was added to the CLI library, introducing standard options for specifying the Erlang node name (-o) and the cluster name (-n). This provides a consistent interface for remote control commands across the application.
rlibs/cli/shared · high confidence
Add web-based cluster visualization interface
The web interface now includes a new dashboard for visualizing cluster health, load, replication, and partitioning status. The main page displays a real-time canvas-based graph of member nodes and their connections, while dedicated pages for Load, Replication, and Partitioning provide further breakdowns using the same visualization engine. This requires several new JavaScript libraries (jQuery 1.2.6, canvas text rendering, and custom visualization scripts) to render the dynamic charts.
web · high confidence
Added Python client library and benchmarking tools for Dynomite
The pylibs directory now includes a complete Python client for Dynomite, featuring a direct socket-based client (dynomite.client) and a convenience wrapper for the Thrift-based client (dynomite.thrift\_client) that handles transport and protocol setup. The release also introduces benchmarking scripts (dbench, dbench\_thrift, load\_thrift) for performance testing and a functional test suite to verify client behavior.
pylibs · high confidence
Added Ruby client library and performance benchmarking tools
Introduced a new Ruby client library (rlibs/dynomite.rb) for interacting with the Dynomite service, featuring methods for get, put, has\_key, and delete operations with built-in timeout and retry logic. Additionally, several new Ruby scripts were added to the rlibs directory to support performance testing and analysis: analyze\_bench.rb for processing and exporting benchmark logs to CSV, distributed\_bench.rb for running concurrent distributed benchmarks, stress\_test.rb for load testing, and thrift\_bench.rb for measuring Thrift-based performance. These tools allow users to measure throughput, latency, and error rates for the storage system.
rlibs · high confidence
Added autogenerated Ruby bindings for the Dynomite Thrift interface
The gen-rb directory now contains the generated Ruby client and server stubs for the Dynomite service, including the main client/processor classes in Dynomite.rb, type definitions in dynomite\_types.rb, and constants in dynomite\_constants.rb. These files provide the Ruby implementation for get, put, has, and remove operations, enabling Ruby applications to interact with the Dynomite service via Thrift.
gen-rb · high confidence
Added documentation assets for performance testing and visualization
The \doc\ directory now includes several new files to support performance testing workflows. A new \BLOOM\_FORMAT.txt\ file defines the binary structure for bloom filter data. A R script, \dynomite.R\, is added to analyze and plot performance data, specifically calculating and displaying requests per second (reqs/s). Additionally, static assets for rendering and statistics are included: \javascripts/excanvas.pack.js\ (for canvas support), \javascripts/jquery.flot.js\ and its packed version (for plotting graphs), \javascripts/jquery.js\ (version 1.2.3), and \stats.html\ for displaying statistical results.
doc · high confidence
Added new Erlang header files for configuration, logging, and data structures
The codebase now includes several new header files that define core configuration parameters, logging macros, and data record structures. Specifically, config.hrl introduces a new config record with default settings for replication, storage modules, and ports. common.hrl adds logging and formatting macros. couch\_db.hrl defines records for documents, database headers, and query arguments, alongside JSON encoding/decoding macros. dmerkle.hrl introduces constants and macros for Merkle tree operations. profile.hrl adds macros for profiling support. These changes provide the foundational definitions needed for the application's configuration, logging, and internal data handling.
include · high confidence
Added new library modules for storage, profiling, and configuration
Introduced several new Erlang modules to the \elibs\ directory, including \block\_server\ for managing block-based file storage, \bloom\ for probabilistic set membership testing, \bootstrap\ for node initialization, \commands\ for remote execution, \configuration\ for managing cluster settings, \dets\_storage\ and \dict\_storage\ as alternative storage backends, \dmerkle\ and \dmtree\ for distributed Merkle tree operations, \dummy\_server\ as a test stub, \dynomite\ and \dynomite\_app\ for application lifecycle management, \dynomite\_pb\ for Protocol Buffers HTTP interface, \dynomite\_prof\ for performance profiling, and \dynomite\_rpc\ for remote procedure calls. These additions provide foundational components for storage, configuration, and inter-node communication.
elibs · high confidence
Introduce Dynomite application structure and dependencies
The Dynomite application is now properly structured with a new .app file that defines the application's modules, including the addition of new components such as dummy\_server, dynomite\_prof, and dynomite\_thrift\_service. The application manifest also explicitly declares dependencies on mochiweb and thrift, indicating support for web and RPC interfaces.
ebin · high confidence
Introduction of the dynomite CLI dispatcher script
A new executable script, bin/dynomite, has been added to the repository. This Ruby-based CLI dispatcher resolves the script's real path to correctly handle symlinks, then dynamically loads and executes subcommands from the rlibs/cli directory. This change enables users to invoke dynomite commands directly via the command line, with the script validating that the provided command exists before execution.
bin · high confidence
New Erlang-based distributed benchmarking script
A new Erlang escript, escripts/benchmark.escript, has been added to replace the previous Ruby-based benchmarking tool. This script supports RPC mode, allowing users to run distributed benchmarks with configurable concurrency, data size, and method (thrift or rpc).
escripts · high confidence
Behavioural changes
Add default configuration for SASL logging and Dynomite web port
The application now includes default configuration files (default.conf and default.config) that define SASL logging settings (disabling the default error logger, setting error type to 'error', and configuring rotating log files in /p/log/dynomite) and set the Dynomite web port to 8081.
conf · medium confidence
Dynomite release configuration updated with Mochiweb and Thrift dependencies
The release file for Dynomite has been updated to include Mochiweb (version 0.01) and Thrift (version 0.1) as dependencies, alongside the standard Erlang runtime and core libraries. This change reflects the packaging of these specific libraries within the application's release structure.
releases · high confidence
New CLI commands for benchmarking, remote shell, and cluster membership
The CLI now includes new commands: a benchmarking suite (bench) for performance testing, a remote shell (console) for interactive debugging, and membership/leave commands for cluster management. The start command now supports a --pidfile option to write a PID file, and the status command's usage line has been corrected to reflect the actual command name.
rlibs/cli · high confidence
Removal of external listener service
The external listener component (src/ext\_listener.erl) has been removed from the codebase. This component previously managed TCP connections on port 11211 to parse and process incoming commands. Its removal eliminates the ability to receive and process these specific external network requests.
src · high confidence
Updated Dynomite protocol with get, put, has, and delete operations
The network protocol has been expanded to support get, put, has, and delete operations, replacing the previous single-operation design. Each request includes a length-prefixed key, and responses include status codes, server counts, and data payloads. This change modifies the core communication interface for the key-value store.
(repo-wide) · high confidence
Test coverage
Added RSpec test suite for the Dynomite Ruby library; Added unit tests for core components.
Dependencies
Added Thrift dependency for RPC support
The project now includes the Thrift library as a dependency, bringing in the necessary headers, build scripts, and license files to support Thrift-based remote procedure calls.
deps · 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
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 28 → 36 (+7.7)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 65 → 62 (-2.7)
- Architecture 98 → 93 (-5.5)
- Maturity 20 → 31 (+10.4)
- Readiness 17 → 30 (+12.4)
- Security 54 → 63 (+8.1)
- Event-Driven 64 → 64 (+0.0)
- Accessibility 42 → 35 (-7.3)
Resolved (14)
- Boundary-crossing change coupling: dmtree.erl ↔ dmerkle_test.erl (elibs/dmtree.erl)
- Change coupling: dict_storage.erl ↔ fs_storage.erl (elibs/dict_storage.erl)
- Change coupling: dict_storage.erl ↔ membership.erl (elibs/dict_storage.erl)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — no supported dependency manifest was read
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- No exposed public API
- Test reliability not included
- TooManyMethods: dmerkle (elibs/dmerkle.erl)
- complexity unreadable for .erl, .hrl, .py, .rb — churn × complexity hotspots could not be measured
- dormant codebase — no living knowledge left to concentrate
New (35)
- Coverage not measured — no coverage collector is wired up
- Documentation: no installation or build instructions (README.markdown)
- Documentation: no licence statement (README.markdown)
- Documentation: no usage examples (README.markdown)
- Duplicated block (10 lines × 2) (elibs/fs_storage.erl)
- Duplicated block (15 lines × 2) (elibs/dmerkle.erl)
- Duplicated block (5 lines × 2) (elibs/block_server.erl)
- Duplicated block (5 lines × 2) (elibs/dets_storage.erl)
- Duplicated block (5 lines × 2) (elibs/fs_storage.erl)
- Duplicated block (6 lines × 2) (elibs/dets_storage.erl)
- Duplicated block (6 lines × 2) (elibs/dmerkle.erl)
- Duplicated block (6 lines × 2) (elibs/membership.erl)
- Duplicated block (6 lines × 2) (elibs/storage_manager.erl)
- Duplicated block (7 lines × 2) (elibs/storage_server_sup.erl)
- Duplicated block (9 lines × 2) (elibs/fs_storage.erl)
- FileTooLong: javascripts/jquery-1.2.6.js (web/javascripts/jquery-1.2.6.js)
- FileTooLong: javascripts/jquery.flot.js (doc/javascripts/jquery.flot.js)
- FileTooLong: javascripts/jquery.js (doc/javascripts/jquery.js)
- FixmeComment (pylibs/dynomite/client.py)
- FixmeComment (pylibs/test/ec2/ec2_load_test.py)
- …and 15 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
moonpolysoft/dynomite 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 a5618dcbe17b16cefdc9c567f27a1f4445aee005 — 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.