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
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.