DisclosureOS documentation · v2 Beta
Renderers & support
Choose a viewer for your data, find its source code and understand what you need to adapt.
The showcase includes working viewers for recordings, accounts, documents, materials and reviews. A renderer is the component that turns those inputs into a chart, reader or other interactive view. Use this guide to find one that fits your application.
The components ship as MIT-licensed source in the complete example download. They are React components in a Next.js application, not a separately published component package. Follow Run the showcase to start the app with Node.js 22. No private portal credentials or unpublished standard package is needed to display the included example.
All inputs belong to the fictional DisclosureOS example case. The archive retains its original folder name, meridian. Each capture keeps its own source identity, timing and coordinate frame; appearing in the same collection does not establish a shared event or cause.
Choose a renderer
Start with what the file contains, then check its units, timing and reference frame. The instrument's name alone is not enough: one radar can supply power arrays, detections and tracks, each with a different meaning.
| You want to display | Start with |
|---|---|
| Readings, images, waveforms or event counts | Recording viewers |
| Radar products, sonar, point clouds or satellite bands | Survey viewers |
| Accounts, document editions, specimens or laboratory results | Readers and materials |
| Places, chronology or the collection's source files | Case context |
| Attributed assessments, vocabulary or saved checks | Reviews and checks |
For an unsupported file, use Formats & availability to present its identity and availability first. A standard-compliant record can refer to a file this viewer cannot decode. A file that renders successfully still needs the relevant standard and source checks.
The adapter boundary
A renderer does not replace a parser or a standard document. The reference application separates three jobs:
- Describe and check the source. Standard documents identify the observation, capture, source artifacts and their relationships. Numerical source-selection documents declare layouts, axes and selectors. Optional sensor profiles add their own checks.
- Prepare the view. An adapter reads those inputs and makes them usable by a component. Numerical readers verify supplied file fingerprints before interpreting the selected bytes; document and review views also use generated projections of their standard documents.
- Present and inspect. The component controls layout, playback, selection and source inspection. URL state, colors and application projections are not additional standard contracts.
The downloaded canonical-source-reader.ts contains the shared layout reader. Sensor-specific canonical-*-reader.ts modules handle the expanded profiles. These copies come from the pinned standard implementations; use each packet's validator instructions to reproduce its checks rather than treating rendering as validation.
Follow one component
Open Original scalar readings at 90 seconds. The optical reading is 39.92°. Open its source to find optical.csv, row 11 including the header, and the associated measurement.
In the extracted download, follow these files:
viewer/src/components/showcase/scalar-instruments.tsxrenders the readings. ItsinspectReadingfunction connects the selected sample to its source row, measurement, instrument and calibration declaration.viewer/src/lib/showcase/model.tssupplies the application model and selection helpers. It loads the original case projection frommeridian.generated.jsonin the same directory.project.mjsin themeridian/root creates that projection from the original packet.observation.json,acquisition.json,bindings.json,measurements.jsonandoptical.csvretain the underlying record and source relationships.
The scalar component receives selection, go and inspect. go updates application selection; inspect opens the source detail. The callback types are in shared.ts. Other families have different inputs, so follow the selected component's imports rather than assuming a universal renderer API.
To change presentation, begin with the component and its styles. To use your own data, map one source file into the relevant standard documents, validate it, then generate the adapter's view. Editing *.generated.json alone changes the display without establishing a new valid record. Changing retained bytes requires updating their fingerprints and rebuilding affected documents, projections and library entries. Each source packet's README identifies its own validator and source revision.
Component map
Expand a viewer to find its implementation, retained inputs and main boundary. Search this documentation for a component filename or a topic such as “passive sonar” to return directly to its entry.
Paths: component filenames below are relative to meridian/viewer/src/components/showcase/. Input folders are relative to meridian/. Each folder is part of the download; these names are not npm imports. Keep a component's adapters, styles and shared dependencies when reusing it.
Recording viewers
Field recordings
Play visible video alongside thermal arrays, an RF waterfall and weather. Inspect a pixel, frequency bin or fixed thermal region. Each numerical stream retains its cadence; browser video playback is not frame-exact scientific decoding.
- Code:
mixed-instruments.tsx,recording-data.ts. - Inputs:
recordings-v1/andrecording-bindings-v1/source-selection.json.
Original scalar readings
Select a time and channel, compare the three traces and open the exact source row. These are discrete readings. An optical angle does not supply distance or speed.
- Code:
scalar-instruments.tsx. - Inputs: the original CSVs and
viewer/src/lib/showcase/model.ts.
Sky & surroundings
Inspect sky pointing, aircraft reports and station geometry. Aircraft gaps remain visible. Clock alignment is unknown and station coordinates are local; a shared screen does not establish registration.
- Code:
spatial-instruments.tsx,spatial-data.ts. - Inputs:
spatial-v1/.
Field signals
Select acoustic spectra, magnetic axes, delay/Doppler cells or IQ samples. The authored passive-radar map is separate from the IQ example; the viewer does not compute one from the other.
- Code:
field-signals.tsx,signal-data.ts. - Inputs:
signals-v1/.
Events & counts
Select a detector, time window or pulse-height bin. Inspect exposure and contributing rows. Zero counts during recorded exposure differ from unavailable coverage; pulse height is not a calibrated dose.
- Code:
event-bench.tsx,event-data.ts. - Inputs:
events-v1/.
Cameras & UV bands
Inspect UV and night-vision pixels, a thermal pair, polarity events or UV bands. Two grids do not imply camera registration. Preserve the declared sample meaning rather than treating every pixel as temperature or radiance.
- Code:
imaging-bench.tsx,imaging-data.ts. - Inputs:
imaging-v1/.
Waveforms
Select waveform samples and spectrum bins, or inspect the slower pressure series. Playback is a reading aid; it does not change the source sample rate or make these separate captures simultaneous.
- Code:
waveform-bench.tsx,waveform-data.ts,reference-data.ts. - Inputs:
references-v1/.
Environment
Explore EMF, gas, particulate, lightning and IMU records with their units and gaps. Equivalent CO₂ is a modeled quantity. Body-frame acceleration does not become a geographic trajectory.
- Code:
environment-bench.tsx,environment-data.ts,reference-data.ts. - Inputs:
references-v1/.
Biometric references
Inspect EEG, skin response, heart-rate/SpO₂, pupil and bit-sequence references. The physiology is synthetic, with no clinical interpretation. The deterministic bit example does not demonstrate randomness.
- Code:
biometric-bench.tsx,biometric-data.ts,reference-data.ts. - Inputs:
references-v1/.
Camera context
Compare civilian, security, vehicle and phone camera settings alongside numerical frames. Preserve source pixel coordinates; orientation metadata alone is not a reason to silently rotate a selection.
- Code:
camera-context-bench.tsx,variant-data.ts. - Inputs:
variants-v1/.
Other measurements
Inspect gravity, seismic, spectral, GNSS and clock examples. Display their separate units and availability states. A clock comparison does not establish that every recording has been corrected to that clock.
- Code:
measurement-bench.tsx,measurement-recording.tsx,variant-data.ts. - Inputs:
variants-v1/.
Formats & availability
Compare a readable table, a numerical array, an unsupported retained file, a deliberately changed copy and an absent source. No chart is invented for bytes that cannot be read or whose identity does not match.
- Code:
format-bench.tsx,format-recording.tsx,variant-data.ts. - Inputs:
variants-v1/.
Survey viewers
Scanning, ground, civilian, airborne and shipborne radar
Step through authored scans, returns, detections and tracks. Scenarios retain their platform motion and context. Simulation truth is separate from measured products. The Radar guide explains the optional profile and its checks.
- Code:
radar-scanning.tsx,radar-scanning-workspace.tsx,radar-scanning-data.ts. - Inputs:
radar-scanning-v1/,radar-ground-v1/,radar-civilian-v1/,radar-airborne-v1/andradar-shipborne-v1/.
Military and secondary radar
Inspect military beam/dwell products or secondary-radar replies and reports. A cooperative reply is a reported message, not a primary-radar power return. See the Radar guide for the separate product relationships.
- Code:
radar-advanced.tsx,radar-advanced-workspace.tsx,radar-advanced-data.ts. - Inputs:
radar-military-v1/andradar-secondary-v1/.
Active sonar
Inspect pings, delay cells and derived detections. Range depends on the declared propagation assumptions. Use the Active sonar guide to reproduce the profile checks.
- Code:
sonar-active.tsx,sonar-active-workspace.tsx,sonar-active-data.ts. - Inputs:
sonar-active-v1/.
Passive sonar
Explore retained channels, spectral and bearing products with their processing declarations. Passive listening does not supply active ping range. The Passive sonar guide traces the products and retained bytes.
- Code:
sonar-passive.tsx,sonar-passive-workspace.tsx,sonar-passive-data.ts. - Inputs:
sonar-passive-v1/.
Lidar point clouds
Select a point or pulse; filter returns and inspect missing coverage. A pulse with no return is distinct from an unavailable pulse. The fixture supplies no pulse timestamps. Use the Lidar guide for ray and return-group checks.
- Code:
lidar.tsx,lidar-workspace.tsx,lidar-data.ts. - Inputs:
lidar-v1/.
Satellite rasters
Inspect bands, selected cells, quality flags and display composites. Changing the palette does not alter the source quantity. The Satellite guide covers the grid, band and quality relationships.
- Code:
satellite.tsx,satellite-workspace.tsx,satellite-data.ts. - Inputs:
satellite-v1/.
Readers and materials
Documents and source history
Search and compare editions, follow citations and inspect PDF page images. Text, PDFs and image derivatives retain separate identities. Release history and access checks are authored records, not live requests or recovered redactions.
- Code:
document-reader.tsx,reader-data.ts,report-facsimile.tsx,source-context.tsx. - Inputs:
reader-r2/,facsimiles-v1/andsource-context-v1/.
Accounts and their context
Read or compare accounts, listen to timed synthetic narration, inspect sketch features and follow qualifications and procedures. Narration time is separate from field time; a procedure declaration does not establish truth.
- Code:
document-reader.tsx,account-media.tsx,account-context.tsx. - Inputs:
reader-r2/,account-media-v1/andaccount-context-v1/.
Specimens and laboratory
Follow custody and splits, inspect microscopy pixels and spectral rows, and read laboratory PDFs. Results stay attached to the exact specimen. Fictional imagery and modeled bands do not establish physical scale or chemical identity.
- Code:
specimen-workspace.tsx,specimen-data.ts,material-studies.tsx,material-study-data.ts,material-document.tsx. - Inputs:
specimens-r2/,material-studies-v1/andmaterial-views-v1/.
Case context
Collection and availability
Filter included files, inspect record and product identities, and follow gaps and access declarations. A retained file is not proof of a complete capture; editorial grouping does not create case membership.
- Code:
collection-inventory.tsx. - Inputs:
collection-v1/index.jsonand its referenced packets.
Case chronology
Select an activity, inspect its date declaration and follow its source. The timeline covers selected activities, not every capture. Day-only dates retain that precision and independent captures remain separate.
- Code:
case-timeline.tsx. - Inputs:
timeline-v1/index.json.
Site and conditions
Filter stations, viewpoints and collection sites; compare held weather rows with attributed recollections. The local plan is not surveyed terrain, and no target location or Earth transform is inferred.
- Code:
site-context.tsx,recording-data.ts. - Inputs:
site-v1/index.jsonandrecordings-v1/.
Source library and citation export
Search source text or labeled metadata, compare quoted passages and export citations. Uncited artifacts do not acquire invented edition or page locators. Library entries retain file identities rather than relying on labels alone.
- Code:
source-library.tsx,library-data.ts,report-comparison.tsx. - Inputs:
library-v1/index.jsonover retained packets.
Reviews and checks
Assessments and vocabulary
Follow attributed reasoning, revisions and exact subjects. A catalog term is not a finding. An inconclusive assessment is not a probability or a manufactured ranking of origins.
- Code:
assessment-workspace.tsx,vocabulary-workspace.tsx,subject-reviews-workspace.tsx. - Inputs:
assessments-v1/,vocabulary-v1/andsubject-reviews-v1/.
Checks and calculation
Inspect saved receipts and reproduce the fixed copper mean. The viewer does not run arbitrary methods. Byte consistency, schema checks and arithmetic reproduction do not establish scientific validity.
- Code:
verification-workspace.tsx,reproduce-mean.mjs. - Inputs:
verification-v1/.
Gaps and disagreements
Compare missing-information states, alternatives and recorded selection rationale. Restricted examples retain public declarations only; the download does not contain a hidden private original.
- Code:
states-workspace.tsx. - Inputs:
states-v1/.
Investigation and replies
Follow requests, replies, proposed actions and separate reviews through case-record and case-claim-history documents. An unanswered request stays unassessed. A proposed action is not completed work, and thread grouping is editorial.
- Code:
investigation-history.tsx. - Inputs:
investigation-v1/.
Navigation around the renderers
The Casebook introduces the fictional case. The research desk opens its recordings, accounts, documents, materials, places/history and reviews/questions. Both entrances lead to the same source-backed views. A selected-view URL opens its workspace directly.
Use casebook.tsx, research-desk.tsx and desk-navigation.ts if you want the surrounding navigation. Use showcase.tsx and viewer/src/lib/showcase/model.ts to follow selection state and URL handling. This shell is application code; it does not add standard relationships or synchronize captures.
The recording viewers share recording-surface.tsx, recording-transport.tsx and recording-information.tsx for the surface, compact controls and source information. Numerical families use recording-hooks.ts for checked source loading. Keep the loading, error and unavailable states when adapting a viewer, along with its source-inspection actions.
The desk catalog searches workspace labels. Source library searches retained source text and metadata. Those are different tasks, and a new application can keep that distinction without copying the entire shell.
Input support
Support here means the included reader understands the declared layout. It does not mean every file with that extension, instrument label or standard record type can be opened.
| Delivered input | What this implementation handles |
|---|---|
| Numerical arrays and UTF-8 CSV | The shipped contiguous layouts and named table fields, with declared axes, cell/row selectors and file fingerprints. |
| Constant-rate video | Authored MP4 playback and declared frame intervals. Browser playback does not provide exact scientific frame extraction. |
| Events, tracks, points and raster bands | Authored products with explicit units, frames, gaps and profile relationships. Their fixture readers are not device drivers or live-feed integrations. |
| Text, PDF, SVG and WAV | Retained text, prepared PDF page images, illustrations and synthetic narration. A PDF download is separate from the rendered page-image derivative. |
| Reviews and methods | Attributed records, saved check receipts and one fixed numerical reproducer. There is no general method-execution or scientific-certification service. |
Native formats need their own adapters. The included examples do not supply native ASTERIX, LAS/LAZ, GeoTIFF, MiniSEED or EDF/BDF decoders, a native ADS-B feed decoder, generic OCR or arbitrary document conversion. Compressed or differently arranged arrays also need a compatible reader and layout. Preserve the original bytes and record any decoding or transformation separately.
For standard validation, use the published 2.0.0-beta.4 packages and the linked implementation guides. The five optional sensor profiles demonstrated here are included in that release. Retain each packet's source revision when regenerating its synthetic files. A sensor profile describes and checks its products; the renderer is an application supplied as source, not a separate npm component package.
Keep unsupported, changed and missing sources distinct
The format examples demonstrate a useful fallback:
- Unsupported: bytes are retained and their fingerprint matches, but no compatible reader is supplied. Show the identity and reason, with a download where available.
- Changed: the bytes differ from the expected source. Report that mismatch before displaying decoded values. A failed digest alone does not explain why a file changed.
- Missing: no source bytes were supplied. Show the absence; do not invent a fingerprint, a zero reading or a download.
For a source that is temporarily unavailable, preserve the request failure separately from those declared states and offer retry where appropriate. Do not relabel a network error as missing data in the standard record.
Verify the download
Start with the local setup and expected results. From meridian/viewer, run npm run check:bundle to prepare source copies, verify file delivery and reproduce the fixed copper mean. Run npm run build to check the app build.
Those commands do not rerun every canonical validator or test every interaction. After adapting a viewer:
- Validate the changed source packet using its own README and source pin. Rebuild affected projections and fingerprints.
- Select a known row, pixel or event and compare the displayed value, unit and source locator with the retained input. Preserve the precision, uncertainty and unknown states supplied by that source.
- Exercise unsupported, changed and unavailable input paths. Confirm that none silently becomes a valid zero or a reused result from another capture.
- Check selection after reload and browser Back, rapid switching and slow loading. Review keyboard controls, narrow layouts and both themes, preserving authored data colors.
See Run the showcase for a deliberate changed-file failure and recovery. The component map is an implementation starting point, not a certification that every browser, assistive technology or external format has been tested.
What remains open
The download is a fixed reference application. It does not accept arbitrary dataset uploads, authenticate source providers, enforce private-data access or publish new records. Those services belong to the integration you build around the standard.
Per-component tests and selected desktop/mobile journeys are in place. Whole-experience screen-reader review, broader keyboard and cross-browser media checks, and measured performance budgets remain release acceptance work. Rendering a source or matching its fingerprint does not establish its scientific validity.
The ELDÆON preview displays available native sensor logs, passive-radar histories, video derivatives and EDF samples. Its inventory distinguishes received and missing files, and each view states unresolved timing, units or calibration. The electric-field reading example connects one source row to standard documents and reports the missing capture context. The supplied archive has not met the research-completion profiles; the fictional case does not establish that compatibility.
Continue with Prepare a dataset contribution to gather a bounded source packet for an integration, or return to Run the showcase for detailed notes on each example.