2019-08-11 15:19:08 +00:00
---
2019-08-18 21:08:55 +00:00
projectpages: "https://gitlab.com/preserves/preserves"
2021-05-21 19:56:59 +00:00
projecttree: "https://gitlab.com/preserves/preserves/tree/main"
2019-08-18 21:08:55 +00:00
title: "Preserves: an Expressive Data Language"
no_site_title: true
2019-08-11 15:19:08 +00:00
---
2019-08-08 13:46:03 +00:00
2019-08-11 15:52:29 +00:00
This [repository ]({{page.projectpages}} ) contains a
2022-10-26 11:35:22 +00:00
[definition ](preserves.html ) and various implementations of *Preserves* , a
2022-06-18 17:11:08 +00:00
new data model, with associated serialization formats, in many ways
comparable to JSON, XML, S-expressions, CBOR, ASN.1 BER, and so on.
2019-08-08 13:46:03 +00:00
2019-08-18 21:08:55 +00:00
## Core documents
2021-05-25 12:13:09 +00:00
### Preserves data model and serialization formats
2021-06-02 18:32:40 +00:00
Preserves is defined in terms of a syntax-neutral
2022-06-18 17:11:08 +00:00
[data model and semantics ](preserves.html#semantics )
2021-06-02 18:32:40 +00:00
which all transfer syntaxes share. This allows trivial, completely
automatic, perfect-fidelity conversion between syntaxes.
2022-06-18 17:11:08 +00:00
- [Preserves specification ](preserves.html ):
- [Preserves semantics and data model ](preserves.html#semantics ),
- [Preserves textual syntax ](preserves-text.html ), and
- [Preserves machine-oriented binary syntax ](preserves-binary.html )
2019-08-18 21:08:55 +00:00
- [Preserves tutorial ](TUTORIAL.html )
2019-10-08 12:27:35 +00:00
- [Canonical Form for Binary Syntax ](canonical-binary.html )
2021-06-02 18:32:40 +00:00
- [Syrup ](https://github.com/ocapn/syrup#pseudo-specification ), a
hybrid binary/human-readable syntax for the Preserves data model
2019-08-18 21:08:55 +00:00
2021-08-08 18:26:17 +00:00
### Preserves schema and queries
2021-05-25 12:13:09 +00:00
- [Preserves Schema specification ](preserves-schema.html )
2021-08-08 18:26:17 +00:00
- [Preserves Path specification ](preserves-path.html )
2021-05-25 12:13:09 +00:00
2021-06-02 18:32:40 +00:00
## Implementations
Implementations of the data model, plus the textual and/or binary transfer syntaxes:
2022-10-14 04:17:00 +00:00
- [Preserves for Nim ](https://git.syndicate-lang.org/ehmry/preserves-nim )
2023-03-17 08:08:34 +00:00
- [Preserves for Python ]({{page.projecttree}}/implementations/python/ ) ([`pip install preserves`](https://pypi.org/project/preserves/); [documentation available online ](python/latest/ ))
2021-06-02 18:32:40 +00:00
- [Preserves for Racket ]({{page.projecttree}}/implementations/racket/preserves/ ) ([`raco pkg install preserves`](https://pkgs.racket-lang.org/package/preserves))
- [Preserves for Rust ]({{page.projecttree}}/implementations/rust/ ) ([crates.io package](https://crates.io/crates/preserves))
- [Preserves for Squeak Smalltalk ](https://squeaksource.com/Preserves.html ) (`Installer ss project: 'Preserves'; install: 'Preserves'`)
- [Preserves for TypeScript and JavaScript ]({{page.projecttree}}/implementations/javascript/ ) ([`yarn add @preserves/core `](https://www.npmjs.com/package/@preserves/core))
2023-10-15 14:07:45 +00:00
- (Pre-alpha) Preserves for [C ]({{page.projecttree}}/implementations/c/ ) and [C++ ]({{page.projecttree}}/implementations/cpp/ )
2021-06-02 18:32:40 +00:00
Implementations of the data model, plus Syrup transfer syntax:
- [Syrup for Racket ](https://github.com/ocapn/syrup/blob/master/impls/racket/syrup/syrup.rkt )
- [Syrup for Guile ](https://github.com/ocapn/syrup/blob/master/impls/guile/syrup.scm )
- [Syrup for Python ](https://github.com/ocapn/syrup/blob/master/impls/python/syrup.py )
- [Syrup for JavaScript ](https://github.com/zarutian/agoric-sdk/blob/zarutian/captp_variant/packages/captp/lib/syrup.js )
- [Syrup for Haskell ](https://github.com/zenhack/haskell-preserves )
2021-06-04 15:47:16 +00:00
## Tools
### Preserves documents
- [preserves-tool ](doc/preserves-tool.html ), generic syntax translation and pretty-printing
### Preserves Schema documents and codegen
2021-09-02 11:46:49 +00:00
- [Tools for working with Preserves Schema ](doc/schema-tools.html )
2021-06-04 15:47:16 +00:00
2019-08-18 21:08:55 +00:00
## Additional resources
2023-03-15 14:17:37 +00:00
- [Cheat sheet(s) for Preserves syntax ](cheatsheet.html )
2019-08-18 21:08:55 +00:00
- Some [conventions for common data types ](conventions.html )
- [Open questions ](questions.html ); see also the
[issues list ]({{page.projectpages}}/issues )
- [Why not Just Use JSON? ](why-not-json.html )
2019-08-08 13:46:03 +00:00
## 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 ](LICENSE )
(< http: / / www . apache . org / licenses / LICENSE-2 . 0 > ), and are Copyright
2022-06-10 15:48:08 +00:00
2018-2022 Tony Garnock-Jones.