charm tech adoption

Is the tooling charm tech ships being picked up? A small, deliberately stable set of metrics across the scanned charm corpus. Generated 2026-09-21 02:34 UTC.

Typed Juju data

Are charms reading Juju data through the typed APIs?

3.9% ▲ 0.1

20 / 517 charms, 2026-09-21

Jubilant adoption

What do charms use to drive their integration tests?

25.5% ▲ 0.5

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.

charmlibs share

How much of a charm's library surface comes from charmlibs?

17.4% ▲ 0.4

107 / 336 charms, 2026-09-21

Rootless by default

Are rocks and charms declaring a non-root user?

27.2% ▲ 1.6

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.

Findable on Charmhub

Can somebody who doesn't already know about a charm find it?

39.8%

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.

Typed Juju data

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.

Static fallback — headline value and breakdown, per snapshot date
Date Typed Juju data typeduntyped 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

Jubilant adoption

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.

Static fallback — headline value and breakdown, per snapshot date
Date Jubilant adoption jubilantpytest-operatorother-integration-testsno-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

charmlibs share

Mean over charms of charmlibs / (charmlibs + vendored Charmhub libs). Charms using no libraries at all are excluded from the mean and tracked separately.

Static fallback — headline value and breakdown, per snapshot date
Date charmlibs share charmlibscharmhub-libs charms
2026-01-05 6.0% 6.0% 94.0% 287
2026-01-12 6.2% 6.2% 93.8% 289
2026-01-19 7.1% 7.1% 92.9% 292
2026-01-26 7.1% 7.1% 92.9% 300
2026-02-02 7.4% 7.4% 92.6% 302
2026-02-09 7.4% 7.4% 92.6% 303
2026-02-16 8.0% 8.0% 92.0% 307
2026-02-23 8.6% 8.6% 91.4% 307
2026-03-02 8.8% 8.8% 91.2% 308
2026-03-09 9.5% 9.5% 90.5% 311
2026-03-16 9.8% 9.8% 90.2% 311
2026-03-23 9.8% 9.8% 90.2% 313
2026-03-30 9.8% 9.8% 90.2% 314
2026-04-06 9.9% 9.9% 90.1% 315
2026-04-13 9.6% 9.6% 90.4% 316
2026-04-20 9.7% 9.7% 90.3% 316
2026-04-27 9.7% 9.7% 90.3% 318
2026-05-04 10.2% 10.2% 89.8% 318
2026-05-11 11.1% 11.1% 88.9% 318
2026-05-18 11.5% 11.5% 88.5% 318
2026-05-25 11.5% 11.5% 88.5% 318
2026-06-01 11.6% 11.6% 88.4% 319
2026-06-08 12.4% 12.4% 87.6% 326
2026-06-15 12.5% 12.5% 87.5% 326
2026-06-22 13.0% 13.0% 87.0% 326
2026-06-29 13.4% 13.4% 86.6% 326
2026-07-06 13.4% 13.4% 86.6% 327
2026-07-13 14.1% 14.1% 85.9% 327
2026-07-20 14.4% 14.4% 85.6% 328
2026-07-27 14.5% 14.5% 85.5% 329
2026-08-03 14.5% 14.5% 85.5% 329
2026-08-10 14.5% 14.5% 85.5% 329
2026-08-17 14.5% 14.5% 85.5% 329
2026-08-24 14.8% 14.8% 85.2% 329
2026-08-31 16.4% 16.4% 83.6% 334
2026-09-07 17.0% 17.0% 83.0% 338
2026-09-14 17.0% 17.0% 83.0% 338
2026-09-21 17.4% 17.4% 82.6% 336

Libraries in use, by where they are available

11 on charmlibs and Charmhub
80 Charmhub only
15 charmlibs only

Uses of a library available on both sides, by the side taken

106 charmlibs
298 vendored from Charmhub
5 both

As of 2026-09-21. Earlier dates are in the JSON.

Rootless by default

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.

Static fallback — headline value and breakdown, per snapshot date
Date Rootless by default run-user: _daemon_charm-user: non-rootcharm-user: sudoerother non-root userroot (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

Findable on Charmhub

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.

Static fallback — headline value and breakdown, per snapshot date
Date Findable on Charmhub listedunlisted on Charmhubnot on Charmhub charms
2026-09-21 39.8% 39.8% 55.2% 5.1% 611

Every denominator on this page counts only actively-maintained charms: those whose repository has seen a commit in the two years before that snapshot’s date. A charm nobody has touched since before these APIs existed is not one anyone is going to migrate, so counting it would measure abandonment rather than adoption.

Unless a card says otherwise, the denominator narrows further to eligible charms: active charms minus reactive and legacy-classic ones, which pre-date ops and could never adopt these APIs. Metrics about tooling that works whatever the charm is built on — Jubilant, say — measure against every active charm instead, and name that on the card. The corpus itself grows between scans, so read a series as a share, not as a count.