Veydrin Open Data Standard
The base envelope standard for all Veydrin domain data exports. Domain-specific standards — OHDS, OCEADS, and future specs — inherit this envelope and define their own payload on top.
VODS defines the common contract that all Veydrin-family data exports share. It does not specify what data a particular domain exports — that is the responsibility of domain specs like OHDS (Open Hive Data Standard) or OCEADS. VODS specifies the envelope: the identity, mode, privacy model, and extension system that every conforming export carries regardless of domain.
Any VODS-conforming document can be processed by a generic VODS parser without knowing anything about the domain payload. Domain-specific parsers receive a VODS-valid document and additionally interpret the payload according to their own spec.
Existing open data formats either target enterprise and institutional use cases, focus on semantic web interoperability, or define packaging without built-in privacy guarantees. VODS fills a different gap: a minimal, privacy-first data envelope designed for individuals, communities, and citizen science — where the person who generates the data controls how it is identified, shared, and used.
The anonymization model is not optional. Internal identifiers never leave the device. And because every Veydrin domain specification inherits the VODS envelope, these protections extend automatically to beekeeping data (OHDS), controlled environment agriculture (OCEADS), household financial data (VFDS), and any future domain built on this base.
org.ninthstar.nemorith) implements VFDS v1.0, which inherits the VODS envelope. If you ship a VODS-conforming export, open an issue on the protocols repository and we will list it here.
A VODS-conforming document is a JSON object encoded as UTF-8 per RFC 8259. The following root-level fields constitute the VODS envelope. All required fields MUST be present. Domain specs add their own required and optional fields alongside these.
.vods.json. Domain specs MAY define their own extensions (e.g., .ohds.json, .vfds.json) that imply VODS envelope conformance.
| Field | Type | Req? | Description |
|---|---|---|---|
vods_version |
string | req | VODS specification version this document conforms to. Currently "1.0". Consumers MUST accept any version with a matching major number. |
export_id |
string (UUID) | req | Randomly generated UUID v4, created fresh for each export. Never reused. Never derived from any internal identifier. |
export_date |
string (ISO 8601) | req | Timestamp of when this export was generated. Full datetime with timezone offset or Z suffix required. Example: "2026-03-09T14:22:00Z". |
export_mode |
enum | req | Anonymization mode governing how identifiers in this export are handled. MUST be "anonymous" or "tracked". See §3. |
source_app |
string | opt | Reverse-domain package identifier of the application that generated this export (e.g., "org.veydrin.apiara"). RECOMMENDED for all exports. Enables provenance tracking across multiple applications sharing the same data standard. |
source_app_version |
string | opt | Semantic version of the submitting application. SHOULD be present when source_app is present. |
contributor_org |
string | opt | Organization slug identifying the group this contributor belongs to (e.g., "honey-for-humanity"). Set by the user in the application. Enables organizations to track their members' aggregate contributions without requiring accounts or centralized management. The receiving server MAY auto-register unknown slugs on first submission. |
extensions |
object | opt | Namespace-keyed object for organization-specific fields. See §4. Consumers MUST ignore unrecognized extension namespaces. |
ohds_version) and payload arrays or objects alongside these envelope fields. The VODS envelope fields MUST always be present; domain fields follow the domain spec's own requirements.
{
"vods_version": "1.0",
"export_id": "a3f8c2e1-04b7-4d9e-b221-7f3a09cc1d82",
"export_date": "2026-03-09T14:22:00Z",
"export_mode": "anonymous"
// domain payload fields follow here
}
{
"vods_version": "1.0",
"export_id": "a3f8c2e1-04b7-4d9e-b221-7f3a09cc1d82",
"export_date": "2026-03-09T14:22:00Z",
"export_mode": "anonymous",
"source_app": "org.veydrin.apiara",
"source_app_version": "2.0.0",
"contributor_org": "honey-for-humanity"
// domain payload fields follow here
}
contributor_org field enables organizations to track their members' aggregate contributions. It does not affect how the data is processed, validated, or stored. Servers MAY auto-register unknown org slugs on first submission. Organizations can then view their collective impact on the receiving platform.
Annotations (//) are shown for readability. Valid JSON does not permit comments — omit them in production output.
VODS defines two privacy modes for data exports. Every domain spec MUST honour these modes in how it generates and handles any identifiers in the payload. The export_mode field declares which mode applies to the entire document — mixed-mode documents MUST NOT be produced.
| Mode | Identifier behavior | Typical use |
|---|---|---|
"anonymous" |
All payload identifiers (entity refs, location refs, etc.) are randomized fresh for each export. There is no stable relationship between identifiers across exports. The same physical entity will have a different ref in every anonymous export. | One-time survey submissions, public data sharing, any context where re-identification across exports must be impossible by design. |
"tracked" |
Payload identifiers are stable pseudonyms derived per program via a salted hash of the internal entity ID. The same entity produces the same ref for the same destination program, but a different ref for a different program. Internal database IDs are never exposed. | Longitudinal programs requiring repeated measurement of the same entities over time (e.g., sentinel monitoring, cohort studies). |
Applications implementing tracked mode MUST derive stable pseudonyms using a cryptographic approach that satisfies the following properties:
The recommended approach is HMAC-SHA256 keyed with a per-program salt stored in the application's private data, never included in the export. The specific algorithm is left to the implementing application as long as the three properties above are satisfied.
The extensions object provides a standardized namespace for organization-specific fields that fall outside the VODS envelope and outside the applicable domain spec. Extensions allow organizations to attach custom data to exports without polluting the core field space and without breaking conforming parsers that don't understand them.
Each key in the extensions object is a namespace identifier chosen by the organization. The value is a JSON object containing that organization's custom fields. There is no central registry — organizations choose their own namespace keys. Short, lowercase, collision-resistant names are recommended.
{
"vods_version": "1.0",
"export_id": "...",
"export_date": "2026-03-09T14:22:00Z",
"export_mode": "tracked",
// domain payload here...
"extensions": {
"hfh": { // Hives for Heroes namespace
"program_cohort": "Spring 2026",
"mentor_id": "M-42"
},
"acme_research": { // Another org's namespace
"study_arm": "control"
}
}
}
VODS uses semantic versioning (MAJOR.MINOR) for the vods_version field. The contract governing what each version increment means is part of the standard itself.
MINORMINORMAJORMAJORWhen a field, enum value, or behavior is scheduled for removal, it MUST first be marked deprecated in a MINOR version release. Deprecated features continue to function, but implementers SHOULD begin migrating to the replacement. Deprecated features MUST NOT be removed earlier than the next MAJOR version. Each deprecation notice MUST identify what replaces the deprecated feature.
A consumer that implements VODS vN.x MUST:
vods_version. A VODS minor bump does not imply an OHDS minor bump, and vice versa.
A document or application claims VODS v1.0 conformance by meeting all of the following rules. Partial conformance is not recognized. A machine-readable schema for automated validation is available at vods-v1.0.schema.json.
vods_version, export_id, export_date, export_mode.export_id is a valid UUID v4, generated fresh for each export, and is never reused across exports from the same application.export_date is a valid ISO 8601 datetime string including timezone information. Date-only strings are not acceptable.export_mode. No raw internal identifiers appear in any exported document regardless of mode.extensions object, not at the document root.This section is informational. It describes the expected pattern for domain specifications that build on VODS. It does not impose additional conformance requirements on VODS itself.
ohds_version, oceads_version).export_mode.extensions namespace.{
// VODS envelope (required by VODS)
"vods_version": "1.0",
"export_id": "a3f8c2e1-04b7-4d9e-b221-7f3a09cc1d82",
"export_date": "2026-03-09T14:22:00Z",
"export_mode": "anonymous",
// OHDS domain fields (required by OHDS)
"ohds_version": "1.0",
"inspections": [
{
"inspection_date": "2026-03-01",
"apiary_ref": "A-9f4c",
"hive_ref": "H-2a71",
"colony_status": "alive"
}
],
// Optional extension data
"extensions": {
"hfh": { "program_cohort": "Spring 2026" }
}
}
vods_version tells any generic VODS processor what envelope rules apply. ohds_version tells an OHDS-specific processor what domain schema applies. A VODS processor doesn't need to know the OHDS version to validate the envelope. An OHDS processor needs to know both. The two fields serve different consumers and evolve independently.
VODS is a data format specification, not a transport protocol. It does not define wire-level security, authentication, or encryption. The following considerations apply to implementations producing or consuming VODS-conforming documents.
VODS does not include built-in integrity verification such as checksums or digital signatures. Applications requiring tamper detection or authenticity guarantees MUST implement these at the transport or application layer. Documents containing sensitive data SHOULD be transmitted over encrypted channels and encrypted at rest.
The extensions object permits arbitrary nested values under namespace keys. Consumers MUST sanitize extension values before rendering them in user interfaces or passing them to interpreters. Unsanitized string values from extensions could enable cross-site scripting or injection attacks in downstream systems.
In tracked mode, pseudonyms derived from weak or predictable salts may be reversible through brute-force or dictionary attacks, particularly when the space of internal identifiers is small. Implementations SHOULD use cryptographically random salts of at least 32 bytes. The anonymization model protects against casual re-identification but is not designed to resist a motivated adversary with access to auxiliary datasets. Applications handling high-sensitivity data SHOULD layer additional protections beyond what VODS requires.
The VODS envelope places no size limits on the extensions object or on domain payload fields. Consumers SHOULD enforce reasonable limits on incoming document size, nesting depth, and array length to prevent memory exhaustion from malformed or adversarial input.
Conformance rule C4 prohibits raw internal identifiers in exported documents. However, VODS cannot enforce this at the format level — enforcement is the producing application's responsibility. Implementers SHOULD audit their export pipelines to verify that no internal database IDs, user account identifiers, device identifiers, or filesystem paths leak into exported documents.
| Reference | Title | Relevance |
|---|---|---|
| RFC 8259 | The JavaScript Object Notation (JSON) Data Interchange Format | VODS documents are JSON objects per this specification. |
| RFC 9562 | Universally Unique Identifiers (UUIDs) | export_id is a Version 4 UUID per §5.4 of this RFC. |
| RFC 3339 | Date and Time on the Internet: Timestamps | export_date follows this profile of ISO 8601. |
| RFC 2119 | Key words for use in RFCs to Indicate Requirement Levels | Normative keyword definitions (MUST, SHOULD, MAY). |
| RFC 8174 | Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words | Clarifies that only uppercase keywords carry normative weight. |
| RFC 2104 | HMAC: Keyed-Hashing for Message Authentication | Recommended algorithm for tracked-mode pseudonym derivation. |
| Version | Date | Changes |
|---|---|---|
1.0 |
2026-03-31 | Added optional envelope fields: source_app (application provenance), source_app_version, contributor_org (organization attribution for group contribution tracking). Updated JSON schema. |
1.0 |
2026-03-09 | Initial release — envelope, anonymization model, extensions, versioning contract, conformance rules. |