apple-oss-lab / pkl

apple/pkl

Configuration language on the JVM. Architecture and build analysis by arcade-agent. Upstream: apple/pkl · Fork: arcade-agent/pkl

Scope: static analysis of the default branch plus GitHub metadata for open PRs and the 30 most recently merged PRs. Java sources only (5603 entities, tests excluded); Kotlin files are not parsed. This is an independent, unofficial analysis; it does not evaluate people.

Architecture baseline

5603entities
45787dependency edges
10components (package-based)
6smells
0.8968RCI (intra-edge ratio)
0.3836BasicMQ

Components

ComponentEntities
Core4234
Parser835
Gradle216
Config210
Executor73
Formatter23
Commons4
Libpkl4
Default2
Tools2

Architectural smells (6)

TypeSeverityDescription
Dependency CyclehighCircular dependency among 5 components: Config <-> Core <-> Executor <-> Formatter <-> Parser
Concern OverloadmediumFormatter contains 23 entities but only 4 internal dependencies (0.17 per entity), suggesting multiple responsibilities.
Scattered Parasitic Functionalitymedium'Exception' pattern is scattered across 4 components: Config, Core, Executor, Parser
Scattered Parasitic Functionalitymedium'Spec' pattern is scattered across 3 components: Core, Gradle, Parser
Scattered Parasitic Functionalitymedium'Utils' pattern is scattered across 3 components: Config, Core, Gradle
Link/Upstream OverloadmediumCore is depended on by 6 other components (67% of all components).

Build & CI audit (Gradle)

Same measure → report → fix methodology as mvn-perf, ported to Gradle (mvn-perf itself only hooks Maven). Each row cites where it was found.

CheckStateEvidence
Gradle parallel + local build cacheongradle.properties: org.gradle.parallel=true, org.gradle.caching=true
CI Gradle setupongradle/actions/setup-gradle in .github/workflows/build.yml
Configuration cacheoffNot enabled in gradle.properties; only referenced by pkl-gradle plugin tests
Test fork tuninginfomaxParallelForks / forkEvery are templated in build-logic/.../BuildInfo.kt
CI daemoninfoCI runs ./gradlew --no-daemon ... check with -DpklMultiJdkTesting=true

Measured

No measured Gradle run for this repository (static audit only).

Pull requests (82)

Filter:

