Open Controlled Environment Agriculture Data Standard

OCEADS v1.0

A privacy-first, offline-first data interchange standard for soilless cultivation. Covers hydroponic, aeroponic, fogponic, Kratky, aquaponic, bio-integrated, and fungal cultivation systems. Built on VODS. Fields verified against NASA Advanced Plant Habitat parameters.

OCEADS v1.0 Builds on VODS v1.0 CC-BY-4.0 STABLE APH-verified fields
§ 1

Overview

OCEADS is a domain specialization of VODS (Veydrin Open Data Standard). Every OCEADS document is a valid VODS document. OCEADS adds the oceads_version field and the domain payload — grow_cycles, environment_logs, nutrient_logs, harvests, and the optional aquatic_module — on top of the VODS envelope.

Refer to the VODS v1.0 specification for the authoritative definition of envelope fields, the anonymization model, the extensions system, and the versioning contract. This document specifies only what OCEADS adds.

Scope. OCEADS covers soilless cultivation only — systems where plants, fungi, or aquatic organisms grow without soil as the primary growth medium. Field agriculture, greenhouse soil cultivation, and traditional farming are outside scope. The existing ADAPT and ISOBUS standards serve those use cases well. OCEADS fills the gap they leave in the soilless, controlled-environment, citizen-science space.

Cultivation systems in scope

HydroponicDWC, NFT, ebb-and-flow, wick, drip
AeroponicHigh-pressure, low-pressure, ultrasonic fog
FogponicUltrasonic mist, subcategory of aero
KratkyPassive deep water, no circulation
AquaponicFish + plant integration. Aquatic module required.
Bio-integratedBSFL, worm, algae, microbial loop
FungalMushroom cultivation on substrate
HybridMixed-method systems
Prior art acknowledgment. CEAOD (Controlled Environment Agriculture Open Data, ceaod.github.io, est. 2019) is the closest existing initiative in this space. CEAOD recommends CSV-based tabular formats for research data archival. OCEADS is differentiated by: JSON envelope with VODS anonymization, offline-first app-level interchange rather than research archival, citizen-science orientation, fungal and aquaponic coverage, and active maintenance. OCEADS is complementary, not competitive. CEAOD datasets can be produced from OCEADS exports via converters.
§ 2

Document Envelope

Every OCEADS document carries the VODS envelope (inherited) plus the OCEADS domain version field. At least one payload array must be present and non-empty.

FieldTypeSourceReq?Description
vods_versionstringVODSreqVODS version. Must be "1.0" for VODS v1.0 conformance.
export_idstring (UUID)VODSreqRandom UUID v4, fresh per export. Never reused.
export_datestring (ISO 8601)VODSreqFull datetime with timezone. "2026-03-09T14:22:00Z".
export_modeenumVODSreq"anonymous" or "tracked". See VODS §3.
oceads_versionstringOCEADSreqOCEADS version. Currently "1.0".
extensionsobjectVODSoptNamespaced org-specific fields. See VODS §4.

Minimum content rule

An OCEADS document must contain at least one of: grow_cycles, environment_logs, nutrient_logs, or harvests. Any present array must be non-empty. A document with only an aquatic_module and no other payload is not valid OCEADS.

§ 3

Grow Cycle Record

One record per cultivation run from start to finish. The grow_cycles array contains these records. A grow cycle is the top-level container that links environment logs, nutrient logs, and harvests together. All other records reference a cycle_ref to associate with a cycle.

FieldTypeReq?NASA APHDescription
cycle_refstringreqPseudonymous cycle identifier. Generated per active export_mode. Links all records for this cycle.
system_refstringreqPseudonymous system identifier. Groups cycles by physical grow system.
system_typeenumreqhydroponic · aeroponic · fogponic · kratky · aquaponic · bio_integrated · fungal · hybrid
start_datestring (date)reqDate germination, inoculation, or cycle start. ISO 8601.
end_datestring (date)optDate of final harvest or cycle termination. Omit if cycle is ongoing.
cultivarstringreq✓ tracked per experimentSpecies and variety. Free text. Examples: "Lactuca sativa 'Outredgeous'", "Pleurotus ostreatus", "Capsicum annuum 'Hatch Green'".
substrateenumopt✓ porous clay substraterockwool · clay_pebbles · coco_coir · perlite · vermiculite · nutrient_film · deep_water · air · straw · sawdust · masters_mix · other
grow_area_sqcmnumberoptNet grow area in square centimeters.
plant_countintegeropt✓ tracked per experimentNumber of plants, seedlings, or inoculation sites at start.
photoperiod_hoursnumberopt✓ APH controlled parameterHours of light per 24-hour period.
light_spectrumstring[]opt✓ red/green/blue/white/far-red/IRActive spectrum channels. Suggested values: red · blue · green · white · far_red · uv · infrared · full_spectrum
light_intensity_umolnumberopt✓ PAR 400–700nmTarget PPFD (photosynthetic photon flux density) in µmol/m²/s.
cycle_notesstringoptFree-text notes on this cycle. Omit in anonymous exports if stripping notes.
§ 4

