For institutions
Reduce the boundary glue around your business logic.
In distributed C++ systems, service boundaries tend to accumulate marshalling, transport plumbing, callback wiring, and lifetime-management code. Canopy moves that work into generated interfaces and reusable runtime components, so fixes and design decisions are shared across each configured transport that uses the contract.
Enterprise priorities
Integration without protocol sprawl
One IDL definition generates transport-neutral, type-safe proxy and stub code. Teams stop accumulating bespoke adapters for each service boundary.
RAII ownership across the network
rpc::shared_ptr<T> extends C++ RAII across process and machine boundaries.
Databases, model services, and long-lived resources are managed with the same ownership
model as local objects.
Mixed deployment models
Place services locally, across hosts, behind TLS, in DLL plugins, or in SGX enclaves while preserving the contract. The transport choice is made at construction — not baked into the interface.
Coroutines and fire-and-forget
The same source code compiles in both blocking and co_await coroutine modes.
[post] methods send without waiting — right for price feeds, LLM token
streaming, and telemetry pipelines.
Where it fits
- Systems that cross process, machine, plugin, or trust boundaries repeatedly.
- Confidential processing and trusted execution services, with Canopy's Intel SGX transport and DCAP secure-route implementation available now and additional TEE backends on the roadmap.
- Plugin and child-process architectures that need typed, auditable service contracts.
- High-throughput C++ systems that need transport and serialization choice without rewriting interfaces.
- Platforms where browser clients, service tooling, and core C++ services need to meet over the same generated interface.
Compare the tradeoffs
Canopy is not trying to replace every RPC stack. It is strongest when C++ object lifetimes, callbacks, and transport choice matter together.
Where it is probably not the right tool
- Purely local applications with no meaningful boundary crossings.
- Simple public HTTP or JSON APIs where request/response is sufficient.
- Projects that do not want generated code in the build.
- Teams that need full cross-language runtime parity today — C++ is the primary implementation.