Wetware World

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.

Extension
.wwd
Media type
application/vnd.wwd+zip
Container
ZIP
Version
0.1 draft

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.

package layoutunzip -l
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
Archive members
EntryPresenceWhat it holds
mimetyperequired, first entry, STOREDExactly 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.jsonrequired, exactly oneThe 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.jsonrequired, named by manifest rootThe component: root_component, revision, components with kind, frame, dimensions, regions, interfaces, biology and fields, and the acceptance_criteria.
wwd/results.jsonpresent only in an as-built packageThe 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 filesoptional, each manifestedDelegated 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.

the manifestwwd/manifest.json
{
  "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": []
}
two fieldswwd/design.json
{
  "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.

an acceptance criterionwwd/design.json
{
  "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.

All seven example packages, field by field

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.

Core causal roles
causal_roleMeaning
controlA 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.
responseA 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.
contextA quantity observed but not chosen. Donor identity, passage number on receipt, an ambient excursion during transit, reagent lot variation.
derivedA 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.

reference validatorshell
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.

Stated non-goals
Not thisWhy the specification says so
Not a bioprinter instruction languagePrinter 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 formatsThe 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 solverA 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 ontologyWWD 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 guaranteeThe specification is explicit that a structurally conformant package does not guarantee manufacturability, fitness for purpose, sterility, safety, efficacy or biological function.
Not an adopted standardStatus 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.