Environment Log Record

One record per environmental measurement event. The environment_logs array contains these records. May be logged automatically by sensors (high-frequency) or manually by the grower (low-frequency). All fields except cycle_ref and logged_at are optional — include what the system actually measures.

NASA APH alignment. The fields below cover all parameters controlled and logged by the Advanced Plant Habitat and Veggie systems on the ISS. An OCEADS export from a well-instrumented grow can be directly compared to spaceflight plant growth data.
FieldTypeReq?NASA APHDescription / Unit
cycle_refstringreqLinks this log to a grow cycle.
logged_atstring (ISO 8601)reqFull datetime of measurement. "2026-03-09T08:00:00Z".
air_temp_cnumberopt✓ APH controlledAmbient air temperature in °C.
humidity_rhnumberopt✓ APH controlledRelative humidity, 0–100%.
co2_ppmnumberopt✓ APH controlled + loggedCO₂ concentration in parts per million.
vpd_kpanumberoptVapor pressure deficit in kPa. Derived from temp + humidity; include if calculated.
par_umolnumberopt✓ APH in-chamber PAR sensorMeasured PPFD at canopy in µmol/m²/s.
dli_molnumberoptDaily light integral in mol/m²/day. Derived from PAR over photoperiod.
root_zone_temp_cnumberopt✓ APH root zone moisture + tempRoot zone / reservoir temperature in °C.
substrate_moisture_pctnumberopt✓ APH controlled parameterRoot zone substrate moisture, 0–100%.
canopy_photosynthesis_umolnumberopt✓ APH CO₂ drawdown techniqueMeasured canopy photosynthesis rate in µmol CO₂/m²/s. Research-grade systems only.
o2_ppmnumberopt✓ APH atmosphere O₂Dissolved or atmospheric oxygen in ppm.
water_consumption_mlnumberopt✓ APH water recovery trackingWater consumed or transpired since last log, in mL.
§ 5

Nutrient Solution Log Record

One record per nutrient solution measurement or adjustment event. The nutrient_logs array contains these records. Covers solution chemistry for all liquid-feed systems (hydroponic, aeroponic, aquaponic). Not applicable for fungal-only or fully passive setups; omit the array in that case.

FieldTypeReq?Description / Unit
cycle_refstringreqLinks this log to a grow cycle.
logged_atstring (ISO 8601)reqFull datetime of measurement.
ec_msnumberoptElectrical conductivity in mS/cm (nutrient concentration proxy).
phnumberoptSolution pH, 0–14.
tds_ppmnumberoptTotal dissolved solids in ppm. Include if measured directly.
water_temp_cnumberoptNutrient solution temperature in °C.
do_mg_lnumberoptDissolved oxygen in mg/L.
reservoir_volume_lnumberoptTotal reservoir volume at time of measurement, in liters.
top_off_volume_lnumberoptVolume of water added to reservoir since last log, in liters.
nutrient_brandstringoptNutrient product name. Free text. Example: "General Hydroponics Flora Series".
nutrient_ratiostringoptGrow/Micro/Bloom or A/B ratio as free text. Example: "1:2:3".
adjustment_actionenumoptph_up · ph_down · nutrient_add · water_add · reservoir_change · flush · none
nitrogen_ppmnumberoptMeasured nitrogen in ppm. Research-grade only.
phosphorus_ppmnumberoptMeasured phosphorus in ppm. Research-grade only.
potassium_ppmnumberoptMeasured potassium in ppm. Research-grade only.
calcium_ppmnumberoptMeasured calcium in ppm. Research-grade only.
log_notesstringoptFree-text notes on this adjustment. Omit in anonymous exports if stripping notes.
§ 6

