VectorCraft is an open-source vector illustration application designed as a clean-room reimplementation of the Adobe Illustrator workflow. Built entirely in Rust, it provides a native desktop application for Windows, macOS and Linux, along with a WebAssembly version that runs in the browser.
The project goes beyond basic vector drawing. It aims to reproduce a professional Illustrator-style workflow with Bézier editing, Pathfinder operations, multiple artboards, typography, gradients, live effects, PDF and SVG workflows, and extensive automation capabilities.
Features
VectorCraft provides a substantial collection of professional vector-illustration tools:
Pen and Direct Selection tools
Bézier anchors and handles
Pathfinder and exact Boolean operations
Multiple artboards
Layers and groups
Smart Guides
Rulers, grids and alignment tools
Live corners
Gradient and mesh tools
Gradient fills and strokes
Pattern and appearance controls
Blend tool
Radial Repeat
Envelope Distort
Puppet Warp
Liquify
Width tool
Perspective Grid
Freeform gradient editing
Recolor Artwork and Color Themes
Editable text and type-on-path
Variable and transformed vector content
Symbols
Clipping and masking
SVG import and export
PDF import and export
EPS export
DXF import
PNG, JPEG and WebP raster export
Export for Screens
Native .vectorcraft document format
Print engine
PDF layers and overprint support
The application also includes a command API that exposes its tools and interface to external automation. A JSON control channel and MCP server allow AI agents and scripts to manipulate documents, operate tools and export artwork.
This is one of VectorCraft's most distinctive features. It is not simply an image editor with an AI assistant added on top. The editing engine itself is designed to be programmatically controllable.
Download VectorCraft v0.18.0 - Software Mirrors |
|---|
VectorCraft v0.18.0 for Windowsvectorcraft-0.18.0-windows-x86.msi | 103.67 MB vectorcraft-0.18.0-windows-x86-portable.zip | 127 MB vectorcraft-0.18.0-windows-x64.msi | 106.81 MB vectorcraft-0.18.0-windows-x64-portable.zip | 132.65 MB vectorcraft-0.18.0-windows-arm64.msi | 100.52 MB vectorcraft-0.18.0-windows-arm64-portable.zip | 126.38 MB |
VectorCraft v0.18.0 for macOSvectorcraft-cli-0.18.0-macos-universal.zip | 110.13 MB vectorcraft-0.18.0-macos-universal.dmg | 145.8 MB |
VectorCraft v0.18.0 for Linuxvectorcraft-0.18.0-linux-x86_64.tar.gz | 129.23 MB vectorcraft-0.18.0-linux-x86_64.rpm | 130.29 MB vectorcraft-0.18.0-linux-x86_64.pkg.tar.zst | 96.53 MB vectorcraft-0.18.0-linux-x86_64.flatpak | 89.62 MB vectorcraft-0.18.0-linux-x86_64.deb | 131.16 MB vectorcraft-0.18.0-linux-x86_64.AppImage.zsync | 213.76 kB vectorcraft-0.18.0-linux-x86_64.AppImage | 122.01 MB vectorcraft-0.18.0-linux-riscv64.tar.gz | 126.99 MB vectorcraft-0.18.0-linux-riscv64.rpm | 128.17 MB vectorcraft-0.18.0-linux-riscv64.deb | 128.73 MB vectorcraft-0.18.0-linux-aarch64.tar.gz | 123.97 MB vectorcraft-0.18.0-linux-aarch64.rpm | 126.17 MB vectorcraft-0.18.0-linux-aarch64.pkg.tar.zst | 93.02 MB vectorcraft-0.18.0-linux-aarch64.flatpak | 83.83 MB vectorcraft-0.18.0-linux-aarch64.deb | 127.27 MB vectorcraft-0.18.0-linux-aarch64.AppImage.zsync | 205.2 kB vectorcraft-0.18.0-linux-aarch64.AppImage | 117.12 MB |
VectorCraft v0.18.0 for BSDvectorcraft-0.18.0-freebsd-x86_64.tar.gz | 128.91 MB |
Others Download related to VectorCraft v0.18.0vectorcraft-web-0.18.0.zip | 28.91 MB |
VectorCraft v0.18.0 Source Code
VectorCraft v0.18.0 Source code (zip)
VectorCraft v0.18.0 Source code (tar.gz)
|
VectorCraft v0.18.0 Release Notes: What's Changed- Reject exponent notation in the pica form of Unit::parse by @Silvertree2010 in #4126
- Refuse signs, exponents and non-numeric text in Export for Screens sizes by @Silvertree2010 in #4123
- Reject misplaced or excess '=' padding in base64_decode by @Silvertree2010 in #4131
- Shortcuts: the Cmd+Escape test expects no binding on Windows by @dotCooCoo in #4096
- Shortcuts: the Ctrl+Alt chord test presses Cmd on a Mac by @dotCooCoo in #4073
- MCP docs: export's EPS row names its one-file default and rect refuses artboards by @dotCooCoo in #4102
- Docs: the Image Trace page describes the background line between Abutting colors by @dotCooCoo in #4061
- Threaded text: Rasterize on a frame no longer duplicates its text by @dotCooCoo in #4047
- Type: a recovered document keeps continued paragraphs in threaded frames by @dotCooCoo in #4072
- Properties and Transform: X, Y, W and H of a compound path's member set only that path by @marcoarnulfo in #4056
- Threaded text: New Symbol on a frame no longer duplicates its text by @dotCooCoo in #4059
- Color management: loading the working RGB profile again under its name takes effect at once by @marcoarnulfo in #4053
- Pencil: a path-continuation cursor shows over an end a straight line continues by @dotCooCoo in #4064
- Pen cursors: a fountain-pen nib on the selection arrow's axis by @zsoltmar in #4117
- Image Trace: Flat Logo finds a bar two pixels wide and three pixels long in its own color by @dotCooCoo in #4081
- Export for Screens: takes the saved document's file name by @dotCooCoo in #4050
- CLI: --help after a subcommand prints the usage by @dotCooCoo in #4063
- Commands: an unknown command id is answered with the nearest command id by @dotCooCoo in #4060
- MCP: headless file tools pass relative paths to the engine as given by @dotCooCoo in #4108
- MCP: set_paint reports how many objects it painted by @dotCooCoo in #4069
- Image Trace: Flat Logo counts only the outlines it keeps toward the anchor limit by @dotCooCoo in #4066
- Image Trace: a color with no traced paths is left out of the palette by @dotCooCoo in #4077
- EPS: the help text says no central file is written when no art shows by @dotCooCoo in #4068
- Protect Windows device names followed by a space in safe_file_name by @Silvertree2010 in #4125
- Direct Selection: an anchor of type on a path's path drags and the type reflows along it by @marcoarnulfo in #4070
- Recolor Artwork: double-click a new color to pick it in the Color Picker, in the model it was picked in by @marcoarnulfo in #4090
- Security: EPS and legacy Illustrator bounds (operator recursion, bind, copy, cvn, previews, writer output, ink name) by @dylanmtaylor in #3883
- Security: document model bounds (id hashing, page ranges, overprint migration, auto slices, nested Repeat bounds) by @dylanmtaylor in #3888
- Migrate VectorCraft input, text and capture to egui 0.37 by @skylartaylor in #4113
- Docking: panels on craft-ui's shared docking, floating panels in OS windows by @aiongg in #4135
- feat: startup update prompt modal and direct self-updating by @dylanmtaylor in #4138
- Security: planar map budgets for booleans, Live Paint, Offset Path and 3D effects by @dylanmtaylor in #3937
- build: pin craft-update to craft-libs main (495e597) by @dylanmtaylor in #4183
- chore(deps): refresh muda, webbrowser and weezl by @skylartaylor in #4189
- Tests: two control server line-deadline tests pass on a loaded machine by @dotCooCoo in #4194
- Tests: the Paintbrush closing cursor follows the point a release keeps by @dotCooCoo in #4197
- Appearance: Add New Fill and Add New Stroke are off with nothing selected by @dotCooCoo in #4193
- Symbol Stainer: stained type keeps no link to a global swatch by @dotCooCoo in #4185
- Character: Character Direction is off at a caret with no characters selected by @dotCooCoo in #4184
- Plug-ins: compiling a plug-in's code takes none of a run's instructions by @KaboomFox in #4190
- .ai import: the -- placeholder in a gradient highlight and the XC operator no longer send the file to its PDF part (fixes #4176) by @youwishgames in #4179
- .ai import: editing data up to 512 MiB opens on 64-bit builds, so a card file with embedded rasters keeps its layers and text (part of #3510) by @youwishgames in #4177
- Reset stroke weight to zero when the stroke colour is removed by @Silvertree2010 in #4132
- Join the selected end points of two paths with Ctrl+J by @Silvertree2010 in #4187
- lint: method references and elided const lifetimes (S1612, S8863) by @dylanmtaylor in #4204
- G1: Reshape readouts follow Measurement Labels pref by @nrq6993-a11y in #4161
- G1: Artboard resize honors Transform Tools readouts by @nrq6993-a11y in #4160
- G1: Slice Selection resize honors Transform Tools by @nrq6993-a11y in #4168
- G1: Shear tool Shift locks width or height by @nrq6993-a11y in #4164
- lint: shell helper, local params and lossless float conversion (S1192, S7679, S4325) by @dylanmtaylor in #4205
- G1: Star tool shows inner and outer radii in measurement labels by @nrq6993-a11y in #4148
- Fix #3627: convert to PDF omits editing data by default by @nrq6993-a11y in #4147
- MCP: doc_inspect reports opacityPct in the percent scale the drawing tools take by @acosimati in #4149
- Live Paint: a plain group named "Live Paint..." is not a Live Paint group by @dotCooCoo in #4078
- G11: Shape Builder's edge-source grid holds a bounded number of references (#4080) by @bflatastic in #4211
- Shape Builder: a click merges over the map the tool built for the hover by @dotCooCoo in #4062
- i18n(ka): shorter Georgian for 15 labels that were cut off by @devius in #4158
- Shape Builder: erasing picks a region narrower than twice the tolerance by @dotCooCoo in #4065
- Shape Builder: a merge across an overlap thinner than the precision gives one path by @dotCooCoo in #4079
- Image Trace: the eye button's hold ends on release, and the panel uses any selected trace or image by @dotCooCoo in #4076
- Image Trace: Overlapping layers reach only under areas that hold their own color by @dotCooCoo in #4054
- Image Trace: Document Library keeps neutral tones off saturated library colors by @dotCooCoo in #4048
- Image Trace: the blended edge of a cut-out image adds no color to the palette by @dotCooCoo in #4075
- Image Trace: changes that wait with Preview off stay with their object by @dotCooCoo in #4105
- Undo: canceling an undo group keeps a batch's steps in other documents by @dotCooCoo in #4103
- Dialogs: ui.dialog.set returns an error for a field the open dialog does not read by @dotCooCoo in #4049
- MCP: screenshot and render_preview can draw the Image Trace view by @dotCooCoo in #4055
- MCP: answer_dialog sets the fields of the app's open dialog and confirms or cancels it by @dotCooCoo in #4057
- Type: typing "1. ", "A) " or "* " at the start of a paragraph starts a list by @dotCooCoo in #4192
- Pencil: Live curve fitting in Pencil Tool Options shows the stroke's points until the release fits them by @dotCooCoo in #4182
- Brushes: Art Brush Options' Width can follow the pen pressure by @dotCooCoo in #4181
- Eraser: Angle and Roundness in Eraser Tool Options shape the tip by @dotCooCoo in #4180
- Fix #1732: Transform Each opens on the values it was last confirmed with and has a Copy button by @Taha-Mahmoodi in #4175
- Pencil: the cursor shows a star before a press that draws a new path by @dotCooCoo in #4152
- Pencil: a stroke from an end of one selected path to an end of another connects them by @dotCooCoo in #4095
- Fix #3328: Pencil Fidelity down to 0.01 pt, with a logarithmic slider and key steps that fit the range by @ncic in #4196
- Type on a path: joined scripts bend along the path so their joins stay connected by @ham9zah in #4119
- Pen tablets: a pen's eraser end selects the Eraser on Windows by @dotCooCoo in #4097
- Pen tablets: a pen's eraser end selects the Eraser in the web build by @dotCooCoo in #4104
- Type: Highlight Substituted Fonts moves to Preferences › Type and applies to every document by @dotCooCoo in #4099
- Web: shortcuts the browser also has run only in the app by @addibble in #4106
- G12: General › Corner Radius is the Rounded Rectangle tool's radius (#4074) by @bflatastic in #4212
- Artboards: canvas menu to lock and unlock artboards (#2531) by @vangel76 in #2532
- Image Trace: Document Library traces with a color group from the Swatches panel by @dotCooCoo in #3975
- lint(engine): explicit imports in engine modules and tests (S2208) by @dylanmtaylor in #4200
- lint: explicit imports in remaining test and module files (S2208) by @dylanmtaylor in #4203
- Revert #4200 and #4203: their explicit imports don't compile by @bflatastic in #4214
- Transform panel: the menu's Transform Object Only, Pattern Only, Both and Use Registration Point for Symbol act by @Taha-Mahmoodi in #4146
- Metafile import: a file's bitmaps share one decoded-pixel budget (#3600) by @ashokram-si in #4215
- Image Trace: a cut-edge blend past the rare-color budget traces as its kept color by @dotCooCoo in #4216
- Finish recolor widget IDs and migration documentation after #4113 by @skylartaylor in #4173
- Tab overflow list scrolls to every open document (#4017) by @HEOJUNFO in #4218
- Pencil: Edit Selected Paths redraws a selected compound path by @ncic in #4220
- Fix #3837: unit fields read a decimal comma as a decimal point by @DCaioP in #4213
- i18n: the message scan skips comments and reads EngineError::Disabled's reason by @dotCooCoo in #4222
- Pencil: Live preview option in Pencil Tool Options by @ncic in #4225
- G4: draw loaded-text cursor for threaded overflow by @nrq6993-a11y in #4229
- Canvas: a mouse's moves between frames reach the tool too by @ncic in #4227
- PDF tests: exports compared byte for byte are dated alike by @KaboomFox in #4210
- Respect quotes and parentheses when splitting SVG CSS declarations by @Silvertree2010 in #4230
- Repeat: a selected Grid Repeat has on-canvas handles for its rows, columns and spacing (part of #2691) by @Taha-Mahmoodi in #4166
- Artboards: the Artboards panel's Delete Empty Artboards deletes every artboard with no artwork in one undo step by @Taha-Mahmoodi in #4142
- Import: Illustrator blends come in as live blends by @ham9zah in #4127
- Import: live blend check follow-ups by @ham9zah in #4234
- Brushes: Window › Brush Libraries opens brush libraries whose brushes click or drag into the document's Brushes by @Taha-Mahmoodi in #4020
- macOS: declare the UI languages so the open and save panels are translated by @Atalantis in #4235
- Fix #3426: the Pathfinder panel's Pathfinder Options… sets Precision, Remove Redundant Points and Divide and Outline Will Remove Unpainted Artwork by @Taha-Mahmoodi in #4141
- Toolbar: double-clicking the Type on a Path tool opens Type on a Path Options by @dotCooCoo in #4236
- Type: a double-click on a threaded port breaks the thread there by @Taha-Mahmoodi in #4144
- G8: EPS import regression tests for operator type checks by @nrq6993-a11y in #4238
- Render: brush art is made again when a symbol or pattern it shows is renamed by @dotCooCoo in #4240
- Undo: a canceled undo scope drops the journal entries it cut from open undo groups by @dotCooCoo in #4243
- View: all 25 saved views in the View menu; Edit Views… lists them by @ashokram-si in #4247
- Windows fonts: list the fonts only GDI has loaded, such as Creative Cloud's Adobe Fonts (#1258) by @xbirks in #4130
- Fix #4128: text.create and text.setStyle store a font style the family has by @DCaioP in #4250
- Part of #2384: imported PDF text keeps its place beside a drawn no-break or thin space by @dotCooCoo in #4251
- G1: Blob Brush drag shows scrub path length when Measurement Labels on by @nrq6993-a11y in #4252
- Clippy: bool and range checks after egui 0.37 merge by @nrq6993-a11y in #4253
- G11: Anchor Point tool Space moves anchor mid-drag by @nrq6993-a11y in #4254
- Render: an image that can't be decoded shows as a crossed box and isn't decoded again by @dotCooCoo in #4255
- Type: Convert to Text makes a list's bullets and numbers characters of its text by @dotCooCoo in #4093
- Clippy fixes after upstream merge by @nrq6993-a11y in #4258
- G4: mixed Small Caps and super/subscript in Character panel by @nrq6993-a11y in #4260
- Render: the decoded-image cache sizes from installed memory on Windows, macOS and FreeBSD by @dotCooCoo in #4261
- Tests: the --help tests wait for the app to exit on a loaded machine by @dotCooCoo in #4266
- G10: skip kashida test when PDF text import is empty by @nrq6993-a11y in #4264
- #4122: File → Open starts in the last opened file's folder by @nrq6993-a11y in #4263
- Render: cropped shadow and blur rasters are kept across pans within a margin by @dotCooCoo in #4265
- PDF: list markers export as selectable text by @dotCooCoo in #4098
- Images: an image past the 2 GiB decode allowance draws at reduced size instead of a crossed box by @dotCooCoo in #4269
- Placed documents: a ready bitmap redraws only its objects, and bitmaps on screen are not made again by @dotCooCoo in #4270
- G11: Join tool connects endpoints near scrub line ends by @nrq6993-a11y in #4272
- ci: require nextest 0.9.150 by @skylartaylor in #4286
- refactor: shared module layout (craft-contrib#20) by @aiongg in #4294
- fix(format): cap a compressed file's JSON at 256 MB on wasm32 (#3587) by @rahul05ranjan in #4310
- fix(doc): decode the linked-image proxy within MAX_RASTER_ALLOC (#3597) by @rahul05ranjan in #4308
- Accept whole-number floats and reject invalid counts for polygon, star and spiral by @Silvertree2010 in #4304
- Only treat % plus two hex digits as an escape in MCP resource URIs by @Silvertree2010 in #4288
- G4: Optical margin menu uses shared text flag by @nrq6993-a11y in #4309
- Brushes: New Brush makes the brush from the art its options opened with by @dotCooCoo in #4195
- G2: Scribble effect Settings presets by @nrq6993-a11y in #4274
- Docs: cite the public thread help for outlining a threaded frame by @dotCooCoo in #4275
- Windows: a maximized window stays clear of a taskbar on the top or a side by @dotCooCoo in #4279
- Windows: a maximized window stops a pixel short of an auto-hidden taskbar by @dotCooCoo in #4282
- Appearance: a mixed selection lists the attributes its objects share (#4174) by @ham9zah in #4301
- Dropdowns: menus grow back after a search with no matches by @aiongg in #4337
- ci(deps): split Dependabot cargo group into lockstep families by @skylartaylor in #4223
- Make SVG export def ids linear instead of quadratic by @Silvertree2010 in #4359
- M2.1: allow Pen tool and path.join to continue, close, and join compound paths (#3274, #3276, #3379, #3380) by @el-j in #3283
- Windows installation policy: VectorCraft by @Jeremy8776 in #4295
- ci: run the printps tests under their moved path by @aiongg in #4305
New Contributors- @zsoltmar made their first contribution in #4117
- @youwishgames made their first contribution in #4179
- @acosimati made their first contribution in #4149
- @ncic made their first contribution in #4196
- @ashokram-si made their first contribution in #4215
- @DCaioP made their first contribution in #4213
- @xbirks made their first contribution in #4130
- @Jeremy8776 made their first contribution in #4295
Full Changelog: v0.17.0...v0.18.0 |
Performance and Compatibility
VectorCraft is implemented in Rust and uses a multithreaded rendering architecture. The project reports that 20,000 shapes can be rendered in approximately 27 milliseconds at full Retina resolution while maintaining a responsive interface.
Its geometry engine is designed around exact curve operations, while structural sharing provides effectively unlimited undo without requiring every operation to duplicate the entire document.
The project also places considerable emphasis on automated testing. Property-based tests are used for document round trips, while rendering and geometry have dedicated test infrastructure.
File compatibility is another strength. SVG is a first-class format, while PDF import/export and PDF-compatible AI files provide useful interoperability with established design workflows. DXF import and EPS export further extend its usefulness for technical and print-oriented work.
However, compatibility should not be confused with complete Illustrator parity. VectorCraft is still under active development, and the project roadmap indicates that some areas remain under construction.
System Requirements
VectorCraft supports:
Windows
macOS
Linux
FreeBSD
WebAssembly/browser
Prebuilt Linux packages are available in several formats, including:
Both x86_64 and ARM64 Linux builds are provided.
macOS has a universal build supporting Intel and Apple Silicon, while Windows is distributed as a native desktop application.
Developers can also build the application directly from source using Rust.
Pros and Cons
Pros
Open-source
MIT or Apache-2.0 licensing
Native Rust application
Windows, macOS and Linux support
Browser/WebAssembly version
Strong Bézier and vector-editing tools
Exact Pathfinder Boolean operations
Multiple artboards
Advanced gradients and appearance controls
Envelope Distort, Puppet Warp and Liquify
SVG and PDF support
EPS export
DXF import
Native document format
Excellent automation potential
JSON control interface
MCP support for AI agents
Multithreaded rendering
Extensive automated testing
Cons
Still under active development
Not yet a complete Illustrator replacement
Some workflows will still lack the maturity of established commercial software
Font availability and typography coverage are still developing
Professional production workflows should be tested before full migration
The large feature set can make the application more complex for beginners
How to Install
The easiest method is to download the appropriate prebuilt package from the project's GitHub releases.
Linux users can choose between AppImage, DEB, RPM and tarball packages. macOS users can install the universal application, while Windows users can use the provided Windows package.
Developers can build the desktop application from source:
git clone https://github.com/storytold/vectorcraft
cd vectorcraft
cargo run --release -p vectorcraft
A VectorCraft document can also be opened directly:
cargo run --release -p vectorcraft -- examples/dusk-poster.vectorcraft
For headless processing and automation, the project provides a CLI:
cargo run --release -p vectorcraft-cli -- run \
--in examples/ribbons.vectorcraft \
--export out.pdf
The MCP server can be launched with:
cargo run --release -p vectorcraft-cli -- mcp
This makes VectorCraft particularly interesting for automated graphics generation and AI-assisted design workflows.
Final Verdict
VectorCraft is an unusually ambitious open-source Illustrator alternative. It is not merely a basic SVG editor with a familiar interface. The project is attempting to recreate a substantial portion of the professional Illustrator workflow while building its own modern Rust-based rendering and document architecture.
Its strongest areas are vector geometry, Pathfinder operations, Bézier editing, advanced effects, SVG/PDF interoperability and automation. The MCP and JSON control interfaces are especially interesting because they allow the same editing engine to be operated by scripts and AI agents.
Performance is another major strength. The native Rust architecture and multithreaded rendering approach give VectorCraft a solid technical foundation for handling complex vector documents.
The biggest limitation is maturity. Established applications such as Illustrator have decades of compatibility work, plugins, fonts, production workflows and ecosystem support behind them. VectorCraft is still developing and should not yet be treated as a drop-in replacement for every professional Illustrator workflow.
For designers, developers and open-source users looking for a modern vector graphics application, however, VectorCraft is one of the most interesting projects in this category. Its combination of native performance, open licensing and agent-native automation makes it particularly worth watching.
Post a Comment/Report Broken Link: