FigCraft v0.13.1

FigCraft is a free, open-source interface design and prototyping application built in Rust. It aims to reproduce core design workflows found in Figma while providing a native desktop experience, local file storage, and support for offline work.

The application includes tools for creating layouts, reusable components, vector graphics, design systems, and interactive prototypes. It also supports developer handoff, multiple export formats, command-line automation, and integration with AI agents through the Model Context Protocol (MCP).

FigCraft is an ambitious alternative for UI designers and developers who want greater control over their design files without depending entirely on a cloud-based platform. However, it is still in alpha, and its developers estimate that it has reached approximately 49% of the functionality needed to replace Figma for real-world work. It is best treated as an actively developing alternative rather than a complete replacement.

Features

Interface Design and Auto Layout

FigCraft provides a canvas-based editor with a familiar interface featuring a toolbar, layers panel, design properties, and keyboard shortcuts.

Its auto-layout system supports horizontal and vertical layouts, wrapping, grid layouts, spacing, padding, alignment, and flexible sizing. Designers can combine nested frames, constraints, and layout grids to create responsive interface structures.

These tools are useful for building application screens, dashboards, landing pages, and reusable interface layouts without manually positioning every element.

Components and Design Systems

FigCraft supports reusable components, instances, variants, and component properties. Changes to a main component can propagate to its instances while preserving supported overrides.

The application also includes an asset panel for searching and inserting reusable components, along with a variables system supporting colors, numbers, strings, and Boolean values. Variables can have multiple modes, aliases, and scopes, making them useful for maintaining design systems and light or dark themes.

These capabilities provide a foundation for consistent UI development across larger projects.

Vector Graphics and Drawing Tools

The application includes vector editing tools that go beyond basic shapes. Users can draw paths, edit points and handles, create variable-width strokes, and combine overlapping shapes using Boolean operations.

Supported operations include union, subtraction, intersection, and exclusion. The editor also provides a shape builder, masks, gradients, adjustable corners, and editable vector geometry.

This makes FigCraft useful for designing icons, interface illustrations, diagrams, and other vector-based assets without requiring a separate drawing application for every task.

Colors, Effects, and Typography

FigCraft supports solid colors, linear and radial gradients, angular and diamond gradients, image fills, multiple strokes, blend modes, shadows, and blur effects.

Additional effects include noise, texture, glass-like treatments, and masks. Color handling supports sRGB and Display P3 profiles, with exported files tagged with their color profile.

The text editor supports mixed formatting within paragraphs, variable fonts, OpenType features, text styles, spacing controls, lists, and right-to-left text. These capabilities are useful for multilingual interfaces and more sophisticated typography.

Interactive Prototyping

FigCraft allows designers to connect frames and create interactive prototypes with triggers, actions, transitions, and back navigation.

Its interaction system also supports variables and conditional expressions, enabling more dynamic prototypes. A presentation view provides device frames and interaction hints, while a live preview helps designers test their work.

These features allow teams to explore interface behavior before implementing the final design in code.

Developer Handoff and Code Inspection

The application includes a developer-oriented inspection workflow with measurements, annotations, ready-for-development status, and frame comparisons.

Developers can inspect design properties and generate code representations in formats such as CSS, HTML, React, SwiftUI, and Jetpack Compose. Components can expose their properties as parameters in the generated code.

The output is intended to help bridge design and implementation, although generated code should be reviewed and adapted to the conventions and architecture of the target project.

AI Agent and CLI Automation

One of FigCraft's most distinctive features is its command-driven architecture. The same underlying command system powers the graphical interface, CLI, JSON control channel, and MCP server.

This enables scripts and compatible AI agents to create or modify designs, inspect documents, render files, and export assets without relying exclusively on manual interaction.

The command-line tools also support headless rendering and batch export, making the application potentially useful in automated design workflows and development pipelines.

Local Files and Offline Privacy

FigCraft stores projects as local .figcraft archives and can work without requiring an account. The project states that it does not use telemetry and does not contact a server until users share or join a file.

It supports importing and exporting common formats, including SVG, PNG, JPG, WebP, and PDF. Existing Figma .fig files can also be opened on a best-effort basis, although compatibility with real-world documents has not been fully validated.

For collaborative work, FigCraft offers preview-stage live sessions and an optional self-hosted server. These features are not equivalent to a mature cloud collaboration platform, and online sharing has important privacy limitations discussed below.

