Tony Garnock-Jones 37ca3fd493 | ||
---|---|---|
_layouts | ||
_plugins | ||
doc | ||
git-hooks | ||
historical | ||
implementations | ||
path | ||
schema | ||
tests | ||
.gitignore | ||
.gitlab-ci.yml | ||
LICENSE | ||
Makefile | ||
NOTICE | ||
README.md | ||
TODO.md | ||
TUTORIAL.md | ||
_config.yml | ||
canonical-binary.md | ||
conventions.md | ||
index.md | ||
normalize.css | ||
notes.mb.md | ||
preserves-path.md | ||
preserves-schema.md | ||
preserves.css | ||
preserves.el | ||
preserves.md | ||
questions.md | ||
quoting.rkt | ||
quoting.v | ||
representations.md | ||
setup.sh | ||
why-not-json.md |
README.md
projectpages | projecttree | title | no_site_title |
---|---|---|---|
https://gitlab.com/preserves/preserves | https://gitlab.com/preserves/preserves/tree/main | Preserves: an Expressive Data Language | true |
This repository contains a proposal and various implementations of Preserves, a new data model and serialization format in many ways comparable to JSON, XML, S-expressions, CBOR, ASN.1 BER, and so on.
WARNING Everything in this repository is experimental and in flux! The design of Preserves is not finalised and may change drastically. Please offer any feedback you may have with this in mind.
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 tutorial
- Preserves specification, including semantics, data model, textual syntax, and compact binary 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 the textual and/or binary transfer syntaxes:
- Preserves for Nim
- Preserves for Python (
pip install preserves
) - 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
- preserves-schemac, generic Schema reader and linter
- preserves-schema-rkt, Racket code generator
- preserves-schema-ts, TypeScript code generator
Additional resources
- 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-2021 Tony Garnock-Jones.