Open-source project
steemit/steem avatar
steemit/steem

Steem Blockchain Setup, Node Operation, and API Constraints

The blockchain for Smart Media Tokens (SMTs) and decentralized applications.

1,947 stars795 forksC++NOASSERTION

At a glance

What is it?
Steem is a C++ blockchain node for decentralized applications, social consensus, and applications built around STEEM, SBD, and proposed Smart Media Tokens. Its Docker path is accessible, but operating a full node requires substantial memory and exposes several experimental configuration paths.
Who is it for?
Steem suits developers who need to operate or connect to this specific blockchain and can accept its node footprint and custom licence. It is a poor fit for operators seeking a lightweight node, an unambiguously classified open source licence, or documented Smart Media Token deployment.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 98 days ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

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

Editorial analysis

Steem's Role in Social and Application Blockchains

Steem addresses the infrastructure layer for decentralized applications whose users publish content, receive token allocations, and interact through a social network. The repository identifies its audience broadly through the claim that Steem is intended as a blockchain for dApp development. That makes the project relevant to application developers who need the `steemd` node, its APIs, and the STEEM token environment rather than developers looking only for a content-publishing interface.

The project uses Delegated Proof-of-Stake, identified in the README as DPOS. It also describes a social allocation mechanism called "Proof of Brain," which the README says introduced token allocation without mining. Steem is therefore not designed as a mineable chain: the README explicitly states that it is currently not mineable.

The repository presents three token-related elements. STEEM is the network currency. SBD is described as Steem's stable coin with a one-way peg. Smart Media Tokens are positioned as the basis for the planned application model, but the feature list still labels Smart Media Tokens as "soon." This wording matters. An engineer cannot treat the SMT description as evidence of a generally available feature without checking the current documentation and release artifacts.

Steem also documents Resource Credits, time-delayed vested STEEM, savings, hierarchical role-based permissions, and integrated token allocation. These features place it between a blockchain node and an application platform. Consensus and token mechanics are built into the network, while content and decentralized application behavior is supplied through APIs and external software.

Steemd Consensus, APIs, and Request Routing

The central executable is `steemd`. Its operation depends on configuration, peer connectivity, blockchain data, and API plugins. Running it once creates a data directory and configuration file under the default `witness_node_data_dir`. The README warns that the process will not proceed without seed nodes, so configuration generation is not equivalent to joining the network.

Seed nodes are listed in `doc/seednodes.txt`, and the Docker image includes that file. The `STEEMD_SEED_NODES` environment variable can replace the baked-in list with a whitespace-delimited list that includes ports. This gives container operators a direct way to control peer discovery without editing the source repository.

The CLI wallet does not query every part of the node by default. According to the README, its connected node must run `account_by_key_api` and `condenser_api`, and it must accept WebSocket connections through `webserver-ws-endpoint`. An application that calls additional APIs may require plugins and configuration beyond those stated wallet requirements. This is a concrete integration constraint. Starting `steemd` successfully does not establish that the wallet or a client application can use its expected interfaces.

The full-node configuration enables a wider set of APIs and plugins. A separate experimental mode, controlled by `USE_MULTICORE_READONLY`, divides read handling across reader processes while forwarding writes to one writer. NGINX balances requests among readers, described as four per available core. The README labels this feature experimental and warns that some API calls may fail, so it should not be selected merely because a production node has multiple processors.

Starting a Steem Peer Node with Docker

The README presents a pre-built Docker image as the simplest route and publishes a short peer-node command. It exposes the P2P port and API port from a container named `steemd-default`. The stated requirement at the time of the documentation was approximately 2 GB of memory.

Start the container with the command exactly as published in the README:

bash
docker run \
    -d -p 2001:2001 -p 8090:8090 --name steemd-default \
    steemit/steem

This starts `steemd` in the background through the image. Port `2001` is published for P2P traffic, while `8090` is exposed for the node's HTTP-facing services. Follow the container log to observe startup and synchronization messages:

bash
docker logs -f steemd-default

The follow mode will continue printing output until interrupted. For a usable local node, operators should also expect to configure seed nodes when needed. The README says the image already contains a seed-node list, so an initial local run does not necessarily require replacement of that list.

This procedure demonstrates container startup, not a complete chain sync. The repository does not provide a short command in this documentation for creating an account, signing a transaction, or querying chain state through a named client request. A first production-like check therefore needs to cover log synchronization and verify the specific APIs that the wallet or application will call.

Full-Node Memory and Web-Service Configuration

A full node is intended for services that need all data, with the README using a content website as its example. The documented memory requirement is approximately 14 GB and is described as growing. That figure makes the default Docker quickstart unsuitable for small virtual machines or memory-constrained CI workers.

The full node can be enabled through the published container command:

bash
docker run \
    --env USE_WAY_TOO_MUCH_RAM=1 --env USE_FULL_WEB_NODE=1 \
    -d -p 2001:2001 -p 8090:8090 --name steemd-full \
    steemit/steem

