SDK Integration Guide (Consuming Release Artifacts)
How to obtain and integrate fulla's release artifacts: the SDK binary package (libraries + headers + fulla-*Config.cmake) and the GHCR container images. For runtime behavior guarantees (threading / ABI / exceptions / logging / plugin registration), see the SDK Runtime Contract — this document covers only how to obtain and wire everything up. The release pipeline is .github/workflows/release.yml (triggered by a strict SemVer tag vX.Y.Z).
Non-C++ consumers: the officially maintained Python (PyPI
fulla-oauth2) and Go (github.com/voidvec/fulla/clients/go) HTTP clients work out of the box; see clients/.
1. Release Artifact Inventory
| Artifact | Location | Notes |
|---|---|---|
SDK package fulla-sdk-<ver>-linux-x86_64.tar.gz | GitHub Release attachment | 8 static libraries + include/fulla/** headers + lib/cmake/fulla-*/{Config,ConfigVersion,Targets}.cmake (with .sha256) |
| Backend image | ghcr.io/voidvec/fulla-backend:<ver> | Multi-arch (amd64 + arm64), entry port :5555, /health liveness probe |
| User frontend image | ghcr.io/voidvec/fulla-frontend:<ver> | nginx static hosting, :80 |
| Admin console image | ghcr.io/voidvec/fulla-admin:<ver> | nginx static hosting of /admin, :80 |
The images also carry a latest tag; <ver>-amd64 / <ver>-arm64 are single-arch intermediate tags. The server executable is not part of the SDK package — product deployment goes through the image channel.
2. SDK Package Prerequisites (Read This First)
- v1.x guarantees only source-level SemVer, not binary ABI (Contract §2). The published
linux-x86_64static libraries are compiled with the Release pipeline's toolchain (ubuntu-24.04 / gcc / libstdc++ / C++17 / Conan-locked dependencies); if your toolchain does not match, fall back to source integration (add_subdirectory, or runcmake --installyourself — the same SDK surface). - Third-party dependencies (Drogon / OpenSSL / jsoncpp, etc.) are not included in the package. Consumers resolve the same dependency versions using the repository root's
conanfile.py+conan.lock, ensuring thefind_dependencyclosure matches what the libraries were compiled against.
3. find_package Integration Steps
# 1) 解包
tar xzf fulla-sdk-1.0.0-linux-x86_64.tar.gz # -> fulla-sdk-1.0.0-linux-x86_64/
# 2) 用仓库的 conanfile.py 解析依赖(生成 toolchain + 各依赖的 CMake config)
conan install <fulla-repo> --output-folder=deps --build=missing \
-s build_type=Release -s compiler.cppstd=17
# 3) 配置消费工程:toolchain 供依赖解析,PREFIX_PATH 指向解包目录
cmake -S . -B build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=$PWD/deps/conan_toolchain.cmake \
-DCMAKE_PREFIX_PATH=$PWD/fulla-sdk-1.0.0-linux-x86_64
cmake --build build -j
On the CMakeLists side:
# 全栈宿主:一个包拉全闭包(common/oauth2/identity/storage-*/Drogon/OpenSSL/CURL)
find_package(fulla-drogon CONFIG REQUIRED)
target_link_libraries(my-host PRIVATE fulla::drogon)
# 或只取引擎面(无 Drogon 依赖):
find_package(fulla-oauth2 CONFIG REQUIRED)
find_package(fulla-storage-memory CONFIG REQUIRED)
target_link_libraries(my-engine PRIVATE fulla::oauth2 fulla::storage::memory)
Available packages and exported targets: fulla-common→fulla::common (also provides fulla::common::testing), fulla-oauth2→fulla::oauth2, fulla-identity→fulla::identity, fulla-storage-{memory,redis,postgres}→fulla::storage::{memory,redis,postgres}, and fulla-drogon