Library / SDK
cosmos/cosmos-sdk avatar
cosmos/cosmos-sdk

Cosmos SDK: what the Go framework actually gives you before you commit

Framework for building performant, customizable blockchains with native interoperability

7,071 stars4,226 forksGoApache-2.0

At a glance

What is it?
The Cosmos SDK is a Go framework for building sovereign Layer 1 blockchains from composable modules, with IBC interoperability wired in. It rewards teams that want chain-level control and punishes anyone hoping for a quick deployment.
Who is it for?
Adopt the Cosmos SDK if you need a sovereign chain with custom state transitions, your own validator set, and IBC connectivity, and you have Go engineers who can live inside a module-based architecture. Do not adopt it if you want to ship a contract on an existing chain, or if your team has no Go experience, since every extension point here is a Go module.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Go, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What problem the Cosmos SDK solves, and for whom

Most developers who want on-chain logic deploy a contract to somebody else's chain. They inherit that chain's fee market, its governance, its upgrade schedule and its virtual machine. The Cosmos SDK takes the other position: you build the chain itself. The README describes it as a modular, open-source blockchain SDK for building secure, high-performance Layer 1 chains with full customizability, and it states that the SDK is used by 200+ chains in production.

The intended user is a team that needs its own state machine. That means custom transaction types, custom fee logic, custom permissioning, and a validator set the team controls rather than rents. The README lists the abstractions the SDK provides: permissioning, governance, state management, account abstraction, tokenization processes and application logic. In practice, those are delivered as modules under x/, each with its own keeper, message types and storage layout.

The README is explicit about the trade-off in scope. The SDK is tailored for sovereign application-specific blockchains, which means you take on validator operations, genesis coordination and upgrade governance. If none of that is a requirement, the SDK is more machinery than the problem needs.

Modules, keepers and ABCI: the mechanism under the surface

A Cosmos SDK chain is a Go binary assembled from modules. The repository layout makes this visible at the top level: baseapp/, x/ for the maintained modules, store/ and iavl/ for state, codec/ for serialization, and runtime/ and depinject/ for wiring. The x/README.md is the entry point the README points to for module documentation.

Consensus is a separate concern. The README states that the SDK is plug-and-play with any consensus engine but recommends CometBFT, which is developed as part of the Cosmos Stack and released alongside the SDK. The SDK's go.mod pins github.com/cometbft/cometbft v0.40.0, so the version relationship is concrete rather than aspirational.

Interoperability is not an add-on you evaluate later. The README says chains get it out of the box via a native integration with the Inter-Blockchain Communication Protocol, and that ibc-go is implemented as a Go module in the SDK. That design choice is the strongest argument for the framework: cross-chain messaging is part of the default architecture, not a bridge you bolt on and audit separately.

Two structural details matter for planning. First, the README notes that enterprise-grade modules for permissioned networks and consortium chains live in the enterprise/ directory and have different licensing terms than the core SDK. Second, the SDK maintains a separate store module, github.com/cosmos/cosmos-sdk/store/v2, which appears in go.mod as its own versioned dependency. State storage is versioned independently of the framework, so upgrading one does not automatically upgrade the other.

Cosmos SDK tutorial: build and run simapp locally

The README points new users at the Cosmos SDK Tutorial at docs.cosmos.network for a guided build, and at the High-Level Intro for the architecture. The repository itself ships simapp, a reference application, and a Dockerfile that builds it. The Dockerfile comments give the build and run sequence directly.

Build the image from the repository root:

bash
docker build -t simapp .

The Dockerfile builds with golang:1.26.6-alpine and runs make build, then copies the resulting binary onto alpine:3. It exposes ports 26656, 26657, 1317 and 9090, and its default command is simd.

Initialize a chain and start the node. The Dockerfile comments give both commands, including the caveat that a validator must be set in genesis before start will run:

bash
docker run -it -p 26657:26657 -p 26656:26656 -v ~/.simapp:/root/.simapp simapp simd init test-chain
docker run -it -p 26657:26657 -p 26656:26656 -v ~/.simapp:/root/.simapp simapp simd start

Key management uses the same image against a separate data directory, which the comments note because simd always looks at ~/.simapp:

bash
docker run -it -p 26657:26657 -p 26656:26656 -v ~/.simappcli:/root/.simapp simapp simd keys add foo
docker run -it -p 26657:26657 -p 26656:26656 -v ~/.simappcli:/root/.simapp simapp simd keys list

For a multi-node local network, the repository includes docker-compose.yml with four services named simdnode0 through simdnode3, all using the image cosmossdk/simd on a bridge network called localnet. Node 0 maps 26656-26657, 1317, 9090 and 2345; the other three shift each port range by ten. Volumes point at ./.testnets:/data.

Building outside Docker goes through the Makefile. The README advises always using the latest maintained Go version, and go.mod declares go 1.26.6. The Makefile sets SIMAPP = ./simapp and exposes make build, and it errors out if sh or bash is missing, so a POSIX shell is a build prerequisite.

Where the Cosmos SDK is the wrong tool

The clearest failure mode is treating the SDK as a faster way to deploy a contract. It is not. Every feature you add is a Go module compiled into the chain binary, and every change to consensus-relevant logic is a coordinated chain upgrade. If your application logic is expressible as a smart contract, the Cosmos EVM listed in the README is a more direct route than writing modules.

Sovereignty has an operational price the README does not quantify. You are responsible for validators, genesis, and upgrade coordination. The README's own Dockerfile comment admits that starting the container requires setting a validator in genesis first, which is a small illustration of a larger pattern: this framework assumes you will do the chain-level work.

