Preserves: an Expressive Data Language
This repository contains a definition and various implementations of Preserves, a new data model, with associated serialization formats, in many ways comparable to JSON, XML, S-expressions, CBOR, ASN.1 BER, and so on.
Core documents
Preserves data model and serialization formats
Preserves is defined in terms of a syntax-neutral data model and semantics which all transfer syntaxes share. This allows trivial, completely automatic, perfect-fidelity conversion between syntaxes.
- Preserves specification:
- Preserves tutorial
- Canonical Form for Binary Syntax
- Syrup, a hybrid binary/human-readable syntax for the Preserves data model
Preserves schema and queries
Implementations
Implementations of the data model, plus the textual and/or binary transfer syntaxes:
- Preserves for Nim
- Preserves for Python (
pip install preserves
; documentation available online) - Preserves for Racket (
raco pkg install preserves
) - Preserves for Rust (crates.io package)
- Preserves for Squeak Smalltalk (
Installer ss project: 'Preserves'; install: 'Preserves'
) - Preserves for TypeScript and JavaScript (
yarn add @preserves/core
)
Implementations of the data model, plus Syrup transfer syntax:
Tools
Preserves documents
- preserves-tool, generic syntax translation and pretty-printing
Preserves Schema documents and codegen
Additional resources
- Cheat sheet(s) for Preserves syntax
- Some conventions for common data types
- Open questions; see also the issues list
- Why not Just Use JSON?
Contact
Tony Garnock-Jones tonyg@leastfixedpoint.com
Licensing
The contents of this repository are made available to you under the Apache License, version 2.0 (http://www.apache.org/licenses/LICENSE-2.0), and are Copyright 2018-2022 Tony Garnock-Jones.