223 lines
15 KiB
Markdown
223 lines
15 KiB
Markdown
<p align="center">
|
|
<a href="https://getartcraft.com/">
|
|
<picture>
|
|
<source media="(prefers-color-scheme: dark)" srcset="docs/brand/artcraft-logo-white.svg">
|
|
<img alt="ArtCraft" src="docs/brand/artcraft-logo.svg" width="200">
|
|
</picture>
|
|
</a>
|
|
</p>
|
|
|
|
<h1 align="center">GridCraft</h1>
|
|
|
|
<p align="center">
|
|
<b>Spreadsheets and data; an open-source, clean-room reimplementation of Microsoft Excel, rebuilt in pure Rust.</b>
|
|
</p>
|
|
|
|
<p align="center">
|
|
A fast, open-source, clean-room take on the Excel workflow. It runs natively on macOS,
|
|
Windows, Linux and BSD, and in the browser via WebAssembly.<br>
|
|
<i>By the ArtCraft team.</i>
|
|
</p>
|
|
|
|
<p align="center">
|
|
<img alt="Written in Rust" src="https://img.shields.io/badge/written%20in-Rust-147a40?style=flat-square&logo=rust&logoColor=white">
|
|
<img alt="Runs on macOS, Windows, Linux, BSD and the web" src="https://img.shields.io/badge/runs%20on-macOS%20%C2%B7%20Windows%20%C2%B7%20Linux%20%C2%B7%20BSD%20%C2%B7%20Web-1f9d55?style=flat-square">
|
|
<img alt="License: MIT OR Apache-2.0" src="https://img.shields.io/badge/license-MIT%20%2F%20Apache--2.0-147a40?style=flat-square">
|
|
<img alt="Agent-drivable over MCP" src="https://img.shields.io/badge/agents-MCP-1f9d55?style=flat-square">
|
|
</p>
|
|
|
|
<p align="center">
|
|
<a href="https://discord.gg/artcraft"><img alt="Join the ArtCraft community on Discord" src="https://img.shields.io/badge/Join%20us%20on%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" height="40"></a>
|
|
</p>
|
|
|
|
<p align="center">
|
|
<a href="https://getartcraft.com/apps/gridcraft"><b>GridCraft on getartcraft.com</b></a> ·
|
|
<a href="https://getartcraft.com/">ArtCraft</a> ·
|
|
<a href="https://getartcraft.com/apps">All Crafting Apps</a>
|
|
</p>
|
|
|
|
<br>
|
|
|
|
<p align="center">
|
|
<img src="docs/images/hero-sales.png" alt="GridCraft showing a quarterly sales dashboard: a styled table with banded rows, filter buttons, a totals row, data bars, arrow icons and sparklines, next to a clustered column chart and a pie chart" width="100%">
|
|
<br><sub><b>Quarterly Sales Dashboard</b>: a table with a totals row, conditional formatting, sparklines and two live charts — built entirely from GridCraft commands (<code>File → New → Sample</code>).</sub>
|
|
</p>
|
|
|
|
> [!NOTE]
|
|
> **ArtCraft is a community of artists from all walks of life.** Painters, photographers,
|
|
> filmmakers, illustrators, designers, animators, hobbyists, and people who picked up a pencil
|
|
> last week. If you make things, you're one of us. **[Come say hi on Discord](https://discord.gg/artcraft).**
|
|
|
|
<p align="center">
|
|
<a href="#a-look-around">A look around</a> ·
|
|
<a href="#why-gridcraft">Why GridCraft</a> ·
|
|
<a href="#quick-start">Quick start</a> ·
|
|
<a href="#for-agents-mcp-cli-and-the-control-channel">For agents</a> ·
|
|
<a href="#architecture">Architecture</a> ·
|
|
<a href="#roadmap">Roadmap</a> ·
|
|
<a href="#the-crafting-apps">The Crafting Apps</a> ·
|
|
<a href="#license-and-credits">License and credits</a>
|
|
</p>
|
|
|
|
## A look around
|
|
|
|
<table>
|
|
<tr>
|
|
<td width="50%" valign="top"><img src="docs/images/budget.png" alt="A household budget with accounting number formats, red highlights for overspent categories, a green-yellow-red colour scale on the percent-used column, a totals row with a double border, and a horizontal bar chart comparing budget with actual" width="100%"><p align="center"><sub><b>Formatting.</b> Accounting formats, cell styles, conditional rules and colour scales, frozen headers and a bar chart.</sub></p></td>
|
|
<td width="50%" valign="top"><img src="docs/images/grades-formulas.png" alt="A gradebook table with averages and letter grades computed with IFS, green highlights on A grades and data bars, with the Formulas ribbon tab open showing the function library" width="100%"><p align="center"><sub><b>Formulas.</b> 500+ functions, dynamic arrays, LET and LAMBDA, structured table references.</sub></p></td>
|
|
</tr>
|
|
<tr>
|
|
<td width="50%" valign="top"><img src="docs/images/dark-insert.png" alt="The sales dashboard in dark mode with the Insert ribbon tab open, showing PivotTable, Table, Pictures, Shapes, chart, sparkline, link, comment, text box and symbol buttons" width="100%"><p align="center"><sub><b>Dark mode</b> and the Insert tab: tables, charts, sparklines, pictures, shapes, links and comments.</sub></p></td>
|
|
<td width="50%" valign="top"><img src="docs/images/hero-sales.png" alt="Close-up of the sales dashboard" width="100%"><p align="center"><sub><b>Charts.</b> Column, bar, line, area, pie, doughnut, scatter, bubble, radar, histogram, waterfall, funnel, treemap, sunburst, box & whisker, stock and combo.</sub></p></td>
|
|
</tr>
|
|
</table>
|
|
|
|
## Why GridCraft
|
|
|
|
- **Familiar.** Excel's ribbon, formula bar, Name Box, sheet tabs, keyboard shortcuts, fill
|
|
handle, point-mode formula entry with coloured references, Format Cells, Paste Special,
|
|
conditional formatting, tables, charts and more. If you know Excel, you already know GridCraft.
|
|
- **Compatible.** XLSX is the native format: styles, themes, formulas (including dynamic arrays),
|
|
tables, conditional formats, validation, comments, hyperlinks, charts, pictures, sparklines and
|
|
print settings round-trip. CSV and TSV too.
|
|
- **Capable.** A dependency-graph calculation engine with dynamic arrays and spilling,
|
|
478 worksheet functions plus LET, LAMBDA, MAP, REDUCE, SCAN, BYROW, BYCOL and MAKEARRAY,
|
|
structured table references, Excel's full number-format language, sort and AutoFilter,
|
|
Flash Fill, data validation, outlining and subtotals.
|
|
- **Fast.** Copy-on-write workbooks (undo snapshots are nearly free), incremental recalculation,
|
|
and a virtualised grid that only lays out what's on screen.
|
|
- **Agent-native.** Every ribbon button, menu item, dialog, keystroke and mouse gesture is a
|
|
command that agents can run over a JSON control channel, an **MCP server**, or the CLI.
|
|
- **Everywhere.** One Rust codebase for desktop and the web. No subscription, no licence server,
|
|
no telemetry.
|
|
|
|
## Quick start
|
|
|
|
```sh
|
|
cargo run --release -p gridcraft # desktop app
|
|
cargo run --release -p gridcraft -- --sample sales # open a sample (sales, budget, grades)
|
|
cargo run --release -p gridcraft -- book.xlsx # open a workbook
|
|
cargo run --release -p gridcraft -- --sample sales --control 7979 # + JSON control channel
|
|
cargo xtask ci # fmt, clippy, tests, assets, layering, wasm
|
|
```
|
|
|
|
### Web
|
|
|
|
```sh
|
|
cd apps/gridcraft-web && trunk build --release # → dist/web (serve it with any static server)
|
|
cd apps/gridcraft-web && trunk serve --release # http://127.0.0.1:8771 (?sample=sales opens a sample)
|
|
```
|
|
|
|
You need [trunk](https://trunkrs.dev) and the `wasm32-unknown-unknown` target. Open uses the
|
|
browser's file picker (dropping files works too) and Save downloads the workbook.
|
|
|
|
## For agents: MCP, CLI and the control channel
|
|
|
|
```sh
|
|
claude mcp add gridcraft -- gridcraft-cli mcp # headless MCP server
|
|
gridcraft-cli mcp --connect 7979 # MCP bridged to a running window
|
|
gridcraft-cli eval '=XLOOKUP("b",{"a","b"},{1,2})' # → 2
|
|
gridcraft-cli run --sample budget --cmd 'home.bold={"range":"B4:F4"}' --out budget.xlsx
|
|
gridcraft-cli cat budget.xlsx --range B4:F15 # aligned text table
|
|
gridcraft-cli commands --search chart # every command and its params
|
|
```
|
|
|
|
The MCP server offers tools such as `read_range`, `write_range`, `set_cell`, `evaluate_formula`,
|
|
`format_range`, `insert_chart`, `create_table`, `sort_range`, `filter` and `execute_command`
|
|
(which reaches every one of GridCraft's commands). The desktop app's control channel adds real
|
|
pointer and keyboard input, dialogs and screenshots. See [`docs/mcp.md`](docs/mcp.md),
|
|
[`docs/cli.md`](docs/cli.md) and [`docs/control-protocol.md`](docs/control-protocol.md).
|
|
|
|
## Architecture
|
|
|
|
GridCraft is an engine-first Cargo workspace with enforced layering (`cargo xtask layers`). The
|
|
egui frontend is a separate crate, so the UI can be swapped without touching the engine.
|
|
|
|
| Layer | Crates |
|
|
|---|---|
|
|
| L0 | `core` (addresses, values, errors, dates, input parsing) · `numfmt` (number format codes) |
|
|
| L1 | `formula` (lexer, parser, printer, reference adjustment) · `functions` (worksheet function library) |
|
|
| L2 | `model` (workbook, sheets, copy-on-write cells, styles, tables, charts…) · `calc` (dependency graph, evaluator, dynamic arrays) · `xlsx` (XLSX and CSV) |
|
|
| L3 | `chart` (toolkit-free chart layout and rendering) |
|
|
| L5 | `engine` (session, commands, history, clipboard, fill, sort, filter, file I/O) |
|
|
| L6 | `ui-egui` (Excel-style UI, control channel) · `mcp` (MCP server) |
|
|
| L7 | `apps/gridcraft`, `apps/gridcraft-cli`, `apps/gridcraft-web` |
|
|
|
|
- **Contributor and agent rules** (clean-room, asset policy, never-crash, quality gates): [`AGENTS.md`](AGENTS.md)
|
|
- **Bundled assets:** each one is listed with its licence in [`ATTRIBUTION.md`](ATTRIBUTION.md)
|
|
- **Releases:** signed macOS, Windows, Linux, BSD and web builds; see [`docs/releasing.md`](docs/releasing.md)
|
|
|
|
## Roadmap
|
|
|
|
GridCraft is pre-alpha and moving fast. Today it covers 60% of Excel's ribbon and menu
|
|
commands ([`docs/parity.md`](docs/parity.md)) and about 93% of its worksheet functions. PivotTables,
|
|
printing and PDF, page layout view, deeper chart formatting and scripting come next. The plan
|
|
and estimates are in [ROADMAP.md](ROADMAP.md).
|
|
|
|
## The Crafting Apps
|
|
|
|
GridCraft is one of the **Crafting Apps**: free, open-source creative tools from the
|
|
[ArtCraft](https://getartcraft.com/) team, each written from scratch in Rust and each able to
|
|
stand on its own.
|
|
|
|
| | App | What it's for | Code | Learn more |
|
|
|:-:|---|---|---|---|
|
|
| <img src="https://raw.githubusercontent.com/storytold/photocraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.photocraft.png" alt="" width="32" height="32"> | **PhotoCraft** | Image editing: layers, masks, type and real PSD files | [GitHub](https://github.com/storytold/photocraft) | [Website](https://getartcraft.com/apps/photocraft) |
|
|
| <img src="https://raw.githubusercontent.com/storytold/vectorcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.vectorcraft.png" alt="" width="32" height="32"> | **VectorCraft** | Vector illustration | [GitHub](https://github.com/storytold/vectorcraft) | [Website](https://getartcraft.com/apps/vectorcraft) |
|
|
| <img src="https://raw.githubusercontent.com/storytold/filmcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.filmcraft.png" alt="" width="32" height="32"> | **FilmCraft** | Video editing, color and sound | [GitHub](https://github.com/storytold/filmcraft) | [Website](https://getartcraft.com/apps/filmcraft) |
|
|
| <img src="https://raw.githubusercontent.com/storytold/lightcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.lightcraft.png" alt="" width="32" height="32"> | **LightCraft** | Photo library and raw development | [GitHub](https://github.com/storytold/lightcraft) | [Website](https://getartcraft.com/apps/lightcraft) |
|
|
| <img src="https://raw.githubusercontent.com/storytold/printcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.printcraft.png" alt="" width="32" height="32"> | **PrintCraft** | Reading, organizing and protecting PDFs | [GitHub](https://github.com/storytold/printcraft) | [Website](https://getartcraft.com/apps/printcraft) |
|
|
| <img src="https://raw.githubusercontent.com/storytold/effectcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.effectcraft.png" alt="" width="32" height="32"> | **EffectCraft** | Motion graphics and visual effects | [GitHub](https://github.com/storytold/effectcraft) | [Website](https://getartcraft.com/apps/effectcraft) |
|
|
| <img src="https://raw.githubusercontent.com/storytold/designcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.designcraft.png" alt="" width="32" height="32"> | **DesignCraft** | Page layout and publishing | [GitHub](https://github.com/storytold/designcraft) | [Website](https://getartcraft.com/apps/designcraft) |
|
|
| <img src="https://raw.githubusercontent.com/storytold/gridcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.gridcraft.png" alt="" width="32" height="32"> | **GridCraft** | **Spreadsheets and data · you are here** | [GitHub](https://github.com/storytold/gridcraft) | [Website](https://getartcraft.com/apps/gridcraft) |
|
|
|
|
And [**ArtCraft**](https://getartcraft.com/) itself, our AI image and video studio for artists who want real control.
|
|
|
|
<br>
|
|
|
|
<p align="center">
|
|
<a href="https://discord.gg/artcraft"><img alt="Join the ArtCraft community on Discord" src="https://img.shields.io/badge/Join%20us%20on%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" height="40"></a>
|
|
</p>
|
|
|
|
<h3 align="center">Come make things with us</h3>
|
|
|
|
<p align="center">
|
|
Our Discord is where artists of every kind hang out: people who paint, shoot, draw, cut film,
|
|
set type, and people still figuring out what they like to make. Share what you're working on,
|
|
ask for help, tell us what's broken, or tell us what you wish these tools could do.
|
|
Whatever your medium and however long you've been at it, you're welcome here.
|
|
</p>
|
|
|
|
<p align="center">
|
|
<a href="https://discord.gg/artcraft"><b>discord.gg/artcraft</b></a> ·
|
|
<a href="https://getartcraft.com/">getartcraft.com</a> ·
|
|
<a href="https://getartcraft.com/apps">The Crafting Apps</a> ·
|
|
<a href="https://getartcraft.com/apps/gridcraft">GridCraft</a>
|
|
</p>
|
|
|
|
## License and credits
|
|
|
|
GridCraft is dual-licensed under [MIT](LICENSE-MIT) or [Apache-2.0](LICENSE-APACHE), at your option.
|
|
Copyright (c) 2026 ArtCraft Team and the GridCraft contributors. Required notices are in [NOTICE](NOTICE).
|
|
|
|
Bundled fonts, icons, images and other assets keep their own open licenses; each one is listed
|
|
with its author, source and license in [ATTRIBUTION.md](ATTRIBUTION.md).
|
|
|
|
All UI icons are drawn in code and are original; the sample workbooks and every screenshot in
|
|
this README were made with GridCraft itself. GridCraft bundles no fonts: it uses the fonts
|
|
installed on your system.
|
|
|
|
The ArtCraft name, wordmark and logos in [`docs/brand/`](docs/brand/) are trademarks of the
|
|
ArtCraft Team and are not covered by this license. They may be used only unmodified, and only as
|
|
part of this repository and GridCraft, under [`docs/brand/LICENSE-brand.txt`](docs/brand/LICENSE-brand.txt).
|
|
Forks and modified versions must remove them.
|
|
|
|
<sub>Microsoft, Excel and Microsoft 365 are trademarks or registered trademarks of Microsoft Corporation in the United States and/or other countries. GridCraft is an independent, open-source project and is not affiliated with, sponsored by or endorsed by Microsoft Corporation; these names are used only to describe the workflows it is compatible with.</sub>
|
|
|
|
<br>
|
|
|
|
<p align="center">
|
|
<a href="https://getartcraft.com/"><img alt="ArtCraft" src="docs/brand/artcraft-mark.svg" width="28"></a><br>
|
|
<sub>Made by the <a href="https://getartcraft.com/">ArtCraft</a> team and community.</sub>
|
|
</p>
|