Roadmap
Released (v0.1.x)
- ✅ Schema definition with automatic offset calculation
- ✅ Borsh deserialization — all primitive types (
u8–u128,i8–i128,bool,publicKey,string,bytes) - ✅
findMany—memcmpon-chain filters + client-side range operators - ✅
findFirst,findByAddress,findByPda - ✅
count,aggregate,groupBy - ✅
include— relation loading with address deduplication - ✅
anchor()discriminator helper - ✅ Adapter pattern (
QueryAdapterinterface) - ✅
RpcAdapter—getProgramAccountsimplementation
In Progress
- 🔜
HeliusAdapter— Helius DAS API integration - 🔜
PostgresAdapter— Geyser-indexed Postgres + sync guide
Planned
- ⬜ Cursor-based pagination (
cursoroption onfindMany) - ⬜ WebSocket subscriptions (
watch()— wrapsonAccountChange) - ⬜ Enum field support — map
u8values to string variants via schema - ⬜
Option<T>field support — handle Borsh option prefix byte - ⬜
Vec<T>field support — variable-length arrays - ⬜ CLI:
curvhex generate— generate schema from Anchor IDL - ⬜ RPC 2.0 adapter (Triton) — when the spec stabilises
Indexing Adapters (from Solana indexing ecosystem)
These adapters address the limitations of standard getProgramAccounts (rate limits, no persistence, polling overhead) for production-grade use cases:
- ⬜
YellowstoneAdapter— Yellowstone gRPC (Geyser plugin) adapter for real-time account streaming with sub-100ms latency; supported by Triton, Helius, QuickNode, Alchemy - ⬜
VixenAdapter— Yellowstone Vixen adapter; consumes typed, structured events generated from any Solana IDL; works with Triton's hosted Vixen Streams - ⬜
CarbonAdapter— Carbon Rust-pipeline integration; exposes decoded account/transaction events to the ORM layer via 40+ pre-built decoders
Write / Instruction Support (IDL-based)
- ⬜ IDL-driven instruction builder — parse an Anchor IDL (
idl.json) and auto-generate typedsend()/execute()methods for each instruction (create, update, delete); removes the need to hand-writeTransactionInstructioncalls - ⬜
orm.models.task.create({ ... })— high-level write API that compiles IDL instructions, resolves PDA seeds, and signs/sends the transaction in one call - ⬜
orm.models.task.update({ where, data })/orm.models.task.delete({ where })— update and delete wrappers generated from the IDL - ⬜ Transaction builder — compose multiple instructions into a single transaction with automatic account resolution
Contributing
Want to help ship any of these? The highest-value contributions right now are:
HeliusAdapter— good first large contribution; theQueryAdapterinterface is documented and the Helius DAS API is publicYellowstoneAdapter— gRPC streaming adapter; brings real-time account updates and eliminates polling- IDL instruction builder — parse
idl.json, generate typedsend()methods; unlocks the full read+write ORM experience Vec<T>field support — extendFieldTypeunion and the deserializerOption<T>field support — handle the 1-byte presence prefix Borsh writes before optional values- Enum fields — add a schema option to map
u8values to a string enum
See Adding a Custom Adapter and the Architecture docs to get oriented, then open a PR on GitHub.