Build powerful TypeScript applications powered by the EVM, simplified
Tevm is a JavaScript EVM client and a Solidity-to-TypeScript compiler.
✅ EVM simulations
✅ forking akin to
8653
anvil --fork-url
✅ Solidity scripting akin to foundry scripts
✅ Compiles contracts in JavaScript via importing solidity files
✅ Extensions for usage with Viem, Ethers.js, Next.js, and Express.
✅ Compiles contracts in JavaScript via importing solidity files
🏗️ EVM Tracing (coming in upcoming release)
🏗️ React hook library
🏗️ First class vue and svelte support
Tevm runs in all environments
Visit Docs (under construction) for docs, guides, API and more! 📄
- Write a solidity script
HelloWorld.s.sol
// SPDX-License-Identifier: MIT
pragma solidity >0.8.0;
contract HelloWorld {
function greet(string memory name) public pure returns (string memory) {
return string(abi.encodePacked("Hello ", name, "!"));
}
}
- Import the solidity file into a JavaScript or TypeScript file. No need to compile it.
import { HelloWorld } from './HelloWorld.sol'
console.log(HelloWorld.abi)
console.log(HelloWorld.bytecode)
- Initialize a Tevm memory client and execute your Script using the
tevm.script
action
import { HelloWorld } from './HelloWorld.sol'
import { createMemoryClient } from 'tevm'
const client = createMemoryClient()
const result = await client.script(
HelloWorld.read.greet('World')
)
console.log(result.data) // Hello world!
This is just a small subset of what Tevm offers. See docs for more information.
Contributions are encouraged, but please open an issue before doing any major changes to make sure your change will be accepted.
See CONTRIBUTING.md for contributing information
Most files are licensed under MIT license. There are some files that are copied from ethereumjs that inherit the MPL-2.0. These files are individually marked at the top of the file and are all in the @tevm/state
@tevm/blockchain
and other packages that wrap ethereumjs libraries.