mirror of
https://github.com/storytold/wordcraft.git
synced 2026-10-31 13:57:18 -06:00
245 lines
17 KiB
Markdown
245 lines
17 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">WordCraft</h1>
|
|
|
|
<p align="center">
|
|
<b>Writing and document design; an open-source, clean-room reimplementation of Microsoft Word, rebuilt in pure Rust.</b>
|
|
</p>
|
|
|
|
<p align="center">
|
|
A fast, open-source word processor with the Word workflow you already know: the ribbon, styles,
|
|
tables, track changes, references and mail merge. It reads and writes .docx, 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-2b47b5?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-3b5bdb?style=flat-square">
|
|
<img alt="License: MIT OR Apache-2.0" src="https://img.shields.io/badge/license-MIT%20%2F%20Apache--2.0-2b47b5?style=flat-square">
|
|
<img alt="Agent-drivable over MCP" src="https://img.shields.io/badge/agents-MCP%20%C2%B7%20CLI-3b5bdb?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/wordcraft"><b>WordCraft 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.png" alt="WordCraft with the Home tab of the ribbon open over a two-page document titled The Open Studio Handbook. The Navigation pane on the left lists the document's headings, the Styles gallery shows live previews of Normal, Heading 1, Title and Subtitle, and a word in the first paragraph is selected." width="100%">
|
|
<br><sub><b>The Open Studio Handbook</b>, WordCraft's built-in sample: the ribbon, live Styles gallery, rulers and the Navigation pane.</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-tour">A tour</a> ·
|
|
<a href="#why-wordcraft">Why WordCraft</a> ·
|
|
<a href="#what-works-today">What works today</a> ·
|
|
<a href="#quick-start">Quick start</a> ·
|
|
<a href="#for-agents-cli-and-mcp">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 tour
|
|
|
|
Every screenshot below is WordCraft itself, rendered offscreen by its own UI test harness
|
|
(`cargo run -p wordcraft-ui-egui --example ui_shot`).
|
|
|
|
<table>
|
|
<tr>
|
|
<td width="50%" valign="top"><img src="docs/images/review.png" alt="The Review tab with Track Changes on: the inserted words Cheaper rent is one reason and forty are underlined in magenta, the replaced words are struck through, two commented phrases are shaded and the Comments pane on the right shows both comments with Go to, Resolve and Delete buttons" width="100%"><p align="center"><sub><b>Review.</b> Track changes, comments, accept and reject, spelling and grammar as you type.</sub></p></td>
|
|
<td width="50%" valign="top"><img src="docs/images/references.png" alt="The References tab with two pages side by side: a table of contents with dotted leaders and page numbers on page one, and a styled table, numbered list and hyperlink on page two" width="100%"><p align="center"><sub><b>References.</b> Tables of contents, footnotes, citations in APA, MLA, Chicago or IEEE, index and captions.</sub></p></td>
|
|
</tr>
|
|
<tr>
|
|
<td width="50%" valign="top"><img src="docs/images/design.png" alt="The Design tab showing style-set previews; the document is set in a serif theme with plum headings underlined by thin rules and a pale diagonal DRAFT watermark behind the text" width="100%"><p align="center"><sub><b>Design.</b> Themes, style sets, paragraph spacing, watermarks, page colour and borders.</sub></p></td>
|
|
<td width="50%" valign="top"><img src="docs/images/dark.png" alt="WordCraft in dark mode with the Insert tab open and formatting marks shown: pilcrows at paragraph ends and dots for spaces" width="100%"><p align="center"><sub><b>Dark mode</b> with formatting marks, and the Insert tab: tables, pictures, shapes, links, headers, footers, fields and symbols.</sub></p></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2"><img src="docs/images/backstage.png" alt="The File tab start page with a Good morning greeting, thumbnails of the Blank document, Studio handbook, Letter, Résumé and Report templates, and a list of recent documents" width="100%"><p align="center"><sub><b>File.</b> Start from a template, open recent documents, edit properties, export to PDF and other formats.</sub></p></td>
|
|
</tr>
|
|
</table>
|
|
|
|
## Why WordCraft
|
|
|
|
- **Familiar.** Word's ribbon tabs, groups, shortcuts and behaviour: Enter continues a list,
|
|
Tab demotes it, Ctrl/⌘+B bolds the word under the caret, the Styles gallery previews styles live,
|
|
F4 repeats, F7 checks spelling, F8 extends the selection.
|
|
- **Your files.** Opens and saves .docx (OOXML), and also .odt, .rtf, .html, .md, .txt; exports PDF
|
|
with real, selectable text, links and bookmarks.
|
|
- **Fast.** Paragraph layout is cached, so typing in a 188-page document re-lays it out in about
|
|
1.4 ms; pages render on demand.
|
|
- **Everywhere.** One Rust codebase for macOS, Windows, Linux, BSD and the web. No Electron, no
|
|
Tauri: native [egui](https://github.com/emilk/egui) on the GPU.
|
|
- **Built for agents.** Every action is a command with an id. The same 389 commands drive the
|
|
ribbon, keyboard shortcuts, the command search, a command-line tool, a JSON control channel and
|
|
an MCP server.
|
|
- **Private.** Spelling, grammar and everything else work offline.
|
|
- **Open.** MIT OR Apache-2.0. Clean-room: built from public specifications and observation, with
|
|
every asset original or openly licensed.
|
|
|
|
## What works today
|
|
|
|
| Area | Highlights |
|
|
|---|---|
|
|
| **Writing** | Fast typing with IME, smart quotes, AutoCorrect, list autoformat (`* `, `1. `), dashes; word, sentence, paragraph selection; drag-select; clipboard with formatting; undo/redo; find and replace with regex |
|
|
| **Formatting** | Fonts, sizes, bold/italic/underline styles, strike, sub/superscript, caps, highlight, colours, character spacing, Format Painter, Change Case, Clear Formatting |
|
|
| **Paragraphs** | Alignment, indents (draggable on the ruler), spacing, line spacing, tabs with leaders, borders, shading, keep with next, widow/orphan control |
|
|
| **Styles** | Built-in style set, live gallery, Styles pane, create/modify/update styles, style sets, themes |
|
|
| **Lists** | Bullets, numbering, multilevel, restart, set value, custom formats |
|
|
| **Tables** | Insert by grid, merge/split, styles with banded rows, borders, shading, header rows repeated across pages, sort, formulas, text ↔ table |
|
|
| **Pages** | Margins, orientation, size, columns, page/column/section breaks, headers and footers (first page, odd/even), page numbers, watermark |
|
|
| **Objects** | Pictures (resize, crop, recolour, brightness/contrast, transparency, background removal, picture styles, rotate), shapes, text boxes, floating position |
|
|
| **References** | Table of contents, footnotes and endnotes, citations and bibliography (APA, MLA, Chicago, IEEE), captions, table of figures, cross-references, index, table of authorities |
|
|
| **Review** | Spelling and grammar with suggestions, thesaurus, word count, comments, track changes, accept/reject, compare documents, restrict editing, accessibility checker, document inspector |
|
|
| **Mailings** | Mail merge from CSV, merge fields, address block, greeting line, rules, preview, finish to a document; envelopes and labels |
|
|
| **View** | Print layout, web layout, draft, read mode, focus, zoom, one/multiple pages, page width, Navigation pane, rulers, gridlines, dark mode |
|
|
| **Files** | .docx read/write (opens in Word), PDF export, .odt, .rtf, .html, .md, .txt import/export, page images |
|
|
|
|
The honest picture, area by area, is in [ROADMAP.md](ROADMAP.md) and the generated
|
|
[feature parity report](docs/parity.md).
|
|
|
|
## Quick start
|
|
|
|
```sh
|
|
git clone https://github.com/storytold/wordcraft
|
|
cd wordcraft
|
|
cargo run --release -p wordcraft -- --sample # the desktop app with the sample document
|
|
cargo run --release -p wordcraft -- report.docx # open a document
|
|
```
|
|
|
|
Command line:
|
|
|
|
```sh
|
|
wordcraft-cli convert report.docx report.pdf # docx, pdf, odt, rtf, html, md, txt, png
|
|
wordcraft-cli text report.docx # plain text
|
|
wordcraft-cli inspect report.docx # structure as JSON
|
|
wordcraft-cli run --template sample \
|
|
--cmd 'select.text={"text":"Membership"}' --cmd format.bold --save out.docx
|
|
```
|
|
|
|
Web: `cd apps/wordcraft-web && trunk serve`, then open <http://127.0.0.1:8771/?sample>.
|
|
|
|
## For agents: CLI and MCP
|
|
|
|
WordCraft was designed to be driven by people *and* by AI agents.
|
|
|
|
```sh
|
|
claude mcp add wordcraft -- wordcraft-cli mcp # headless documents
|
|
wordcraft --control 7981 & # or drive the running app…
|
|
claude mcp add wordcraft-app -- wordcraft-cli mcp --connect 127.0.0.1:7981
|
|
```
|
|
|
|
Tools include `list_commands`, `execute`, `batch`, `type_text`, `select_text`, `inspect_document`,
|
|
`render_page`, `save_document`, and, with a running app, `screenshot`, `click` and `key`. Agents
|
|
can check their work through `inspect_document` without screenshots. See [docs/mcp.md](docs/mcp.md)
|
|
and the [control protocol](docs/control-protocol.md). Macros record any sequence of commands and
|
|
play it back (`tools.recordMacro`, `tools.macros`).
|
|
|
|
## Architecture
|
|
|
|
| Layer | Crate | Job |
|
|
|---|---|---|
|
|
| L0 | `wordcraft-geom` | units and measurements |
|
|
| L1 | `wordcraft-doc`, `wordcraft-fonts`, `wordcraft-proof` | document model and editing; fonts and shaping; spelling, grammar, hyphenation |
|
|
| L2 | `wordcraft-layout`, `wordcraft-docx`, `wordcraft-formats` | line breaking, pagination, tables, notes, hit testing; OOXML; ODT/RTF/HTML/Markdown/TXT |
|
|
| L3 | `wordcraft-render`, `wordcraft-pdf` | rasteriser (vello_cpu); PDF (krilla) |
|
|
| L4 | `wordcraft-engine` | session, undo, 389 commands, Word feature catalog |
|
|
| L5 | `wordcraft-mcp` | MCP server |
|
|
| L6 | `wordcraft-ui-egui` | the Word-style front end (swappable) |
|
|
| apps | `wordcraft`, `wordcraft-cli`, `wordcraft-web` | desktop, command line, browser |
|
|
|
|
`cargo xtask ci` runs formatting, clippy, ~250 tests, the asset-attribution check, the layering
|
|
check and the wasm build. Contributor and agent instructions: [AGENTS.md](AGENTS.md).
|
|
|
|
## Roadmap
|
|
|
|
WordCraft covers 87% of Word's ribbon features with commands today; we estimate about 58% of
|
|
real feature parity once depth is counted. Next: text wrap around floating pictures, margin
|
|
comment balloons, column balancing, charts, an equation editor and signed releases for every
|
|
platform. Details and estimates: [ROADMAP.md](ROADMAP.md).
|
|
|
|
## The Crafting Apps
|
|
|
|
WordCraft 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/wordcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.wordcraft.png" alt="" width="32" height="32"> | **WordCraft** | **Writing and document design · you are here** | [GitHub](https://github.com/storytold/wordcraft) | [Website](https://getartcraft.com/apps/wordcraft) |
|
|
|
|
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/wordcraft">WordCraft</a>
|
|
</p>
|
|
|
|
## License and credits
|
|
|
|
WordCraft is dual-licensed under [MIT](LICENSE-MIT) or [Apache-2.0](LICENSE-APACHE), at your option.
|
|
Copyright (c) 2026 ArtCraft Team and the WordCraft 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).
|
|
|
|
The spelling dictionary and hyphenation come from Grady Ward's public-domain Moby Hyphenator II
|
|
word list. The sample documents and templates are original text written for WordCraft.
|
|
|
|
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 WordCraft, under [`docs/brand/LICENSE-brand.txt`](docs/brand/LICENSE-brand.txt).
|
|
Forks and modified versions must remove them.
|
|
|
|
<sub>Microsoft and Microsoft Word are trademarks of the Microsoft group of companies. Adobe, Photoshop, Illustrator, Premiere Pro, Lightroom, Acrobat, After Effects and InDesign are trademarks or registered trademarks of Adobe Inc. in the United States and/or other countries. WordCraft is an independent, open-source project and is not affiliated with, sponsored by or endorsed by Microsoft Corporation or Adobe Inc.; these names are used only to describe the workflows it is compatible with.</sub>
|
|
|
|
<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>
|