Codebase metrics¶
A measured snapshot of the orchestra codebase and its submodules,
counted with cloc. Charts show code lines
(blank and comment lines excluded) unless stated otherwise.
Snapshot
Measured on the 1.x branch, 2026-07-02. 694 files,
53,929 lines of code, 27,159 comment lines,
9,288 blank (90,376 lines in total). See
Methodology to reproduce.
At a glance¶
| Code | Comment | Blank | Files | Production | Test |
|---|---|---|---|---|---|
| 53,929 | 27,159 | 9,288 | 694 | 34,624 | 19,305 |
Production vs test¶
orchestra ships 19,305 lines of test code backing 34,624 lines of production code, a 56% test-to-production ratio.
Lines by language¶
| Language | Code | Comment | Blank | Files |
|---|---|---|---|---|
| PHP | 38,121 | 26,642 | 6,949 | 457 |
| YAML | 7,508 | 286 | 169 | 150 |
| Markdown | 5,410 | 0 | 1,074 | 47 |
| PO File | 2,358 | 29 | 1,054 | 29 |
| JavaScript | 339 | 173 | 24 | 5 |
| CSS | 81 | 28 | 17 | 2 |
| JSON | 44 | 0 | 0 | 1 |
| Text | 29 | 0 | 0 | 1 |
| SVG | 21 | 1 | 1 | 1 |
| HTML | 18 | 0 | 0 | 1 |
Composition¶
Across all languages, code is 60% of the lines, comments 30%, and blank lines 10%. The comment share reflects Drupal's docblock conventions.
By submodule¶
Production (brass) and test (steel) code per submodule, largest first.
| Submodule | Production | Test | Total |
|---|---|---|---|
| orchestra (core) | 15,029 | 6,252 | 21,281 |
| orchestra_inbox | 2,131 | 2,486 | 4,617 |
| orchestra_views | 2,886 | 488 | 3,374 |
| orchestra_interaction | 1,402 | 1,218 | 2,620 |
| orchestra_cm | 1,343 | 958 | 2,301 |
| orchestra_ui | 1,588 | 657 | 2,245 |
| orchestra_interaction_webform | 798 | 1,205 | 2,003 |
| orchestra_examples | 1,421 | 343 | 1,764 |
| orchestra_modeler | 585 | 828 | 1,413 |
| orchestra_webform_example | 1,229 | 135 | 1,364 |
| orchestra_content | 656 | 630 | 1,286 |
| orchestra_eca | 495 | 451 | 946 |
| orchestra_easy_email | 632 | 152 | 784 |
| orchestra_bpmn_io | 505 | 272 | 777 |
| orchestra_action | 364 | 401 | 765 |
| orchestra_server_api | 336 | 375 | 711 |
| orchestra_audit_trail | 433 | 272 | 705 |
| orchestra_task_interaction | 454 | 212 | 666 |
| orchestra_client | 306 | 322 | 628 |
| orchestra_content_moderation | 236 | 299 | 535 |
| orchestra_content_eca | 325 | 136 | 461 |
| orchestra_api | 195 | 232 | 427 |
| orchestra_vbo_inbox | 190 | 197 | 387 |
| orchestra_notification | 206 | 169 | 375 |
| orchestra_interaction_notification | 209 | 139 | 348 |
| orchestra_inbox_notification | 147 | 164 | 311 |
| orchestra_vbo | 154 | 132 | 286 |
| orchestra_mail | 240 | 0 | 240 |
| orchestra_domain | 129 | 40 | 169 |
Test suite¶
orchestra ships 150 automated test classes (568 test methods), counted by type below.
| Test type | Classes | Methods |
|---|---|---|
| Kernel | 117 | 489 |
| Functional | 19 | 39 |
| FunctionalJavascript | 6 | 6 |
| Unit | 8 | 34 |
| Total | 150 | 568 |
Architecture surface¶
What the module contains, counted across orchestra and its submodules: the Drupal building blocks (services, plugins, hooks, routes, entities) that make up its public and internal API.
| Element | Count |
|---|---|
| Services | 84 |
| Event subscribers | 10 |
| Hook implementations | 41 |
| Routes | 45 |
| Permissions | 8 |
| Forms | 18 |
| Controllers | 6 |
| Content entity types | 7 |
| Config entity types | 2 |
| Config schema types | 48 |
| Plugins | 76 |
Plugins break down by type as follows, largest first:
Methodology¶
Counts are produced with cloc from the
module root, excluding node_modules:
cloc --exclude-dir=node_modules .
Production and test totals split on the test directory:
# production
cloc --exclude-dir=node_modules --not-match-d='(^|/)tests(/|$)' .
# test
cloc --exclude-dir=node_modules --match-d='(^|/)tests(/|$)' .
Test classes are counted by their directory under tests/src (Unit, Kernel,
Functional, FunctionalJavascript); the method column counts test-prefixed
methods plus those annotated @test or #[Test]. The architecture surface counts
service definitions in *.services.yml, route and permission keys in
*.routing.yml and *.permissions.yml, #[Hook] attributes, plugin classes
under src/Plugin/, forms and controllers under src/Form and src/Controller,
entity-type attributes in src/Entity, and top-level types in
config/schema/*.yml, all summed across the module and its submodules.
The charts are static inline SVG generated from the JSON that cloc emits, so they need no JavaScript or charting plugin. This page is refreshed periodically.