# Set up your Environment

## Overview

Setting up your development environment for IoTeX involves choosing the right Web3 tools and frameworks to streamline your workflow.&#x20;

Popular options include [Hardhat](https://hardhat.org/), [Truffle](https://www.trufflesuite.com/), and [Brownie](https://eth-brownie.readthedocs.io/en/stable/). These frameworks offer robust Dapp testing, deployment, and debugging capabilities. Once you are ready to deploy your smart contracts to the testnet or mainnet, you simply need to change the RPC endpoint in your tools configuration.&#x20;

[→ See IoTeX RPC Endpoints (full-node)](https://docs.iotex.io/blockchain/build/web3-development/rpc-endpoints)

[→ See IoTeX RPC Endpoints (archive-node) ](https://docs.iotex.io/blockchain/build/rpc-endpoints#archive-node)

Below is a list of popular development tools for EVM Dapp development. Each of these tools offers unique features and functionalities that can help streamline your Dapp development workflow.

{% hint style="info" %}
For detailed tutorials and guides on building and deploying smart contracts on IoTeX [→ visit the Build section of our documentation.](https://docs.iotex.io/blockchain/build/defi)
{% endhint %}

## Development Frameworks

1. [**Hardhat**](https://hardhat.org/): A flexible and extensible framework that helps developers compile, deploy, test, and debug their Ethereum software.
2. [**Truffle**](https://www.trufflesuite.com/): A development environment, testing framework, and asset pipeline for Ethereum, aimed at making life as an Ethereum developer easier.
3. [**Brownie**](https://eth-brownie.readthedocs.io/en/stable/): A Python-based development and testing framework for smart contracts targeting the Ethereum Virtual Machine (EVM).
4. [**Foundry (Forge)**](https://getfoundry.sh/): A fast, portable, and modular toolkit for Ethereum application development. Forge is the command-line tool for Foundry, providing robust smart contract development and testing capabilities.

## Integrated Development Environments (IDEs)

6. [**IoTeX Dev Portal**](https://developers.iotex.io)**:** the one-stop-shop for any IoTeX Developer. Claim test tokens, deploy tokens and explore the DePIN sandbox from a simple web interface.
7. [**Remix**](https://remix.ethereum.org/#lang=en\&optimize=false\&runs=200\&evmVersion=null\&version=soljson-v0.8.26+commit.8a97fa7a.js): A web-based IDE for writing, compiling, testing, and deploying smart contracts.

## Libraries and SDKs

6. [**Web3.js**](https://web3js.readthedocs.io/en/v1.7.0/): A JavaScript library that allows you to interact with the Ethereum blockchain using HTTP, IPC, or WebSocket.
7. [**Ethers.js**](https://docs.ethers.org/): A complete and compact library for interacting with the Ethereum blockchain and its ecosystem.
8. [**MetaMask SDK**](https://metamask.io/sdk/): Provides tools and APIs for building DApps with MetaMask, enabling seamless integration and enhanced functionalities.

## Testing Tools

9. [**EthTester**](https://github.com/ethereum/eth-tester): A tool suite for testing Ethereum-based applications.
10. [**Foundry (Anvil)**](https://github.com/foundry-rs/): A local Ethereum node implemented in Rust, similar to Ganache, for fast and reliable testing.

## Debugging Tools

10. [**Tenderly**](https://tenderly.co/): A monitoring, debugging, and analytics platform for Ethereum smart contracts.
11. [**Solhint**](https://tokenhouse.github.io/solhint/rules.html): A linter for Solidity code that helps identify and fix issues in smart contracts.

## Wallets

12. [→ Check out the wallets section ](https://docs.iotex.io/blockchain/learn-iotex/wallets)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.iotex.io/blockchain/build/web3-development/set-up-your-environment.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
