Are charms reading Juju data through the typed APIs?
20 / 517 charms, 2026-09-21
What do charms use to drive their integration tests?
156 / 612 charms,
2026-09-21
Denominator: every actively-maintained charm, not just eligible charms — jubilant drives a deployed model, so a reactive or legacy-classic charm can use it too.
How much of a charm's library surface comes from charmlibs?
107 / 336 charms, 2026-09-21
Are rocks and charms declaring a non-root user?
293 / 1077 charms,
2026-09-21
Denominator: rocks plus actively-maintained Kubernetes charms, not just eligible charms — run-user is a rock key and charm-user only affects k8s charms, so machine charms can adopt neither.
Can somebody who doesn't already know about a charm find it?
243 / 611 charms,
2026-09-21
Denominator: every actively-maintained charm, not just eligible charms — publishing to Charmhub is independent of what the charm is built on.
Percent of eligible charms calling any of load_config, load_params, Relation.load or Relation.save — any one counts. Backed by the ops.typed-relation and ops.typed-config features.
| Date | Typed Juju data | typed | untyped | charms |
|---|---|---|---|---|
| 2026-01-05 | 2.1% | 2.1% | 97.9% | 439 |
| 2026-01-12 | 2.0% | 2.0% | 98.0% | 440 |
| 2026-01-19 | 2.0% | 2.0% | 98.0% | 443 |
| 2026-01-26 | 2.0% | 2.0% | 98.0% | 450 |
| 2026-02-02 | 2.4% | 2.4% | 97.6% | 453 |
| 2026-02-09 | 2.2% | 2.2% | 97.8% | 454 |
| 2026-02-16 | 2.2% | 2.2% | 97.8% | 460 |
| 2026-02-23 | 2.8% | 2.8% | 97.2% | 461 |
| 2026-03-02 | 3.0% | 3.0% | 97.0% | 466 |
| 2026-03-09 | 3.2% | 3.2% | 96.8% | 469 |
| 2026-03-16 | 3.2% | 3.2% | 96.8% | 468 |
| 2026-03-23 | 3.2% | 3.2% | 96.8% | 472 |
| 2026-03-30 | 3.6% | 3.6% | 96.4% | 474 |
| 2026-04-06 | 3.6% | 3.6% | 96.4% | 476 |
| 2026-04-13 | 3.5% | 3.5% | 96.5% | 481 |
| 2026-04-20 | 3.8% | 3.8% | 96.2% | 480 |
| 2026-04-27 | 3.7% | 3.7% | 96.3% | 512 |
| 2026-05-04 | 3.7% | 3.7% | 96.3% | 512 |
| 2026-05-11 | 3.7% | 3.7% | 96.3% | 513 |
| 2026-05-18 | 3.7% | 3.7% | 96.3% | 513 |
| 2026-05-25 | 3.9% | 3.9% | 96.1% | 514 |
| 2026-06-01 | 3.9% | 3.9% | 96.1% | 516 |
| 2026-06-08 | 3.9% | 3.9% | 96.1% | 519 |
| 2026-06-15 | 3.9% | 3.9% | 96.1% | 519 |
| 2026-06-22 | 3.8% | 3.8% | 96.2% | 521 |
| 2026-06-29 | 3.8% | 3.8% | 96.2% | 520 |
| 2026-07-06 | 3.8% | 3.8% | 96.2% | 521 |
| 2026-07-13 | 3.8% | 3.8% | 96.2% | 521 |
| 2026-07-20 | 3.8% | 3.8% | 96.2% | 521 |
| 2026-07-27 | 3.8% | 3.8% | 96.2% | 526 |
| 2026-08-03 | 3.8% | 3.8% | 96.2% | 526 |
| 2026-08-10 | 3.8% | 3.8% | 96.2% | 525 |
| 2026-08-17 | 3.8% | 3.8% | 96.2% | 525 |
| 2026-08-24 | 3.8% | 3.8% | 96.2% | 524 |
| 2026-08-31 | 3.8% | 3.8% | 96.2% | 523 |
| 2026-09-07 | 3.8% | 3.8% | 96.2% | 527 |
| 2026-09-14 | 3.8% | 3.8% | 96.2% | 524 |
| 2026-09-21 | 3.9% | 3.9% | 96.1% | 517 |
Percent of all actively-maintained charms whose integration tests import jubilant, split against pytest-operator, other harnesses, and charms with no integration tests found at all.
| Date | Jubilant adoption | jubilant | pytest-operator | other-integration-tests | no-integration-tests | charms |
|---|---|---|---|---|---|---|
| 2026-01-05 | 15.5% | 15.5% | 41.2% | 0.6% | 42.7% | 536 |
| 2026-01-12 | 15.8% | 15.8% | 40.8% | 0.6% | 42.8% | 537 |
| 2026-01-19 | 17.0% | 17.0% | 39.8% | 0.6% | 42.6% | 540 |
| 2026-01-26 | 17.9% | 17.9% | 38.9% | 0.5% | 42.6% | 547 |
| 2026-02-02 | 18.5% | 18.5% | 38.2% | 0.5% | 42.7% | 550 |
| 2026-02-09 | 19.1% | 19.1% | 37.7% | 0.5% | 42.6% | 551 |
| 2026-02-16 | 19.4% | 19.4% | 37.3% | 0.5% | 42.7% | 557 |
| 2026-02-23 | 19.4% | 19.4% | 37.3% | 0.5% | 42.7% | 557 |
| 2026-03-02 | 19.4% | 19.4% | 36.9% | 0.5% | 43.2% | 563 |
| 2026-03-09 | 19.3% | 19.3% | 36.7% | 0.5% | 43.5% | 566 |
| 2026-03-16 | 19.5% | 19.5% | 36.8% | 0.5% | 43.2% | 565 |
| 2026-03-23 | 20.0% | 20.0% | 35.7% | 0.5% | 43.8% | 569 |
| 2026-03-30 | 19.8% | 19.8% | 35.4% | 0.5% | 44.3% | 571 |
| 2026-04-06 | 19.7% | 19.7% | 35.4% | 0.5% | 44.3% | 573 |
| 2026-04-13 | 19.6% | 19.6% | 35.2% | 0.5% | 44.7% | 582 |
| 2026-04-20 | 19.8% | 19.8% | 34.9% | 0.5% | 44.8% | 581 |
| 2026-04-27 | 19.1% | 19.1% | 33.0% | 0.5% | 47.5% | 613 |
| 2026-05-04 | 19.6% | 19.6% | 32.6% | 0.5% | 47.3% | 613 |
| 2026-05-11 | 19.5% | 19.5% | 32.7% | 0.5% | 47.2% | 614 |
| 2026-05-18 | 19.5% | 19.5% | 32.6% | 0.7% | 47.2% | 614 |
| 2026-05-25 | 19.7% | 19.7% | 32.5% | 0.7% | 47.2% | 615 |
| 2026-06-01 | 20.1% | 20.1% | 32.1% | 0.6% | 47.2% | 617 |
| 2026-06-08 | 21.9% | 21.9% | 30.6% | 0.5% | 46.9% | 620 |
| 2026-06-15 | 22.7% | 22.7% | 30.0% | 0.3% | 46.9% | 620 |
| 2026-06-22 | 23.5% | 23.5% | 29.4% | 0.3% | 46.8% | 622 |
| 2026-06-29 | 23.8% | 23.8% | 29.3% | 0.3% | 46.6% | 622 |
| 2026-07-06 | 24.7% | 24.7% | 28.4% | 0.3% | 46.5% | 623 |
| 2026-07-13 | 25.0% | 25.0% | 27.9% | 0.3% | 46.7% | 623 |
| 2026-07-20 | 25.2% | 25.2% | 27.8% | 0.3% | 46.7% | 623 |
| 2026-07-27 | 25.3% | 25.3% | 27.1% | 0.3% | 47.3% | 628 |
| 2026-08-03 | 25.3% | 25.3% | 27.1% | 0.3% | 47.3% | 628 |
| 2026-08-10 | 25.4% | 25.4% | 27.0% | 0.3% | 47.4% | 627 |
| 2026-08-17 | 25.6% | 25.6% | 26.7% | 0.3% | 47.4% | 626 |
| 2026-08-24 | 25.6% | 25.6% | 26.6% | 0.3% | 47.5% | 625 |
| 2026-08-31 | 25.0% | 25.0% | 26.5% | 0.3% | 48.2% | 623 |
| 2026-09-07 | 24.9% | 24.9% | 26.3% | 0.3% | 48.5% | 627 |
| 2026-09-14 | 25.0% | 25.0% | 26.3% | 0.3% | 48.4% | 624 |
| 2026-09-21 | 25.5% | 25.5% | 26.8% | 0.3% | 47.4% | 612 |
Percent of scanned artefacts that declare a non-root user: rocks setting run-user in rockcraft.yaml (_daemon_ is the only value rockcraft accepts today) and Kubernetes charms setting charm-user in charmcraft.yaml (non-root or sudoer). Anything that leaves the key unset runs as root, which is the default on both sides.
| Date | Rootless by default | run-user: _daemon_ | charm-user: non-root | charm-user: sudoer | other non-root user | root (or unset) | charms |
|---|---|---|---|---|---|---|---|
| 2026-01-05 | 21.9% | 19.3% | 2.6% | 0.0% | 0.0% | 78.1% | 885 |
| 2026-01-12 | 22.7% | 19.7% | 3.0% | 0.0% | 0.0% | 77.3% | 888 |
| 2026-01-19 | 22.8% | 19.6% | 3.2% | 0.0% | 0.0% | 77.2% | 894 |
| 2026-01-26 | 22.8% | 19.3% | 3.5% | 0.0% | 0.0% | 77.2% | 906 |
| 2026-02-02 | 22.8% | 19.3% | 3.5% | 0.0% | 0.0% | 77.2% | 907 |
| 2026-02-09 | 23.0% | 19.3% | 3.6% | 0.0% | 0.0% | 77.0% | 910 |
| 2026-02-16 | 23.4% | 19.8% | 3.6% | 0.0% | 0.0% | 76.6% | 919 |
| 2026-02-23 | 23.4% | 19.8% | 3.6% | 0.0% | 0.0% | 76.6% | 929 |
| 2026-03-02 | 23.2% | 19.6% | 3.5% | 0.0% | 0.0% | 76.8% | 937 |
| 2026-03-09 | 23.2% | 19.7% | 3.5% | 0.0% | 0.0% | 76.8% | 936 |
| 2026-03-16 | 23.2% | 19.7% | 3.5% | 0.0% | 0.0% | 76.8% | 939 |
| 2026-03-23 | 23.2% | 19.6% | 3.6% | 0.0% | 0.0% | 76.8% | 944 |
| 2026-03-30 | 23.6% | 20.0% | 3.6% | 0.0% | 0.0% | 76.4% | 948 |
| 2026-04-06 | 23.7% | 20.0% | 3.7% | 0.0% | 0.0% | 76.3% | 950 |
| 2026-04-13 | 24.2% | 20.6% | 3.7% | 0.0% | 0.0% | 75.8% | 958 |
| 2026-04-20 | 24.0% | 20.4% | 3.6% | 0.0% | 0.0% | 76.0% | 975 |
| 2026-04-27 | 24.2% | 20.4% | 3.8% | 0.0% | 0.0% | 75.8% | 978 |
| 2026-05-04 | 24.2% | 20.5% | 3.8% | 0.0% | 0.0% | 75.8% | 982 |
| 2026-05-11 | 24.4% | 20.7% | 3.8% | 0.0% | 0.0% | 75.6% | 986 |
| 2026-05-18 | 24.4% | 20.7% | 3.7% | 0.0% | 0.0% | 75.6% | 987 |
| 2026-05-25 | 24.7% | 21.0% | 3.7% | 0.0% | 0.0% | 75.3% | 996 |
| 2026-06-01 | 24.8% | 21.1% | 3.7% | 0.0% | 0.0% | 75.2% | 1002 |
| 2026-06-08 | 24.9% | 20.9% | 4.0% | 0.0% | 0.0% | 75.1% | 1006 |
| 2026-06-15 | 25.0% | 21.0% | 4.0% | 0.0% | 0.0% | 75.0% | 1009 |
| 2026-06-22 | 25.1% | 21.2% | 3.9% | 0.0% | 0.0% | 74.9% | 1016 |
| 2026-06-29 | 25.0% | 21.1% | 3.9% | 0.0% | 0.0% | 75.0% | 1023 |
| 2026-07-06 | 25.4% | 21.5% | 3.9% | 0.0% | 0.0% | 74.6% | 1036 |
| 2026-07-13 | 25.5% | 21.6% | 3.8% | 0.0% | 0.0% | 74.5% | 1041 |
| 2026-07-20 | 26.0% | 22.1% | 3.9% | 0.0% | 0.0% | 74.0% | 1052 |
| 2026-07-27 | 26.3% | 22.1% | 4.1% | 0.1% | 0.0% | 73.7% | 1067 |
| 2026-08-03 | 26.4% | 22.2% | 4.1% | 0.1% | 0.0% | 73.6% | 1068 |
| 2026-08-10 | 26.4% | 22.2% | 4.1% | 0.1% | 0.0% | 73.6% | 1068 |
| 2026-08-17 | 25.5% | 21.5% | 3.9% | 0.1% | 0.0% | 74.5% | 1114 |
| 2026-08-24 | 25.6% | 21.5% | 3.9% | 0.1% | 0.0% | 74.4% | 1115 |
| 2026-08-31 | 25.5% | 21.5% | 3.9% | 0.1% | 0.0% | 74.5% | 1116 |
| 2026-09-07 | 25.7% | 21.5% | 4.1% | 0.1% | 0.0% | 74.3% | 1129 |
| 2026-09-14 | 25.6% | 21.3% | 4.2% | 0.1% | 0.0% | 74.4% | 1130 |
| 2026-09-21 | 27.2% | 22.6% | 4.5% | 0.1% | 0.0% | 72.8% | 1077 |
run-user is the rock's OCI user (the workload), charm-user is the user the charm code itself runs as.sudoer counts towards the headline — it is a non-root user — but it keeps its own bucket, because it can still escalate via sudo.Percent of actively-maintained charms that Charmhub lists publicly, read from result.unlisted on api.charmhub.io at scan time. Split against charms that are on the store but hidden from search, and charms with no store entry at all.
| Date | Findable on Charmhub | listed | unlisted on Charmhub | not on Charmhub | charms |
|---|---|---|---|---|---|
| 2026-09-21 | 39.8% | 39.8% | 55.2% | 5.1% | 611 |
charmcraft.yaml says reads as absent.