dotCooCoo d9bd9b134d Symbols: instances of imported symbols are measured by their art
Every symbol instance was measured as its transform applied to the
20 × 20 square around the origin, which symbols made in the app keep
their art in. The SVG and DXF importers keep symbol art as drawn, so
the box of an instance of an imported symbol did not match its art.
The SVG Star instance at x 20, y 30 draws from (20, 30) to (40, 50)
and was measured from (10, 20) to (30, 40). Align moved such an
instance by the wrong amount, clicks and marquees beside its art
selected it, and the canvas, exports and prints left it out when its
art reached the view or the page and the square did not.

An instance is now measured by its symbol's art, which
Document::symbol_boxes looks up in the document each time
(Node::geometric_bounds_with, visual_bounds_with and
reach_bounds_with). With Use Preview Bounds on, the strokes in the art
count at their own weight, as the canvas draws them, and
object.setBounds counts them at that weight when it sizes an instance
or an object that holds one. When strokes do not scale and a width or
height of 0 or more is smaller than what a path's stroke adds,
object.setBounds now gives the path no width or height, as it does
for an instance whose art has strokes; before, it mirrored the path.
With Use Preview Bounds on, object.setBounds now measures the margins
that strokes add object by object, the members of groups and the
objects in symbol instances' art included, and solves for the width,
height and reference point asked for when the width and height are 0
or more. Before, it measured the margins of the whole selection and
could miss the size or the reference point asked for when strokes did
not scale and the objects' strokes added different margins, and when
strokes scaled and the width and height were out of proportion, even
for one path. A clip group, a Shaper Group, a compound path, type, and
a group or instance with effects or an opacity mask of its own are each
measured as one object, and so is an instance in perspective or one
turned or slanted relative to the bounding box, other than by quarter
turns. When the selection holds more than 4,096 objects to measure this
way, each selected object is measured as one. Instances inside symbol
art are measured by their own symbol's art. An instance is measured as
the square when its symbol is missing, when its symbol or a symbol
nested in its art holds an instance of itself, and when symbols nest 32
deep in its art.

Align and Distribute, the Transform panel, the bounding box and the
selection outline, clicks, the marquee, document.inspect and
document.node, Fit to Artwork Bounds and Fit to Selected Art, canvas
culling, thumbnails, the SVG filter region of an instance with a
raster effect, raster effect images, Export Selection, the SVG of an
artboard, printing, and the PDF, EPS, EMF/WMF and DXF writers use the
new box. The renderer also culls an instance by the effects and
brushed strokes in its art, and it culls a blend, envelope or repeat
by the brush art of what it holds and the effects in the art of the
instances in it. It culls an instance with geometry effects of its own
by the effects in its art after those geometry effects reshape the art.
It measures the effects in a symbol's art once for each symbol and
linear part of the transform that places it. For symbols whose art
holds instances, it measures at most 4,096 placements a frame, and at
most 4,096 more for each pattern tile it rasterizes and each placed
document it draws. Past that, it estimates the reach from the symbol's
reach with no transform, which it measures once. When the drawn
document's symbols change, the renderer drops the cached bounds of the
instances and of the objects that hold them.

The PDF and EPS writers, the SVG of an artboard and Skip Blank
Artboards grow the box of an instance whose art holds brushed strokes
by 16 times the widest stroke (at least 1 pt) of the objects in that
art that have a brushed stroke, plus 8 pt, as the renderer grows the
cull bounds of a brushed path. They keep an instance whose brush art
reaches the page. The SVG of an artboard also keeps an object that
holds an instance when what the canvas paints for it, the effects in
the symbol's art and the instance's own included, reaches the artboard.

Not yet: other commands that measure objects, such as Select › All on
Active Artboard, Transform Each and Convert to Artboards, still measure
an instance by the square.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-14 04:56:30 +07:00

ArtCraft

VectorCraft

Vector illustration; an open-source, clean-room reimplementation of Adobe Illustrator, rebuilt in pure Rust.

A fast, open-source, clean-room take on the Adobe Illustrator workflow. It runs natively on macOS, Windows, Linux and FreeBSD, and in the browser via WebAssembly. Built by the ArtCraft team.

Status: in active development Written in pure Rust Runs on macOS, Windows, Linux, FreeBSD and the web MCP server for agents License: MIT OR Apache-2.0

Join the ArtCraft community on Discord

VectorCraft on getartcraft.com · ArtCraft · All Crafting Apps


