Last updated: 2026-10-06
Status: Active development · default branch main · current release v2.7.0
sdkt is a unified, offline-capable CLI and Rust toolkit for Stellar / Soroban development — it consolidates the fragmented contract lifecycle (decode, inspect, analyze, build, simulate, submit, audit, deploy) into one binary.
| Current release | v2.7.0 (tags v2.0.0, v2.1.0, v2.1.1, v2.2.0, v2.3.0, v2.4.0, v2.5.0, v2.6.0, v2.7.0 also published) |
| Repository status | Active · all capabilities merged to main |
| Crates | 9 workspace crates — 8 published to crates.io, sdkt-agent repo-only prototype — plus the sdkt-playground WASM surface (excluded from the workspace) |
| Current focus | Release assurance — artifact, security, upgrade, deployed reality, health |
A new contributor can understand the project from this summary alone: a test-covered Soroban toolchain with a clear path toward mainnet readiness and an extensible plugin architecture.
sdkt unifies the Soroban developer lifecycle — inspect, decode, analyze, build, simulate, and submit — into one modular, offline-capable Rust toolkit, instead of juggling 5+ separate CLIs.
The workspace is a Cargo virtual workspace. The sdkt binary is produced by sdkt-cli; all logic lives in focused, dependency-bounded crates.
| Crate | Purpose | Key Responsibilities |
|---|---|---|
sdkt-core |
Global configuration & shared types | DevKitConfig, NetworkConfig, OutputFormat, ValidationError. No I/O, no networking. |
sdkt-xdr |
XDR decode / encode & payload manipulation | decode(), encode_ledger_key(), extract_wasm_hash(), decode_event_topics(), typed builder helpers. No networking, no I/O. |
sdkt-wasm |
Contract WASM inspection & offline analysis | ContractSpec parser, WasmModule inspector, SpecDiff, UpgradeVerdict. Offline only. |
sdkt-rpc |
Soroban RPC client & on-chain aggregation | SorobanRpcClient (persistent pooled reqwest), TtlInfo, ContractInspection; simulate / submission / builder modules. The only network-I/O crate. |
sdkt-storage |
Storage analysis, WASM caching, keystore | StorageAnalyzer, StorageReport, WasmCache, IdentityStore (ED25519, ~/.sdkt/identities). |
sdkt-audit |
Offline static security analysis | Severity, Finding, AuditReport, AuditRule, RuleRegistry, register_rule!; built-in rules AUTH-001, AUTH-002, AUTH-003, AUTH-004, MOVE-001, MATH-001, CEI-001; plugin author API. |
sdkt-audit-example-rule |
Reference plugin crate | Rule EXAMPLE-001; produces libsdkt_audit_example_rule (native) and sdkt_audit_example_rule.wasm behind the plugins / wasm-plugins features. |
sdkt-cli |
User-facing CLI | Cli, Commands; routes arguments to crates and formats output (pretty + --format json). Builds the sdkt binary. |
sdkt-agent |
Read-only natural-language front end (prototype, repo-only — not published) | Deterministic rule-based planner over sdkt_core::registry; refuses mutating/mainnet/ambiguous requests; versioned JSON results. |
sdkt-playground |
Browser WASM surface (excluded from the workspace, not published) | sdkt-wasm inspector exposed to the browser via wasm-bindgen; offline inspection plus the upgrade-safety comparison added in v2.7.0. |
Dependency rules
sdkt-coredepends on no other workspace crate and performs no networking.sdkt-xdrandsdkt-wasmare offline / networking-free.sdkt-rpcis the sole network boundary (besidessdkt-storage's keystore disk writes).- Everything may depend on
sdkt-core;sdkt-cliorchestrates the rest.
Capabilities are grouped by theme below.
- Storage & Inspect —
sdkt storage check,sdkt inspect, RPC client, canonicalOutputFormat(shipped in early alpha releases) - Network introspection —
sdkt tx inspect,sdkt events,sdkt account, generic RPC (alpha) - Production hardening — RPC retry/timeout, clippy strict, CI, docs/rustdoc coverage (alpha)
- Horizon account enrichment + ScVal pretty UI — Account graph via Horizon REST; human-readable ScVal output (alpha)
- ABI-aware decoding —
--abi <WASM>onevents/inspect/storage check; real event payload decoding (alpha) - StorageAnalyzer —
sdkt storage analyzeCLI with full classification (alpha) - Offline contract inspection —
sdkt wasm inspect <file.wasm>reads metadata, custom sections, exports, specs - Contract verification —
sdkt verifyconfirms a deployed contract's on-chain WASM hash matches a local artifact - Contract health report —
sdkt healthaggregates WASM hash + storage/TTL posture into ahealthy/at_risk/criticalverdict
- ABI/WASM diff —
sdkt diff --old-wasm --new-wasmoffline comparison (alpha) - Static security analysis —
sdkt-auditcrate with rulesAUTH-001,AUTH-002,AUTH-003,AUTH-004,MOVE-001,MATH-001,CEI-001; exposed viasdkt audit <path> - Upgrade safety guard —
UpgradeVerdict;sdkt diff --upgrade-safety;sdkt deploy --deny-breaking - Release assurance —
sdkt release-assuranceaggregates artifact metadata, static security audit, upgrade safety, deployed WASM verification, and contract health into onePASS/REVIEW/FAIL/SKIPPED/ERRORverdict with a machine-readable JSON report - WASM size policy — opt-in
--max-size-bytes/--max-growth-pctonsdkt diffandsdkt release-assurance; thresholds are operator-supplied and no network limit is hardcoded - Deployment verification —
sdkt deployment-verifycompares a local WASM's SHA-256 against the deployed contract's on-chain executable (MATCH/DRIFT/UNKNOWN/NOT_FOUND, exit-gated) - Network diagnostics —
sdkt network diagnosereports network identity, protocol agreement, and observed ledger resource limits before a release verification trusts a target - Agent (prototype) —
sdkt-agentmaps plain-English requests onto the capability registry and runs them read-only; repo-only, not published
- Rule registry —
RuleRegistryinsdkt-audit; additive--rules <path>; plugin author API; example rule crate - Dynamic rule loading — Native
.so/.dylib/.dllplugins vialibloading+ C-ABI;sdkt audit --rules <plugin.so>; ABI major-version gate (featureplugins, default OFF) - WASM sandbox — Sandboxed
.wasmplugins viaextism+ JSON-ABI;sdkt audit --rules <plugin.wasm>; no FS/network (featurewasm-plugins, default OFF) - Plugin local store — Offline plugin store with
plugin.tomlmetadata;sdkt plugin list/show/install/remove/update(local-only); identity-based--rules <id>resolution; shipped inv2.5.0 - Plugin bundle packaging & signing —
sdkt plugin packproduces a.sdktpluginbundle (manifest + artifact +manifest.sha256) and can sign it with an Ed25519 secret key (--secret-key <file>);sdkt plugin install <bundle>.sdktpluginverifies digests and the signature when present, and--public-key <file>pins the expected signer;sdkt plugin verify-bundleandsdkt plugin doctorcheck bundle integrity. Shipped inv2.6.0(#213).
- On-chain contract inspection —
sdkt wasm metadata --contract <id>returns complete WASM metadata, parsed ABI, storage summary, and TTL - Contract metadata decoding —
sdkt wasm inspectdecodes thecontractmetav0custom section intokey = valueprovenance entries (pretty and additivemetadata.contract_metaJSON) - On-chain upgrade-safety verification —
sdkt verify --contract <id> --wasm <candidate.wasm> --upgrade-safetyfetches the live contract's spec and classifies breaking vs non-breaking changes - Live-contract ABI for events —
sdkt events --abi-contract <id>uses the deployed contract's on-chain WASM to decode events without a local artifact - Live-contract ABI for storage —
sdkt storage --abi-contract <id>uses the deployed contract's on-chain WASM for storage analysis - Protocol 28 support —
sdkt initscaffolds andsdkt buildcompiles for Protocol 28 targets - CAP-85 external executables —
sdkt inspectresolves protocol-defined (stellar_asset) andExternalRefexecutables that carry no WASM artifact - Verification mismatch exit gate —
sdkt verifyreturns non-zero on a mismatched deployed WASM, so CI gates reading the exit code cannot pass a wrong artifact
- GitHub composite Action —
.github/actions/sdkt/action.ymlwrapssdkt audit,sdkt diff --upgrade-safety, andsdkt release-assurance(including the WASM size policy) for CI - Release engineering — Unified workspace version;
release.yml; install-script validation; panic audit on user paths - Stability — MSRV gate, CI hardening, Windows compatibility, dependency compaction
- WASM tooling & caching —
sdkt wasm metadata,sdkt wasm cache,sdkt-wasmcrate,ContractSpecparser,sdkt deploy+sdkt initscaffolding - Workspace orchestration —
sdkt buildcompiles artifacts;sdkt project deployhandles topological dependency sorting via.sdkt.toml
- Local package manifest —
.sdkt.toml[package]+[dependencies](localpath);sdkt package validateoffline - Git dependency sources —
gitdeps withtag/branch/rev;sdkt package fetchinto.sdkt-cache - Lock & reproducibility —
sdkt.lockrecords resolved commit/integrity;sdkt lock verifycovers deps - Package update —
sdkt package updatewith--check/--dry-run/--format; closes the validate → fetch → update → verify loop - Version resolution — Semver constraints on deps;
VersionResolverpicks best satisfying tag/commit - Packaging —
sdkt package packproduces an offline bundle of manifest + lock + cache;sdkt package publish --dry-runreadiness check - Release polish —
Dockerfiledistribution, mainnet-safety guards, opt-in--versionprovenance
- Mutability foundation —
sdkt tx simulate,sdkt tx submit,sdkt identity(ED25519 keystore),sdkt tx buildenvelope builder, fee estimation - RPC pooling — Persistent pooled
reqwest::Client; configurable timeout / pool settings - Simulation detail —
sdkt tx simulatesurfacesrestorePreambleand granularstateChanges - Native transaction signing —
sdkt tx signsigns envelopes with a local ED25519 identity (offline);sdkt-xdrsigning library; keystore integration - Network profiles — Stored RPC profiles with
sdkt network add/list/show/removeCLI;--network-profile <NAME>plus override flags on every RPC command - Profile integration — Precedence: explicit flags > profile >
.sdkt.toml> built-in testnet default
Where is this project today?
- Released: All capabilities are merged to
mainand shipped in releases throughv2.7.0. - Current release:
v2.7.0(tagged). Prior tagged releases:v2.6.0,v2.5.0,v2.4.0,v2.3.0,v2.2.0,v2.1.1,v2.1.0,v2.0.0. - Repository health: Healthy. 8 published crates (+
sdkt-agentprototype, repo-only), all quality gates enforced in CI (cargo fmt,cargo clippy --workspace --all-targets -- -D warningsdefault + all-features,cargo test --workspace). - CI status: Green. Workflows:
ci.yml(fmt/clippy/test on Ubuntu/macOS/Windows + MSRV + install-script validation),release.yml(tag-gated cross-platform binaries, checksums, crates.io publish),compatibility.yml(real-worldstellar/soroban-examplesvalidation),sdkt-action-ci.yml(self-validates the reusable Action).
The package-manager, plugin-ecosystem, and on-chain inspection lines are fully shipped in v2.5.0. The remaining backlog items below are explicitly unscheduled:
- Plugin ecosystem / marketplace — remote slice. The local offline-first store,
.sdktpluginbundle packaging, and Ed25519 bundle signing/verification are shipped (v2.6.0, #213). The remaining remote/marketplace layer — a hosted index/server, remotehttpsplugin sources, and remotesdkt plugin update— stays unscheduled backlog. - Broader Soroban ecosystem integration. On-chain inspection is shipped. Deeper compatibility-matrix work (beyond the on-chain inspection path) remains unscheduled.
- Developer productivity — continuing DX investments (faster feedback, better errors, smoother onboarding).
- Hosted package registry — a remote index/server that the
DependencyFetchertrait can target; explicitly deferred.
Status of the original gaps identified in the project's inception. Every row reflects the actual repository state.
| Original Gap | State |
|---|---|
| Gap A — Unified CLI lifecycle | ✅ Closed |
| Gap B — Storage rent visibility | ✅ Closed |
| Gap C — Static security analysis | ✅ Closed — sdkt-audit crate with rules AUTH-001–AUTH-004, MOVE-001, MATH-001, CEI-001, sdkt audit CLI |
| Gap D — Local XDR decoder | ✅ Closed |
| Gap E — ABI/interface viewer | ✅ Closed |
| Plugin system | ✅ Closed — rule registry, dynamic native loading, and sandboxed WASM plugins are all merged to main |
- Read-only before mutating — read-only features ship first, mutating features follow.
- Mandatory quality gates —
cargo fmt+cargo clippy --workspace --all-targets -- -D warnings+cargo test --workspaceare required for every PR. - Branch discipline — default branch is
main; PRs targetmainfrom feature branches.