Today we‘re releasing Cap’n Proto 0.7.
The biggest high-level development in Cap'n Proto since the last release is its use in the implementation of Cloudflare Workers (of which I am the tech lead).
Cloudflare operates a global network of 152 datacenters and growing, and Cloudflare Workers allows you to deploy “serveless” JavaScript to all of those locations in under 30 seconds. Your code is written against the W3C standard Service Workers API and handles HTTP traffic for your web site.
The Cloudflare Workers runtime implementation is written in C++, leveraging the V8 JavaScript engine and libKJ, the C++ toolkit library distributed with Cap'n Proto.
Cloudflare Workers are all about handling HTTP traffic, and the runtime uses KJ‘s HTTP library to do it. This means the KJ HTTP library is now battle-tested in production. Every package downloaded from npm, for example, passes through KJ’s HTTP client and server libraries on the way (since npm uses Workers).
The Workers runtime makes heavy use of KJ, but so far only makes light use of Cap‘n Proto serialization. Cap’n Proto is used as a format for distributing configuration as well as (ironically) to handle JSON. We anticipate, however, making deeper use of Cap'n Proto in the future, including RPC.
kj::HashMap
is significantly faster and more memory-efficient than std::unordered_map
, with more optimizations coming. kj::TreeMap
is somewhat slower than std::map
, but uses less memory and has a smaller code footprint. Both are implemented on top of kj::Table
, a building block that can also support multi-maps. Most importantly, all these interfaces are cleaner and more modern than their ancient STL counterparts.libkj-tls
wraps OpenSSL or BoringSSL and provides a simple, hard-to-mess-up API integrated with the KJ event loop.kj::Url
helper class is provided to parse and compose URLs.capnp
tool now has a convert
command which can be used to convert between all known message encodings, such as binary, packed, text, JSON, canonical, etc. This obsoletes the old encode
and decode
commands.