VectorCraft editing the Neon Drive poster: the title is selected, the Appearance panel shows the settings of its live Outer Glow, and the Properties panel shows its character settings
Neon Drive: a Pathfinder-cut sun, live Outer Glow on the type and grid, and clipping masks · examples/neon-drive.vectorcraft

Note

ArtCraft is a community of artists from all walks of life. Digital, generative, music, games — if you make things, you're one of us. Come say hi on Discord.

A look around · Made in VectorCraft · Why VectorCraft · Quick start · Status · Downloads · The Crafting Apps · License

A look around

Three live blend ribbons clipped to the artboard, one selected with its key paths showing; the Layers panel lists the clip group, the blends and the selected blend's two key paths

Live Blends and Layers: editable key paths, smooth colour, every object a row

Direct Selection tool showing anchor points and Bézier handles on a crescent built with Pathfinder, with the contextual task bar below it

Pen and Direct Selection: real Bézier anchors and handles, plus a contextual task bar

Two lit building facades drawn on the left and right planes of a two-point perspective grid at sunset, with the Perspective Selection tool and the Plane Switching Widget

Perspective Grid: art attached to its planes stays editable in perspective · examples/perspective-city.vectorcraft

Four artboards in the light UI theme: Pathfinder, Gradient Mesh, radial Repeat and Envelope Distort

Multiple artboards, light theme: Pathfinder · Gradient Mesh · live radial Repeat · Envelope Distort · examples/feature-sheet.vectorcraft

Made in VectorCraft

Every piece below was built entirely through VectorCraft's command API, the same one the MCP server exposes to agents, and exported by VectorCraft's own renderer. The source files are in examples/.

Neon Drive synthwave poster: a striped orange sun setting between purple mountains over a glowing pink grid

Neon Drive: synthwave poster with glowing type and grid

Dusk poster: a gradient sky with stars and birds, a glowing sun behind layered purple mountains and pine trees

Dusk: gradient sky, glowing sun, layered mountains

Live Blends: three wide ribbons blending yellow to pink and teal to purple, crossing over a dark background

Live Blends: 70 steps, smooth colour, editable spines

Radial Repeat mandala: teal petals around a coral center, ringed by yellow dots

Radial Repeat: a live mandala

Envelope Distort: rainbow stripes and the word WARP bent into a waving flag

Envelope Distort: striped type warped into a flag

Gradient Mesh: three softly shaded purple, pink and cyan spheres on a dark background

Gradient Mesh: shaded spheres

Pathfinder: a purple gradient crescent moon and three orange stars on a peach background

Pathfinder: a crescent and stars from exact booleans

Why VectorCraft

  • Familiar. Illustrator's layout, tools, menus, panels and shortcuts: the Pen, Direct Selection, Pathfinder, Smart Guides, Appearance, Swatches, Layers and more. You already know how to use it.
  • Fast. Multithreaded SIMD rendering off the UI thread. 20,000 shapes render in about 27 ms at full retina resolution while the interface stays at 120 fps.
  • Robust. Exact curve booleans (no "cannot perform operation"), unlimited undo via structural sharing, and property-tested file round trips.
  • Open. A documented native format (.vectorcraft, JSON), first-class SVG, PDF (and PDF-compatible .ai) import and export, PNG/JPEG/WebP export, Export for Screens, and SVGZ, templates, GIF, TIFF and BMP on open.
  • Agent-native. Every menu item, tool gesture, panel and dialog can be driven over a JSON control channel and an MCP server, so Claude and other agents can draw, edit and export the way a person does.
  • Everywhere. One codebase for the desktop apps and the same UI in the browser.

Quick start

git clone https://github.com/storytold/vectorcraft
cd vectorcraft

cargo run --release -p vectorcraft                          # desktop app
cargo run --release -p vectorcraft -- examples/dusk-poster.vectorcraft
cargo run --release -p vectorcraft -- --control 7979        # + JSON control channel
cargo run --release -p vectorcraft-cli -- mcp               # MCP server (stdio)
cargo run --release -p vectorcraft-cli -- run --in examples/ribbons.vectorcraft --export out.pdf   # headless batch
cargo run --release -p vectorcraft-cli -- bench examples/neon-drive.vectorcraft                   # render timing
cargo xtask bundle                                        # dist/VectorCraft.app (macOS)
cd apps/vectorcraft-web && trunk build --release            # web build → dist/web
cargo xtask ci                                            # fmt, clippy, tests, layering, wasm, vendor names

Japanese fonts come from storytold/craft-fonts, an optional build input (releases always use it): CRAFT_FONTS_DIR="$PWD/../craft-fonts" cargo run --release -p vectorcraft (an absolute path). Without it, Japanese text uses the installed system fonts. See docs/development.md.

