File format reference
WWD file format (.wwd)
Reference for the .wwd file: definition, extension and media type, archive contents, an excerpt, how to open and validate one, and the stated non-goals.
Definition
A .wwd file is a WWD (Wetware Design) package: a ZIP container carrying the media type application/vnd.wwd+zip, which describes an engineered living component as geometry plus spatially varying property fields, together with the statistical acceptance criteria the component must meet and, once it has been made, the measured results it produced. The archive holds an uncompressed first entry named mimetype, one wwd/manifest.json listing every payload with its byte length and SHA-256 digest, and one wwd/design.json holding the component itself; an as-built package adds wwd/results.json. Every quantity carries a unit, every scientific assertion carries both a provenance class and a causal role stating whether the producer set the value or the living system produced it, and biological identity is delegated to existing vocabularies such as the Cell Ontology and NCBI Taxonomy rather than minted by WWD. The format is at version 0.1 draft.
WWD stands for Wetware Design. The format exists because a finished living component with a specification, this geometry, these cells, this alignment, this force, verified by this assay, has no file to travel in. Cells, media, scaffolds and reagents are already catalogue items; the finished construct moves between laboratories as a PDF, an email thread and a phone call, and two suppliers quoting the same muscle strip are not quoting the same thing.
Extension and media type
What the specification fixes, and what it leaves open.
A conforming package MUST be a ZIP archive and a package filename SHOULD end in
.wwd. The extension MUST NOT encode the specification version: a file
written against 0.1 and a file written against a later version are both
.wwd, and the version is read from the wwd key inside the
manifest and the design document.
The media type is application/vnd.wwd+zip. It appears twice, once as the
uncompressed first archive entry named mimetype and once in the manifest,
and a validator checks that the two agree. Two part media types are used inside the
package: application/vnd.wwd.design+json for the design document and
application/vnd.wwd.results+json for the results document. The published
specification defines these media types and claims no IANA registration for them.
ZIP entries MUST use STORED or DEFLATE compression, entry names MUST be UTF-8 in
Unicode NFC form using / as separator, and names MUST NOT be absolute or
contain .. segments. Both ordinary ZIP and ZIP64 must be readable.
Archive contents
Member names, in document order.
MuscleStrip-10.wwd a ZIP archive
├── mimetype application/vnd.wwd+zip, stored, first entry
└── wwd/
├── manifest.json contents, roles, byte lengths, sha256 integrity
├── design.json the component and its acceptance criteria
└── results.json measured results, present only once built | Entry | Presence | What it holds |
|---|---|---|
| mimetype | required, first entry, STORED | Exactly the bytes application/vnd.wwd+zip. No leading or trailing whitespace, no byte-order mark, no newline. The rule ODF and EPUB use, so file-type detection works on the first bytes. |
| wwd/manifest.json | required, exactly one | The binding document: specification version, package media type, package identifier, the root design document, extensionsUsed and extensionsRequired, one file record per payload with logical name, media type, byte length, integrity digest and role, plus external asset records and relationships. |
| wwd/design.json | required, named by manifest root | The component: root_component, revision, components with kind, frame, dimensions, regions, interfaces, biology and fields, and the acceptance_criteria. |
| wwd/results.json | present only in an as-built package | The realization, the measured results linked to criterion identifiers, observed context values, a yield statement, the provenance graph, and any simulation models, runs and results. |
| Other payload files | optional, each manifested | Delegated assets carried by role: geometry, field_data, assay_evidence, simulation_model, solver_deck, simulation_result, measured_result_data, preview, protocol, provenance, opaque. An asset with role opaque MUST be preserved byte for byte by a rewriter that does not understand it. |
Every payload file except mimetype and wwd/manifest.json has
exactly one manifest record giving its byte length and a sha256- digest, and a
consumer MUST verify both before using the asset for manufacture, acceptance or simulation.
A package whose design was altered in transit is otherwise indistinguishable from one that
was authored that way.
Excerpt
Taken from the shipped conformance vectors and example packages.
{
"wwd": "0.1",
"mediaType": "application/vnd.wwd+zip",
"package_id": "urn:uuid:11111111-2222-4333-8444-555555555555",
"root": "wwd/design.json",
"producer": "wwd.test-suite",
"extensionsUsed": [],
"extensionsRequired": [],
"files": [
{
"name": "wwd/design.json",
"mediaType": "application/vnd.wwd.design+json",
"bytes": 2816,
"integrity": "sha256-MGZE1Q7xMqZBkeHt4YgGfxh9RSg+r5H8TBtR34D29rU=",
"role": "design"
}
],
"external": [],
"relationships": []
} {
"property": "wwd:ecm_stiffness",
"quantity_kind": "modulus",
"provenance": "designed",
"causal_role": "control",
"imposed_by": "protocol/gel-casting#step-2",
"value": "12 kPa"
}
{
"property": "wwd:fiber_alignment",
"quantity_kind": "order_parameter",
"provenance": "designed",
"causal_role": "response",
"order_basis": "S2D",
"measurement_plane": "xy",
"director": [1.0, 0.0, 0.0],
"value": "0.72 1"
} Structurally identical, causally opposite. The producer sets matrix stiffness and names the protocol step that sets it. The tissue produces fibre alignment, so it is declared a response and stated as a target with an acceptance criterion.
{
"id": "aaaaaaaa-1111-4111-8111-111111111111",
"tag": "AC-001",
"title": "peak twitch force",
"target": "component/strip",
"measurand": { "quantity": "peak_twitch_force", "unit": "uN" },
"statistic": "median",
"comparator": ">=",
"limit": 500,
"criticality": "critical",
"tests_axis": "response",
"method": { "id": "WWD-TWITCH-001" },
"sampling": { "n": 12, "selection": "random" }
} Four enforced parts: the measurand with a unit from the Core registry, the statistic, the sampling plan, and the decision rule. Location and dispersion are separate linked criteria, never one compound statistic.
Two required tags on every value
Provenance says where a number came from. Causal role says what determined it.
Every field, state value, model input, model output, acceptance criterion and result
declares a provenance class, one of designed, simulated,
measured, inferred or assumed, and a causal role.
Neither may be omitted and neither has a default.
| causal_role | Meaning |
|---|---|
| control | A quantity the producer sets. An intervention. Matrix stiffness, seeding density, anchor spacing, stimulation schedule, medium formulation, incubation temperature. A control MUST name the means that imposes it. |
| response | A quantity the living system determines. Fibre alignment, twitch force, firing rate, differentiation purity, viability. Targetable and measurable, never directly settable, and never written as a manufacturing instruction. |
| context | A quantity observed but not chosen. Donor identity, passage number on receipt, an ambient excursion during transit, reagent lot variation. |
| derived | A quantity computed from others. It MUST declare its inputs and the rule that produced it. |
The Core property registry fixes the causal class of each registered term, and a package
may not locally contradict it: wwd:fiber_alignment is a response in every
package. A validator reports the attempt as A8_RESPONSE_IMPOSED.
How to open and validate one
Any unzip tool reads it. Two validators check it.
A .wwd file is an ordinary ZIP archive, so
unzip -l package.wwd lists the entries and
unzip -p package.wwd wwd/design.json prints the design document as JSON.
Nothing about reading a package requires WWD software.
To check conformance, the browser validator on this site reads the file locally and
uploads nothing; it covers the container layer, the P0x diagnostic codes.
The Python reference validator covers all three layers, structure, semantics and
design rules, and runs offline with the standard library only.
python -m wwd component.wwd # validate
python -m wwd component.wwd --schema # cross-check the JSON Schemas
python -m wwd component.wwd --dfm # design rules: will it work?
python -m wwd component.wwd --conformance # which classes does it reach?
python -m wwd component.wwd --causal # the interventional projection Non-goals
As stated in the specification.
| Not this | Why the specification says so |
|---|---|
| Not a bioprinter instruction language | Printer process metadata such as a 3MF or 3MFBio part MAY be carried as a delegated asset, but MUST NOT be treated as the core architecture. WWD Core covers printed and non-printed components equally. |
| Not a replacement for existing formats | The specification states that WWD 0.1 does not replace 3MF, STEP, STL, VTK, XDMF, OME-Zarr, NIfTI, NRRD, NWB, SBOL, SBML, CellML, ISA or PROV. Geometry, images, arrays, recordings and solver decks are delegated to them. |
| Not a solver | A design stays valid and conformant with no simulation content at all. A simulated value MUST NOT be presented as a measured value, and a simulation result cannot satisfy a lot acceptance criterion unless the criterion explicitly permits simulation. |
| Not an ontology | WWD mints no cell types, no unit symbols and no anatomy terms. Species use NCBI Taxonomy, cell types use the Cell Ontology, anatomy uses UBERON, chemicals use ChEBI, units use UDUNITS-2-compatible strings, established lines use Cellosaurus and RRID, genetic constructs use SBOL. |
| Not a guarantee | The specification is explicit that a structurally conformant package does not guarantee manufacturability, fitness for purpose, sterility, safety, efficacy or biological function. |
| Not an adopted standard | Status is 0.1 draft. It is implementable and expected to change. |
Questions
What is a .wwd file?
A .wwd file is a WWD package: a ZIP archive describing an engineered living component, such as a muscle strip, a neural culture on an electrode array or an organoid. It carries the component geometry, the property fields over that geometry, the acceptance criteria the component is held to, and, in an as-built package, the results measured against those criteria.
What is the .wwd file extension used for?
It marks a package written against the WWD specification, an open exchange format for engineered living components published by Wetware World. The specification says a package filename SHOULD end in .wwd, and that the extension MUST NOT encode the specification version: the version lives inside the file, as the wwd key in the manifest and the design document.
What is the MIME type of a .wwd file?
application/vnd.wwd+zip. The first entry of the archive is named mimetype, is stored uncompressed, and contains exactly those bytes with no whitespace, byte-order mark or newline, so a reader can identify the format without inflating anything. Two part media types appear inside the package: application/vnd.wwd.design+json for the design document and application/vnd.wwd.results+json for the results document.
How do I open a .wwd file?
Any unzip tool opens it. unzip -l package.wwd lists the entries and unzip -p package.wwd wwd/design.json prints the design as JSON. To check that a package is well formed, drop it into the browser validator on this site, which reads the file locally and uploads nothing, or run the Python reference validator with python -m wwd package.wwd.
Is WWD the same thing as 3MF or 3MFBio?
No. 3MF and its 3MFBio extension describe a print job: bioink parameters, nozzle and cartridge settings, workflow steps. WWD describes the article: what the tissue must become, which values the producer imposed and which the biology produced, and what a lot measured. A bioprinted WWD package delegates its fabrication protocol to a 3MF or 3MFBio part carried inside the same archive.
What is inside wwd/design.json?
A design root naming the root component and the design revision, one or more components with their kind, frame, dimensions, regions, interfaces and biological populations, property fields on those components, and the acceptance criteria. A field states a property term, a quantity kind, a provenance class, a causal role, and a value that is either a quantity string such as "12 kPa" or a field object with an explicit backing.
Why does a bare number fail validation in a .wwd file?
Because a unit is required on every dimensional quantity. The specification states that a bare JSON number MUST NOT serve as a dimensional quantity in a scalar-or-field slot, and a validator reports it as C02_BARE_NUMBER, an error rather than a warning. Dimensionless values use the unit 1.
Is WWD an adopted standard?
No. It is at 0.1 draft status: implementable, explicitly expected to change, and published so that a second implementer can build against it. There is no working group and no standards-body relationship. The specification text is CC BY 4.0, the schemas, validator, examples and tests are Apache-2.0, and the registry vocabularies are CC0 1.0. The format is not patented and is stated as not to be.
Continue
Every page on the format.
- How to open a .wwd file. Unzip, browser validator, reference validator.
- The WWD 0.1 draft specification. All 25 normative sections, summarised with anchors.
- WWD compared with 3MF, 3MFBio, STEP, STL, SBML and SBOL.
- Seven example packages, each shown field by field.
- The Core registries. Properties, assays and closed vocabularies.
- Downloads. Example packages and JSON Schemas.