Harvest Record

One record per harvest event within a cycle. The harvests array contains these records. A cycle may have multiple harvests (cut-and-come-again, staggered, or partial). Final harvest should be accompanied by the end_date on the grow cycle record.

FieldTypeReq?NASA APHDescription
cycle_refstringreqLinks this harvest to a grow cycle.
harvest_datestring (date)req✓ APH records harvest datesDate of harvest.
harvest_typeenumreqfull · partial · cut_and_come_again · thinning
fresh_weight_gnumberopt✓ APH yield measurementFresh biomass yield in grams.
dry_weight_gnumberopt✓ APH research samplesDry biomass yield in grams. Research/post-processing only.
yield_per_sqcm_gnumberoptDerived: fresh_weight_g / grow_area_sqcm. Include if calculated.
days_to_harvestintegeropt✓ APH tracks growth durationDays from cycle start to this harvest.
quality_ratingenumoptGrower subjective quality assessment: excellent · good · fair · poor
flavor_ratingintegeropt✓ crew sensory assessments in Veggie/APHGrower flavor score, 1–5.
texture_ratingintegeropt✓ crew sensory assessmentsGrower texture score, 1–5.
microbial_testenumopt✓ APH microbiological samplingResult of food safety microbial test: pass · fail · not_tested
harvest_notesstringoptFree-text notes. Omit in anonymous exports if stripping notes.
§ 7

Aquatic Module

The aquatic_module object is optional and applies only to aquaponic systems where fish or other aquatic organisms are part of the cultivation loop. When present, it contains a system_ref linking it to a grow cycle's system, plus tank condition records.

Scope note. The aquatic module covers the fish/aquatic side of aquaponic systems — not standalone aquaculture. It is intentionally minimal; full aquaculture data management is outside OCEADS scope. Future domain specs may extend this.

Aquatic module object

FieldTypeReq?Description
system_refstringreqLinks to the grow cycle's system_ref.
speciesstringreqAquatic species. Free text. Example: "Oreochromis niloticus" (tilapia), "Cyprinus carpio" (carp).
stocking_density_kg_m3numberoptFish biomass per cubic meter of tank volume.
tank_volume_lnumberoptTotal tank volume in liters.
tank_logsarrayoptTime-series tank condition records. See §7.1.

7.1 Tank log record

FieldTypeReq?Description / Unit
logged_atstring (ISO 8601)reqFull datetime of measurement.
water_temp_cnumberoptTank water temperature in °C.
phnumberoptTank water pH.
do_mg_lnumberoptDissolved oxygen in mg/L.
ammonia_ppmnumberoptTotal ammonia nitrogen in ppm.
nitrite_ppmnumberoptNitrite (NO₂) in ppm.
nitrate_ppmnumberoptNitrate (NO₃) in ppm.
fish_countintegeroptCurrent live fish count.
feed_gnumberoptFeed added at this log event, in grams.
§ 8

Full Example

