Open Permaculture Data Standard

OPDS v1.0

A privacy-first, offline-first data interchange standard for permaculture and food-forest systems. Records plantings, protracted observations, harvests, and the plant guilds that hold a design together. Built on VODS.

OPDS v1.0 CC-BY-4.0 Builds on VODS v1.0
§ 1

Overview

OPDS is a domain specialization of VODS (Veydrin Open Data Standard). Every OPDS document is also a valid VODS document. OPDS adds the opds_version field and the domain payload arrays on top of the VODS envelope. Four record types are defined: plantings (what was established, where, and in which layer), observations (protracted observation of guild state and succession), harvests (yield from the system), and guilds (the polyculture designs that group species by function). Refer to the VODS v1.0 specification for the envelope fields, the anonymization model, the extensions system, and the versioning contract. This document specifies only what OPDS adds.

Permaculture is a design discipline built on observation over time, on stacking plants into functional layers, and on guilds where each element serves many functions and supports its neighbours. OPDS is shaped to record that practice rather than a row-crop calendar: a guild is a first-class record, layer and succession are first-class fields, and observation is treated as data worth keeping, not a note in the margin.

VODS dependency. OPDS v1.0 requires VODS v1.0. The four VODS envelope fields (vods_version, export_id, export_date, export_mode) are required in every OPDS document by virtue of the VODS dependency. Their authoritative definition is in the VODS spec.
Prior art. No single open standard interchanges permaculture and food-forest records today, which is the gap OPDS fills. It is complementary to, not competitive with, existing work: FarmOS is an open-source, offline-capable farm record platform whose logs an OPDS export can be produced from or mapped to; the World Agroforestry Centre AgroforesTree database is a species reference that OPDS species fields can cite. OPDS differs by being a small, signed, privacy-respecting interchange envelope aimed at citizen-science and app-level sharing rather than a platform or a species catalogue.

Conventions. The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY" in this document are to be interpreted as described in BCP 14 (RFC 2119, RFC 8174) when, and only when, they appear in all capitals, consistent with VODS v1.0.
§ 2

Scope

OPDS covers the records a permaculture or food-forest practitioner keeps while designing and tending a living system: what was planted, what has been observed over time, what was harvested, and how species are grouped into guilds. It is intended for home-scale and community-scale sites, citizen-science sharing, and app-level interchange.

OPDS does not try to be: a farm-management platform, a species or cultivar catalogue, a mapping or GIS format, a soil-laboratory result format, or a design-drawing exchange. It records observations and events, not the design drawings themselves. Broadacre row-crop agriculture is served by ADAPT and ISOBUS; soilless and controlled-environment cultivation is served by OCEADS; beekeeping is served by OHDS. Water earthworks, sectors, and detailed soil chemistry are candidate extensions for a later version and are out of scope for v1.0.

The layer vocabulary

Several records use a layer field naming the vertical layer of a food-forest system. The permitted values are: canopy, understory, shrub, herbaceous, groundcover, root, vine, aquatic, fungal. Implementations MUST NOT invent layer values; a system element that does not fit is recorded without a layer.

§ 3

Document Envelope

Every OPDS document begins with the VODS envelope (inherited) followed by the OPDS domain version field.

FieldTypeFromReq?Description
vods_versionstringVODSreqVODS version. Must be "1.0".
export_idstringVODSreqUUID v4 identifying this export.
export_datestringVODSreqRFC 3339 timestamp of export.
export_modeenumVODSreqanonymous or tracked. Governs identifier and coordinate handling.
opds_versionstringOPDSreqOPDS specification version. Currently "1.0". Consumers MUST accept any version with a matching major number.

Minimum content rule

An OPDS export MUST contain at least one non-empty array from: plantings, observations, harvests, or guilds. An envelope with no record arrays is not a meaningful export and MUST be rejected.

Location and privacy

