One logger for every Tevm package
@tevm/logger is the shared structured-logging layer for Tevm core and the Tevm bundler. A
thin, typed wrapper over pino — one log format, one level vocabulary, zero config drift
between packages.
Try the playground →
At a glance
import { createLogger } from '@tevm/logger'
const logger = createLogger({
name: 'my-module',
level: 'debug', // trace | debug | info | warn | error | fatal
})
logger.info({ chainId: 1 }, 'Tevm node ready')
// {"level":30,"time":1700000000000,"pid":4242,"name":"my-module","chainId":1,"msg":"Tevm node ready"}
logger.debug('SSTORE slot 0x0…3f9a')
logger.error(new Error('fork transport timeout'))Why it exists
One log shape
Every Tevm package logs the same pino JSON lines, so a single pino-pretty or log drain
formats all of them.
Typed levels
fatal | error | warn | info | debug | trace as a first-class union type — no stringly
typed verbosity flags.
Named loggers
Every line carries a name field (tevm:vm, tevm:bundler, …) so you can filter a noisy
trace down to one module.
Fast by default
Built on pino — the fastest Node.js logger — so tracing the EVM doesn't slow the EVM down.
Try it
Pick a level, emit logs, and watch how createLogger({ level }) filters the stream:
The Tevm family
This site is one of the *.tevm.sh docs sites — jump between them:

