API Conventions

How Solidean balances an abstract API with natural bindings in each target language.

Solidean exposes a language-agnostic abstract API.
This defines what Solidean can do and how bindings for different languages are generated.

Internally, the core is implemented in C++ and exported via a C-style .dll/.so.
Bindings are then auto-generated to provide idiomatic APIs for each target language.

Abstract API vs. Target API

  • Abstract API:
    Canonical description of features, data types, and operations.
    Documented in this reference (enums, handles, builders, etc.).

  • Target bindings:
    Generated APIs in each language, designed to feel natural.
    Some naming and style conventions differ to match language norms.

Conventions by language

  • C++ (default modern API):

    • Classes: UpperCamelCase
    • Methods/functions: lowerCamelCase
    • POD types: lower_camel_case
    • Enums and values: UpperCamelCase
    • Uses RAII, smart pointers, lambdas.
    • Exceptions are used to signal non-Ok Result and ExecuteResult.
  • C (low-level, internal export):

    • Pure function calls, flat namespace with Solidean_ prefix.
    • No exceptions; return codes only.
    • Not the primary user-facing API, but the basis for bindings.
  • Python:

    • Follows lower_snake_case.
    • Exceptions signal errors (mapped from Result/ExecuteResult).
    • Mirrors the abstract API but adapted to Python norms.

Why this matters

Sometimes you will notice differences between names in this documentation (abstract API) and the symbols in your target language.
This is intentional:
we prefer a "when in Rome, do as the Romans do" approach, so the API feels natural in your daily coding environment.

We continuously improve the docs to minimize friction and help map between the abstract API and language-specific bindings.

Exception-free workflows

If you need an exception-free workflow (e.g. embedded systems, special safety constraints):

  • Use the low-level C API (no exceptions, only return codes).
  • Or contact us, we may be able to generate bindings or provide an alternative API target.