Download FigCraft v0.13.1 - Software Mirrors

FigCraft v0.13.1 for Windows

figcraft-0.13.1-windows-x86.msi | 75.29 MB

figcraft-0.13.1-windows-x86-portable.zip | 92.62 MB

figcraft-0.13.1-windows-x64.msi | 76.82 MB

figcraft-0.13.1-windows-x64-portable.zip | 96.37 MB

figcraft-0.13.1-windows-arm64.msi | 73.45 MB

figcraft-0.13.1-windows-arm64-portable.zip | 93.18 MB

FigCraft v0.13.1 for macOS

figcraft-cli-0.13.1-macos-universal.zip | 85.88 MB

figcraft-0.13.1-macos-universal.dmg | 104.98 MB

FigCraft v0.13.1 for Linux

figcraft-server-0.13.1-linux-x86_64.tar.gz | 4.31 MB

figcraft-server-0.13.1-linux-aarch64.tar.gz | 3.94 MB

figcraft-0.13.1-linux-x86_64.tar.gz | 96.83 MB

figcraft-0.13.1-linux-x86_64.rpm | 97.76 MB

figcraft-0.13.1-linux-x86_64.pkg.tar.zst | 73.02 MB

figcraft-0.13.1-linux-x86_64.flatpak | 68.11 MB

figcraft-0.13.1-linux-x86_64.deb | 98.25 MB

figcraft-0.13.1-linux-x86_64.AppImage.zsync | 318.49 kB

figcraft-0.13.1-linux-x86_64.AppImage | 90.93 MB

figcraft-0.13.1-linux-riscv64.tar.gz | 94.83 MB

figcraft-0.13.1-linux-riscv64.rpm | 95.79 MB

figcraft-0.13.1-linux-riscv64.deb | 96.08 MB

figcraft-0.13.1-linux-aarch64.tar.gz | 93.48 MB

figcraft-0.13.1-linux-aarch64.rpm | 95.14 MB

figcraft-0.13.1-linux-aarch64.pkg.tar.zst | 70.64 MB

figcraft-0.13.1-linux-aarch64.flatpak | 64.17 MB

figcraft-0.13.1-linux-aarch64.deb | 95.79 MB

figcraft-0.13.1-linux-aarch64.AppImage.zsync | 307.17 kB

figcraft-0.13.1-linux-aarch64.AppImage | 87.69 MB

FigCraft v0.13.1 for BSD

figcraft-0.13.1-freebsd-x86_64.tar.gz | 96.44 MB

figcraft-0.13.1-freebsd-aarch64.tar.gz | 91.9 MB

Others Download related to FigCraft v0.13.1

figcraft-web-0.13.1.zip | 9.85 MB

FigCraft v0.13.1 Source Code

FigCraft v0.13.1 Source code (zip)

FigCraft v0.13.1 Source code (tar.gz)

FigCraft v0.13.1 Release Notes:

