Builds
This page explains how to build and verify the Softadastra repositories.
Use it when you are working inside the source repositories and need to build the CLI, the node app, the C++ SDK, the documentation, or release artifacts.
This page is for repository maintainers and contributors.
For normal installation, use the official installer:
curl -fsSL https://softadastra.com/install.sh | shOn Windows:
irm https://softadastra.com/install.ps1 | iexMain rule
A build is useful only if it can be reproduced and verified.
Before publishing or trusting a build, verify at least:
- the project builds
- the CLI starts
- the version command works
- the status command works
- local store put/get works
- sync status works
- sync tick works
- peers handles the empty state
- docs build successfully
- release artifacts have the expected names and contents
Repositories
Softadastra currently has several repository surfaces.
softadastra/softadastra -> runtime, modules, CLI, node app
softadastra/sdk -> C++ SDK
softadastra/docs -> documentation siteFuture SDK repositories can be added later.
Engine repository
The main runtime repository contains the runtime modules and product applications.
Typical local path:
cd ~/softadastra/softadastraImportant areas:
apps/ -> runnable applications
modules/ -> runtime modules
examples/ -> examples
cmake/ -> CMake helpers
data/ -> local runtime dataBuild with Vix:
vix buildBuild release mode:
vix build --preset releaseBuild with the CLI app enabled:
vix build -- \
-DSOFTADASTRA_BUILD_APPS=ON \
-DSOFTADASTRA_BUILD_CLI_APP=ONBuild with the CLI and node app enabled:
vix build -- \
-DSOFTADASTRA_BUILD_APPS=ON \
-DSOFTADASTRA_BUILD_CLI_APP=ON \
-DSOFTADASTRA_BUILD_NODE_APP=ONBuild release with apps enabled:
vix build --preset release -- \
-DSOFTADASTRA_BUILD_APPS=ON \
-DSOFTADASTRA_BUILD_CLI_APP=ON \
-DSOFTADASTRA_BUILD_NODE_APP=ONBuild with CMake directly
Vix is the recommended developer command, but CMake can still be used directly.
Configure:
cmake --preset dev-ninjaBuild:
cmake --build --preset build-ninjaRelease configure:
cmake --preset releaseRelease build:
cmake --build --preset build-releaseIf a preset does not exist, check the repository presets:
cat CMakePresets.jsonBuild options
Common build options can include:
SOFTADASTRA_BUILD_APPS
SOFTADASTRA_BUILD_CLI_APP
SOFTADASTRA_BUILD_NODE_APP
SOFTADASTRA_BUILD_EXAMPLES
SOFTADASTRA_BUILD_TESTSOnly use options that exist in the current repository.
Check:
grep -R "SOFTADASTRA_BUILD_" -n CMakeLists.txt apps modules cmakeExport the CLI binary
If the Vix project supports binary export, run:
vix build --binExpected result:
./softadastraVerify:
./softadastra version
./softadastra statusIf --bin does not export the binary in the current setup, find it manually:
find . -type f -executable -name "softadastra*"Then run the binary using its full path.
Verify the CLI
After building the CLI, verify the stable command surface.
softadastra version
softadastra statusIf the binary is not in PATH, run it directly:
./softadastra version
./softadastra statusThen verify local store commands:
softadastra store put app/name Softadastra
softadastra store get app/nameThen verify sync commands:
softadastra sync status
softadastra sync tickThen verify node and peers:
softadastra node info
softadastra peersIf you need node services for the current CLI session:
softadastra node start
softadastra peersExpected CLI commands
The current stable CLI surface is:
softadastra status
softadastra node
softadastra node info
softadastra node start
softadastra store
softadastra store put <key> <value>
softadastra store get <key>
softadastra sync
softadastra sync status
softadastra sync tick
softadastra peersDo not use non-existing commands in build verification.
For example, do not verify with:
softadastra store remove app/nameunless that command is implemented and stable.
Verify interactive mode
Start the CLI without arguments:
softadastraInside the session:
softadastra> status
softadastra> node info
softadastra> store put app/name Softadastra
softadastra> store get app/name
softadastra> sync status
softadastra> sync tick
softadastra> peers
softadastra> exitInside interactive mode, do not repeat the binary name.
Correct:
softadastra> statusWrong:
softadastra> softadastra statusVerify local-first behavior
Softadastra must keep local work useful without peers.
Run:
softadastra store put draft/1 hello
softadastra store get draft/1
softadastra peersEven if peers are empty, the local value should still be readable.
The rule is:
no peer
↓
local store still worksVerify sync visibility
After a local write, sync should be inspectable.
softadastra store put message/1 hello
softadastra sync status
softadastra sync tick
softadastra sync statusA tick may show no connected peers.
That is normal when no peer is connected.
The important part is that sync state is visible and local data is still readable.
Verify node behavior
Run:
softadastra node infoIf metadata is unavailable, the CLI should still show basic node information.
Then start node services:
softadastra node startVerify:
softadastra node info
softadastra status
softadastra peersnode start starts services for the current CLI runtime.
For a long-running daemon, use the Softadastra node app.
Verify peers empty state
Run:
softadastra peersIf no peer exists, this is valid:
No discovery peers found.
No transport peers found.No peers should not break local store behavior.
Verify persistent recovery
Persistent recovery is verified with the C++ SDK or a runtime example.
The flow is:
open persistent runtime
write value
close runtime
open again with the same WAL path
read valueBefore running persistent examples, create the data directory:
mkdir -p dataExpected result:
the value written before restart is readable after restartC++ SDK repository
The C++ SDK repository is the developer-facing C++ API.
Typical local path:
cd ~/softadastra/sdkBuild with Vix:
vix buildOr with CMake:
cmake --preset dev-ninja
cmake --build --preset build-ninjaIf examples are enabled, run the current examples from the repository.
Useful verification areas:
local store
persistent store
restart recovery
sync state
manual tick
transport
discovery
metadataDo not verify with old examples that no longer exist.
Verify installed C++ SDK
After installing Softadastra, the SDK should be available here:
Linux and macOS:
~/.softadastra/sdkWindows:
%LOCALAPPDATA%\Softadastra\sdkUse it with Vix:
vix build -- -DCMAKE_PREFIX_PATH="$HOME/.softadastra/sdk"On Windows:
vix build -- -DCMAKE_PREFIX_PATH="$env:LOCALAPPDATA\Softadastra\sdk"Use it with CMake:
cmake -S . -B build \
-DCMAKE_PREFIX_PATH="$HOME/.softadastra/sdk"Documentation repository
Typical local path:
cd ~/softadastra/docsInstall dependencies:
npm installRun the docs locally:
npm run devBuild the docs:
npm run buildPreview the production build:
npm run previewFor VitePress, a successful build should produce:
.vitepress/distThe docs build should not fail because of:
- broken links
- missing pages
- invalid sidebar entries
- invalid nav links
- wrong relative links
- case-sensitive filename mismatch
Verify documentation routes
Check the main public routes:
/
installation
quick-start
sdks
/cli/
/sdk-cpp/
/reference/
/releases/Important CLI routes:
/cli/
/cli/commands
/cli/interactive-mode
/cli/node
/cli/store
/cli/sync
/cli/peers
/cli/referenceImportant C++ SDK routes:
/sdk-cpp/
/sdk-cpp/installation
/sdk-cpp/quick-start
/sdk-cpp/client
/sdk-cpp/client-options
/sdk-cpp/results-and-errors
/sdk-cpp/local-store
/sdk-cpp/persistent-store
/sdk-cpp/restart-recovery
/sdk-cpp/sync-state
/sdk-cpp/tick
/sdk-cpp/transport
/sdk-cpp/discovery
/sdk-cpp/metadata
/sdk-cpp/examplesImportant reference routes:
/reference/
/reference/cli
/reference/cpp-api
/reference/config
/reference/errorsImportant release routes:
/releases/
/releases/changelog
/releases/buildsRelease artifacts
Release artifacts should be named clearly.
The installer expects platform archives for the CLI and C++ SDK.
CLI archive names:
softadastra-linux-x86_64.tar.gz
softadastra-linux-aarch64.tar.gz
softadastra-macos-x86_64.tar.gz
softadastra-macos-aarch64.tar.gz
softadastra-windows-x86_64.zipC++ SDK archive names:
softadastra-sdk-linux-x86_64.tar.gz
softadastra-sdk-linux-aarch64.tar.gz
softadastra-sdk-macos-x86_64.tar.gz
softadastra-sdk-macos-aarch64.tar.gz
softadastra-sdk-windows-x86_64.zipEach archive must also have a SHA256 file:
<archive>.sha256If available, add a minisign signature:
<archive>.minisigCLI artifact contents
The Linux and macOS CLI archive should contain the binary in one of these accepted layouts:
bin/softadastraor:
softadastraThe Windows CLI archive should contain:
softadastra.exeThe installer searches recursively for softadastra.exe on Windows.
C++ SDK artifact contents
The SDK archive must contain:
include/softadastra/sdk
lib/cmake/sdk-cpp/sdk-cppConfig.cmakeA good SDK archive can also include:
include/softadastra/sdk.hpp
lib/
README.md
LICENSE
CHANGELOG.md
examples/The installer fails if the required include directory or CMake config is missing.
Verify release artifacts
Create a clean test directory:
mkdir -p /tmp/softadastra-release-test
cd /tmp/softadastra-release-testTest the CLI archive:
tar -xzf /path/to/softadastra-linux-x86_64.tar.gz
./softadastra version
./softadastra statusIf the archive contains bin/softadastra:
./bin/softadastra version
./bin/softadastra statusTest the SDK archive by installing or extracting it into a clean prefix, then building a tiny C++ app with:
-DCMAKE_PREFIX_PATH=/path/to/sdkVersion verification
Before publishing, check:
softadastra versionAlso verify version references in:
CHANGELOG.md
README.md
docs
vix.json
CMake project version
release tagFor the C++ SDK, verify the SDK version helpers if needed:
softadastra::sdk::sdk_version()Build logs
Keep build logs useful.
A good build log should make these clear:
- compiler
- CMake version
- Ninja version
- Vix version
- build preset
- build type
- enabled options
- target platform
- commit hash
- release version
Common build issues
Missing data directory
Persistent examples can fail if data/ does not exist.
Fix:
mkdir -p dataCLI binary not found
Find it:
find . -type f -executable -name "softadastra*"Then run the full path:
./path/to/softadastra versionCommand not found
If softadastra is not in PATH, run the binary directly:
./softadastra versionOr install the official release:
curl -fsSL https://softadastra.com/install.sh | shPort already in use
If transport fails to start, check the port:
ss -ltnp | grep 9100Use another port if needed.
Node app not available
If a long-running node app is not built, rebuild with:
vix build -- \
-DSOFTADASTRA_BUILD_APPS=ON \
-DSOFTADASTRA_BUILD_CLI_APP=ON \
-DSOFTADASTRA_BUILD_NODE_APP=ONDocumentation broken links
If VitePress reports broken links, check:
- the file exists
- the route matches the filename
- the sidebar points to the right path
- the header nav points to the right path
- relative links do not include wrong extensions
- file case matches the link case
Example:
/reference/cpp-apishould map to:
reference/cpp-api.mdBuild verification checklist
Before publishing a build, verify:
- engine repository builds
- release preset builds
- CLI binary exists
- CLI version works
- CLI status works
- store put/get works
- sync status works
- sync tick works
- node info works
- peers handles empty state
- local-first behavior still works
- persistent recovery works
- C++ SDK builds
- C++ SDK can be found with
CMAKE_PREFIX_PATH - documentation builds
- changelog is updated
- version is correct
- release artifacts are named correctly
- release artifacts contain required files
- release artifacts have
.sha256 - installer can install the release
Minimal release verification sequence
From the engine repository:
cd ~/softadastra/softadastra
vix build --preset release -- \
-DSOFTADASTRA_BUILD_APPS=ON \
-DSOFTADASTRA_BUILD_CLI_APP=ON \
-DSOFTADASTRA_BUILD_NODE_APP=ON
find . -type f -executable -name "softadastra*"Then run the built binary:
./softadastra version
./softadastra status
./softadastra store put app/name Softadastra
./softadastra store get app/name
./softadastra sync status
./softadastra sync tick
./softadastra node info
./softadastra peersAdjust ./softadastra if the binary is generated in another folder.
Documentation verification sequence
cd ~/softadastra/docs
npm install
npm run buildThen check:
ls .vitepress/distC++ SDK verification sequence
cd ~/softadastra/sdk
vix buildor:
cmake --preset dev-ninja
cmake --build --preset build-ninjaThen run the available examples or tests from the SDK repository.
What a good build proves
A good build proves:
- the code compiles
- the CLI starts
- the CLI stable commands work
- the C++ SDK builds
- the docs build
- local-first behavior still works
- persistence can be verified
- sync state is visible
- errors are explicit
- release artifacts can be installed
It does not prove everything about production behavior.
Production reliability still needs deeper testing, including network failures, crash recovery, conflict cases, and real deployment constraints.
Stable versus experimental artifacts
Only publish artifacts as stable when they are intended to be supported.
Good rule:
stable CLI binary -> publish as release artifact
stable C++ SDK package -> publish as SDK artifact
experimental node app -> mark clearly if needed
internal test binary -> do not publish as public artifactSummary
Softadastra builds should be reproducible, verifiable, and clear.
The release process should verify:
- repositories
- CLI
- C++ SDK
- docs
- local-first behavior
- persistence
- sync visibility
- error handling
- artifacts
- installer compatibility
The most important rule is:
do not ship a build that cannot be verified