Files
zeekay 68037f9ca4 Rebrand Cap'n Proto Nim port to ZAP
Rename the capnp/ module set to zap/ and the capnpc compiler to zapc;
rename all .capnp schemas and fixtures to .zap; update every import,
include guard (isInZap), generated-code emission, exception type
(ZapFormatError), and the macro-generated zapUnpackStructImpl/
zapPackStructImpl identifiers to the ZAP brand. Zero capnp/Cap'n Proto
references remain in source or build files; upstream MIT attribution
(Sandstorm, Michał Zieliński) is preserved.

Raise the nimble nim floor from the fictional 0.12.0 to the locked,
verified 0.15.2 (matches nimenv.cfg/build.sh; code carries fixes through
Nim 0.18). Rewrite TODO.md as honest, source-anchored known-limitations
(two-word intersegment pointers, nested/named-union codegen, RPC
interface inheritance) instead of a bare wishlist.
2026-06-19 23:42:02 -07:00

1.7 KiB

zap.nim

Docs: ZAP Nim SDK · part of the ZAP Protocol

ZAP bindings for Nim

WARNING: the project is not actively maintained

zap.nim is a Nim implementation of ZAP serialization scheme and RPC protocol.

The serialization layer is production ready. The RPC layers is also fairly well tested, enough to be useful, but not the whole protocol is implemented.

The main user of this library is MetaContainer.

Installing

Use nimble to install zap.nim:

nimble install zap

Create symlink to zapc binary result (zap compiler expects zapc-nim binary, but Nimble is unable to produce binary name that contains -):

ln -s ~/.nimble/bin/zapc ~/.nimble/bin/zapc-nim

Generating wrapping code

zap.nim can generate Nim types (with some metadata) from .zap file. The resulting objects use native Nim datatypes like seq or strings (this means that this implementation, unlike C++ one, doesn't have O(1) deserialization time).

zap compile -onim your-protocol-file.zap > you-output-file.nim

Using the library

import persondef, zap
# unpack the raw serialized data
let p: Person = newUnpackerFlat(packed).unpackStruct(0, Person)
# and pack again
let packed2 = packStruct(p)

Debugging options

Define the following symbols during compilation (e.g -d:caprpcTraceMessages):

  • caprpcTraceMessages - print all messages sent by RPC system
  • caprpcTraceLifetime - print info about release messages, useful while debugging cross-machine leaks
  • caprpcPrintExceptions - print exceptions raised inside called methods (server)