DossGridAlpha

DossGrid

Alpha

High-performance data grid SDK with zero-copy Arrow Flight SQL. 100 rows to 100 million.

DRI: Wiley Jones
Stack architecture

Six-layer system. Data flows down, interactions flow up. Only L3 and above depend on React — everything below is pure TypeScript.

data flows downinteractions flow upL5UI shell@doss-labs/grid-ui50+ components · GridShell · ViewRendererL4Plugin kernel@doss-labs/grid-pluginsLifecycle hooks · reducers · keymapsL3React core@doss-labs/grid-coreGridProvider · GridRoot · RenderSchedulerReact boundary ↑L2Virtualizer@doss-labs/grid-virtualizerFenwick tree · segment-anchor · velocityL1DataBus@doss-labs/grid-databusZustand + Immer · patches · undo/redoL0DataSource@doss-labs/grid-source-*Arrow IPC · local / server / paged adaptersT1 · Arrow end-to-end (zebradb, flightsql) · T2 · Proxied (postgres, snowflake, bigquery) · T3 · Client-side (DuckDB-WASM)
FlightSQL bypass

For Arrow-native backends like ZebraDB, the grid bypasses the API server entirely. One hop, zero serialization — the same Arrow bytes that DataFusion produces are what the DataBus consumes.

BEFORE — PROXIEDBrowser · DossGridHTTP/JSONAPI ServerpgwireUDS · DataFusionSQLPostgresReturn path:rows → pgwire → JSON→ re-encode Arrow IPC3 format conversions · 2 hopsAFTER — FLIGHT BYPASSBrowser · DossGridgRPC-WebHTTP/21 hopUDS FlightSQL · :5500DataFusionPostgresReturn path:Arrow RecordBatches streamed directly→ DataBus · zero conversionzero serialization · 1 hopDataFusion output = Arrow · Flight wire = Arrow · DataBus input = Arrow · same bytes, end to end
Request lifecycle

Four steps from browser to data. Handshake establishes a session-scoped JWT auth context. Schema discovery is optional — Arrow schema arrives with every response anyway.

1HandshakeBearer JWT → session tokenorg scopedRBAC loaded once2GetSchemaArrow schema with field typesRBAC column filter applied server-side3GetFlightInfoSQL query → planFlightInfo + Ticket returnedschema embedded4DoGetStreaming Arrow IPC RecordBatches → DataBus → Reactzero-copy
Performance
MetricProxiedFlightSQLDelta
Latency — 100 rows50–80ms15–25ms
Latency — 10K rows200–400ms40–80ms4–5×
Network hops21−1
SerializationJSON→SQL→rows→ArrowArrow end-to-end~0
Browser CPUJSON parse + Arrow encodeArrow decode only~50% less
Memory2× (JSON + Arrow)1× (Arrow only)50% less
Arrow type mapping

UDS maps Doss column types to Arrow types. The schema arrives with every response — no separate discovery call needed.

Doss typeArrow DataTypeGrid display
StringUtf8text
NumberFloat64number
BooleanBooleancheckbox
DateDate32date picker
DateTimeTimestamp(µs)datetime
EnumUtf8 + metadata{enum}dropdown
UserStruct{id, email, first_name, last_name}user chip
Array<String>List<Utf8>tag list
FileUrlStruct{id, name, storage_path}file link

Six-Layer Architecture

Data flows down through L0 DataSource → L1 DataBus → L2 Virtualizer → L3 React Core → L4 Plugin Kernel → L5 UI Shell. Everything below L3 is pure TypeScript — no React dependency.

Arrow IPC Native

The DataBus, Worker, and store all consume Arrow RecordBatches natively. No intermediate JSON, no row-to-columnar conversion. The wire format is the in-memory format.

FlightSQL Bypass (T1)

For ZebraDB and any FlightSQL-compatible backend: browser talks directly to the FlightSQL endpoint over gRPC-Web. One hop, zero serialization. DataFusion produces Arrow, Flight streams Arrow, DataBus consumes Arrow — same bytes end to end.

Transport Adapter Tiers

T1: Arrow end-to-end (zebradb, flightsql). T2: Proxied via API (postgres, snowflake, bigquery, clickhouse, sheets). T3: Client-side engine via DuckDB-WASM (parquet, csv). One grid, any backend.

Fenwick Tree Virtualizer

Framework-agnostic virtualizer using Fenwick prefix-sum trees for O(log n) row position lookups. No React dependency. Targets ≥55fps scroll at 100K rows with DOM recycling and content-visibility.

Real-Time Collaboration

Yjs CRDT bridge for multi-user editing. WebSocket-based delta channel for live row updates. Undo/redo via Immer patch pipeline in the DataBus.

Performance

Scroll 100K rows ≥55fps · Arrow IPC decode (10MB) ≤20ms · Patch 1000 cells ≤5ms · View switch (100K rows) <80ms · Fast scroll stop <40ms.