Skip to content

ivere27/volvoxgrid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

239 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VolvoxGrid

License Version

You're shipping a datagrid that has to handle million-row datasets, work across mobile, desktop, web, and terminal, and look the same on every platform. VolvoxGrid is one Rust engine that does that — you bring the host, it brings the pixels.

The engine in engine/ owns layout, selection, editing, sorting, scrolling, merged cells, and rendering. Thin platform wrappers expose it to Flutter, Android, Java desktop, .NET, Go, Swift, the web (via WASM), and terminal hosts. The grid you ship on Android is the same grid you ship in Chrome — same code, same behavior, same pixels.

Screenshots

Visual proof across the GUI, mobile, desktop, terminal, and compatibility hosts. Live WASM demo: https://volvox-171cc.web.app/demos/web/

Web / Wasm ActiveX / Windows
VolvoxGrid web demo in Chrome VolvoxGrid ActiveX demo on Windows
Android Flutter Android
VolvoxGrid Android demo VolvoxGrid Flutter Android demo
Java Desktop Java TUI
VolvoxGrid Java desktop demo VolvoxGrid Java TUI demo
.NET Desktop .NET TUI
VolvoxGrid .NET desktop demo VolvoxGrid .NET TUI demo
Flutter Linux Go TUI
VolvoxGrid Flutter Linux demo VolvoxGrid Go TUI demo

Quick start

Three flagship paths. Pick the one that matches what you're building and copy the snippet.

Web

Install the package, point it at a container, hand it data. The grid loads its WASM on its own.

<script type="module">
  import { VolvoxGrid } from "volvoxgrid";

  const grid = new VolvoxGrid(document.getElementById("grid"), {
    columnDefs: [
      { field: "name", headerName: "Name" },
      { field: "status", headerName: "Status" },
    ],
    rowData: [
      { id: "1", name: "Hello", status: "Ready" },
      { id: "2", name: "World", status: "Queued" },
    ],
    getRowId: ({ data }) => data.id,
  });

  await grid.loaded;
  grid.updateRows([{ id: "2", status: "Done" }]);
</script>

<div id="grid" style="width: 800px; height: 400px;"></div>

Notice the await grid.loaded — that's WASM init. After that, every call is synchronous from your side. If you'd rather declare the grid in HTML, use the <volvox-grid> custom element:

<script type="module">
  import "volvoxgrid/volvoxgrid-element.js";
</script>

<volvox-grid row-count="100" col-count="5"></volvox-grid>

Next: web/js/README.md for the full TypeScript API.

Flutter

One pub package, one widget, one controller. Native binaries are resolved at build time from Maven Central (Android, desktop) and GitHub releases (iOS XCFrameworks).

dependencies:
  volvoxgrid: ^0.8.11

Initialize the native runtime once before creating grids:

import 'package:flutter/widgets.dart';
import 'package:volvoxgrid/volvoxgrid.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await initVolvoxGrid();
  runApp(const MyApp());
}

Then create and render a controller from your widget's async setup:

import 'package:volvoxgrid/volvoxgrid.dart';

Future<VolvoxGridController> createGridController() async {
  final controller = VolvoxGridController();
  await controller.create(rows: 100, cols: 5);

  await controller.setColumnCaption(0, 'Name');
  await controller.setColumnCaption(1, 'Price');
  await controller.setCellText(0, 0, 'Widget A');
  await controller.setCellText(0, 1, '29.99');
  return controller;
}

// After awaiting createGridController() and storing the controller:
VolvoxGridWidget(controller: controller);

The controller talks to the Rust engine over Synurang FFI — you don't see the FFI, just the awaits. Set VOLVOXGRID_VARIANT=lite on supported platforms to ship the smaller artifact.

Next: flutter/README.md.

Java desktop

Drop a Swing panel into your frame, get a controller back, drive the grid from Kotlin or Java.

dependencies {
    implementation("io.github.ivere27:volvoxgrid-desktop:0.8.11")
}
VolvoxGridDesktopPanel gridPanel = new VolvoxGridDesktopPanel();
frame.add(gridPanel, BorderLayout.CENTER);
gridPanel.initialize(null, 100, 5);

VolvoxGridDesktopController ctrl = gridPanel.createController();
ctrl.setColumnCaption(0, "Name");
ctrl.setCellText(0, 0, "Widget A");

The desktop artifact embeds the native libvolvoxgrid for Linux, macOS, and Windows. The lite variant (volvoxgrid-desktop-lite) routes text through Java2D instead of the bundled Rust text engine.

Next: java/README.md.

Install

Everything in this section uses 0.8.11. Swap the version for whichever release you're consuming.

Maven / Gradle (Android, Java desktop)

