Local query engine, full-text search, and federated query routing for xNet.
Status: Stable secondary surface Primary app-facing query/runtime work should go through
@xnetjs/reactand the bridge/runtime contract.@xnetjs/queryremains the lower-level search/query toolkit used underneath those app surfaces.
pnpm add @xnetjs/query- Local query engine -- Filter, sort, paginate nodes from local storage
- Full-text search -- MiniSearch-powered indexing and search
- Federated query router -- Route local queries now, remote sources when available
import { createLocalQueryEngine } from '@xnetjs/query'
// Create query engine
const engine = createLocalQueryEngine(listDocumentIds, getDocument)
// Query with filters, sorting, and pagination
const results = await engine.query({
type: 'page',
filters: [{ field: 'workspace', operator: 'eq', value: 'default' }],
sort: [{ field: 'updated', direction: 'desc' }],
limit: 20,
offset: 0
})import { createSearchIndex } from '@xnetjs/query'
// Full-text search
const index = createSearchIndex()
index.add(doc)
index.add(anotherDoc)
const matches = index.search({ text: 'hello', limit: 10 })import { createFederatedQueryRouter } from '@xnetjs/query'
// Federated router (local execution today)
const router = createFederatedQueryRouter(networkNode, engine)
const results = await router.execute(queryParams)flowchart LR
App["Application"]
Local["LocalQueryEngine<br/><small>Filter, sort, paginate</small>"]
Search["SearchIndex<br/><small>MiniSearch FTS</small>"]
Fed["FederatedQueryRouter<br/><small>Cross-hub queries</small>"]
App --> Local
App --> Search
App --> Fed
Fed --> Hub1["Hub A"]
Fed --> Hub2["Hub B"]
| Module | Description |
|---|---|
local/engine.ts |
Local query engine |
search/index.ts |
MiniSearch full-text search index |
federation/router.ts |
Federated query routing |
types.ts |
Query, Filter, Sort types |
@xnetjs/core,@xnetjs/data,@xnetjs/identity,@xnetjs/network,@xnetjs/storageminisearch-- Full-text search engine
pnpm --filter @xnetjs/query test