`USE_WAY_TOO_MUCH_RAM` selects full-node startup in the documented environment. Despite its name, this variable is part of the documented startup path for this mode. `USE_FULL_WEB_NODE` selects the default configuration with the full API set and associated plugins.

Several environment variables expose additional operational modes. `USE_NGINX_FRONTEND` enables an NGINX reverse proxy for WebSocket requests and adds a `/health` endpoint. The documented health endpoint returns `200` when the node is less than 60 seconds away from being synced. `HOME` changes where the container stores its block log, shared memory, configuration, and other data. `USE_PAAS` adapts startup for Amazon Elastic Beanstalk and assumes the full-node environment variables. `S3_BUCKET` selects the bucket used for compressed shared-memory files.

These modes increase deployment flexibility but also create configuration dependencies. The experimental reader arrangement, NGINX, cloud storage, and platform-specific startup behavior should be evaluated separately from basic node synchronization.

Source Build, Tests, and Operational Boundaries

The repository contains a CMake-based build system, Docker build files, plugin directories, documentation, Python scripts, and tests. The README recommends either a pre-built Docker image or Docker-based building. It also links Linux instructions for Ubuntu LTS and macOS instructions in `doc/building.md`.

The repository `Dockerfile` initializes recursive Git submodules, creates a `build` directory, and invokes CMake with a release build type. It also enables testnet construction, turns off low-memory-node mode, and enables the MIRA build option. The Dockerfile lists native dependencies including Boost, YAJL, OpenSSL, Snappy, bzip2, lz4, zstd, and related build tools. This indicates a substantial C++ toolchain rather than a small client installation.

The repository directs developers to `doc/devs/testing.md` for test targets and coverage instructions. The README does not state a current command for running an individual test, nor does it provide a supported release cadence. It would therefore be misleading to infer a routine upgrade process from the repository's test and CI files alone.

The CLI wallet is also described as basic. A node deployment must meet its named API requirements, and clients must accept the WebSocket endpoint configuration. Applications that depend on `USE_MULTICORE_READONLY` inherit the documented risk of unsupported API calls. Another boundary appears in SMT documentation. The repository links an SMT whitepaper but marks it as not final.

Steem Licence, Releases, and Maintenance Cost

The repository does not carry a standard licence classification that GitHub can identify. Its top-level licence file is `LICENSE.md`, and the repository metadata labels it as a custom licence. Any adopter must read that file and determine whether its permissions and conditions match the intended deployment and redistribution model. The README does not support a conclusion about legal compliance or redistribution rights.

The repository is not archived. Its last push was on 2026-07-17. That is a recent recorded code change relative to the listed release history, but it does not by itself establish a stable release process. The listed releases are `v0.23.0` from 2020-06-10, `v0.22.1-no-mira` from 2019-09-03, and `v0.22.1` from 2019-09-03. The gap between the newest listed release and the newer push means operators cannot use release numbering alone to identify the current production state.

Upgrade planning has three costs. First, a source build carries native dependency and submodule work. Second, a full node carries a memory and storage footprint that the README says grows. Third, API and plugin configuration can require changes when node behaviour or interfaces change. The README does not provide a migration guide, rollback procedure, or release support matrix, so those items must be checked before treating an upgrade as routine.

Editorial conclusion

Steem suits developers who need to operate or connect to this specific blockchain and can accept its node footprint and custom licence. It is a poor fit for operators seeking a lightweight node, an unambiguously classified open source licence, or documented Smart Media Token deployment. Review `LICENSE.md`, confirm the required API plugins, and assess the 2 GB peer-node or 14 GB full-node memory requirement before adopting it.

Frequently asked questions

How do I start a Steem node with Docker?

The README provides a peer-node command that publishes ports `2001` and `8090` and names the container `steemd-default`. It then directs operators to follow startup output with `docker logs -f steemd-default`.

What APIs does the Steem CLI wallet require?

The connected node must run `account_by_key_api` and `condenser_api`. It must also be configured to accept WebSocket connections through `webserver-ws-endpoint`.

How much memory does a Steem full node require?

The README states that a full node needs approximately 14 GB of memory and that the requirement grows. A peer node is listed as requiring approximately 2 GB at the time of the documentation.

Is Steem mineable?

No. The README explicitly states that Steem is currently not mineable. Its documented consensus model is Delegated Proof-of-Stake, while token allocation also uses the described "Proof of Brain" social consensus mechanism.

What licence applies to Steem?

The repository is identified as using a custom licence that GitHub cannot classify. The relevant file is `LICENSE.md`; the README does not summarize its permissions.

Official sources

  1. Issues
  2. Project website
  3. README
  4. Releases
  5. steemit/steem on GitHub
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/steemit-steem.svg)](https://hysenlabs.com/projects/steemit-steem)

Was this useful?