Records MAY carry an opt-in coordinates object, {"lat": number, "lon": number} in WGS 84. In anonymous mode, coordinates MUST be coarsened to at most one decimal degree (roughly a ten-kilometre cell), and free-text notes SHOULD be stripped. Home-site location is sensitive; see §9.

§ 4

Planting Record

One record per planting event. The plantings array contains these records. A planting establishes a species at a location, in a layer, and optionally as part of a guild.

FieldTypeReq?Description
planting_datestring (date)reqISO 8601 date the species was established.
speciesstringreqScientific name preferred (e.g. "Malus domestica"). Free text.
common_namestringoptCommon name for display.
planting_refstringoptPseudonymous identifier for this planting, so observations and harvests can reference it.
site_refstringoptPseudonymous identifier grouping records by physical site.
layerenumoptFood-forest layer. See the layer vocabulary in §2.
guild_refstringoptguild_id of a guild this planting belongs to.
zoneintegeroptPermaculture zone, 0 (home) through 5 (unmanaged).
propagationenumoptseed · seedling · cutting · division · graft · transplant · other
quantityintegeroptNumber established. Omit if not counted.
coordinatesobjectoptOpt-in. Coarsened in anonymous mode (§3).
regionstringoptISO 3166-2 region code.
notesstringoptFree-text notes. Privacy-strip in anonymous mode.
§ 5

Observation Record

One record per observation event. The observations array contains these records. Protracted observation is the heart of permaculture practice, so an observation carries the state of a guild, its succession stage, and the functions seen at work, not just a note.

FieldTypeReq?Description
observation_datestring (date)reqISO 8601 date of observation.
subjectenumoptguild · planting · system · wildlife · soil · water · other
guild_typestringoptThe kind of guild observed, when the subject is a guild.
layerenumoptFood-forest layer observed. See §2.
succession_stateenumoptbare_ground · pioneer · early_succession · mid_succession · late_succession · climax
functions_observedstring[]optEcological functions seen at work. Suggested values: nitrogen_fixer · dynamic_accumulator · ground_cover · pest_confuser · pollinator_attractor · windbreak · shade · mulch_source · habitat
healthenumoptthriving · healthy · stressed · declining · dead
planting_refstringoptplanting_ref of the planting observed.
photo_refstringoptReference to an attached photo. Format is implementation-defined.
coordinatesobjectoptOpt-in. Coarsened in anonymous mode (§3).
regionstringoptISO 3166-2 region code.
notesstringoptFree-text notes. Privacy-strip in anonymous mode.
§ 6

Harvest Record

One record per harvest event. The harvests array contains these records. Tracks yield from the system so that a design's productivity can be seen over time.

FieldTypeReq?Description
harvest_datestring (date)reqISO 8601 date of harvest.
cropstringreqWhat was harvested. Free text.
quantitynumberreqAmount harvested in the unit given by unit.
unitenumreqkg · lb · g · oz · litre · gallon · count · bunch
planting_refstringoptplanting_ref the harvest came from.
guild_refstringoptguild_id the harvest came from, for whole-guild yields.
notesstringoptFree-text notes. Privacy-strip in anonymous mode.
§ 7

Guild Record

One record per plant guild. The guilds array contains these records. A guild is a group of species chosen so that each supports the others, and it is the design unit that distinguishes permaculture from a bed of monocultures. A guild record names the group and its members, and the functions each member serves.

FieldTypeReq?Description
guild_idstringreqIdentifier for this guild, referenced by guild_ref elsewhere.
namestringreqHuman-readable name, e.g. "Apple guild".
descriptionstringoptWhat the guild is for and how it is meant to work.
functionsstring[]optDesign functions the guild is meant to provide. Suggested values as in functions_observed (§5).
membersobject[]optThe species in the guild. Each member: species (req), role (opt), layer (opt enum, §2).
notesstringoptFree-text notes.
§ 8

Full Example

An anonymous export with one of each record type. It validates against the OPDS v1.0 schema.