On machines with two graphics processors, VectorCraft renders on the power-saving (integrated) one by default on Windows and macOS, and on the one the desktop runs on under Linux. To choose, use Preferences › Performance › Graphics Processor and restart. If a graphics processor can't show the window, VectorCraft starts again on the next one. To pick one when starting the app, set WGPU_POWER_PREF=high (or low), or WGPU_ADAPTER_NAME to part of its name, such as WGPU_ADAPTER_NAME=nvidia (see docs/development.md).

On native Wayland, winit 0.30 does not deliver dropped files. To open an SVG, use File › Open; to place artwork in the current document, copy and paste the file in a file manager. For file drag-and-drop, set Preferences › Performance › Linux Display Server to X11 (XWayland) and restart, or start the app with WAYLAND_DISPLAY= vectorcraft: the window then opens through XWayland, where drops work (see docs/development.md).

On Linux under KDE Plasma 6.3 or later with Wayland, a drawing tablet's pen moves the cursor but VectorCraft doesn't respond to it yet (#491). Open the window through XWayland instead, with the same preference or WAYLAND_DISPLAY= vectorcraft (see docs/development.md).

Use it from Claude Code and other agents

Register the MCP server with Claude Code:

claude mcp add vectorcraft -- /path/to/vectorcraft-cli mcp

To keep an agent to one project's files, give it folders to read and write (the same flags as PhotoCraft):

claude mcp add vectorcraft -- /path/to/vectorcraft-cli mcp --automation-read-root /work/project --automation-write-root /work/project

The details are in docs/mcp.md and docs/control-protocol.md.

For the experimental, unsupported 64-bit Windows 7 build, see Windows 7 instructions.

Status

VectorCraft is under active development. ROADMAP.md has the stage, the numbers by dimension and what's next; docs/target-app-parity.md the full parity assessment and docs/gaps.md the ranked list of what's missing.

Where we are (2026-10-10): alpha. About 88% of Illustrator 2026's menu items, tools, effects and formats exist (92.5% of menu items do something), feature depth is ~75%, and we estimate ~65% "ready for real work" for a mainstream illustrator (~62% against all of Illustrator): everyday vector illustration is close to usable: drawing and path tools, Pathfinder and Shape Builder, paint, gradients, appearance and transparency, type with styles, threading and Hebrew/Arabic bidirectional layout, and files (SVG, PDF and PDF-compatible .ai with PDF/X, EPS, DXF, EMF/WMF, raster formats, PSD out and PSD/PSB in as their merged image, Print, Package). Affinity documents (.af from Affinity 3, .afdesign, .afpub and, by their content, .afphoto from Affinity 1 and 2) open and place natively: layers, groups, artboards and pages, curves and shapes, fills, gradients and strokes, clipping and masks, text and images, with what didn't come in (effects, adjustments, brushes, master pages…) listed in the import warning; a file whose native data can't be read opens as its embedded preview, saying why. VectorCraft doesn't write Affinity files. Current .af validation includes 33 pinned files, native save/reload and every-board SVG/PDF/PSD export, with fixes for Affinity 3 artboards, source-backed JPEGs and text runs. Scope and limits; source audit and remaining gaps. The interface speaks English, German, Japanese, Korean, Vietnamese, Traditional and Simplified Chinese, Spanish, French, Hungarian, Italian, Polish, Russian and Ukrainian (and Czech and Brazilian Portuguese in the menus); localization-parity.md has the details. The scores are self-assessed from our code against Illustrator's public documentation; target-app-parity.md explains how far to trust them.

What's missing:

  • reliable exchange of Illustrator's own .ai files (layer structure in real files; Illustrator's editing data isn't written);
  • an interaction-fidelity pass covering every tool's modifiers and small behaviours;
  • 3D and Materials beyond the initial live Revolve (Extrude & Bevel, Inflate, Rotate, materials);
  • about half of the Photoshop-style raster effects (28 of 57 still missing; Film Grain is available under Artistic) and the Effect Gallery;
  • CJK composition for vertical type (vertical type itself has initial support, with a Japanese interface);
  • scripting, and the rest of Variables (image and graph kinds, dataset import);
  • generative AI features.

Where we're going: next is the interaction-fidelity pass, .ai files from real users and start-up stability, alongside the raster-effects package; then type, the Illustrator 2026 additions and 3D. The ranked list is in docs/gaps.md.

Workspace: crates/{geom, color, doc, pathops, text, effects, three-d, trace, brush, render, svg, pdf, eps, cad, metafile, format, tools, engine, ui-egui, mcp, testkit} and apps/{vectorcraft, vectorcraft-cli, vectorcraft-web}. The egui frontend is its own crate, so the UI can be swapped without touching the engine.

Agent and contributor rules (clean-room, the asset policy, no panics in shipped code, quality gates) are in AGENTS.md; docs/development.md explains how VectorCraft avoids crashing, and docs/releasing.md how releases are built, signed and published. Every bundled asset is listed with its licence in ASSETS.md.

Downloads

New to VectorCraft? Download it from the VectorCraft page on getartcraft.com. That's the easiest way to install it.

Want a specific build or format? On GitHub, the latest release has every build listed below, and all releases has earlier versions and their notes. <ver> in the file names is the version number, and SHA256SUMS.txt lists a checksum for every file.

Windows

Build Installer Portable
x64 (64-bit Intel/AMD) vectorcraft-<ver>-windows-x64.msi vectorcraft-<ver>-windows-x64-portable.zip
arm64 (Snapdragon and other ARM PCs) vectorcraft-<ver>-windows-arm64.msi vectorcraft-<ver>-windows-arm64-portable.zip
x86 (32-bit) vectorcraft-<ver>-windows-x86.msi vectorcraft-<ver>-windows-x86-portable.zip

Installers and executables are code-signed.

macOS

Build File Notes
App, universal (Apple silicon + Intel) vectorcraft-<ver>-macos-universal.dmg Signed and notarized
Command-line tool, universal vectorcraft-cli-<ver>-macos-universal.zip Signed and notarized

Linux

Format x86_64 aarch64 (ARM64) Notes
AppImage vectorcraft-<ver>-linux-x86_64.AppImage vectorcraft-<ver>-linux-aarch64.AppImage Runs anywhere; updates itself with AppImageUpdate (.zsync files)
Flatpak vectorcraft-<ver>-linux-x86_64.flatpak vectorcraft-<ver>-linux-aarch64.flatpak Sandboxed; flatpak install --user <file>
Debian/Ubuntu vectorcraft-<ver>-linux-x86_64.deb vectorcraft-<ver>-linux-aarch64.deb
Fedora/RHEL/openSUSE vectorcraft-<ver>-linux-x86_64.rpm vectorcraft-<ver>-linux-aarch64.rpm
Tarball vectorcraft-<ver>-linux-x86_64.tar.gz vectorcraft-<ver>-linux-aarch64.tar.gz Unpack anywhere

FreeBSD

Build File
x86_64 vectorcraft-<ver>-freebsd-x86_64.tar.gz

Web (WebAssembly)

Build File Notes
Static site vectorcraft-web-<ver>.zip Runs in a modern browser; host it on any static server

The Crafting Apps

VectorCraft is one of the Crafting Apps: free, open-source creative tools from the ArtCraft team, each written from scratch in Rust and each able to stand on its own.

App What it's for Code Learn more
PhotoCraft Image editing: layers, masks, type and real PSD files GitHub Website
VectorCraft Vector illustration · you are here GitHub Website
FilmCraft Video editing, color and sound GitHub Website
LightCraft Photo library and raw development GitHub Website
PdfCraft Reading, organizing and protecting PDFs GitHub Website
EffectCraft Motion graphics and visual effects GitHub Website
DesignCraft Page layout and publishing GitHub Website

And ArtCraft itself, our AI image and video studio for artists who want real control.


Join the ArtCraft community on Discord

Come make things with us

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.

discord.gg/artcraft · getartcraft.com · The Crafting Apps · VectorCraft

Star history

Star History Chart

License and credits

VectorCraft is dual-licensed under MIT or Apache-2.0, at your option. Copyright (c) 2026 ArtCraft Team and the VectorCraft contributors. Required notices are in NOTICE.

Bundled fonts, icons, images and other assets keep their own open licenses; each one is listed with its author, source and license in ASSETS.md. Release builds also embed the fonts of craft-fonts (Japanese, Simplified Chinese and Arabic faces; SIL Open Font License 1.1).

The app icon (an engraved dragon on VectorCraft red, #e8573f) is the owner's original artwork; its palette and files are in assets/app-icon/.

The ArtCraft name, wordmark and logos in 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 VectorCraft, under docs/brand/LICENSE-brand.txt. Forks and modified versions must remove them.

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. VectorCraft is an independent, open-source project and is not affiliated with, sponsored by or endorsed by Adobe Inc.; these names are used only to describe the workflows it is compatible with.

ArtCraft
Made by the ArtCraft team and community.

Languages
Rust 99.7%
Shell 0.2%