Build Your Own Blockchain Indexer Using Our Framework
Install. Describe your model. Run your indexer in minutes.
Self-hosted, cost-effective, and feels like regular backend development.
import { bootstrap, compileStateModelBTC } from '@easylayer/bitcoin-crawler';export const AddressUtxoWatcherModel = {modelId: 'wallet-utxo-watcher',state: { wallets: new Set(['1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa']), utxos: new Map() },sources: {async vout(ctx) { return { a: ctx.vout.scriptPubKey.addresses?.[0], k: `${ctx.tx.txid}:${ctx.vout.n}`, v: toSat(ctx.vout.value) }; },async vin(ctx) { return { k: `${ctx.vin.txid}:${ctx.vin.vout}` }; },async block(ctx) { ctx.applyEvent('Deposit', ctx.block.height, { o: ctx.locals.vout, i: ctx.locals.vin }); },},reducers: {Deposit(s, e) {const { o = [], i = [] } = e.payload || {};for (const x of o) (s.utxos.get(x.a) || s.utxos.set(x.a, new Map()).get(x.a)).set(x.k, x.v);for (const y of i)for (const [a, bag] of s.utxos)if (bag.delete(y.k) && !bag.size) s.utxos.delete(a);},},};
- Custom Data Models
Describe what blockchain data you need—wallet balances, fees, specific addresses. Store only relevant data, not the entire blockchain. Simple declarative or class-based syntax.
Learn more about Custom Data Models- Network Providers
Just 2 RPC requests per block for Bitcoin. Connect to your node or external providers like QuickNode. Multiple strategies: RPC pulling, P2P, ZMQ subscriptions with automatic failover.
Learn more about Network Providers- Mempool Monitoring
Track unconfirmed transactions in real time before they hit blocks. Built-in mempool model or integrate into custom models. Essential for payment processors and wallets.
Learn more about Mempool Monitoring- API & Transports
Built-in APIs over HTTP, WebSocket, IPC, Electron, and browser. Real-time event streams and request–response queries. Use the Transport SDK for easy client integration.
Learn more about API & Transports- Event Store & Databases
Event Sourcing with automatic reorg handling. Choose SQLite for development, PostgreSQL for production, or IndexedDB for browser. Your infra, your data, auto-managed schema.
Learn more about Event Store & Databases- System Models
Built-in models for chain validation and mempool monitoring work out of the box. Subscribe to their events immediately. Network integrity checks with Merkle proofs (configurable).
Learn more about System Models
How does it work? 🧐
Install crawler package and describe your custom Model - what blockchain data you need to track. Configure blockchain Node Provider (your self node or external like QuickNode) and Event Store (SQLite,PostgreSQL or IndexDB). That's it - framework handles everything else.
Your model parses blocks and generates domain events. Framework stores them with Event Sourcing pattern, automatically handles blockchain reorgs, and exposes Transport APIs (HTTP, WebSocket, IPC) for queries and real-time event streams.

Not sure where to begin?
Browse our examples to see EasyLayer in action and gather ideas for your next project.
System Examples - Getting Started 🚀
Learn how to connect Bitcoin Crawler in different modes: HTTP RPC, P2P, ZMQ subscriptions, and various configurations
easylayerBasic Wallet Watcher 👛
Track wallet balances - when funds arrive and when they leave. Simple UTXO monitoring for payment processors and wallets
easylayerAdvanced Wallet Watcher 💎
Full wallet monitoring with mempool tracking - detect deposits, pending transactions, double-spend attempts
easylayerStay up to date 📬
Subscribe to get timely updates on new releases, bug fixes, and all the latest EasyLayer news.
⚡ Roadmap ⚡
From Idea and Concept to Implementation and Expansion
- Testing and improving @bitcoin-crawler#1
- Release beta versions of @evm-crawler, ready for developers to use.#100
Frequently asked questions
For anything not covered here, join our Forum!