Releases: enviodev/hyperindex
v3.0.0-alpha.17
What's Changed
Fixed Alpha.15 & Alpha.16 Binary Issue
We are making improvements to our CI pipeline, which affected the release build. Fixed in the version.
By @DZakh in #1007, #1008, #997, #1012
Updated Dev Docker Flow
For containers, network, and volumes. We no longer use a generated Docker Compose file and manage resources ourselves for greater flexibility. For example, if you disable Hasura with ENVIO_HASURA, envio dev won't pull the Hasura image anymore.
Other Changes
- Upgrade dependencies across Rust and Node.js projects by @moose-code in #967
- Upgrade hypersync client to v1.1.0 by @JonoPrest in #995
- Fixed validation of block fields from RPC Source, which are not included in field selection by @DZakh in #998
- Rename ENVIO_PG_PUBLIC_SCHEMA to ENVIO_PG_SCHEMA with backward compitability by @DZakh in #1003
- Suppress noisy git output during envio init by @DZakh in #1006
- Add .pnpm-store to .gitignore across all packages by @DZakh in #1010
- Internal: Consolidate Cursor rules into CLAUDE.md by @DZakh in #1004
- Internal: Add Claude hooks to auto-start PostgreSQL 16 for local development by @DZakh in #1005
- Internal: Add explicit type annotations to Utils.magic calls by @moose-code in #975
- Internal: Add retry option to flaky Throttler test by @DZakh in #1009
Full Changelog: v3.0.0-alpha.15...v3.0.0-alpha.17
v3.0.0-alpha-main-clickhouse-experiment
Full Changelog: v3.0.0-alpha.17...v3.0.0-alpha-main-clickhouse-experiment
v3.0.0-alpha.15
What's Changed
New getWhere Operators: _gte, _lte, _in
Three new filter operators for getWhere queries following Hasura-style conventions:
context.Entity.getWhere({ amount: { _gte: 100n } })
context.Entity.getWhere({ amount: { _lte: 500n } })
context.Entity.getWhere({ status: { _in: ["active", "pending"] } })Block Lag Configuration for Reorg Protection
A new per-chain blockLag configuration that allows indexers to lag behind the chain head by a specified number of blocks, providing a configurable way to avoid reorg issues. Replaces the global ENVIO_INDEXING_BLOCK_LAG environment variable with per-chain control. Defaults to 0 (no lag).
chains:
- id: 1
block_lag: 5It also fixes an issue of entering live mode when a block lag is configured.
Separate Runtime Metrics Endpoint
Added a new /metrics/runtime endpoint with a dedicated Prometheus registry for runtime metrics, isolated from the default /metrics endpoint.
Support Double Handler Registration
For the same event with similar filters.
import { ERC20 } from "generated";
ERC20.Transfer.handler(async ({ event, context }) => {
// Your logic here
});
ERC20.Transfer.handler(async ({ event, context }) => {
// And here
});Internal: Migrated Test Framework from Mocha/Chai to Vitest
Also improved e2e tests and CI pipeline.
Other Changes
- Removed error codes from user-facing error messages in favor of descriptive text by @DZakh in #961
- Fixed handler registration for old test framework ran with Vitest by @DZakh in #960
- Normalized event signatures to handle formatting variations by @DZakh in #963
- Fixed binding to event source that was not applying headers by @JonoPrest in #985
- Reorganized HyperIndex project into pnpm workspace by @DZakh in #982
- Add isolated dependency e2e tests to verify package completeness by @DZakh in #993
Full Changelog: v3.0.0-alpha.14...v3.0.0-alpha.15
v3.0.0-alpha.14
What's Changed
Breaking: New getWhere API
We updated our getWhere API to enable support for multiple filters at a time in future HyperIndex versions. Instead of chaining, it now uses a single function call with filters that match GraphQL style for familiarity.
Old: context.Entity.getWhere.fieldName.eq(value)
New: context.Entity.getWhere({ fieldName: { _eq: value } })
Breaking: Removed Ordered Multichain Mode Support
The Ordered Multichain Mode forced events across all processed chains in on-chain order, leading to significant latency and the potential for a single bad chain to freeze the entire indexing process.
Without Ordered Multichain Mode we still guarantee events to be processed in on-chain order per chain. If you want to store a cross-chain interaction, we suggest creating a partial entity on one chain and finalizing it when you receive a related event on another chain - this way, you'll get a much more reliable system with lower latency.
Chain Info for Test Indexer
const indexer = createTestIndexer();
indexer.chainIds
indexer.chains
indexer.chains[1].id
indexer.chains[1].name
indexer.chains[1].startBlock
indexer.chains[1].endBlock
indexer.chains[1].ERC20.abi
indexer.chains[1].ERC20.addresses // Useful to test dynamic registrationsBig Cursor/Claude Skills Update
We update envio init to create a project with multiple skills to support agentic-driven development. The LLM landscape changes very quickly, so we'd appreciate any feedback to improve the skills and development experience with them.
By @moose-code in #952
Other Changes
- Fixed chain processing prioritization regression of alpha.13 by @DZakh in #957
- Added method info for prom metric tracking the number of requests by @DZakh in #957
- Replaced Ethers.js bindings with direct RPC client implementation by @DZakh in #949
- Removed preset of
address_format: lowercasefromenvio initby @DZakh in #955 - Improved Rpc Source logic to optimize getTransaction and getTransactionReceipts requests by @DZakh in #944
Full Changelog: v3.0.0-alpha.13...v3.0.0-alpha.14
v3.0.0-alpha.13
What's Changed
3x Historical Backfill Performance 🏎️
This is achieved by adding chunking logic to request events across multiple ranges at once. We also fixed overfetching for contracts with a much later start_block in the config, as well as speeding up dynamic contract registration. If you had data fetching as a bottleneck, you'd definitely like the release - now 25k events per second is a standard.
Support for DESC indices
A nice way to improve your query performance as well!
type PoolDayData
@index(fields: ["poolId", ["date", "DESC"]]) {
id: ID!
poolId: String!
date: Timestamp!
}Improved RPC source support
Added missing support for receipt-only fields (gasUsed, cumulativeGasUsed, effectiveGasPrice) that are not available via eth_getTransactionByHash. It'll additionally perform the eth_getTransactionReceipt request when one of the fields is added in field_selection.
WebSocket support experimental
An experimental WebSocket support for RPC source to improve head latency. Please create a GitHub issue if you come across any problems. 🙏
chains:
- id: 1
rpc:
url: ${ENVIO_RPC_ENDPOINT}
ws: ${ENVIO_WS_ENDPOINT}
for: liveBreaking: Removed rpc_config in favor of rpc
- rpc_config
+ rpc:
url: ${ENVIO_RPC_ENDPOINT}
+ for: sync # Add to force RPC usage instead of HyperSyncAdditionally, you can specify multiple rpcs by providing a list:
rpc:
- url: ${ENVIO_RPC_ENDPOINT}
for: sync
- url: ${ENVIO_RPC_FALLBACK_ENDPOINT}
for: fallbackIf for is not provided, it'll use the RPC URL either as a fallback for HyperSync or as the main source when HyperSync is not supported.
Other
Full Changelog: v3.0.0-alpha.12...v3.0.0-alpha.13
v3.0.0-alpha.12
What's Changed
- Add
polling_intervaloption for rpc source configuration by @DZakh in #935 - Fix OOM error on rpc request crashing loop by @DZakh in #934
Full Changelog: v3.0.0-alpha.11...v3.0.0-alpha.12
v3.0.0-alpha.11
What's Changed
- Test Indexer: Add utilities to read/write entities in-between processing by @DZakh in #924
- Critical v3 regression fix of incorrect reorg threshold entry on indexer start by @DZakh in #929
- Fix checksum for addresses returned by rpc in lowercase by @DZakh in #930
- Fix incorrect validation of transactions "to" field returned by rpc by @DZakh in #930
- Add Prometheus metric to track requests to data providers by @DZakh in #933
- Add environment variable to configure database connections by @DZakh in #923
Full Changelog: v3.0.0-alpha.10...v3.0.0-alpha.11
v3.0.0-alpha.10
What's Changed
- Fix the v3 build on Hosted Service by not requiring the envio api token for db configuration by @DZakh in #922
- Implemented TestIndexerChange TS type + stopped exposing internal contract registration changes in favor of official format by @DZakh in #920
- Updated entities TS types to mark array field values as readonly
Full Changelog: v3.0.0-alpha.9...v3.0.0-alpha.10
v3.0.0-alpha.9
Fix Alpha.8 and Alpha.9.
Full Changelog: v3.0.0-alpha.8...v3.0.0-alpha.9
v3.0.0-alpha.8
What's Changed
Remove event_decoder option from config.yaml
Previously, we had an option to choose between a Viem decoder for event logs or our Rust-based implementation, which doesn't block the event loop. After having our event decoder used by default for 2 years, we decided to remove the Viem option to reduce maintenance costs and prepare for exciting future changes.
By @moose-code in #904
PostgreSQL Client Update
Updated PostgreSQL client version. This should potentially fix the issue when the indexer stops progressing without any error.
Generate TypeScript Entity Types Without ReScript
One more step closer to removing the generated directory. Entity types are now generated directly in TypeScript without relying on ReScript compilation.
Subgraph Migration Cursor Command
The subgraph migration cursor rules have been converted into a cursor command. This provides a more streamlined workflow for migrating from Subgraph to HyperIndex.
GitHub CI for Tests in envio init
New projects created with envio init now include a pre-configured GitHub Actions workflow for running tests. This makes it easier to set up CI/CD from the start.
Test Indexer Improvements
Fixed an issue where contract registrations were not preserved between indexer.process runs. Also added comprehensive tests for the Contract Factory template to ensure reliability.
Full Changelog: v3.0.0-alpha.7...v3.0.0-alpha.8