#TitleStateKindComponents+/−
1882Fixes to commands where (sub)commands never extend `pkl:Command`openmixedCore, Parser+75/−37
1881Adjust nullable handling for referencesopenmixedCore+80/−52
1880Fix `String.endsWith` for overlapping regex matchesopenmixedCore+15/−6
1879Replace VmObjectLike.iterateMemberValues() with VmObjectCursoropenmixedCore, Formatter, Parser+2628/−951
1878Housekeeping: replace repo-level CODE_OF_CONDUCTmergeddocs-only-+0/−77
1877Add pkl-binary encoding of Reference referent typeopenmixedCore+1269/−47
1875Improve cases where type nodes can turn into TypeNode.UnionOfStringLiteralsopenmixedCore, Parser+167/−29
1874Fix "unchecked or unsafe operations" warning in javacmergedmixedCore, Formatter, Parser+12/−10
1873Switch ad-hoc vmobject building to use VmObjectBuildermergedmixedCore+68/−74
1872Make `join` call overriden `toString()`mergedmixedCore+176/−40
1871Make typechecking more PE friendlyopenmain-onlyCore, Parser+344/−150
1869Elide capturing of closures in functions and objectsopenmixedCore, Formatter, Parser+749/−249
1867Improve error message when amending a property with no value setmergedmixedCore+149/−1
1865Fix native image buildmergedmain-onlyCore+7/−1
1864Mark overridable `external` properties as `const`mergedmixed-+31/−18
1862Fix invalid prefix when generating spring boot configmergedmixed-+173/−3
1861Fix CI on Windowsmergedtest-only-+1/−1
1860Fix `Duration.isoString` for sub-nanosecond valuesopenmixedCore+14/−4
1859Round fractional seconds in `Duration.isoString`openmixedCore+21/−7
1858Fix failing test on Windowsmergedtest-only-+2/−2
1857Switch inferred `new {}` expressions in method args to using frame slotsmergedmixedCore+422/−202
1855[docs] Document netRcHeaders in 0.33 release notesopendocs-only-+24/−2
1854Improve documentation on netRcHeaders methodmergedother-only-+14/−0
1853Optimize super property and super subscript nodesmergedmixedCore+206/−62
1850Avoid using `Object.toString()` for in-language APImergedmixedCore, Parser+165/−57
1849Add user generic methodsopenmixedCore, Formatter, Parser+1868/−790
1848Use `ChoiceFormat` for better plurals in error messagesmergedmixedCore+30/−11
1847Error when inferring a self type in a method argumentmergedmixedCore+40/−1
1846Escape characters that YAML cannot carry literallymergedmixedCore+48/−4
1845Optimize `new` inference in method argsmergedmixedCore+150/−59
1844Make generator nodes more PE friendlymergedmain-onlyCore+26/−10
1843Optimize annotations without object bodiesmergedmain-onlyCore+3/−12
1842Make enclosing frame lookup more PE friendlymergedmain-onlyCore+58/−59
1840Silence the pkl-gradle pom metadata warningopenbuild-only-+10/−0
1838Add `VmType` intermediate representation for typesmergedmixedCore, Parser+2163/−1479
1837Make listing/mapping typecasts more PE-friendlymergedmain-onlyCore+25/−27
1836Improve partial-evaluation when amending null parentsmergedmixedCore+1038/−41
1835Improve reading of const membersmergedmain-onlyCore+9/−2
1834Add net stdlib module with URL supportopenmixedConfig, Core+3641/−15
1824Add inference for let bindingsmergedmixedCore+192/−41
1823Add a CPU profileropenmixedCore, Gradle+1244/−18
1822Typed syntax for pkl:syntaxopenmixedCore, Formatter, Parser+8069/−7
1821Add pkl:syntax stdlib moduleopenmixedCore, Formatter, Parser+3327/−126
1817Add withNetrc support for evaluator settingsmergedmixedCore+1007/−0
1814Respect fixed and const properties when converting Map or Dynamic to TypedopenmixedCore+40/−1
1813Document public module APIsopenmain-onlyCore+104/−2
1811Throw when an object key `default` would become a `Dynamic` propertyopenmixedCore, Formatter+196/−1
1810Enforce trust levels on resource readsopenmixedCore+209/−93
1807Suppress pkl-gradle POM metadata warningopenbuild-only-+4/−0
1802Add `open` and `override` modifiers for class membersopenmixedCore, Formatter, Parser+900/−855
1783Add feature flagging systemopenmixedCore, Gradle, Parser+374/−69
1778Mark protobuf module as deprecatedmergedmixed-+14/−17
1768Add inference for implicitly typed `new` in method argumentsmergedmixedCore+677/−322
1728Bump gradle/actions/dependency-submission from 6.1.0 to 6.2.0openci-only-+2/−2
1708Add `this` as a self typemergedmixedCore, Formatter, Parser+1487/−561
1663Handle modulo by 0openmixedCore, Parser+23/−1
1585Add Scoped per-evaluation external properties to config evaluatorsopenmixedConfig, Core+710/−46
1562Follow symbolic links during glob expansionopenmixedCore+168/−5
1553Bump com.squareup:kotlinpoet from 1.6.0 to 2.3.0openbuild-only-+1/−1
1548Add custom CodeQL query to prevent project evaluator misuse in the CLIopenmixed-+19/−1
1461Add `import` destructuring and `amends`/`extends` of classes within modulesopenmixedCore, Parser+529/−70
1445Add `starlark` output formatopenmixedCore+786/−1
1412Change how VmValueRenderer renders Typed valuesopenmixedCore, Parser+49/−49
1332Add compose and andThen function to Function1openmixed-+46/−0
1320Fix NPE in VmTyped.hashCode when property is nullopenmain-onlyCore, Parser+6/−2
1257Add `Object.toMixin()` methodopenmixed-+1055/−5
1180Fix cyclic dependencies bugopenmixedCore+143/−9
1113Add `iterate` and `iterateIndexed` methods for `Collections` in the stdlibopenmixedCore+137/−24
1082Test for nested expession output as JSONopentest-only-+23/−0
1076PKL Config Scalaopenmixed-+1334/−1
980Fix hash code computation of cyclical objectsopenmixedCore+189/−65
970Java class and record generators and friends side-by-sideopenmixedGradle+4587/−161
919Kotlin ABI checksopenmixed-+15860/−1
831Delay instantiation of `cachedValues` to save memoryopenmain-onlyCore+46/−18
795Vendor org.graalvm.collectionsopenmixedCore, Formatter, Parser+2608/−492
658Implementation of delete (SPICE-0008)openmixedCore+462/−48
629[fix] Add support for handling remote file URIs.openmixedCore+14/−1
524Fix links to dependenciesopenmixed-+44/−30
197Improve docs and usability of EvaluatorBuilderopenmixedCore+617/−129
190Add summaries and groups to Gradle tasksopenbuild-onlyGradle+50/−1
149[Addition] Added IniRenderer and IniRenderer test cases #137openmixedCore+1233/−1
140Issue Template Formsopenmixed-+249/−0

Generated 2026-09-28 · arcade-agent baseline computed in 4.2 s.