Self-hosted service
ApeWorX/ape avatar
ApeWorX/ape

Ape Framework: a Python contract toolchain with a plugin for every chain

Build and explore on-chain with Python

1,053 stars184 forksPythonApache-2.0

At a glance

What is it?
Ape is a Python command line tool for compiling, testing and interacting with smart contracts, with chain and language support pushed into separate plugins. It fits Python teams that want one session for contracts and scripts, and it is a poor fit if you want a single self-contained binary.
Who is it for?
Ape is worth adopting if your team already writes Python, needs to script against deployed contracts in the same session where it compiles and tests them, and is willing to run `ape plugins install` for each chain or language it touches. It is the wrong tool if you want one binary with no plugin resolution, or if you cannot run Linux, macOS or WSL, since Windows is only supported through WSL.
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 Python, according to GitHub's language statistics.

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

DEEP OPEN-SOURCE ANALYSIS

The problem Ape solves for Python teams

Most smart contract work splits into two worlds. One world compiles and tests Solidity or Vyper. The other world talks to a deployed chain from a script. In JavaScript stacks those two worlds often share a runtime but not a language with the rest of a backend. Ape puts both on the Python side. The README describes it as a Web3 development tool where users "can compile, test, and interact with smart contracts all in one command line session." That single-session claim is the actual product. A Python developer working on a protocol can write a deploy script, run it against a local network, and then keep the same session open to call functions on the result. The audience is narrow and clear: Python engineers, data and quant people who already live in pandas and web3.py style code, and teams whose off-chain services are Python. If your stack is TypeScript, Ape asks you to adopt a second language for tooling with no payoff.

How the plugin system splits chains from contract languages

Ape itself is the core, and everything chain-specific or compiler-specific arrives as a plugin. The README states that "with our modular plugin system, Ape supports multiple contract languages and chains." The topics list on the repository names Solidity and Vyper, which matches the two compiler toolchains the Docker example mounts: `$HOME/.solcx` for the Solidity compiler and `$HOME/.vvm` for the Vyper version manager. So the data flow is: a plugin registers a compiler or a network provider, the core CLI discovers it, and commands like `ape compile` or a network connection dispatch through whatever registered. This is the design decision that shapes everything else. It keeps the core small and lets a new chain ship without a core release. It also means the set of things you can do is the intersection of the plugins you installed. The README is explicit about the trust boundary: plugins outside the ApeWorX GitHub Organization trigger a warning, and the note says to "install 3rd party plugins at your own risk." That is a real supply chain consideration, not a formality, because a plugin runs inside your development environment with your account keys available to it.

Installing with pipx, pip or Docker

The README gives three installation paths. The simplest for a CLI is `pipx install eth-ape`. The pip route is `pip install eth-ape`, and the README advises using an up-to-date pip and installing into a virtualenv or venv to avoid interfering with OS-level site packages. It also recommends pulling in the curated set with `pip install eth-ape'[recommended-plugins]'`. Note the distribution name: the package is `eth-ape` even though the command is `ape`. After install, the Quickstart says to run `ape --version` to confirm it worked. For containers, the images live at `ghcr.io/apeworx/ape`, and there are two tags with different contents. `ghcr.io/apeworx/ape:latest` is built with the `recommended-plugins` extra. `ghcr.io/apeworx/ape:latest-slim` is built without any installed plugins and, per the README, "is meant for production support and must be further configured if any plugins are in use." The Docker run example mounts three host directories (`~/.ape`, `~/.vvm`, `~/.solcx`) and the project directory, then runs `ape compile`. That mount list is the tell: compiler version managers and Ape's own home directory live outside the project, so a container that does not persist them re-downloads compilers on every run.

Platform and interpreter constraints you inherit

The prerequisite section is short and unforgiving. Ape requires Linux or macOS, and Python 3.10 through 3.13. Windows users are told to install Windows Subsystem for Linux. There is no native Windows path documented. The Python floor of 3.10 and the ceiling of 3.13 are both binding: a team on 3.9 cannot install it, and a team that has already moved to a newer interpreter than 3.13 has no documented support. This is worth checking before anything else, because it is cheaper to discover at install time than after writing scripts. The README also points at a specific pip issue (ApeWorX/ape issue 1558) as the reason for its advice to upgrade pip first, which suggests dependency resolution has been a recurring friction point rather than a one-off. It does not say what the failure looks like, only that a current pip improves the chance of a successful installation.

Where the plugin model becomes a liability

The same architecture that keeps the core small pushes work onto you. Nothing in the README lists which chains or which compilers are covered, so you cannot tell from the repository description alone whether your target network has a plugin. You have to go to the plugin installation guide to find out. That is a documentation gap, and it matters most at the evaluation stage, when you are trying to decide whether Ape is viable at all. The second cost is version alignment. Compiler toolchains are version managers (`~/.vvm`, `~/.solcx`) that live outside the project, so a working setup depends on state in your home directory as much as on your repository. Two developers can be running the same commit with different compiler versions resolved. The third cost is the warning path for third-party plugins: the README frames third-party plugins as a risk to accept, which means for an unsupported chain you are either writing the plugin yourself or trusting someone else's code with your keys. There is also no claim anywhere in the material about audit status, so treat plugin provenance as an open question rather than a solved one.

Ape against Hardhat and Foundry

The closest alternatives are Hardhat and Foundry, and the difference is not features so much as where the language boundary sits. Hardhat keeps contracts and tests in TypeScript, so the same language covers the toolchain and any Node service around it. Foundry writes tests in Solidity and ships as a compiled binary, which means no interpreter version floor and no plugin resolution step. Ape's position is Python: it is the option for teams whose scripts, notebooks and backend code are already Python, and for whom writing deploy logic in TypeScript would mean maintaining a second toolchain. The honest framing is that Ape trades a self-contained binary for an extensible Python core. If your reason for considering it is that you want Python and a plugin for your chain, it fits. If your reason is that you want the fastest test loop or the fewest moving parts, the binary-based option is a better match, and the README offers no performance claim that would change that.

Release cadence, licence and upgrade cost

The supplied release history shows v0.8.49 in April 2026, v0.8.50 in May 2026 and v0.8.51 in August 2026, with the last push to the default branch in late August 2026. That is an active but not frantic cadence on a 0.8.x line, which is a pre-1.0 version series. Pre-1.0 means the maintainers have not committed to interface stability, so pinning is the reasonable default and upgrades should be treated as a task rather than a background event. The practical upgrade cost sits in the plugins, not the core: a core bump that changes a plugin interface can leave you waiting on the plugin author, and the README's warning about third-party plugins implies those authors are outside ApeWorX's control. Ape is licensed Apache-2.0, a permissive licence that allows commercial and closed-source use and includes an explicit patent grant. That is the licence text as identified in the repository metadata; whether it satisfies your organisation's policy, and what obligations attach to redistribution, is a question for your own legal review rather than something this article can settle.

Editorial conclusion

Ape is worth adopting if your team already writes Python, needs to script against deployed contracts in the same session where it compiles and tests them, and is willing to run `ape plugins install` for each chain or language it touches. It is the wrong tool if you want one binary with no plugin resolution, or if you cannot run Linux, macOS or WSL, since Windows is only supported through WSL. Before committing, verify that plugins exist for your target chain and contract language, run `ape --version` after install, and check whether the Docker image you intend to use is the full one or the `slim` tag, because the slim image ships without plugins and `ape compile` will not work in it until you configure them.

Official sources

  1. ApeWorX/ape on GitHub
  2. License: Apache-2.0
  3. Project website
  4. README
  5. Releases
Community notes

Community notes