Skip to content

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-09-01. 1,048 files, 82,313 lines of code, 48,522 comment lines, 14,824 blank (145,659 lines in total). See Methodology to reproduce.

At a glance

Code Comment Blank Files Production Test
82,313 48,522 14,824 1,048 51,620 30,693

Production vs test

orchestra ships 30,693 lines of test code backing 51,620 lines of production code, a 59% test-to-production ratio.

Production 51,620 · 63% Test 30,693 · 37%

Lines by language

PHP 60,357 YAML 10,419 Markdown 6,923 PO File 3,594 JavaScript 339 CSS 287 Text 219 JSON 68 Twig 68 SVG 21 HTML 18
Language Code Comment Blank Files
PHP 60,357 47,359 11,307 748
YAML 10,419 659 271 189
Markdown 6,923 0 1,486 53
PO File 3,594 34 1,664 34
JavaScript 339 173 24 5
CSS 287 91 61 5
Text 219 0 7 3
JSON 68 0 0 2
Twig 68 205 3 7
SVG 21 1 1 1
HTML 18 0 0 1

Composition

Across all languages, code is 57% of the lines, comments 33%, and blank lines 10%. The comment share reflects Drupal's docblock conventions.

Code 82,313 · 57% Comment 48,522 · 33%

By submodule

Production (brass) and test (steel) code per submodule, largest first.

orchestra (core) 32,650 orchestra_ui 5,498 orchestra_views 5,083 orchestra_interaction 4,587 orchestra_inbox 3,304 orchestra_payment 3,061 orchestra_cm 2,871 orchestra_delegation 2,548 orchestra_interaction_webform 2,544 orchestra_inbox_views 2,216 orchestra_interaction_webform_examples 1,721 orchestra_examples 1,587 orchestra_modeler 1,477 orchestra_content 1,233 orchestra_bpmn_io 992 orchestra_eca 927 orchestra_easy_email 880 orchestra_interaction_task 856 orchestra_action 761 orchestra_server_api 738 orchestra_client 731 orchestra_audit_trail 719 orchestra_interaction_operation 558 orchestra_domain 537 orchestra_content_moderation 520 orchestra_presentation 474 orchestra_content_eca 459 orchestra_inbox_notification 436 orchestra_api 426 orchestra_interaction_notification 383 orchestra_vbo_inbox 379 orchestra_notification 371 orchestra_mail 335 orchestra_vbo 283 orchestra_payment_example 168
Submodule Production Test Total
orchestra (core) 23,022 9,628 32,650
orchestra_ui 3,282 2,216 5,498
orchestra_views 4,203 880 5,083
orchestra_interaction 2,417 2,170 4,587
orchestra_inbox 1,013 2,291 3,304
orchestra_payment 1,592 1,469 3,061
orchestra_cm 1,642 1,229 2,871
orchestra_delegation 1,012 1,536 2,548
orchestra_interaction_webform 942 1,602 2,544
orchestra_inbox_views 1,655 561 2,216
orchestra_interaction_webform_examples 1,585 136 1,721
orchestra_examples 1,315 272 1,587
orchestra_modeler 589 888 1,477
orchestra_content 625 608 1,233
orchestra_bpmn_io 564 428 992
orchestra_eca 491 436 927
orchestra_easy_email 667 213 880
orchestra_interaction_task 383 473 856
orchestra_action 365 396 761
orchestra_server_api 362 376 738
orchestra_client 359 372 731
orchestra_audit_trail 454 265 719
orchestra_interaction_operation 311 247 558
orchestra_domain 338 199 537
orchestra_content_moderation 239 281 520
orchestra_presentation 301 173 474
orchestra_content_eca 327 132 459
orchestra_inbox_notification 168 268 436
orchestra_api 201 225 426
orchestra_interaction_notification 226 157 383
orchestra_vbo_inbox 187 192 379
orchestra_notification 211 160 371
orchestra_mail 249 86 335
orchestra_vbo 155 128 283
orchestra_payment_example 168 0 168

Test suite

orchestra ships 228 automated test classes (1,016 test methods), counted by type below.

Kernel 184 Functional 24 Unit 12 FunctionalJavascript 8
Test type Classes Methods
Kernel 184 903
Functional 24 55
Unit 12 49
FunctionalJavascript 8 9
Total 228 1,016

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 108
Event subscribers 15
Hook implementations 53
Routes 64
Permissions 11
Forms 31
Controllers 14
Content entity types 8
Config entity types 3
Config schema types 71
Plugins 111

Plugins break down by type as follows, largest first:

views 26 TaskType 17 Action 14 NodeFeature 8 Join 7 Audience 7 Interaction 6 TimeoutAction 6 FlowCondition 4 Gateway 3 WebformHandler 2 ModelerApiModeler 2 PayableResolver 2 Split 2 DeadlineProvider 2 WebformElement 1 ModelerApiModelOwner 1 QueueWorker 1

Methodology

This page is generated by scripts/generate-metrics.php, which reads the per-file JSON from cloc and writes this file. It executes no commands: run cloc yourself and pipe it in, from the module root, after a change worth reflecting:

cloc --exclude-dir=node_modules --by-file --json --quiet . | php scripts/generate-metrics.php

Line counts come from cloc per file, excluding node_modules and the .tugboat preview scaffolding. Each file is attributed to the nearest enclosing module (a directory with a *.info.yml); test-support modules under a tests/ path count as their parent's test code. A file is test code when its path contains a tests/ segment, production otherwise.

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 (excluding aliases), 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 measured data, so they need no JavaScript or charting plugin.