{
  "vods_version": "1.0",
  "export_id": "a3f8c2e1-04b7-4d9e-b221-7f3a09cc1d82",
  "export_date": "2026-03-09T14:22:00Z",
  "export_mode": "anonymous",
  "opds_version": "1.0",
  "guilds": [
    { "guild_id": "g1", "name": "Apple guild",
      "functions": ["nitrogen_fixer", "pest_confuser", "pollinator_attractor"],
      "members": [
        { "species": "Malus domestica", "role": "canopy fruit", "layer": "canopy" },
        { "species": "Allium sativum", "role": "pest_confuser", "layer": "groundcover" },
        { "species": "Symphytum officinale", "role": "dynamic_accumulator", "layer": "herbaceous" }
      ] }
  ],
  "plantings": [
    { "planting_date": "2026-03-01", "species": "Malus domestica", "common_name": "Apple",
      "planting_ref": "p1", "layer": "canopy", "guild_ref": "g1", "zone": 2, "propagation": "transplant" }
  ],
  "observations": [
    { "observation_date": "2026-06-15", "subject": "guild", "guild_type": "apple guild",
      "layer": "canopy", "succession_state": "early_succession",
      "functions_observed": ["nitrogen_fixer", "pollinator_attractor"], "health": "thriving",
      "planting_ref": "p1" }
  ],
  "harvests": [
    { "harvest_date": "2026-09-20", "crop": "Apple", "quantity": 8.5, "unit": "kg",
      "planting_ref": "p1", "guild_ref": "g1" }
  ]
}
§ 9

Conformance Rules

An application claims OPDS v1.0 conformance by satisfying all VODS v1.0 conformance rules (see VODS spec §6) and the following OPDS-specific rules. A machine-readable schema for automated validation is available at opds-v1.0.schema.json.

§ 10

Glossary

GuildA group of species chosen so that each supports the others, for example a fruit tree with a nitrogen fixer, a pest-confusing bulb, and a dynamic accumulator beneath it.
LayerThe vertical position of a plant in a stacked food-forest system, from canopy down to root and fungal layers.
SuccessionThe change of a plant community over time, from bare ground through pioneer species toward a stable climax system.
ZoneA permaculture design band, from zone 0 (the home) out to zone 5 (unmanaged wild), ordered by how often a place is visited.
Dynamic accumulatorA plant that draws nutrients from deep in the soil into its leaves, which then feed the system as mulch.
§ 11

Security and Privacy Considerations

Home-site location

A permaculture site is usually someone's home. Precise coordinates, a resolvable site identifier, or a photograph with embedded location can disclose where a person lives. In anonymous mode, coordinates MUST be coarsened (§3, O5), site identifiers MUST be pseudonymous, and implementations SHOULD strip embedded location metadata from any referenced photo.

Free-text field sanitization

The notes, description, and name fields are free text and can carry personal information a user did not mean to publish. In anonymous mode these SHOULD be omitted; when retained they MUST be treated as untrusted input by any consumer that renders them.

Inference from records

A sequence of plantings, harvests, and observations can reveal a household's food supply, absences, and routines. Consumers aggregating OPDS data SHOULD avoid re-publishing record-level detail tied to a single pseudonymous site in a way that re-identifies it.

§ 12

Known Limitations

§ 13

Normative References

ReferenceTitle
VODS v1.0Veydrin Open Data Standard. The envelope, anonymization model, and versioning contract OPDS builds on.
RFC 2119 / RFC 8174Key words for use in RFCs to indicate requirement levels (BCP 14).
RFC 3339Date and time on the internet, used by export_date and the ISO 8601 date fields.
ISO 3166-2Country subdivision codes, used by the region field.
§ 14

Changelog

VersionDateChanges
1.02026-08-18Initial release. Planting, observation, harvest, and guild records; the food-forest layer vocabulary; permaculture zones and succession states; conformance rules O1 through O5; JSON Schema.