What's Changed

  • Honor CARGO_BUILD_TARGET in FreeBSD packaging for aarch64 release builds by @dylanmtaylor in #1475
  • M8: repair and library manifests check membership by set lookups (#1078) by @StrajnarFilip in #1480
  • M8: normalising after a command runs under the panic guard (part of #1085) by @StrajnarFilip in #1481
  • M1: the stroke weight keeps room for its value beside the variable button (#1452) by @StrajnarFilip in #1482
  • M1: page ruler guides survive save and reopen (#1476) by @StrajnarFilip in #1485
  • fix(present): prototype links open only behind the notice or a viewer's click (#1096) by @ChristopherLinnett in #1487
  • i18n(sv): translate 47 new strings by @kler in #1393
  • i18n(ka): Georgian for 76 strings added since the language landed by @devius in #1443
  • M9: a ping every keep-alive interval, whatever else the client sends by @samhyun in #1424
  • fix(ui): right-click on a frame's name label picks that frame by @watchakorn-18k in #1470
  • fix(app): ask before ⌘Q quits with unsaved changes (#857) by @ChristopherLinnett in #1489
  • M6: .fig embedded images are copied once per blob, not once per hash (#1059) by @StrajnarFilip in #1486
  • fix(collab): image entries must match their hash and sane bounds (#1086) by @ChristopherLinnett in #1488
  • M8: the browser refines a zoom only once it has paused by @samhyun in #1468
  • M3: scaled instances keep their scale when their main is rebuilt (#922) by @StrajnarFilip in #1484
  • M8: a progressive JPEG sampling a component finer than its first is refused, not decoded by @samhyun in #1491
  • i18n(ar): add Arabic draft interface catalog by @hussain-hz in #1466
  • M7: line the Home tab's divider up with the icon rail by @Skyfuller1303 in #1462
  • feat: property copy/paste, blend-mode hover preview and clipboard fixes by @culiulemon in #1457
  • M4: Thai lines keep marks and leading vowels with their letter (part of #1219) by @SusieeTheLinuxUser in #1400
  • ui: show constraint guides for a selected layer in its frame by @yelintong in #1406
  • M12: MCP comment feedback and live change events by @phonedu in #1465
  • M4: draw dots for zero-length round dashes by @Guillergood in #1439
  • Reject cornerRadius/padding/strokeSides arrays with non-numeric entries by @Silvertree2010 in #1405
  • Cap Sketch image members by compression ratio and total size by @Silvertree2010 in #1398
  • Keep the right edge of right-aligned auto-width text as it grows by @Silvertree2010 in #1479
  • fix(engine): make Set as thumbnail affect saved files (#1428) by @Zaxaerith in #1432
  • Reject '+' sign in NodeId::from_str by @Silvertree2010 in #1417
  • M8: keep undo entries after a failed batch undoes an earlier edit (#1410) by @avhn in #1419
  • Reject non-page ids in page.duplicate by @Silvertree2010 in #1469
  • Reject non-numeric paddingHorizontal/paddingVertical in node.set by @Silvertree2010 in #1467
  • Clamp Vector Drawable numbers to the f32 range so they stay finite by @Silvertree2010 in #1411
  • Fix looks_like_svg rejecting DOCTYPE with an internal subset by @Silvertree2010 in #1404
  • Keep session joins working when a document has out-of-range ids by @Silvertree2010 in #1444
  • Reject colour arrays containing non-numeric entries in color_of by @Silvertree2010 in #1426
  • Treat a % suffix on node.set opacity as a percentage by @Silvertree2010 in #1425
  • M8: bound attached MCP replies to 512 MiB (#1113) by @avhn in #1407
  • ui: rebuild the toolbar pill on a 32 pt grid, without the Resources button by @yelintong in #1210
  • M4: preserve vector region fills across .fig import and native rendering by @Skyfuller1303 in #634
  • M2: auto layout settings in one call don't depend on how their keys are spelled by @MortenHusted in #1458
  • M7: Flutter code generation by @yelintong in #669
  • M4: a generic popover — a 40-high header, dragged by its header by @yelintong in #789
  • M0.9: commands, MCP tools and batch steps refuse names they don't take (#1413) by @MortenHusted in #1460
  • M1: opening a file that is already open says when it changed on disk, and can read it again (#997) by @MortenHusted in #1461
  • M0.9: find layer ids without changing the selection (#996) by @avhn in #1408
  • M7: CSS system font names draw in macOS's System Font by @MortenHusted in #1459
  • M6: Preserve FigJam sticky notes and shapes with text on import by @StrajnarFilip in #1397
  • M4: the Design panel's sections on the design's 240 pt grid by @yelintong in #858
  • M6: Sketch import (#1021 follow-up): match Sketch's renders rule by rule by @sarsonj in #1389
  • M7: place images at their own size, in points for 2x screenshots by @denisg0mes in #1360
  • M3: bind fill and stroke variables directly in layer props (#1000) by @avhn in #1421
  • M1: Alt pressed during a drag turns the move into a copy (#1385) by @muamerETS in #1427
  • M0.9: let batches continue after failed steps (#1386) by @avhn in #1409
  • M6: import and export Penpot 2.x files offline by @Guillergood in #1143
  • docs: rows from the round-4 community PRs (#858, #1409, #1397, #1389, #1143, #1427, #1421) by @bflatastic in #1504
  • M1: Crop image from the Object menu, the right-click menu and the image fill row (#1464) by @bflatastic in #1501
  • M3: shadows of images with transparent pixels follow their alpha (#1289) by @bflatastic in #1509
  • M0.9: web wasm back under the 24 MiB gate (#1472) by @bflatastic in #1511
  • M7: download a missing free font from the Missing fonts window (#754) by @bflatastic in #1510
  • M6: .fig import keeps the file's saved line breaks while the text is unedited (#1236) by @bflatastic in #1519
  • M6: .fig import resolves library text styles linked by asset key (#1234) by @bflatastic in #1515
  • M8: the progressive JPEG check guards file thumbnails too by @bflatastic in #1517
  • M8: large images on the canvas draw from a smaller copy (#1483) by @bflatastic in #1518
  • M12: drawing a connector previews the connector it makes (#1387) by @bflatastic in #1526
  • M9: a refused batch is fixed in linear time (#1063) by @bflatastic in #1522
  • M3: the instance swap menus search as you type (#1338) by @bflatastic in #1527
  • M9: an attached AI agent comments under its own name (#1414) by @bflatastic in #1529
  • M9: sibling placement uses ordered lookups (#1065) by @bflatastic in #1523
  • M8: an attached MCP call can name the document it acts on (#998) by @bflatastic in #1533
  • M9: the replay log is bounded by default (#1069) by @bflatastic in #1524
  • M0.9: edit.duplicate can return which copy is which (#995) by @bflatastic in #1528
  • M3: components that would contain themselves are refused, and loops in files are repaired (#1084) by @bflatastic in #1540
  • M8: masks allocate only over what they draw, under a layer budget (#1061) by @bflatastic in #1535
  • M9: comment.list reports the names each message mentions (#1415) by @bflatastic in #1534
  • M4: a letter and its combining marks shape with one font (#1478) by @bflatastic in #1532
  • M8: SVG pattern tiles are drawn once per scale, within the layer budget (#1080) by @bflatastic in #1551
  • M8: the browser applies input sent over its control channel by @samhyun in #1499
  • M1: guides snap to layer edges and centres when dragged by @ahmed-226 in #1498
  • Resolve stored variable ids by exact id, not by variable name by @Silvertree2010 in #1542
  • Fix double alpha when binding a translucent variable to an empty fill by @Silvertree2010 in #1530
  • M2: add auto layout from groups in the sidebar and convert them in place by @Carbocode in #1546
  • Reject non-boolean values for node.set flag properties by @Silvertree2010 in #1545
  • Neutralise CR and form feed in CSS variable export strings by @Silvertree2010 in #1539
  • Keep full precision in export size labels so they parse back by @Silvertree2010 in #1507
  • M9: a per-address budget for server admin requests, and join codes found by hash (#1075) by @bflatastic in #1552
  • M8: the browser draws a zoom's full render a band at a time by @samhyun in #1496
  • M1: add a draggable corner smoothing icon by @Carbocode in #1521
  • ci(deps): bump storytold/craft-common-actions/.github/workflows/windows-arm64.yml from 8bb4e5ab95443171104ad88113fe1ef9b0e5ce3f to fa5ef18780cf5e7d5d3b8de068de56cffc83cac5 in the actions group by @dependabot[bot] in #1520
  • M1: dismiss colour pickers outside and anchor them beside the sidebar by @Carbocode in #1544
  • M9: joining a live session shows its progress, with Cancel and Try again (#1381) by @bflatastic in #1553
  • board grid settings: dots, lines, graph paper or none by @liwaichung-source in #1547
  • M4: a drag anywhere in vector edit mode draws a marquee (#1508) by @AganzeFelicite in #1516
  • M9: one clear, persistent display name, renamed live in sessions (#1380) by @bflatastic in #1554
  • M5: a Manual overlay can be dragged on the canvas (#405) by @bflatastic in #1555
  • M9: the app shows where an attached AI agent is working (#1416) by @bflatastic in #1556
  • M4: Thai, Lao, Khmer and Burmese lines break between words (#1219) by @StrajnarFilip in #1548
  • M8: startup falls back to another GPU backend when the device is lost (#1438, #965) by @bflatastic in #1557
  • M9: the admin budget test allows for refill during a slow run by @bflatastic in #1564
  • M7: a portable install keeps its settings beside the app (#1320) by @bflatastic in #1558
  • M8: SVG import reads color() and color-mix() colours (#1550) by @bflatastic in #1566
  • M7: the browser can use fonts installed on the computer (#1051) by @bflatastic in #1568
  • M9: publish and share online from the browser (#917) by @bflatastic in #1567
  • M3: component properties keep their order on rename; Make slot asks for the name (#1536, #1537) by @bflatastic in #1565
  • M7: selection and hover outlines follow a layer's rounded corners (#1506) by @bflatastic in #1573
  • Reject non-finite hsl()/hsla() components in parse_css by @Silvertree2010 in #1559
  • M8: the browser worker's preview and wait tests run on a clock and a threshold they set by @bflatastic in #1575
  • M0.9: figcraft-cli parses its arguments with clap (part of #1396) by @bflatastic in #1570
  • M8: Cap the input of boolean operations by @bflatastic in #1581
  • M8: Keep unsaved files when an internal error stops the browser build by @bflatastic in #1580
  • M9: comment.list: list only the threads that mention a name by @bflatastic in #1585
  • M1: Preferences ▸ Scroll wheel zoom by @bflatastic in #1584
  • M9: share links can comment (a comment access level beside edit and view) by @bflatastic in #1576
  • M8: the Actions palette offers only commands that run from it by @bflatastic in #1582
  • Keep combining marks inside the word in title case by @Silvertree2010 in #1579
  • M8: stacked layer blurs keep the margin they reach together by @samhyun in #1583
  • M8: exports hold what stacked layer effects paint together by @samhyun in #1589
  • M1: compact Frame actions and dev status in the header by @YarilaFox in #1577
  • M6: FigJam .jam files open, as boards (#1342) by @bflatastic in #1586
  • M1: a recovery copy made during a version preview holds the file, not the version shown by @bflatastic in #1588
  • M8: the SVG export chains layer blurs and casts shadows from the blurred layer by @samhyun in #1598
  • M1: From the pen into vector edit mode: Enter and double-click edit instead of drawing on by @bflatastic in #1590
  • M8: Grid auto-placement on an occupancy bitmap by @bflatastic in #1593
  • M9: Comments: mentioned names in comment.people, and mentions in comment.next and comment.prompt by @bflatastic in #1591
  • M8: .fig import: instance expansion without the quadratic walks and copies by @bflatastic in #1594
  • CI: workflows only call craft-common-actions at @main (AGENTS.md; windows-arm64 unpinned) by @dylanmtaylor in #1587
  • M8: a group's effects reach past what its children paint by @samhyun in #1603
  • M8: hover hit-tests once per pointer move, and a moved auto layout frame keeps its layout by @bflatastic in #1601
  • M8: One unpack budget per .figcraft open by @bflatastic in #1599
  • M8: a server file everyone left stays loaded a minute, so idle join and leave do no disk I/O by @bflatastic in #1606
  • M8: an explicit variables file is refused past 256 MiB or when it isn't a regular file (part of #1114) by @avhn in #1608
  • M8: One depth cap for a whole render, and render threads with room for it by @bflatastic in #1605
  • M8: Deep files import on the browser's 1 MB stack by @bflatastic in #1600
  • M8: A batch keeps one undo snapshot, not one per step by @bflatastic in #1610
  • M8: libraries and plugins larger than the download burst can be downloaded, more slowly by @bflatastic in #1619
  • Docs: retake the README screenshots on current main by @bflatastic in #1623
  • M8: a large selection's overlay and Design panel values are kept for frames where nothing changed by @bflatastic in #1611
  • M8: doc.list gives AI agents and plugins file names, not paths by @bflatastic in #1620
  • Update prompt shows the app icon and accent color instead of a letter by @dylanmtaylor in #1612
  • M8: cap the people a client keeps track of and the deleted ids a session remembers by @bflatastic in #1622
  • M8: effects reach as far under a scaled layer by @samhyun in #1626
  • M8: Opening a file contacts no team library server it names until you check it by @bflatastic in #1621
  • M9: the server compares the operator key by its hash (#1130) by @avhn in #1614
  • M8: A component set's property rows fit the 240 px right panel by @bflatastic in #1629
  • Fix pretend-version testing for update prompts by @dylanmtaylor in #1627
  • M8: Every file a command reads by path is a regular file within a cap by @bflatastic in #1625
  • M3: stored variable and collection references keep their identity (#1613) by @avhn in #1618
  • M10: clarify German gradient, OpenType and startup labels by @markx77 in #1505
  • M0.9: inspect layer trees with selected fields or a compact outline (#996) by @avhn in #1420
  • M8: .fig ZIP image reads share a total byte budget (part of #1076) by @avhn in #1616
  • M8: a patch reads no backdrop past the view's edge by @samhyun in #1633
  • M8: an edit renders where the changed layer paints, its effects' margin once by @samhyun in #1630
  • M0.9: generate shell completions and man pages for figcraft-cli (part of #1396) by @avhn in #1615
  • M8: .fig import budgets four values per compressed canvas byte instead of one (#574) by @ChristopherLinnett in #1636
  • M8: a grouped command whose closure panics leaves the document as before (#1085) by @avhn in #1609
  • M4: an imported file finds an installed family under the other names its fonts give it by @bflatastic in #1628
  • i18n(sv): translate 36 new strings by @kler in #1642
  • Tests: read the docs' examples whatever the checkout's line endings by @bflatastic in #1645
  • M12: create the next board shape already connected by @bflatastic in #1631
  • M8: a drag that only moves the selection shifts what was worked out at its start by @bflatastic in #1640
  • M3: colour variables can be calculated from others, faded or mixed per mode (#1280) by @ChristopherLinnett in #1641
  • M6: figcraft-cli connect publish publishes code connect mappings to a design file by @bflatastic in #1643
  • M6: plugin panels take a slider control by @bflatastic in #1637
  • M6: .fig elbowed and curved connectors without a saved path are routed, not drawn straight by @bflatastic in #1649
  • M6: Plugin widgets have hover styles by @bflatastic in #1634
  • M3: typed and stored variable, collection and mode ids find exactly that object (rest of #1613) by @bflatastic in #1635
  • Docs: one copy of each row and status item, and a check that keeps it so by @bflatastic in #1658
  • M6: pasted layers keep the colours of their shared paint styles by @bflatastic in #1647
  • M6: a pasted image the clipboard doesn't carry shows as missing and is named by @bflatastic in #1648
  • M1: keep sidebar field text in place on focus by @Carbocode in #1651
  • Text style dedupe is O(spans) by @lileeei in #1655
  • bs: Bosnian (bs) interface catalog by @nine-codes in #1652
  • M8: a font's damaged table offsets are skipped instead of wrapping on 32-bit targets (#1125) by @avhn in #1657
  • M8: a drag moving many layers normalises only what sits around them by @bflatastic in #1656
  • M6: .fig connector labels without a saved snapshot are kept, centred on their line by @bflatastic in #1659
  • M6: plugin panels show images by @bflatastic in #1639
  • Server tests: rate limits measured at a clock the tests hold still by @bflatastic in #1662
  • M8: the Design panel and the selection overlays stop going over a large selection every frame by @bflatastic in #1660
  • M6: a long frame name stays on one line in the Export button by @bflatastic in #1661
  • M12: spreadsheet cells paste onto a board as a table by @bflatastic in #1663
  • M12: line ends, dashes, weight and any colour on a board connector's bar by @bflatastic in #1632
  • M5: skipping the Open link notice by command is saved at once by @bflatastic in #1667
  • M3: team library analytics count detached instances by @bflatastic in #1668
  • Live join: a large Welcome still downloading is not given up on at the idle timeout (#1664) by @MarekSpodBiedry in #1675
  • M10: Bosnian catalog covers main's new paste strings by @nine-codes in #1676
  • M9: a team list on figcraft-server, shown in Home ▸ Online, with links that carry no secret (part of #742) by @patlux in #1678
  • M12: stamps stick to the objects they land on, which are highlighted first by @bflatastic in #1671
  • M8: an edit checks only the layers it changed for out-of-range positions and sizes (#1672) by @saimskywalker in #1686
  • M12: board votes say who voted for what, and earlier votes' results are kept by @bflatastic in #1666
  • M8: a control request that times out says whether it was applied (#1673) by @bflatastic in #1692
  • M9: a live session's welcome sends the document compressed (#1665) by @bflatastic in #1693
  • M4: the eyedropper with Cmd/Ctrl+Shift makes a colour style or variable by @bflatastic in #1674
  • M8: commands confined to automation roots reach no server (#1095) by @saimskywalker in #1697
  • M4: editing a stroke's Dash or Gap keeps the rest of its dash pattern (#1681) by @saimskywalker in #1698
  • M3: a collection of this file can be extended by @bflatastic in #1679
  • i18n(fi): translate the 99 UI strings and 23 command labels Finnish lacked by @Janiz-zzz in #1700
  • M5: an Open link action can open in place of the prototype, with Open in new tab off by @bflatastic in #1685
  • M8: the Menu key opens the context menu; stale parity rows corrected by @bflatastic in #1677
  • M11: a widget opens its plugin's panel (plugin API 5) by @bflatastic in #1684
  • M8: a control request can set its own timeout, up to 10 minutes (#1696) by @bflatastic in #1706
  • M4: a stroke's Custom style takes a dash pattern as a comma-separated list (#1681) by @bflatastic in #1712
  • i18n(sv): translate 22 new strings by @kler in #1715
  • M3: library analytics count insertions and show them over time by @bflatastic in #1704
  • M12: boards have 16 more shapes, in grid pickers by @bflatastic in #1705
  • M12: a connector's path can be reshaped by dragging its path handles (#1710) by @bflatastic in #1717
  • M8: search fields in the left panels keep their text in the middle (#1703) by @bflatastic in #1709
  • M4: a dashed line starts and ends with a half-length dash by @bflatastic in #1718
  • M8: Show in folder works in the Flatpak build and selects the file on Linux (#1701) by @bflatastic in #1711
  • M8: text reads only the fallback fonts it draws with by @WiktorKluczny in #1721
  • M1: the Frame tool's Phone presets have the iPhone 17 family (#1691) by @bflatastic in #1720
  • M1: the colour picker's Image tab has a placeholder, a preview and takes a dropped file (#1682) by @bflatastic in #1713
  • Honour Round and Bevel joins on outside rectangle strokes by @Silvertree2010 in #1725
  • M6: SwiftUI and Compose code name a bound variable by its code syntax by @bflatastic in #1716
  • M1: images copied elsewhere paste on the desktop and in the browser by @bflatastic in #1723
  • fix(flatpak): allow reading launcher version pins by @dylanmtaylor in #1722
  • M8: a damaged image is refused with a reason instead of showing as an empty box by @bflatastic in #1724
  • M8: regression tests for one-sided strokes on rounded shapes and XML-forbidden characters in SVG (#1351, #1124) by @bflatastic in #1719
  • M12: a connector end dropped along a side of a shape attaches to that side (#1708) by @bflatastic in #1714
  • M11: widgets draw lines and SVG pictures (plugin API 6) by @bflatastic in #1727
  • M5: the Controller menu names each button as PlayStation and Switch controllers do by @bflatastic in #1726
  • M3: library analytics list how each style and variable is used by @bflatastic in #1730
  • M0.9: document that x/y offset a vector path by its own box by @zral in #1731
  • Reject empty arguments in parse_css color functions by @Silvertree2010 in #1734
  • M4: Dash cap setting for Dash and Custom strokes by @bflatastic in #1728
  • M11: a tap on a plugin panel's button keeps what was typed in its fields by @bflatastic in #1732
  • M12: a connector end on any part of an object with Cmd/Ctrl by @bflatastic in #1733

New Contributors

  • @ChristopherLinnett made their first contribution in #1487
  • @samhyun made their first contribution in #1424
  • @hussain-hz made their first contribution in #1466
  • @Guillergood made their first contribution in #1439
  • @avhn made their first contribution in #1419
  • @Carbocode made their first contribution in #1546
  • @liwaichung-source made their first contribution in #1547
  • @markx77 made their first contribution in #1505
  • @nine-codes made their first contribution in #1652
  • @saimskywalker made their first contribution in #1686
  • @Janiz-zzz made their first contribution in #1700
  • @WiktorKluczny made their first contribution in #1721
  • @zral made their first contribution in #1731
Full Changelog: v0.12.1...v0.13.1

Performance and Compatibility

FigCraft is built primarily in Rust and uses a native desktop interface rather than Electron or an embedded web view. Its document engine is designed to update only the parts of a design that change, which can reduce unnecessary work when editing complex documents.

The project also supports a WebAssembly build, making browser-based use possible. Desktop installers are provided for Windows, macOS, Linux, and FreeBSD, subject to the available release packages.

Its main limitation is maturity. The developers explicitly identify the application as alpha software. Although its core editor and many design features are implemented, the project has not been fully validated against real Figma documents. Importing .fig files is best-effort, and its plugin system uses WebAssembly plugins rather than Figma's native plugin ecosystem.

Live collaboration is also in preview. Users can share a document through the default collaboration server or a self-hosted server, but the project does not yet provide accounts, team management, or a complete cloud workspace.

Privacy also requires attention when sharing. Online sessions upload files to a server, and the shared documents are not end-to-end encrypted. Anyone with an edit link or code can modify the file. Sensitive projects should therefore remain local, use a trusted self-hosted server, or be shared only through a trusted local network.

System Requirements

The project does not publish a single minimum CPU, RAM, or GPU specification. Its documented technical requirements include:

  • Operating systems: Windows, macOS, Linux, and FreeBSD, depending on the available build.

  • Development toolchain: Rust and Cargo for building from source.

  • Web build: WebAssembly support, with Trunk used for the browser build.

  • Storage: Local disk space for the application, design files, and assets.

  • Fonts: System fonts can be used, while the project's separate craft-fonts repository provides additional bundled fonts.

  • Internet connection: Not required for normal offline design work, but needed for online collaboration and other network-dependent workflows.

The easiest installation method is to download an appropriate installer from the project's GitHub releases. Developers who prefer building from source should follow the repository's current setup instructions.

Pros and Cons

Pros

  • Free and open-source under the MIT or Apache-2.0 license.

  • Native application built in Rust without Electron.

  • Works offline without requiring an account.

  • Includes auto layout, components, variants, variables, and design-system tools.

  • Provides advanced vector editing and Boolean operations.

  • Supports interactive prototyping and developer handoff.

  • Exposes design operations through a CLI, JSON control channel, and MCP server.

  • Supports common image, vector, and document export formats.

  • Offers cross-platform desktop builds and a WebAssembly version.

  • Provides a foundation for local and self-hosted collaboration.

Cons

  • Still in alpha and not yet a complete replacement for Figma.

  • Figma document import is best-effort and has not been fully validated against real documents.

  • Does not support Figma's native plugin ecosystem.

  • Multiplayer collaboration remains a preview feature.

  • Lacks mature account, team, and cloud-workspace management.

  • Online sharing is not end-to-end encrypted.

  • Generated code requires review before production use.

  • Building from source requires familiarity with Rust and Cargo.

How to Install

Option 1: Download a Prebuilt Release

  1. Visit the FigCraft GitHub repository.

  2. Open the Releases section.

  3. Download the installer or package appropriate for your operating system.

  4. Install or extract the package according to its format.

  5. Launch FigCraft and create a new design or open an existing .figcraft project.

Prebuilt releases are the most convenient option for users who want to try the application without setting up a development environment.

Option 2: Build from Source

Install Rust and Cargo first, then clone the repository:

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

Start the desktop application in release mode:

cargo run --release -p figcraft

To start the collaboration server separately:

cargo run --release -p figcraft-server

To run the workspace test suite:

cargo test --workspace

The project also provides a CI command for formatting, linting, tests, layering checks, and asset validation:

cargo xtask ci

For additional fonts, clone the shared font repository alongside FigCraft:

git clone https://github.com/storytold/craft-fonts ../craft-fonts

Without the additional font repository, FigCraft can fall back to system fonts. Consult the project's documentation for platform-specific dependencies and further configuration.

Final Verdict

FigCraft is an ambitious open-source design application that combines many of the features expected from a modern UI design tool with the benefits of native software and local-first storage.

Its strongest advantages are its component system, vector editor, prototyping tools, and command-driven architecture. Support for CLI automation and MCP is particularly interesting for developers who want AI agents to generate or modify interface designs as part of their development workflow.

However, its alpha status is a significant consideration. Figma import compatibility, collaboration, and plugin support are not yet mature enough to assume a seamless transition from established design platforms. Users working on critical production projects should evaluate these limitations before adopting it as their primary tool.

FigCraft is a promising choice for developers, designers, and open-source enthusiasts who want a native, offline-capable interface design tool. It is worth testing for new projects and automated design workflows, but teams that depend on Figma's complete collaboration ecosystem should treat it as an emerging alternative rather than a direct replacement.

FigCraft v0.13.1
Free
Software Informations:
Developer:

Operating System:
Windows / macOS / Linux / BSD
Date Added:
2026-10-31T09:12:01.670Z
Categories:

Post a Comment/Report Broken Link: