Dokime · Test Automation
Test Automation Your Whole Team Can Run.
Dokime runs repeatable hardware and software test procedures, records everything that happened while they ran, and hands you a report.
It is one interface over a whole framework of test automation and data collection: an author names only what a step does, a tester presses start, and everything between the two is work the platform has already done.
Rust · Pre-1.0 · Windows and Linux
- +Bench Tests
- +Device Qualification
- +Manufacturing Checks
- +Integration Campaigns
- Procedure
- Which test ran, and the exact version of it.
- Inputs
- The parameters the run was given, frozen at the moment it started.
- Measurements
- Every sample the instruments produced, with its own timestamp.
- Decisions
- What the operator was asked, and what they answered.
- Evidence
- Logs, captures, and exports, held with the run that made them.
- Verdict
- Passed, failed, or indeterminate, and the rule that decided it.
One file. It opens in a browser with no server and no account.
- Maturity
- Pre-1.0
- License
- MIT OR Apache-2.0
- Platforms
- Windows and Linux
Before and After
Manual Versus Dokime
Nothing about the engineering changes. What changes is how much of it a person has to carry by hand.
Where the procedure lives
TodayIn a document, a spreadsheet, and somebody's notes, none of which agree.
With DokimeIn one catalog, with its parameters and the rule that decides the result.
How a run starts
TodayAn engineer sets each condition by hand and stays at the bench while it runs.
With DokimeAn operator picks the procedure, confirms the inputs, and presses start.
What gets recorded
TodayWhatever somebody remembered to write down, next to whatever the instruments exported.
With DokimeMeasurements, files, and operator answers, attached to the run that produced them.
When the report exists
TodayDays later, assembled from notes by someone already working on the next job.
With DokimeThe moment the run ends, generated from the run itself.
What Survives the Run
A finished execution keeps its measurements, the operator responses it asked for, the criterion that decided it, and the evidence attached to it. None of that depends on who was standing at the bench.
What Two Cycles Have in Common
A template expands the same declared parameters into the same cases every time. A cycle from March and a cycle from September carry comparable inputs and comparable rows rather than two people's habits.
What a Run Records
Which revision, which specimen, which settings, which operator: each execution already carries them. A tester answers the questions the procedure asks, and is asked for nothing else.
Fig. 1 · A Worked Example
One Charger, Sixty Operating Points
An onboard charger in design validation. Two endurance runs: high-temperature operating endurance, and power-temperature cycling endurance across an operating-point matrix.
- Input voltage
- 3 levels
- Output power
- 4 levels
- Ambient temperature
- 5 levels
3 × 4 × 5 = 60 operating points
60 × 3 repetitions = 180 executions
A person can hold one operating point at a time. A cycle holds the whole matrix, and the matrix is what the requirement actually asks for.
Setup Time
By HandNone worth naming. The setting up is the running.
With DokimeAbout 10 minutes, composing the cycle from the suite's parameters.
Attention Time
By HandRoughly 8 hours at the bench: set a point, wait for it to settle, read, write it down.
With DokimeNone after the start. The cycle runs unattended and keeps going overnight.
Repetitions
By HandAs many as somebody has hours for, which in practice means one pass.
With DokimeAs many as the schedule allows. Three passes cost the same 10 minutes to plan.
Evidence
By HandA notebook, plus whatever files the instruments happened to export.
With DokimeEvery sample, file, and decision, stored against the execution that produced it.
Illustrative figures, not a measured benchmark. Your bench, your instruments, your numbers.
The Desktop App
The Screens a Tester Uses
One developer writes the procedure, and ten testers push a button. That split is the whole point. A tester never opens a terminal, never edits a file, and never installs a toolchain. They open the app, choose what to run, and watch it happen.
Surface 01
Plan
Surface 02
Execution

Surface 03
Cycle
Surface 04
Explore
Surface 05
Settings
The Export
Report
Operator Prompts
When a procedure needs a person, the run pauses and puts the question on screen. The question and the answer both end up in the record.
Live Plots
Measurements stream into time series, histograms, and distributions as they arrive, so a run that is going wrong is visible before it finishes.
The Exported Report
The report is self-contained. It travels by email, sits in a folder, and opens years later without anything to install.
Plate II · What a Run Records
The Record Vocabulary
A template turns its parameters into concrete cases. A cycle holds them. Each execution carries its own measurements, its own criteria, and its own evidence. None of it is a label in a user interface; each term names a durable part of the record.
- Suite
- mini.checksThe grouping the cycle was planned from.
- Template
- mini.checks.pulseIts parameters became immutable inputs at admission.
- Steps
- start · stream · completeEach phase carries its own result.
- Criterion
- mini.checks.pulse.acceptanceThe declared rule that decided the outcome.
- Channel
- mini.pulseTyped rows, sampled every 100 ms.
- Records
- mini.run.started · mini.run.completedDurable occurrences with a declared contract.
Read from plugins/mini. The report carries the same record offline.
Traceability
Every execution already carries the tool that ran it, the host it ran on, the environment it ran in, and the execution it belongs to. Nobody types those, which is the only reason they are reliable a year later.
Read the Vocabulary- Suite
- A grouping of test templates and their execution contract.
- Template
- A definition that generates one or more concrete test cases from parameters.
- Case
- A concrete unit of work inside a cycle.
- Cycle
- The durable aggregate for a planned or running set of cases.
- Execution
- A run attempt within a cycle, including lifecycle state and output.
- Step
- A named phase of case execution with a result.
- Criterion
- A declared validation rule used to decide a result.
- Prompt
- A runtime request that pauses for an operator-supplied response.
- Telemetry Sample
- A payload published to a declared channel and stored as a tracked series row.
- Record
- A durable product occurrence with a declared contract.
- Evidence
- Structured or file-shaped material attached to product records.
- Artifact
- Durable bytes stored outside the journal and addressed by metadata.
- Traceability
- The relationship between tests and requirement-like items or snapshots.
Fig. 2 · Plugins and the Host
The Plugin Host
A plugin is a separate program with its own dependencies and its own vendor libraries. It teaches the platform one thing: an instrument, a stage, a service, a test suite. The host runs them, routes between them, and owns the record none of them can write alone.
Scroll the figure sideways
Interaction 1
Routes Between Plugins
Interaction 2
Record Admission
Fig. 3 · Three Teams, One Toolchain
Building and Releasing a Plugin
A plugin is built the way any other project is built: created, developed, tested, and released from its own repository. What comes out is one versioned file, and the host takes it from there.
Scroll the figure sideways
Packaging
The Plugin Repository
Identity
Bundle Identity
Toolchain
The Command Set
Admission
Compatibility Checks
Authoring
Authoring a Step
An author declares a step, a criterion, a channel, and the parameters a template expands into cases. Each declaration states what that one thing is. The machinery that schedules it, streams it, stores it, and renders it is already written, and it is not written here.
- +Scheduling, retries, pausing, resuming, and cancellation.
- +Expanding parameters into the concrete cases a cycle will run.
- +Storing measurements, evidence, and operator answers durably.
- +Rendering the report, and making it open without a server.
Both figures are read from the repository’s main line when this page is built, between anchors in the text rather than at line numbers. If the source moves, the figure leaves rather than lies.
/// The first phase: say the run has begun.
///
/// The host advances its checklist on the step's id, which the engine
/// reports before it calls this. What the step itself does is emit the
/// record this template declared.
#[dokime::step(label = "Start")]
fn start(&mut self, ctx: &mut StepContext<'_>) -> Result<(), Error> {
ctx.publish(RunStarted {});
Ok(())
}The attribute declares the phase; the body publishes the one thing this phase means. A tester sees that label move on a checklist, and a reader of the report sees the record it emitted.
/// One reading of this process and the machine under it.
#[dokime::stream(id = "mini-sidecar.system", window = 4096, label = "Mini Sidecar System",
description = "Process and system CPU and memory observed by the mini sidecar.")]
pub(crate) struct SystemRow {
process_cpu_percent: f64,
process_memory_bytes: i64,
system_cpu_percent: f64,
system_memory_used_bytes: i64,
}A field’s column type is resolved from its declared type, so a number column is a number column because the compiler said so. Declaring the row is the whole of declaring the channel: there is no second place to keep in agreement.
Design Intent
The Division of Labour
Nobody outside your lab knows your instruments, and a platform that pretended to would be wrong in a different way for every team. So it does not pretend. It gives you somewhere exact to put that knowledge, once.
Below the Line
What Dokime Gives You
The parts that are the same in every lab, built once and kept working by somebody who is not you.
- The Host
- Scheduling, execution, routing, coordination, and the record.
- The Desktop App
- The five screens a tester uses, and the reports they export.
- The Plugin SDK
- The declarations, the toolchain, and the bundle format.
- The Records
- Durable, contracted, and traceable without anyone typing them.
- The Reports
- Self-contained, offline, and generated by the run itself.
Above the Line
What You Bring
The parts that are different in every lab, which stay where the knowledge about them already is.
- The Plugins That Know Your Instruments
- Your supplies, loads, chambers, analyzers, and the one fixture nobody else has.
- Your Test Stages
- What design validation means here, and what has to be true before a unit moves on.
- Your Requirement Tracker
- Wherever the requirements already live. A plugin reaches it; the platform does not replace it.
- Your Data Platform
- Where results go afterwards, and in whose schema. The run is a producer, not an owner.
- Your Lab Hardware
- The bench, the racks, the wiring, and the years of knowing what breaks on them.
Dokime is the substrate, and the test hub your organization actually runs is the thing you build on top of it.
That hub carries your catalog, your stages, your instruments, and your name. What it does not have to carry is a scheduler, a record store, a report renderer, or a plugin boundary, because those arrive underneath it and stay open source. Write one plugin for the instrument your team already understands, and everybody else gets to run it by pressing a button.
MIT OR Apache-2.0
Contributing
All of Dokime is public: the contracts, the SDK, the runtime, the server, the desktop shell, and the reference plugins that this page quotes from.
Bug reports, focused fixes, documentation improvements, and small plugin examples are welcome. The contributing guide carries the development setup, the validation commands, and what a merge request is expected to describe.
- License
- MIT OR Apache-2.0, at your option
- Platforms
- Windows and Linux
- Maturity
- Pre-1.0. Pin the exact revision you test against.
Known Limits
The core workflow is usable, but interfaces and plugin contracts may still change between revisions, which is why a revision is worth pinning. Continuous integration covers the Linux container checks; installation and hardware behaviour on Windows still want validation on real machines.