Hydroponic lettuce
Mushroom cultivation
Aquaponic system
{
  // VODS envelope
  "vods_version":  "1.0",
  "export_id":    "b7e3a1f2-09c4-4d8b-a332-8e4b20dd1c93",
  "export_date":  "2026-03-09T14:22:00Z",
  "export_mode":  "anonymous",

  // OCEADS domain
  "oceads_version":  "1.0",

  "grow_cycles": [
    {
      "cycle_ref":          "C-4f91",
      "system_ref":         "S-a2c3",
      "system_type":        "hydroponic",
      "start_date":         "2026-02-01",
      "end_date":           "2026-03-05",
      "cultivar":           "Lactuca sativa 'Outredgeous'",
      "substrate":          "rockwool",
      "grow_area_sqcm":     2400,
      "plant_count":        24,
      "photoperiod_hours":  16,
      "light_spectrum":     ["red", "blue", "white"],
      "light_intensity_umol": 250
    }
  ],

  "environment_logs": [
    {
      "cycle_ref":         "C-4f91",
      "logged_at":         "2026-02-15T08:00:00Z",
      "air_temp_c":        22.4,
      "humidity_rh":       65,
      "co2_ppm":           1100,
      "par_umol":          238,
      "root_zone_temp_c":  20.1
    }
  ],

  "nutrient_logs": [
    {
      "cycle_ref":          "C-4f91",
      "logged_at":          "2026-02-15T08:05:00Z",
      "ec_ms":             1.4,
      "ph":                6.1,
      "water_temp_c":      20.3,
      "do_mg_l":           7.8,
      "nutrient_brand":    "General Hydroponics Flora Series",
      "adjustment_action": "none"
    }
  ],

  "harvests": [
    {
      "cycle_ref":       "C-4f91",
      "harvest_date":   "2026-03-05",
      "harvest_type":   "full",
      "fresh_weight_g": 1840,
      "days_to_harvest":32,
      "quality_rating": "excellent",
      "flavor_rating":  5
    }
  ]
}
{
  // VODS envelope
  "vods_version":  "1.0",
  "export_id":    "c8f1b2a3-14d5-4e9c-b443-9f5c31ee2d04",
  "export_date":  "2026-03-09T14:22:00Z",
  "export_mode":  "anonymous",

  "oceads_version":  "1.0",

  "grow_cycles": [
    {
      "cycle_ref":    "C-8b02",
      "system_ref":   "S-f3d1",
      "system_type":  "fungal",
      "start_date":   "2026-02-10",
      "end_date":     "2026-03-01",
      "cultivar":     "Pleurotus ostreatus",
      "substrate":    "straw",
      "plant_count":  4   // inoculation blocks
    }
  ],

  "environment_logs": [
    {
      "cycle_ref":   "C-8b02",
      "logged_at":   "2026-02-18T09:00:00Z",
      "air_temp_c":  18.5,
      "humidity_rh": 92,
      "co2_ppm":     800
    }
  ],

  "harvests": [
    {
      "cycle_ref":       "C-8b02",
      "harvest_date":   "2026-02-28",
      "harvest_type":   "partial",
      "fresh_weight_g": 620,
      "days_to_harvest": 18,
      "quality_rating": "good"
    },
    {
      "cycle_ref":       "C-8b02",
      "harvest_date":   "2026-03-01",
      "harvest_type":   "full",
      "fresh_weight_g": 480,
      "days_to_harvest": 19
    }
  ]
}
{
  // VODS envelope
  "vods_version":  "1.0",
  "export_id":    "d9a2c3b4-25e6-4f0d-c554-0g6d42ff3e15",
  "export_date":  "2026-03-09T14:22:00Z",
  "export_mode":  "tracked",

  "oceads_version":  "1.0",

  "grow_cycles": [
    {
      "cycle_ref":    "C-aq-3e72",
      "system_ref":   "S-aq-b81f",
      "system_type":  "aquaponic",
      "start_date":   "2026-01-15",
      "cultivar":     "Beta vulgaris 'Bull's Blood'",
      "substrate":    "clay_pebbles",
      "plant_count":  32
    }
  ],

  "nutrient_logs": [
    {
      "cycle_ref":   "C-aq-3e72",
      "logged_at":   "2026-03-01T07:00:00Z",
      "ec_ms":       0.9,
      "ph":          7.2,
      "water_temp_c":24.1
    }
  ],

  "aquatic_module": {
    "system_ref":               "S-aq-b81f",
    "species":                  "Oreochromis niloticus",
    "tank_volume_l":           380,
    "stocking_density_kg_m3":  12.4,
    "tank_logs": [
      {
        "logged_at":    "2026-03-01T07:05:00Z",
        "water_temp_c": 24.0,
        "ph":           7.1,
        "do_mg_l":      6.4,
        "ammonia_ppm":  0.25,
        "nitrite_ppm":  0.05,
        "nitrate_ppm":  18.0,
        "fish_count":   45,
        "feed_g":       120
      }
    ]
  }
}
§ 9

Conformance Rules

An application claims OCEADS v1.0 conformance by satisfying all VODS v1.0 conformance rules (see VODS spec §6) and the following OCEADS-specific rules.

CEAOD compatibility. OCEADS exports can be converted to CEAOD-compatible CSV tabular format. Environment log records map directly to the CEAOD environmental data table. Grow cycle + harvest records map to the CEAOD crop/biological data table. A reference converter will be published alongside the Chinara reference implementation.