// Android
dependencies {
    implementation("io.github.ivere27:volvoxgrid-android:0.8.11")
    // or: implementation("io.github.ivere27:volvoxgrid-android-lite:0.8.11")
    // Compose:      implementation("io.github.ivere27:volvoxgrid-android-compose:0.8.11")
    // Compose lite: implementation("io.github.ivere27:volvoxgrid-android-compose-lite:0.8.11")
}

// Java desktop
repositories { mavenCentral() }
dependencies {
    implementation("io.github.ivere27:volvoxgrid-desktop:0.8.11")
    // or: implementation("io.github.ivere27:volvoxgrid-desktop-lite:0.8.11")
}

Platform-specific notes live in android/README.md and java/README.md.

Flutter (pub.dev)

dependencies:
  volvoxgrid: ^0.8.11

Swift (SwiftPM)

dependencies: [
    .package(url: "https://github.com/ivere27/volvoxgrid", from: "0.8.11"),
],
targets: [
    .target(name: "MyApp", dependencies: [
        .product(name: "VolvoxGrid", package: "volvoxgrid"),
    ])
]

The VolvoxGrid product is the Swift wrapper. Use import VolvoxGrid, create VolvoxGridClient(), and render with VolvoxGridView, VolvoxGridUIView, or VolvoxGridNSView. The wrapper has no SwiftProtobuf or grpc-swift dependency. Raw binary products are also available as VolvoxGridXCFramework and VolvoxGridLiteXCFramework. Next: swift/README.md.

Web (npm)

npm install volvoxgrid
npm install volvoxgrid-lite
npm install @volvoxgrid/ag-grid
npm install @volvoxgrid/sheet

The web and adapter packages publish minified dist/*.min.js browser bundles for unpkg and jsDelivr in addition to module exports. volvoxgrid-lite ships the lite WASM runtime and falls back to Canvas2D for OS/browser fonts — see TEXT_RENDERING.md for the full cache model.

Go

The Go modules are versioned with path-prefixed tags for the Go module proxy. The core module gives you a typed client over the native library; the Bubble Tea adapter adds a typed TUI component.

go get github.com/ivere27/volvoxgrid/[email protected]
go get github.com/ivere27/volvoxgrid/adapters/[email protected]
import (
    "github.com/ivere27/volvoxgrid/go/pkg/volvoxgrid"
    "github.com/ivere27/volvoxgrid/go/pkg/volvoxgrid/tui"
)

Next: go/README.md.

.NET (NuGet)

The managed packages are VolvoxGrid.DotNet and VolvoxGrid.DotNet.Lite.

dotnet add package VolvoxGrid.DotNet --version 0.8.11
# or: dotnet add package VolvoxGrid.DotNet.Lite --version 0.8.11

The NuGet packages embed staged native libraries for supported RIDs. Project-reference or manual deployment flows still need the native volvoxgrid library beside your app or pointed at via VOLVOXGRID_LIBRARY_PATH. Full instructions in dotnet/README.md.

What's inside

VolvoxGrid is not a single-framework widget — it's a shared grid engine with platform-specific shells.

host or adapter  ->  wrapper  ->  runtime or wasm binding  ->  engine

The engine in engine/ is the source of truth. The native runtime in runtime/ exposes it over Synurang FFI to non-web hosts; wasm-pack builds the same engine for the browser. Platform wrappers (flutter/, android/, java/, dotnet/, go/, swift/, web/js/) translate native events and surfaces into the shared protobuf contract defined in proto/.

If you're changing internals, read ARCHITECTURE.md. If you're evaluating the rendering paths, read GUI.md, TUI.md, and TEXT_RENDERING.md.

Adapters

Compatibility layers in adapters/ let you keep an existing API while running on the VolvoxGrid engine.

  • aggrid — drop-in for AG Grid users on the web
  • bubbletea — Bubble Tea component for Go TUIs
  • report — report-style printable output
  • sfdatagrid — comparison tests against Syncfusion SfDataGrid
  • sheet — spreadsheet-style web API
  • vsflexgrid — Windows ActiveX control with the legacy VSFlexGrid surface
  • xtragrid — DevExpress XtraGrid-shaped API

Documents

Trademarks

AG Grid is a trademark of AG Grid Ltd. Syncfusion and SfDataGrid are trademarks of Syncfusion, Inc. VSFlexGrid and FlexGrid are trademarks of GrapeCity, Inc. (formerly ComponentOne). All other trademarks are the property of their respective owners. VolvoxGrid is not affiliated with or endorsed by any of these companies. Third-party names are used solely to describe API-level interoperability. This repository does not include third-party proprietary source code, binaries, type libraries, or assets.

License

Apache License 2.0

About

DataGrid

Resources

License

Contributing

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors