C++

The C++ target is experimental.

Add cpp under targets to generate a C++ SDK.

{
  "targets": {
    "cpp": {
      "options": {
        "namespace": "acme"
      },
      "destinations": {
        "production": {
          "repo": "acme/acme-cpp"
        }
      }
    }
  }
}

C++ has no package registry the generator publishes to, so this target generates the library and its CI workflow but no publishing workflow. Distribute the build artifacts from your GitHub release.

options

Type: object

C++ emitter options.

namespace

Type: string

C++ namespace the generated client, models and resources are declared in, such as acme or acme::v2. Each :: segment is lowercase snake_case that starts with a letter, with no doubled or trailing _; a segment that C++, the C library or a dependency reserves fails generation: for example a keyword, std, a macro such as linux or min, or a C library function such as time as the first segment. The namespace also names the public include directory, the umbrella header and the macro prefix (acme::v2 gives include/acme_v2/, acme_v2.hpp and ACME_V2_). Defaults to the package name passed to the generator, else the SDK's slug, converted to snake_case.

Constraints: pattern: ^[a-z](_?[a-z0-9])*(::[a-z](_?[a-z0-9])*)*$

libraryName

Type: string

Name of the generated CMake project and library target, and of the package find_package looks for. The value is converted to snake_case. The public headers live under include/ in a directory named after namespace, not this. Defaults to the package name passed to the generator, else the SDK's slug, converted to snake_case. A value that does not start with a letter once converted, or one CMake, a dependency or Windows reserves (such as test, install or con), fails generation.

async

Type: boolean

Generates an asynchronous client beside the synchronous one (client.async()), whose methods return a std::future or take a completion callback and run on the client's executor. Set false to leave it out, with its executor runtime, its client options and its example, which shortens build times for a very large API. Defaults to true.

Default: true

preserveUnknownFields

Type: boolean

Gives every generated model an extra_fields member that keeps the JSON keys the API document does not describe, so a model decoded from a response and written back into a request round-trips them unchanged. Set false to drop the member and discard those keys on decode. Defaults to true.

Default: true

destinations

Type: object

Per-target GitHub destinations for pushing generated output.

production

Type: object

Primary repository this target's generated output is published to. Setting it turns on the generated GitHub Actions: the CI workflow, the release-please configuration, and the versioning policy. A release workflow is added too when publish enables a registry that needs one; a registry served from git tags publishes from the release tag alone. Without a production destination the target is still generated, but with no workflows.

Property Description
repo* GitHub repository in owner/name form that generated output for this target is pushed to. An owner/name#branch suffix is tolerated and supplies the default branch when branch does not, but prefer setting branch on its own: not every target strips the suffix back off when it writes the repository URL into published package metadata.
branch Default branch of the destination repository, which release pull requests target. Generated output is pushed to the scalar-generated branch and merged with your custom code on the integration branch (integrationBranch, scalar-next by default); the release pull request is opened from there against this branch. Defaults to a #branch suffix on repo, then main. A value that is not a safe git branch name is skipped in favor of the next one.
integrationBranch Branch where generated output is combined with your custom code; defaults to scalar-next. Commit customizations here: each regeneration is merged into it, release pull requests are opened from it, and each released version is synced back to it. An empty string means the default. The name must be a safe git branch name, and it cannot be the default branch or collide with the branches Scalar and release-please manage, such as scalar-generated.

skip

Type: boolean

When true, the target is not generated.

readmeTitle

Type: string

Heading of this target's generated README, overriding the SDK-wide readme.title. Plain text: markdown in it is shown as written, not rendered.

promotion

Type: "automatic" | "manual"

When a successful build's generated output reaches this target's production destination. automatic, the default, pushes every build, which opens a release pull request. manual holds each build at the staging playground until you promote it.

This changes when the push happens, never what is generated: a manual target still gets the GitHub Actions, release-please configuration, and versioning policy that destinations.production turns on. A target with no production destination is never pushed, whatever this is set to.

Default: "automatic"

What did you think of this content?