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 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 Schema documents and codegen

Additional resources

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.

Notes

  1. Pre-alpha implementations also exist for C and C++