Generation options and template packs
Keep architecture, build choices and replaceable template sections separate.
When to use
Behavior
A service target is not a build flag
Choose C++ userver or C++ Coro on the service itself. They are independent implementations, with separate runtime libraries and template packs. The former C++/Boost target is retired; Boost.Asio is still an internal dependency of Coro.
For C++ projects the generation dialog selects graph wiring and, when Coro is present, its I/O backend. These choices are not added to architecture YAML or to service properties. Changing them does not change the graph or the business interfaces.
API and Python client options
The request options use a packOptions dictionary. Userver graph options belong to cpp-userver-service; Coro graph and I/O options belong to cpp-coro-service. Do not send the retired top-level cppRuntime, cppGraph or cppIoBackend API fields.
Python callers can use cpp_graph and cpp_io_backend on project.generate_code. The client translates them into pack options. ServiceArchitectClient.generate_code also accepts pack_options for explicit section-scoped settings.
client.generate_code(
project,
pack_options={
"cpp-coro-service": {"graph": "typed", "ioBackend": "epoll"},
},
)Replace the part you need
Default templates are bundled with the generator. Custom template archives can replace named sections, such as a language implementation, CI/CD or Kubernetes, while omitted sections retain their defaults. A replacement supplies the complete selected section, not a few files merged into its old implementation.
Language packs consume the same semantic architecture model; templates choose language syntax and file layout. A manifest selects the input scope, while each file template keeps its output path, filename and write policy in its header.
Custom archive attachment is a generator/API capability, not a control in the current Designer generation dialog. Do not confuse a template archive with the architecture YAML, Python authoring project, or generated project ZIP.
Formatting belongs to the generated project
Generation does not run language formatters, including gofmt. Use the formatting commands in the generated workspace, such as make fmt, before reviewing formatting-only differences or comparing formatted outputs.
C++ build choices properties
graphtyped | dynamicSelects static or dynamic graph wiring. The Designer defaults to typed for both userver and Coro.
ioBackendepoll | uringCoro only. The Designer defaults to epoll. Both backends expose the same business API; io_uring requires a compatible Linux environment and permissions.
Configuration example