{"repo":"ApeWorX/ape","free":true,"listed":false,"github":"https://github.com/ApeWorX/ape","clone":"git clone https://github.com/ApeWorX/ape.git","description":"Build and explore on-chain with Python","language":"Python","stars":1054,"topics":["ape","apeworx","brownie","defi","developer-tools","ethereum","framework","nft","python","smart-contracts","solidity","vyper","web3"],"license":"Apache-2.0","category":"dev_tool","readme_excerpt":"[![Pypi.org][pypi-badge]][pypi-url]\n[![Apache licensed][license-badge]][license-url]\n[![Build Status][actions-badge]][actions-url]\n[![Contributing][contributing-badge]][contributing-url]\n[![Discord chat][discord-badge]][discord-url]\n[![Twitter][twitter-badge]][twitter-url]\n[![DeepWiki][deepwiki-badge]][deepwiki-url]\n\n# Overview\n\n[Ape Framework](https://apeworx.io/framework/) is an easy-to-use Web3 development tool.\nUsers can compile, test, and interact with smart contracts all in one command line session.\nWith our [modular plugin system](#plugin-system), Ape supports multiple contract languages and chains.\n\nApe is built by [ApeWorX LTD](https://www.apeworx.io/).\n\nJoin our [ApeWorX Discord server][discord-url] to stay up to date on new releases, plugins, and tutorials.\n\nIf you want to get started now, see the [Quickstart](#quickstart) section.\n\n## Documentation\n\nRead our [technical documentation](https://docs.apeworx.io/ape/stable/) to get a deeper understanding of our open source Framework.\n\nRead our [academic platform](https://academy.apeworx.io/) which will help you master Ape Framework with tutorials and challenges.\n\n## Prerequisite\n\nIn the latest release, Ape requires:\n\n- Linux or macOS\n- Python 3.10 up to 3.13\n- **Windows**: Install Windows Subsystem Linux [(WSL)](https://docs.microsoft.com/en-us/windows/wsl/install)\n\nCheck your python version in a terminal with `python3 --version`.\n\n## Installation\n\nThere are three ways to install ape: `pipx`, `pip`, or `Docker`.\n\n### Considerations for Installing\n\n- If using `pip`, we advise using the most up-to-date version of `pip` to increase the chance of a successful installation.\n\n  - See issue https://github.com/ApeWorX/ape/issues/1558.\n  - To upgrade `pip` from the command line, run: `pip install --upgrade pip`.\n\n- We advise installing in a [virtualenv](https://pypi.org/project/virtualenv/) or [venv](https://docs.python.org/3/library/venv.html) to avoid interfering with *OS-level site packages*.\n\n- We advise installing **`ape`** with recommended plugins `pip install eth-ape'[recommended-plugins]'`.\n\n- We advise for **macOS** users to install virtual env via [homebrew](https://formulae.brew.sh/formula/virtualenv).\n\n### Installing with `pipx` or `pip`\n\n1. Install `pipx` via their [installation instructions](https://pypa.github.io/pipx/) or `pip` via their [installation instructions](https://pip.pypa.io/en/stable/cli/pip_install/).\n\n2. Install **`ape`** via `pipx install eth-ape` or `pip install eth-ape`.\n\n### Installing with `docker`\n\nApe can also run in a docker container.\n\nYou can pull our images from [ghcr](https://ghcr.io/apeworx/ape).\nThis image is built using our `recommended-plugins` extra, so it is a great starting point for running ape in a containerized environment.\n\nWe also have a `slim` docker image that is built without any installed plugins.\nThis image is meant for production support and must be further configured if any plugins are in use.\n\nYou can pull the image:\n\n```bash\n$ docker pull ghcr.io/apeworx/ape:latest  # installs with recommended-plugins\n```\n\nor pull the slim if you have specific needs that you'd like to build from:\n\n```bash\n$ docker pull ghcr.io/apeworx/ape:latest-slim  # installs ape with required packages\n```\n\nor build the image locally from source:\n\n```bash\n$ docker build -t ape:latest-slim -f Dockerfile.slim .\n$ docker build -t ape:latest .\n```\n\nAn example of running a command from the container would be:\n\n```bash\ndocker run \\\n  --volume $HOME/.ape:/home/harambe/.ape \\\n  --volume $HOME/.vvm:/home/harambe/.vvm \\\n  --volume $HOME/.solcx:/home/harambe/.solcx \\\n  --volume $PWD:/home/harambe/project \\\n  apeworx/ape compile\n```\n\n> **Note:**\n> The above command requires the full install which includes `recommended-plugins` installation extra.\n\n## Quickstart\n\nAfter you have installed Ape, run `ape --version` to verify the installation was successful.\n\nYou can interact with Ape using the [command line](https://docs.apeworx.io/ape/stable/userguides/clis.html) or the [Ape console](https://docs.apeworx.io/ape/stable/userguides/console.html).\n\nSee the following user-guides for more in-depth tutorials:\n\n- [Accounts][accounts-guide]\n- [Networks][networks-guide]\n- [Projects][projects-guide]\n- [Compiling][compile-guide]\n- [Testing][testing-guide]\n- [Console][console-guide]\n- [Scripting][scripting-guide]\n- [Logging][logging-guide]\n\n## Plugin System\n\nApe's modular plugin system allows users to have an interoperable experience with Web3.\n\n- Learn about **installing** plugins from following this [installing user guide](https://docs.apeworx.io/ape/stable/userguides/installing_plugins.html).\n\n- Learn more about **developing** your own plugins from this [developing user guide](https://docs.apeworx.io/ape/stable/userguides/developing_plugins.html).\n\n```{note}\nIf a plugin does not originate from the [ApeWorX GitHub Organization](https://github.com/ApeWorX?q=ape&type=all), you will get a warning about installing 3rd-party plugins.\nInstall 3rd party plugins at your own risk.\n```\n\n[accounts-guide]: https://docs.apeworx.io/ape/stable/userguides/accounts.html\n[actions-badge]: https://github.com/ApeWorX/ape/actions/workflows/test.yaml/badge.svg\n[actions-url]: https://github.com/ApeWorX/ape/actions?query=branch%3Amain+event%3Apush\n[compile-guide]: https://docs.apeworx.io/ape/stable/userguides/compile.html\n[console-guide]: https://docs.apeworx.io/ape/stable/userguides/console.html\n[contributing-badge]: https://img.shields.io/badge/CONTRIBUTING-guidelines-brightgreen?style=flat-square\n[contributing-url]: https://github.com/ApeWorX/ape?tab=contributing-ov-file\n[deepwiki-badge]: https://deepwiki.com/badge.svg\n[deepwiki-url]: https://deepwiki.com/ApeWorX/ape\n[discord-badge]: https://img.shields.io/discord/922917176040640612.svg?logo=discord&style=flat-square\n[discord-url]: https://discord.gg/apeworx\n[license-badge]: https://img.shields.io/github/license/ApeWorX/ape?color=blue\n[license-url]: https://github.com/ApeWorX/ape?tab=License-1-ov-file\n[logging-guide]: https://docs.apeworx.io/ape/stable/userguides/logging.html\n[networks-guide]: https://docs.apeworx.io/ape/stable/userguides/networks.html\n[projects-guide]: https://docs.apeworx.io/ape/stable/userguides/projects.html\n[pypi-badge]: https://img.shields.io/pypi/dm/eth-ape?label=pypi.org\n[pypi-url]: https://pypi.org/project/eth-ape/\n[scripting-guide]: https://docs.apeworx.io/ape/stable/userguides/scripts.html\n[testing-guide]: https://docs.apeworx.io/ape/stable/userguides/testing.html\n[twitter-badge]: https://img.shields.io/twitter/follow/ApeFramework\n[twitter-url]: https://twitter.com/ApeFramework\n","default_branch":"main","files":437,"tree":[".dockerignore",".github/ISSUE_TEMPLATE/bug.yml",".github/ISSUE_TEMPLATE/feature.yml",".github/release-drafter.yml",".github/workflows/build.yaml",".github/workflows/codeql.yml",".github/workflows/commitlint.yaml",".github/workflows/docs.yaml",".github/workflows/draft.yaml",".github/workflows/publish.yaml",".github/workflows/stale-prs.yml",".github/workflows/test.yaml",".gitignore",".pre-commit-config.yaml","CONTRIBUTING.md","Dockerfile","LICENSE","README.md","codeql-config.yml","docs/commands/accounts.rst","docs/commands/compile.rst","docs/commands/console.rst","docs/commands/init.rst","docs/commands/networks.rst","docs/commands/plugins.rst","docs/commands/pm.rst","docs/commands/run.rst","docs/commands/test.rst","docs/conf.py","docs/index.rst","docs/methoddocs/ape.md","docs/methoddocs/ape_accounts.md","docs/methoddocs/ape_compile.md","docs/methoddocs/ape_ethereum.md","docs/methoddocs/ape_node.md","docs/methoddocs/ape_pm.md","docs/methoddocs/ape_test.md","docs/methoddocs/api.md","docs/methoddocs/cli.md","docs/methoddocs/contracts.md","docs/methoddocs/exceptions.md","docs/methoddocs/managers.md","docs/methoddocs/plugins.md","docs/methoddocs/types.md","docs/methoddocs/utils.md","docs/userguides/accounts.md","docs/userguides/brownie-migration.md","docs/userguides/clis.md","docs/userguides/compile.md","docs/userguides/config.md","docs/userguides/console.md","docs/userguides/contract_metadata.md","docs/userguides/contracts.md","docs/userguides/data.md","docs/userguides/dependencies.md","docs/userguides/developing_plugins.md","docs/userguides/forking_networks.md","docs/userguides/installing_plugins.md","docs/userguides/logging.md","docs/userguides/networks.md","docs/userguides/projects.md","docs/userguides/proxy.md","docs/userguides/publishing.md","docs/userguides/quickstart.md","docs/userguides/reverts.md","docs/userguides/scripts.md","docs/userguides/testing.md","docs/userguides/trace.md","docs/userguides/transactions.md","funding.json","pyproject.toml","src/ape/__init__.py","src/ape/_cli.py","src/ape/api/__init__.py","src/ape/api/accounts.py","src/ape/api/address.py","src/ape/api/compiler.py","src/ape/api/config.py","src/ape/api/convert.py","src/ape/api/explorers.py","src/ape/api/networks.py","src/ape/api/projects.py","src/ape/api/providers.py","src/ape/api/query.py","src/ape/api/trace.py","src/ape/api/transactions.py","src/ape/cli/__init__.py","src/ape/cli/arguments.py","src/ape/cli/choices.py","src/ape/cli/commands.py","src/ape/cli/options.py","src/ape/cli/paramtype.py","src/ape/contracts/__init__.py","src/ape/contracts/base.py","src/ape/exceptions.py","src/ape/harambe.py","src/ape/logging.py","src/ape/managers/__init__.py","src/ape/managers/_contractscache.py","src/ape/managers/_deploymentscache.py","src/ape/managers/accounts.py","src/ape/managers/base.py","src/ape/managers/chain.py","src/ape/managers/compilers.py","src/ape/managers/config.py","src/ape/managers/converters.py","src/ape/managers/networks.py","src/ape/managers/plugins.py","src/ape/managers/project.py","src/ape/managers/query.py","src/ape/plugins/__init__.py","src/ape/plugins/_utils.py","src/ape/plugins/account.py","src/ape/plugins/compiler.py","src/ape/plugins/config.py","src/ape/plugins/converter.py","src/ape/plugins/network.py","src/ape/plugins/pluggy_patch.py","src/ape/plugins/project.py","src/ape/plugins/query.py","src/ape/py.typed","src/ape/pytest/README.md","src/ape/pytest/__init__.py","src/ape/pytest/config.py","src/ape/pytest/contextmanagers.py","src/ape/pytest/coverage.py","src/ape/pytest/fixtures.py","src/ape/pytest/gas.py","src/ape/pytest/plugin.py","src/ape/pytest/runners.py","src/ape/pytest/utils.py","src/ape/pytest/warnings.py","src/ape/types/__init__.py","src/ape/types/address.py","src/ape/types/basic.py","src/ape/types/coverage.py","src/ape/types/events.py","src/ape/types/gas.py","src/ape/types/private_mempool.py","src/ape/types/signatures.py","src/ape/types/trace.py","src/ape/types/units.py","src/ape/types/vm.py","src/ape/utils/__init__.py","src/ape/utils/_github.py","src/ape/utils/abi.py","src/ape/utils/basemodel.py","src/ape/utils/misc.py","src/ape/utils/os.py","src/ape/utils/process.py","src/ape/utils/rpc.py","src/ape/utils/testing.py","src/ape/utils/trace.py","src/ape/utils/validators.py","src/ape_accounts/__init__.py","src/ape_accounts/_cli.py","src/ape_accounts/accounts.py","src/ape_accounts/py.typed","src/ape_cache/__init__.py","src/ape_cache/_cli.py","src/ape_cache/base.py","src/ape_cache/config.py","src/ape_cache/models.py","src/ape_cache/py.typed","src/ape_cache/query.py","src/ape_compile/__init__.py","src/ape_compile/_cli.py","src/ape_compile/config.py","src/ape_compile/py.typed","src/ape_console/__init__.py","src/ape_console/_cli.py","src/ape_console/config.py","src/ape_console/plugin.py","src/ape_console/py.typed","src/ape_ethereum/__init__.py","src/ape_ethereum/_console_log_abi.py","src/ape_ethereum/_converters.py","src/ape_ethereum/_print.py","src/ape_ethereum/ecosystem.py","src/ape_ethereum/multicall/__init__.py","src/ape_ethereum/multicall/constants.py","src/ape_ethereum/multicall/exceptions.py","src/ape_ethereum/multicall/handlers.py","src/ape_ethereum/provider.py","src/ape_ethereum/proxies.py","src/ape_ethereum/py.typed","src/ape_ethereum/query.py","src/ape_ethereum/trace.py","src/ape_ethereum/transactions.py","src/ape_ethereum/utils.py","src/ape_init/__init__.py","src/ape_init/_cli.py","src/ape_init/py.typed","src/ape_networks/__init__.py","src/ape_networks/_cli.py","src/ape_networks/config.py","src/ape_networks/py.typed","src/ape_node/__init__.py","src/ape_node/provider.py","src/ape_node/py.typed","src/ape_node/query.py","src/ape_plugins/__init__.py","src/ape_plugins/_cli.py","src/ape_plugins/py.typed","src/ape_pm/__init__.py","src/ape_pm/_cli.py","src/ape_pm/compiler.py","src/ape_pm/dependency.py","src/ape_pm/project.py","src/ape_pm/py.typed","src/ape_run/__init__.py","src/ape_run/_cli.py","src/ape_run/py.typed","src/ape_test/__init__.py","src/ape_test/_cli.py","src/ape_test/_watch.py","src/ape_test/accounts.py","src/ape_test/config.py","src/ape_test/provider.py","src/ape_test/py.typed","tests/README.md","tests/__init__.py","tests/conftest.py","tests/functional/__init__.py","tests/functional/conftest.py","tests/functional/conversion/test_address.py","tests/functional/conversion/test_custom.py","tests/functional/conversion/test_decimal.py","tests/functional/conversion/test_encode_structs.py","tests/functional/conversion/test_ether.py","tests/functional/conversion/test_hex.py","tests/functional/conversion/test_misc.py","tests/functional/conversion/test_timestamp.py","tests/functional/data/README.md","tests/functional/data/__init__.py","tests/functional/data/contracts/AragonAppProxyUpgradeable.sol","tests/functional/data/contracts/BeaconProxy.sol","tests/functional/data/contracts/ContractA.sol","tests/functional/data/contracts/ContractB.sol","tests/functional/data/contracts/ContractC.sol","tests/functional/data/contracts/DSNoteTest.json","tests/functional/data/contracts/ERCProxy.sol","tests/functional/data/contracts/HasError.sol","tests/functional/data/contracts/InterfaceImplementation.json","tests/functional/data/contracts/MinimalProxyFactory.vy","tests/functional/data/contracts/RevertsContract.vy","tests/functional/data/contracts/SafeProxy.sol","tests/functional/data/contracts/SafeProxyV150.sol","tests/functional/data/contracts/SimpleProxy.sol","tests/functional/data/contracts/SolFallbackAndReceive.sol","tests/functional/data/contracts/SolidityContract.sol","tests/functional/data/contracts/SubRevertsVy.vy","tests/functional/data/contracts/ThisIsNotAContract.txt","tests/functional/data/contracts/UpgradeabilityProxy.sol","tests/functional/data/contracts/Uups.sol","tests/functional/data/contracts/VyDefault.vy","tests/functional/data/contracts/VyperContract.vy","tests/functional/data/contracts/VyperFactory.vy","tests/functional/data/contracts/beacon.json","tests/functional/data/contracts/contract_abi.json","tests/functional/data/contracts/eip1967.json","tests/functional/data/contracts/interfaces/ISubReverts.vyi","tests/functional/data/contracts/interfaces/Interface.json","tests/functional/data/contracts/printing.json","tests/functional/data/projects/ApeProject/ape-config.yaml","tests/functional/data/projects/ApeProject/contracts/ApeContract0.json","tests/functional/data/projects/ApeProject/contracts/ApeContract1.json","tests/functional/data/projects/ApeProject/contracts/Contract.json","tests/functional/data/projects/ApeProject/contracts/Exclude.json","tests/functional/data/projects/ApeProject/contracts/Path.with.sub.json","tests/functional/data/projects/ApeProject/contracts/subdir/ApeContractNested.json","tests/functional/data/projects/ApeProject/contracts/subdir/ExcludeNested.json","tests/functional/data/projects/BrownieProject/brownie-config.yaml","tests/functional/data/projects/BrownieProject/contractsrenamed/brownie.json","tests/functional/data/projects/LongContractsFolder/source/v0.1/long_contracts_folder.json","tests/functional/data/python/__init__.py","tests/functional/data/scripts/update.py","tests/functional/geth/__init__.py","tests/functional/geth/conftest.py","tests/functional/geth/test_chain.py","tests/functional/geth/test_contract.py","tests/functional/geth/test_contract_event.py","tests/functional/geth/test_contracts_cache.py","tests/functional/geth/test_ecosystem.py","tests/functional/geth/test_gas_tracker.py","tests/functional/geth/test_network_manager.py","tests/functional/geth/test_provider.py","tests/functional/geth/test_proxy.py","tests/functional/geth/test_query.py","tests/functional/geth/test_receipt.py","tests/functional/geth/test_trace.py","tests/functional/test_accounts.py","tests/functional/test_address.py","tests/functional/test_base_manager.py","tests/functional/test_block.py","tests/functional/test_block_container.py","tests/functional/test_chain.py","tests/functional/test_cli.py","tests/functional/test_compilers.py","tests/functional/test_config.py","tests/functional/test_console.py","tests/functional/test_contract.py","tests/functional/test_contract_call_handler.py","tests/functional/test_contract_container.py","tests/functional/test_contract_event.py","tests/functional/test_contract_instance.py","tests/functional/test_contract_method_handler.py","tests/functional/test_contracts_cache.py","tests/functional/test_converters.py","tests/functional/test_coverage.py","tests/functional/test_default_sender_context_manager.py","tests/functional/test_dependencies.py","tests/functional/test_deploymentscache.py","tests/functional/test_ecosystem.py","tests/functional/test_exceptions.py","tests/functional/test_explorer.py","tests/functional/test_fixtures.py","tests/functional/test_gas_tracker.py","tests/functional/test_hash_address.py","tests/functional/test_history.py","tests/functional/test_logging.py","tests/functional/test_multicall.py","tests/functional/test_network_api.py","tests/functional/test_network_manager.py","tests/functional/test_plugins.py","tests/functional/test_project.py","tests/functional/test_provider.py","tests/functional/test_proxy.py","tests/functional/test_query.py","tests/functional/test_receipt.py","tests/functional/test_receipt_capture.py","tests/functional/test_reverts_context_manager.py","tests/functional/test_signatures.py","tests/functional/test_test.py","tests/functional/test_trace.py","tests/functional/test_transaction.py","tests/functional/test_types.py","tests/functional/utils/__init__.py","tests/functional/utils/test_abi.py","tests/functional/utils/test_basemodel.py","tests/functional/utils/test_github.py","tests/functional/utils/test_misc.py","tests/functional/utils/test_os.py","tests/functional/utils/test_rpc.py","tests/integration/__init__.py","tests/integration/cli/__init__.py","tests/integration/cli/conftest.py","tests/integration/cli/projects/bad-contracts/contracts/Contract.test","tests/integration/cli/projects/bad-contracts/contracts/Contract2.foo","tests/integration/cli/projects/bad-contracts/contracts/doc.md","tests/integration/cli/projects/bad-contracts/contracts/file_without_ext","tests/integration/cli/projects/bad-contracts/contracts/package.json","tests/integration/cli/projects/bad-contracts/contracts/subdir/tsconfig.json","tests/integration/cli/projects/bad-contracts/contracts/tests/TestContract.foobar","tests/integration/cli/projects/empty-config/ape-config.yaml","tests/integration/cli/projects/geth/ape-config.yaml","tests/integration/cli/projects/geth/contracts/TokenA.json","tests/integration/cli/projects/geth/contracts/TokenB.json","tests/integration/cli/projects/geth/contracts/VyperContract.json","tests/integration/cli/projects/geth/tests/conftest.py","tests/integration/cli/projects/geth/tests/test_using_local_geth.py","tests/integration/cli/projects/multiple-interfaces/contracts/Interface-with-hyphens.json","tests/integration/cli/projects/multiple-interfaces/contracts/Interface.exclude.json","tests/integration/cli/projects/multiple-interfaces/contracts/Interface.json","tests/integration/cli/projects/multiple-interfaces/contracts/InterfaceWithNumber123.json","tests/integration/cli/projects/multiple-interfaces/contracts/Interface_with_underscores.json","tests/integration/cli/projects/no-config/.gitkeep","tests/integration/cli/projects/only-dependencies/__init__.py","tests/integration/cli/projects/only-dependencies/ape-config.yaml","tests/integration/cli/projects/only-dependencies/dependency_in_project_only/__init__.py","tests/integration/cli/projects/only-dependencies/dependency_in_project_only/importme.py","tests/integration/cli/projects/only-dependencies/dependency_in_project_only/sources/DependencyInProjectOnly.json","tests/integration/cli/projects/only-script-subdirs/scripts/subdirectory/subdirectory_click_print.py","tests/integration/cli/projects/only-script-subdirs/scripts/subdirectory/subdirectory_main_print.py","tests/integration/cli/projects/script/contracts/VyperContract.json","tests/integration/cli/projects/script/scripts/_utils.py","tests/integration/cli/projects/script/scripts/click.py","tests/integration/cli/projects/script/scripts/deploy.py","tests/integration/cli/projects/script/scripts/error_cli.py","tests/integration/cli/projects/script/scripts/error_forgot_click.py","tests/integration/cli/projects/script/scripts/error_main.py","tests/integration/cli/projects/script/scripts/error_no_def.py","tests/integration/cli/projects/script/scripts/output_contract_view_methods.py","tests/integration/cli/projects/script/scripts/site.py","tests/integration/cli/projects/script/scripts/subdirectory/subdirectory_click_print.py","tests/integration/cli/projects/script/scripts/subdirectory/subdirectory_main_print.py","tests/integration/cli/projects/test/ape-config.yaml","tests/integration/cli/projects/test/tests/conftest.py","tests/integration/cli/projects/test/tests/test_fixture_isolation.py","tests/integration/cli/projects/test/tests/test_fixture_isolation_session.py","tests/integration/cli/projects/test/tests/test_fixtures.py","tests/integration/cli/projects/test/tests/test_networks.py","tests/integration/cli/projects/with-contracts/contracts/ContractA.json","tests/integration/cli/projects/with-contracts/contracts/DirectoryWithJSONExtension.json/.gitkeep","tests/integration/cli/projects/with-contracts/contracts/Exclude.json","tests/integration/cli/projects/with-contracts/contracts/IgnoreUsingRegex.json","tests/integration/cli/projects/with-contracts/contracts/RawSolidityOutput.json","tests/integration/cli/projects/with-contracts/contracts/RawVyperOutput.json","tests/integration/cli/projects/with-contracts/contracts/exclude_dir/UnwantedContract.json","tests/integration/cli/projects/with-contracts/contracts/hyphen-Contract.json"],"storefront":"/r/ApeWorX","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/ApeWorX/ape/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}