Preserves: an Expressive Data Language
This repository contains a definition and various implementations of Preserves, a 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
- Quick Reference for Preserves syntax
- Canonical Form for Binary Syntax
- Syrup, a hybrid binary/human-readable syntax for the Preserves data model
- Media Types (MIME types) and File Extensions
Preserves schema and queries
Implementations
Implementations of the data model, plus Preserves textual and binary transfer syntax
| Language1 | Code | Package | Docs | 
|---|---|---|---|
| Nim | git.syndicate-lang.org | ||
| Python | preserves.dev | pip install preserves | docs | 
| Racket | preserves.dev | raco pkg install preserves | |
| Rust | preserves.dev | cargo add preserves | docs | 
| Squeak Smalltalk | SqueakSource | Installer ss project: 'Preserves';  install: 'Preserves' | |
| TypeScript/JavaScript | preserves.dev | yarn add @preserves/core | 
Implementations of the data model, plus Syrup transfer syntax
| Language | Code | 
|---|---|
| Guile | github.com/ocapn/syrup | 
| Haskell | github.com/zenhack/haskell-preserves | 
| JavaScript | github.com/zarutian/agoric-sdk | 
| Python | github.com/ocapn/syrup | 
| Racket | github.com/ocapn/syrup | 
Tools
Preserves documents
- preserves-tool, generic syntax translation and pretty-printing
Preserves Schema documents and codegen
Additional resources
- Change History of the Preserves specifications
- Preserves Expressions (P-expressions, pexprs)
- 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-2024 Tony Garnock-Jones.