Tooling gaps are real. The related searches around this project include people asking about a Cosmos SDK in Rust and in Python. The repository is Go, its go.mod declares module github.com/cosmos/cosmos-sdk, and the README describes no first-class Rust or Python application path. Teams without Go engineers should treat that as a hard constraint, not a learning-curve note.

There is also a naming trap the README addresses itself. It carries a disambiguation notice stating that this project is not related to React-Cosmos, the React component tool. Searches for Cosmos SDK tooling will surface both, and any documentation you find should be checked against the cosmos/cosmos-sdk repository before you rely on it.

Cosmos SDK versus Substrate and versus building on Ethereum

The two comparisons people search for most are Substrate and Ethereum, and the difference is not performance claims, it is where application logic lives.

Against Ethereum, the split is contract versus chain. On Ethereum you write Solidity or another EVM language and deploy to a shared state machine with a shared fee market. With the Cosmos SDK you write Go modules and run your own state machine with your own validator set. The README's interoperability story is IBC, described as a protocol that allows blockchains to transfer any type of data encoded in bytes, which is a different model from an EVM chain bridging to another EVM chain. If you want EVM compatibility inside a Cosmos SDK chain, the README points to Cosmos EVM as a native EVM layer rather than as a replacement for the SDK.

Against Substrate, the split is language and runtime. Substrate is a Rust framework with a WebAssembly runtime upgrade path. The Cosmos SDK is Go, compiled, with modules wired through runtime/ and depinject/ and state in store/. The practical consequence is who you can hire and how you ship upgrades: a Go team versus a Rust team, and a compiled binary upgrade versus a runtime upgrade. Neither is strictly better, but the choice is usually made by the existing team's language, not by architecture diagrams.

A third option is to build on an existing Cosmos SDK chain rather than launching one. The README notes that the Cosmos Hub, the first production chain built with the SDK, still receives the most up-to-date SDK versions, and that the gaia application has its own cosmos/gaia repository. That is the path for teams that want the ecosystem without the validator burden.

Maintenance, upgrades and the Apache-2.0 licence boundary

The repository is not archived and the last push was on 2026-09-21. Recent releases include v0.55.0 on 2026-07-28 and cosmovisor/v1.7.3 on 2026-08-26. The cosmovisor releases are versioned separately from the SDK itself, which is worth noting because cosmovisor is the upgrade tooling and it moves on its own cadence.

Upgrade cost is a first-class concern in this project, and the repository reflects that with a dedicated UPGRADING.md at the top level alongside CHANGELOG.md and RELEASE_NOTES.md. The README states that CometBFT releases are updated alongside the SDK, which means a consensus engine bump and an SDK bump tend to arrive together. Because the SDK's go.mod pins cometbft v0.40.0 and the store module at its own v2.0.0, a version bump can touch more than one module in your dependency graph. Budget for reading UPGRADING.md before every minor version jump, not after a build breaks.

Licensing has a boundary that is easy to miss. The core SDK is Apache-2.0, per the licence badge and LICENSE file. The README states that enterprise modules in the enterprise/ directory have different licensing terms than the core SDK. If your architecture depends on those modules, the licence question is separate from the Apache-2.0 grant, and the repository's own text is the place to start. None of this is legal advice; a licence review of enterprise/ is a distinct step from reviewing the core SDK.

Maintainership is documented rather than implied. The README names Cosmos Labs as the maintainer of the core stack and links a maintenance policy in the cosmos/security repository. The issue list is described as exclusively for bug reports and feature requests, with support routed to Discord, Telegram and Slack channels. That means an issue tracker is not a support desk here.

Editorial conclusion

Adopt the Cosmos SDK if you need a sovereign chain with custom state transitions, your own validator set, and IBC connectivity, and you have Go engineers who can live inside a module-based architecture. Do not adopt it if you want to ship a contract on an existing chain, or if your team has no Go experience, since every extension point here is a Go module. Before committing, verify three things: that the module set in x/ covers your core logic, that your target CometBFT and SDK versions are compatible, and that the SDK version you pin has a written upgrade path in UPGRADING.md.

Frequently asked questions

What is the Cosmos SDK used for?

It is a modular Go framework for building sovereign Layer 1 blockchains, used to assemble custom chains from predefined modules or custom ones. The README states it is used by 200+ chains in production and provides abstractions for permissioning, governance, state management and application logic.

What is the Cosmos SDK?

The Cosmos SDK is an open-source blockchain SDK written in Go, licensed Apache-2.0, for building secure, high-performance Layer 1 chains with full customizability. It is not related to the React-Cosmos project, a disambiguation the README carries itself.

How does the Cosmos SDK compare to Substrate?

The Cosmos SDK is a Go framework whose modules are compiled into a chain binary, while Substrate is a Rust framework. The practical difference is the language your team works in and how upgrades ship, since the SDK's upgrade path runs through UPGRADING.md and coordinated chain upgrades.

How does the Cosmos SDK compare to building on Ethereum?

On Ethereum you deploy a contract to a shared state machine; with the Cosmos SDK you write Go modules and run your own chain with your own validator set. Interoperability in the SDK comes through IBC rather than an EVM bridge, and the README lists Cosmos EVM as a separate native EVM layer for SDK chains.

What are the alternatives to the Cosmos SDK?

The main architectural alternatives are deploying contracts to an existing chain such as Ethereum, or building on Substrate in Rust. A third option the README implies is building on an existing Cosmos SDK chain, since the Cosmos Hub still receives the most up-to-date SDK versions.

Official sources

  1. cosmos/cosmos-sdk on GitHub
  2. License: Apache-2.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/cosmos-cosmos-sdk.svg)](https://hysenlabs.com/projects/cosmos-cosmos-sdk)