Skip to content

Extensions and providers ​

PerfChecker separates interface packages, small API extensions and diagnostic worker providers. See interface packages for installation.

ExtensionActivated byCapability
BenchmarkToolsExtBenchmarkTools:benchmark collector
ChairmarksExtChairmarks:chairmark collector
DrWatsonExtDrWatsonparameter naming, cached production, suite runs
DocumenterExtDocumentergenerated performance pages and docs builds
DocumenterVitepressExtDocumenter + DocumenterVitepressVitePress-aware docs build
UnicodePlotsExtUnicodePlotsterminal plots
PProfExtFlameGraphs + PProfpprof/folded/speedscope profile artifacts
PropCheckExtPropCheckreproducible property corpus freezing
SuppositionExtSuppositionproperty corpus freezing on 64-bit Julia
TestItemRunnerExtTestItemRunner >= 1.3.2native item discovery and whole-item measurement
HTTPAdvisorExtHTTPoptional advisor transport

Add optional packages to the controller environment that needs them. A renderer does not become a measured-worker dependency. Collector packages are loaded in the target worker only when that backend requires them.

Version compatibility ​

Interface and analyzer compatibility belongs to the component that uses the package. The core no longer declares Oxygen, Pluto, Makie, WGLMakie, Bonito, JET, AllocCheck or SnoopCompile as optional dependencies. Aqua remains a core quality-test dependency, not a diagnostic extension.

PerfCheckerMakie owns the optional WGLMakie/Bonito rendering extension. Tool adapters and their Project.toml files live under providers/. Their availability is checked in the diagnostic worker, without importing the controller there.

The following upstream releases were inspected on 12 September 2026. These are compatibility facts, not a claim that all combinations passed collection tests. The publication inventory records actual versions for each qualified environment.

StackCurrent releasesConstraint
Web and interactive plotsOxygen 1.11.0, HTTP 2.6.7, Bonito 5.2.0, Makie 0.24.14, WGLMakie 0.13.14Julia >= 1.11; no Pluto 1.0.3 in this environment
NotebookPluto 1.0.3HTTP 1; use a separate environment from the latest web stack
Julia 1.10 webOxygen 1.10.2, HTTP 1.11.0Compatible fallback for the minimum Julia version
Inference analysisJET 0.12.1Julia >= 1.12; older JET lines remain admitted

The HTTP.jl 2 migration is already in the tagged Oxygen 1.11.0 release, published 28 August 2026. The checked master revision is identical to that tag. Its Project.toml requires HTTP >= 2.4 and Julia >= 1.11. There is no pending master-only correction to adopt. Pluto's HTTP 1 constraint still prevents combining the latest notebook and web stacks.

HTTP.jl package versions 1 and 2 are dependency generations; they are distinct from the HTTP/1.1 and HTTP/2 wire protocols. PerfChecker tests its two dependency stacks separately. A resolved environment proves dependency compatibility; execution, rendering and correctness checks provide the integration evidence.

DrWatson ​

This example uses the plan built in the software-suite tutorial. Add DrWatson to that controller environment before loading the extension.

julia
using PerfChecker, DrWatson

params = drwatson_parameters(plan)
name = drwatson_savename(first(plan.runs))
result, filename = drwatson_produce_or_load(first(params);
        directory = "perf/results", tag = false) do parameters
    Dict("parameters" => parameters, "note" => "Saved experiment configuration")
end

drwatson_run_suite combines structured experiment parameters, resumable output, and the normal PerfChecker runner. Cache reuse remains explicit in run evidence.

Property-based workloads ​

PropCheck and Supposition adapters freeze minimized/counterexample inputs into a portable corpus. This makes a stochastic discovery reproducible before it becomes a performance fixture. Corpus generation is not mixed into benchmark sampling; measure the frozen examples in a separate deterministic run.

PerfChecker's core supports 32-bit Julia. The optional Supposition backend requires 64-bit Julia: the published Supposition 0.3.5 fails to load on 32-bit Julia because its choice engine passes UInt32 to a method requiring UInt64. The upstream defect has no published fix. Calling freeze_supposition_corpus without loading the dependency gives an actionable error on 32-bit Julia; it cannot intercept a failure inside using Supposition itself.

On 32-bit Julia, generate a corpus with PropCheck, or replay previously frozen inputs whose values and workload support that architecture:

julia
using PerfChecker, PropCheck

freeze_propcheck_corpus("inputs.json", PropCheck.itype(Int8); count=40, seed=7)
inputs = read_property_corpus("inputs.json")["cases"]

The core test suite exercises this seeded generation and replay on Linux 32-bit Julia. Supposition has its own 64-bit qualification environment, with actual generation, encoding, metadata and replay checks; it is not a core test dependency.

Add a Julia backend ​

A backend implements the hook surface for its Val{:backend}:

  • initpkgs loads required packages in the worker;

  • default_options declares defaults;

  • prep prepares fixtures;

  • check performs measurement;

  • post normalizes evidence;

  • optionally cleanup and stop_before_post manage exit-flushed artifacts.

The backend must define versioned measurement definitions, units, preference, scope, perturbation, capability checks, deterministic fixtures, and TestItems. It should return data through the common bundle grammar before gaining UI or CI claims.

Add another programming setup ​

Use ExternalCommandSpec and perfchecker-provider-result/1. Qualify each provider independently with a capability manifest and conformance suite. The shared protocol is deliberately language-neutral, while measurement semantics remain specific to the actual runtime and tools.

Open source · Report an issue · Contributions welcome