Cap'n Proto for Haskell
  • Haskell 84.9%
  • Cap'n Proto 14.7%
  • Shell 0.2%
  • Dockerfile 0.2%
Find a file
2023-06-23 23:35:33 -04:00
bench Mostly get rid of "New" in module paths. 2022-08-16 04:14:30 -04:00
capnp Rework directory layout a bit. 2023-06-23 23:33:03 -04:00
capnp-examples Rename examples directory to capnp-examples 2023-06-23 23:35:33 -04:00
capnp-tests Rework directory layout a bit. 2023-06-23 23:33:03 -04:00
ci WIP: Update bitrotten Dockerfile. 2020-10-23 18:27:29 -04:00
core-schema Update core-schema to 0.8 2020-10-15 23:19:35 -04:00
scripts Rename examples directory to capnp-examples 2023-06-23 23:35:33 -04:00
.gitattributes Fix .gitattributes re: paths for generated code. 2019-01-22 15:39:45 -05:00
.gitignore Add basic benchmark for canonicalize 2021-07-22 03:27:29 -04:00
.hlint.yaml Work around hlint bug. 2021-08-13 14:50:45 -04:00
.stylish-haskell.yaml
cabal.project Rework directory layout a bit. 2023-06-23 23:33:03 -04:00
CHANGELOG.md Fix #90 2023-06-22 19:29:07 -04:00
CONTRIBUTING.md Add note about end-of-line vs. block comments 2019-01-24 18:27:08 -05:00
CONTRIBUTORS Add @chpatrick to CONTRIBUTORS 2018-11-03 16:29:59 -04:00
LICENSE.md
README.md README: reword codeberg notice to not mention GitHub specifically. 2023-02-08 17:18:46 -05:00
Setup.hs

hackage

A Haskell library for the Cap'N Proto Cerialization and RPC protocol.

Note, this project's official home is on codeberg; if you're viewing this elsewhere, this is a mirror. For trivial changes we'll still accept patches here, but please file issues and submit more substantial changes via codeberg.

Getting Started

There is a module Capnp.Tutorial which contains an introduction to the library; users are strongly encouraged to read this first, as the reference documentation can be bewildering without that context.

Status

Serialization support works, with some limitations:

  • We do not support defining custom default values for fields of pointer type; see (#28).
  • We currently do not correctly handle decoding lists of structs from non-composite lists (#27). This means that, contrary to the protocol evolution rules, it is not safe to change a field from type List(T) (where T is any non-struct type) to a list of a struct type.

Level 1 RPC support is implemented and usable, though it should be considered alpha quality for now. Specific things to be aware of:

  • The implementation is not robust against resource exhaustion attacks; for now users are strongly discouraged from using it to do RPC with untrusted peers.

The API is considered unstable. It will likely see changes, for the sake of polish, consistency, etc. as well as to improve performance and accommodate more features as we add them.