Built with quality in mind.
Quality you can verify.
On stage there is no second take. So we do not ask you to trust SHUFFLE Framework: we measure it, and every number on this page comes straight from the engine's quality report.
- shuffle_engine 0.1.0 · commit 37b8eb9
- Snapshot committed with the site
Release gates
4 of 5 pass- Every test job passes on every platform verifiedPasses
- Static analysis: no open high-severity finding261 high-severity and 420 other findings open, being fixedNot yet
- No known vulnerability without a notePasses
- REUSE licence compliancePasses
- Every stable module's requirements verifiedPasses
A release is not tagged until every gate passes.
Measured, not claimed.
Each figure is read from the report when the site is built. When a number gets worse, this page shows it.
Code coverage
- 89.3%Lines108,390 of 121,390
- 92.5%Functions10,014 of 10,828
- 76.3%Branches52,960 of 69,388
Clang source-based coverage of the cores and adapters; tests, examples and third-party code left out. There is no coverage target in percent: requirement coverage is the gate, and these numbers are shown as they are.
Tested where it will run.
The same suite on every platform verified, built and run by local CI. A platform that was not run for this report says so.
- Windows3,277passedWindows, MSVC (Release)
- Linux3,446passedLinux, Clang 20 (core-only preset)
- WebAssemblyNot in this reportThe job exists in local CI; its results were not recorded for this commit.
- AndroidNot in this reportThe job exists in local CI; its results were not recorded for this commit.
- macOSComingSupported by design; not yet run by local CI.
- iOSComingSupported by design; not yet run by local CI.
Sanitizers
Memory errors, undefined behaviour and real-time violations, caught while the tests run.
The compiler guards the audio thread.
Every function that runs on the audio thread carries SHUFFLE_RT. With the real-time checks on, a marked function that allocates, locks, throws or calls unmarked code does not compile. A promise in a comment becomes a property of the build.
- Checked at compile timeClang's function-effect analysis rejects the mistake before anyone hears it, not after a dropout on stage.
- Checked again at run timeThe engine and real-time tests run under RealtimeSanitizer, including the tests that count allocations on audio paths.
- Exceptions are reviewedA call that is safe for a reason the compiler cannot see is wrapped alone, with the reason next to it; the repository checks refuse a region without one.
384tests under RealtimeSanitizer · 0 failed
// Runs on the audio thread: the compiler checks it.
void process (float* const* channels, int frames) noexcept SHUFFLE_RT;
// SHUFFLE_RT is [[clang::nonblocking]] on Clang 20 and later. With
// SHUFFLE_ENGINE_RT_CHECKS=ON, a marked function fails the build if it
// - allocates (new, delete, anything that may allocate),
// - throws or catches, or takes a lock that can block,
// - calls a function that is neither marked nor visibly safe.
// A call that is safe for a reason the compiler cannot see is
// reviewed, alone, with the reason written next to it:
SHUFFLE_RT_ALLOW_BEGIN ("std::sin is pure arithmetic: no allocation or lock")
value = static_cast<float> (std::sin (phase));
SHUFFLE_RT_ALLOW_ENDQuality built into the method, not bolted on.
These are the working rules of the repository, checked on every change.
Every behaviour specified and traced
Each domain has a spec with numbered requirements and examples as data. Tests cite the IDs, so one search finds the requirement and the tests that verify it.
$ grep -r "TC-R12" specs core
specs/timecode.md:- **TC-R12** Parsing text into a time:
specs/timecode.md:### 4.5 Formatting and parsing (TC-R11, TC-R12)
core/timecode/tests/SmpteTimeTests.cpp:// TC-R12 (table 4.5)
core/timecode/tests/SmpteTimeTests.cpp:// TC-R12 (table 4.5)Zero allocations, measured
Tests on audio paths count every allocation and expect none. They run in the real-time job, under the sanitizer.
Reproducible local CI
Every job runs on one workstation: Windows natively, Linux in a pinned Docker image with Clang 20. Anyone with the repository can repeat it.
Honest gates
A release is tagged only when every gate passes. There is no percentage to game: the gates are written down, with what each one checks.
Errors are values
No exception crosses a module boundary or touches the audio thread, and every error message says how to fix the problem.
Module by module.
Each bar is one module's numbered requirements. Stable modules are the release gate; experimental modules show their gaps openly.
| Module | Share verified | Verified |
|---|---|---|
| Stable5 | ||
commands | Passing test: 80; Verified elsewhere, with a reason: 2; Cited, not yet passing: 0; Not yet cited by a test: 0. | 100%82 of 82 |
dsp | Passing test: 133; Verified elsewhere, with a reason: 8; Cited, not yet passing: 0; Not yet cited by a test: 0. | 100%141 of 141 |
midi | Passing test: 142; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 0. | 100%142 of 142 |
time | Passing test: 42; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 0. | 100%42 of 42 |
timecode | Passing test: 120; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 0. | 100%120 of 120 |
| Experimental15 | ||
setlist | Passing test: 76; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 0. | 100%76 of 76 |
ui_model | Passing test: 184; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 1. | 99%184 of 185 |
synth | Passing test: 102; Verified elsewhere, with a reason: 0; Cited, not yet passing: 1; Not yet cited by a test: 0. | 99%102 of 103 |
loudness | Passing test: 72; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 1. | 99%72 of 73 |
osc | Passing test: 62; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 1. | 98%62 of 63 |
formats | Passing test: 125; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 4. | 97%125 of 129 |
showcontrol | Passing test: 139; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 6. | 96%139 of 145 |
engine | Passing test: 149; Verified elsewhere, with a reason: 0; Cited, not yet passing: 3; Not yet cited by a test: 6. | 94%149 of 158 |
ui_theme | Passing test: 116; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 8. | 94%116 of 124 |
cues | Passing test: 162; Verified elsewhere, with a reason: 0; Cited, not yet passing: 1; Not yet cited by a test: 12. | 93%162 of 175 |
redundancy | Passing test: 69; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 6. | 92%69 of 75 |
netaudio | Passing test: 143; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 17. | 89%143 of 160 |
routing | Passing test: 151; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 20. | 88%151 of 171 |
ui_layout | Passing test: 46; Verified elsewhere, with a reason: 0; Cited, not yet passing: 2; Not yet cited by a test: 5. | 87%46 of 53 |
ui_bridge | Passing test: 95; Verified elsewhere, with a reason: 0; Cited, not yet passing: 0; Not yet cited by a test: 17. | 85%95 of 112 |
No numbered requirements of their own in this report: base, resample, ui_render.
What we check beyond the tests.
Findings, vulnerabilities and licences, shown as they are, including what is still open.
Static analysis
681 findings being fixed
- High261
- Medium320
- Low100
10 accepted with a reason
Most frequent open checks
bugprone-unchecked-optional-access261bugprone-misplaced-widening-cast123bugprone-implicit-widening-of-multiplication-result84cert-err33-c47performance-inefficient-vector-operation44
clang-tidy 20.1.8 over 459 translation units, with the bugprone, cert, clang-analyzer and performance checks. The cert checks cover a subset of SEI CERT C++: no claim of full conformance is made.
Dependencies
0known vulnerabilities open
15pinned dependencies
2 known vulnerabilities do not apply, each with its reason:
flac 1.5.0·OSV-2024-678FLAC__replaygain_synthesis__apply_gain is in src/share/replaygain_synthesis, part of the flac command-line program; shuffle_engine builds only the libFLAC target, which does not contain itminiaudio 0.11.25·CVE-2026-32837the out-of-bounds read is in the WAV BEXT metadata parser of miniaudio's decoders; shuffle_engine compiles miniaudio with MA_NO_DECODING and MA_NO_ENCODING (cmake/ShuffleEngineDeps.cmake), device I/O only, so the parser is not built
Licences
REUSE compliant
1,982of 1,982 files carry their copyright and licence
A software bill of materials (SPDX) with every release
Outside eyes, next.
Free services for public open-source projects, added the day the repositories become public. Until then they are plans, not results.
- PlannedCoverity ScanDeep static analysis of the C and C++ code, with its public badge.
- PlannedSonarQube CloudA dashboard and a quality gate, fed with our own coverage.
- PlannedOpenSSF Scorecard and Best PracticesExternal scores for security and for the project's process.
- PlannedOSS-FuzzContinuous fuzzing of the parsers that read data from outside.
- PlannedSigned releasesSigstore signatures with SLSA build attestations: the origin of every release, verifiable.
Where the data comes from.
The full report (requirements, static analysis, coverage) comes with every release.
- Report generated
- Engine version
0.1.0- Engine commit
37b8eb9- Source
- Snapshot committed with the site; a newer report replaces it at the next build
Measured quality is not a warranty: SHUFFLE Framework is provided “as is”, see the disclaimer. Test it in your own setup before you rely on it.