Releases: stellar/stellar-cli
Release list
27.1.0
stellar-cli v27.1.0 — Release Notes
Tokens & Assets
stellar token transfer— transfer tokens for SEP-41 and Stellar Asset Contracts (#2644)stellar token balance— new command to check token balances (#2651)- Reserved
nativecontract alias that resolves to the native asset (#2646) - Centralized asset/token resolution behind a single resolver (#2654)
Containers
- Add support for container engines — Docker or Apple Container (#2643)
stellar container use— set the default container engine (#2647)- Add CPU and memory limits to
container start(#2648) - Shell out to Docker directly instead of using bollard (#2629)
- Move Docker image distribution to its own repo (#2616)
- Make
latestthe default quickstart image tag (#2649)
Signing & Transactions
- Sign auth entries when the signer is passed by public key (#2658)
- Allow
tx signandtx hashwithout an RPC URL (#2642) - Verify signature against cached public key after signing (#2619)
Output & UX
- New output mode for human-readable and JSON results (#2635)
- Improved descriptions for
contract idcommands (#2618)
Bug Fixes
- Fix
contract extendpanic when extending a missing entry (#2657) - Fix
contract restorepanic when restoring a missing entry (#2660)
Bindings / TS Boilerplate
- Replace Standalone with Local in the TS boilerplate (#2251)
- Update stellar-sdk version in binding generation (#2640)
New Contributors
- @zachfedor — first contribution (#2251)
- @NicoMoli — first contribution (#2619)
Full Changelog: v27.0.0...v27.1.0
27.0.0
What's Changed
Protocol 27 Support
- Updated protocol dependencies and the Soroban SDK to Protocol 27, and added support for signing the new
AddressV2auth entries (#2613).
New Features
- Added
--auth-mode(andSTELLAR_AUTH_MODE) tocontract invoke/deploy/uploadandtx simulate, withenforce,root, andnon-rootmodes — enabling non-root authorization, which the CLI could not produce before (#2602). - Added
--only-committostellar versionto print just the build commit sha (#2592).
Security
stellar envnow conceals secret-bearing values by default, requiring--revealto print them — fixing an inverted check that leaked credentials in plain text (#2597).stellar snapshot createnow redacts credentials in the archive URL printed to stderr (#2598).
Docker & Packaging
- Installed missing runtime libraries so the Docker image starts correctly (#2594).
- Built images from source on native per-architecture runners (#2605, #2606) and tagged
:latestonly for the newest release (#2607). - Added retries to the install action (#2608) and fixed
tarusage on Windows (#2612).
All Changes
- Add --only-commit flag to stellar version by @leighmcculloch in #2592
- Add missing runtime libraries to Docker image by @fnando in #2594
- Bump the all-actions group across 1 directory with 6 updates by @dependabot[bot] in #2596
- Conceal
stellar envoutput unless--revealis used by @fnando in #2597 - Redact archive URL password in snapshot download output by @fnando in #2598
- Delete .github/workflows/claude-review.yml by @leighmcculloch in #2601
- Build Docker images from source instead of downloading binaries. by @fnando in #2605
- Build the Docker image with a separate Dockerfile ref by @fnando in #2606
- Add retries to the install action for resilience by @leighmcculloch in #2608
- Tag
:latestonly for the newest released version by @fnando in #2607 - Update crate-git-revision to 0.0.9 by @leighmcculloch in #2611
- Fix tar usage on Windows. by @fnando in #2612
- Add --auth-mode flag for tx simulation by @mootz12 in #2602
- Update stellar dependencies to protocol 27 by @mootz12 in #2613
- Bump version to 27.0.0 by @github-actions[bot] in #2615
Full Changelog: v26.1.0...v27.0.0
26.1.0
Ledger hardware wallets, end-to-end
- Derive and display addresses with
stellar keys address --ledger(#2557). - Fund accounts directly from Ledger-derived public keys with
stellar keys fund --ledger(#2558). - Register Ledger identities with
stellar keys add --ledger(#2563). - Pick the derivation path consistently with
--hd-pathacross all of the above (#2539, #2540). - Sign contract authorization entries from Ledger identities, enabling multi-auth contract invocations entirely from a hardware wallet — no secret material ever leaves the device (#2569).
Smaller wasm by default
stellar contract buildnow optimizes wasm output by default (#2581).- The
--optimizeflag is no longer required — what comes out ofbuildis production-ready bytecode you can deploy as-is.
New: stellar contract info hash
- Returns the wasm hash for a deployed contract (#2576).
- Useful for scripting verification flows, comparing deployments across networks, or confirming that two contracts run the exact same bytecode.
Organized, discoverable help output
--helpoutput now groups flags into logical sections instead of dumping them in a single flat list (#2567).- Finding the right network, signing, output, or identity flag is much faster — especially for high-surface commands like
contract invoke.
Security hardening across the board
This release closes a number of paths where secrets, credentials, or untrusted input could surface in places they shouldn't:
- Secret values are no longer echoed in error messages, help output, signing previews, or RPC headers.
- Passwords embedded in RPC URLs are redacted in cached config, network display output, and the remaining places URLs were printed.
- Config, cache, and identity files are now created with
0600permissions, and permissions are correctly reset when overwriting via--config-dir. STELLAR_SECRET_KEYis validated before being persisted and is rejected entirely when--secure-storeis in use, preventing accidental disk writes of secret material.- Keyring entries are cleaned up properly when overwriting a key, eliminating stale credential leftovers.
stellar tx editis hardened against temp-file swap attacks, andstellar contract build --print-commands-onlynow shell-escapes its output so it can be safely piped into a shell.- Authorization entries are validated before signing, and the transaction source is no longer silently mixed into auth signing logic.
- Several dependency advisories were addressed (rustls-webpki, astral-tokio-tar, and others).
Quality-of-life and bug fixes
- Identity aliases now resolve inside nested
invokearguments (#2552). - The CLI hints when a contract ID looks like a wasm hash (#2550).
- Secure-store public keys are cached in identity files, so you don't re-hit the keyring on every read (#2533).
--hd-pathis now persisted on plain seed-phrase keys (#2540).--docker-hostis honored for TCP/HTTP Docker connections (#2503).- Control characters in signed messages are escaped in previews.
- Fixed a panic when the global config directory didn't exist.
- Fixed an early-EOF bug in
SkipWhitespaceon whitespace-only chunks.
New Contributors
- @gabrielrondon made their first contribution in #2461
Full Changelog: v26.0.0...v26.1.0
26.0.0
Stellar CLI v26.0.0 Release Notes
Protocol 26 Support
This release adds full support for Stellar Protocol 26. The CLI now runs against Protocol 26 by default, including updated network dependencies and the Soroban SDK.
New Features
Confirmation prompt when removing keys
Deleting a key with stellar keys rm now asks for confirmation before removing it, preventing accidental key loss.
Contract name validation on init
When creating a new contract with stellar contract init --name, the name is now validated and sanitized automatically, giving you a clear error if the name doesn't meet requirements instead of generating a broken project.
Smarter npm package name handling
When initializing JavaScript/TypeScript projects, package names are now validated against npm naming rules using the same logic npm itself uses, catching issues earlier in the workflow.
SHA-256 verification when fetching contract code
When fetching a contract's Wasm bytecode from the network, the CLI now verifies that the SHA-256 hash of the downloaded code matches the hash stored on-chain. This ensures the contract code you receive hasn't been tampered with.
Bug Fixes
Fixed crash in xdr decode with Val type
Running stellar xdr decode on data of type Val would panic. This is now fixed and returns a proper result.
Breaking Changes / Removals
Removed deprecated --list flag for plugins
The --list option for listing plugins was deprecated and has been removed. Use stellar plugin list instead (or the equivalent subcommand in your workflow).
Removed deprecated --global flag
The --global flag, which was previously deprecated in favour of the new global-by-default behaviour, has been removed.
Docker Image
Official Docker images are now published automatically with each release.
Full Changelog: v25.2.0...v26.0.0
25.2.0
🚀 New Features
- Auto-build on deploy:
stellar contract deployandstellar contract uploadnow automatically build your contracts when no WASM is provided — no manual build step required. (#2378) - Self-describing events:
stellar eventsandcontract invokenow display human-readable event descriptions from the contract spec. (#2380) - Fee bump for large transactions: Transactions that exceed the base fee threshold are automatically wrapped in a fee bump transaction. (#2382)
- Pipe secrets from stdin: Key secrets can now be passed via pipe, making it easier to integrate with secret managers in scripts and CI. (#2403)
stellar network root-account: New command to retrieve the root account for a given network. (#2402)- Network ID in
stellar network info: The network ID is now included in the output ofstellar network info. (#2413) - Auto-convert string arguments in
contract invoke: String-typed arguments are now automatically coerced, reducing friction when calling contracts from the CLI. (#2410) --lockedpassthrough on contract build: The--lockedflag is now forwarded when building contracts, ensuring reproducible builds. (#2383)--hd-pathpropagation: The--hd-pathflag now correctly propagates to auth signers and alias resolution. (#2437)- Spec shaking (build side): The build pipeline now supports spec shaking, reducing generated output size. (#2353)
🔒 Security
- Sensitive env vars concealed by default:
stellar envnow hides sensitive values (secret keys, RPC headers, signing keys) by default, showing# KEY=<concealed>instead of the raw value. (#2440, #2408) - Path traversal prevention: Network and contract alias names are now validated to block path traversal attacks. (#2443)
- Restrictive file permissions: Config directories and key files are now created with tighter permissions on Unix systems. (#2415)
- RPC headers hidden from output: RPC headers (which may contain auth tokens) are no longer shown in
stellar network ls --longor debug trace output. (#2441, #2442) - Control character sanitization: Control characters in contract spec display output are now sanitized. (#2433)
- Keccak vulnerability patched: Updated keccak to address CWE-758. (#2422)
🐛 Bug Fixes
- Fixed
BytesNparsing when using valid hex values. (#2385) - Fixed
snapshot createunconditionally adding entries when match result was unused. (#2404) - Fixed
--assetin trustline commands to accept valid asset codes of any length. (#2405) - Fixed an error when fetching ledger entries for trustlines using the native asset. (#2406)
🔧 Developer Experience
- Warnings are now shown when a contract spec references types that are missing. (#2426)
- Improved dependency checking in the install script. (#2399)
--no-default-featuresis now honored when usingcargo install. (#2416)
📦 TypeScript Bindings
- Updated bindings to the latest JS SDK version. (#2373)
Full Changelog: v25.1.0...v25.2.0
New Contributors: @teddav made their first contribution in #2373 — welcome! 🎉
25.1.0
🛡️ Bug Fixes
- Better error reporting for contract builds — The CLI now raises a clear error when building contracts without overflow checks enabled, helping developers catch misconfigurations early.
📦 Packaging & Distribution
- Debian package support — Added
.debpackage generation to the CI pipeline, making it easier to install the Stellar CLI on Debian and Ubuntu systems. - Fixed Nix build configuration — Moved
pkg-configtonativeBuildInputsin the Nix configuration, resolving cross-compilation and build issues for Nix users.
Full Changelog: v25.0.0...v25.1.0
25.0.0
What's Changed
✨ Features & Improvements
- Add SEP-53 message signing and verification by @tomerweller in #2346
- Add
--inclusion-feeand--resource-feearguments as a replacement for--feeto give users more control over setting fees by @mootz12 in #2321 - Add
stellar feescommand that allows users to read network feestats and configure default--inclusion-feearguments by @mootz12 in #2321 - Warn during
stellar contract buildif overflow-checks are off in Cargo.toml by @fnando in #2360
🐛 Fixes
- Apply inclusion fee and resource fee to simulated transaction correctly by @mootz12 in #2355
- Handle contract build info when multiple attestations are available by @fnando in #2359
🛠️ Technical Updates
- Update to protocol 25. by @fnando in #2331
- Sign Windows installer when making a new release by @fnando in #2357
- Bump the all-actions group across 1 directory with 4 updates by @dependabot in #2307
🗑️ Deprecations Notice
stellar contract invoke --fee-> Usestellar contract invoke --inclusion-feestellar feestats-> Usestellar fees stats
New Contributors
- @tomerweller made their first contribution in #2346
Full Changelog: v23.4.1...v25.0.0
23.4.1
23.4.0
Stellar CLI v23.4.0
We're excited to announce Stellar CLI v23.4.0! This release focuses on improving the installation experience, enhancing error messages, and giving you more control over your CLI configuration.
🚀 Highlights
Easier Installation with One-Line Install Script
Getting started with Stellar CLI is now easier than ever! We've added a new installation script that automatically detects your platform and installs the latest version with a single command:
curl -fsSL https://github.com/stellar/stellar-cli/install.sh | shThe installer supports multiple installation modes:
- System-wide installation (default): Installs to
/usr/local/bin - User installation (
--userflag): Installs to~/.local/binwithout requiring sudo - Custom directory (
--dirflag): Install anywhere you want
This provides a simpler alternative to package managers, especially for Linux users.
Better Configuration Management
You now have complete control over your CLI defaults with new unset commands:
stellar keys unset- Remove your default identity when you want to work without a preset accountstellar network unset- Clear your default network configuration
These commands make it easy to reset your environment and work more flexibly across different contexts.
Address Encoding & Decoding with strkey Command
You can now encode and decode Stellar addresses directly from the CLI with the new stellar strkey command. This is particularly useful when you need to extract and work with the raw payloads within Stellar addresses.
Clearer Error Messages
We've improved error reporting to help you troubleshoot issues faster:
- Ledger device errors now provide specific, actionable error messages instead of generic failures, making it much easier to diagnose and fix common issues
- Account funding errors are now properly reported when using
--fundwithstellar keys generate, so you'll immediately know if friendbot is unavailable
Installation
Get the latest version using our new installer:
curl -fsSL https://github.com/stellar/stellar-cli/install.sh | shOr upgrade using your preferred package manager.
Full Changelog: v23.3.0...v23.4.0
23.3.0
✨ New Features
- Add
stellar snapshot mergeto merge several snapshots into one file - Print all env vars prefixed with
STELLAR
🐛 Bug Fixes
- Fix help generation for recursive custom types
- Revert ts-binding option type change
- Properly handle
$STELLAR_CONFIG_HOMEand$STELLAR_DATA_HOME - Pass 'quiet' value through to config.sign
- Do not show warning if local dir is pointing to global dir
⚡ Improvements
- Add bulk memory feature for wasm optimization
- Link to Stellar Lab after deploying contract, so users can interact with it
- Move upgrade check file to data directory
Full Changelog: v23.2.1...v23.3.0