storytold/figcraft
68.4
Adequate · 7 November 2026
201.1k
lines of production code
Rust
primary language
1
measurement over time
What this system is
Behavioural changes
1 commit (0 fixes) modifying (repo-wide)
A change to existing behaviour in (repo-wide) — 1 commit, 11 files: “feat(plugin): add saveFile permission with host-owned save dialog”.
plugins/examples/export-names · low confidence · unverified
1 commit (0 fixes) modifying apps/figcraft
A change to existing behaviour in apps/figcraft — 1 commit, 2 files: “M7: avoid Windows GNU UIA crash”. Also in this area: 2 commits (1 fix) modifying apps/figcraft; 4 commits (0 fixes) modifying apps/figcraft.
apps/figcraft, crates/vectordrawable, examples · low confidence · unverified
10 commits (2 fixes) modifying crates/render
A change to existing behaviour in crates/render — 10 commits (2 fixs), 9 files: “M1: fix inner shadow bands: shadow from the shape, not the layer's crop; banded rendering matches one piece (\#24)”; “M0.5: layout (auto layout + constraints), format, svg, engine (commands, history, tools, components, styles, variables)”; “Image crop mode: on-canvas crop handles (move, proportional corner scale); Crop defaults to the Fill placement”; and 7 more (refs \#24, \#17, \#35). Also in this area: 1 commit (1 fix) fixing crates/render; 1 commit (0 fixes) modifying crates/render, crates/svg; 1 commit adding/updating tests in crates/render; 15 commits (1 fix) modifying crates/engine.
(repo-wide) · low confidence · unverified
12 commits (0 fixes) modifying crates/render
A change to existing behaviour in crates/render — 12 commits, 22 files: “M8: the progressive JPEG check guards file thumbnails too (\#1517)”; “M3: shadows of images with transparent pixels follow their alpha (\#1289) (\#1509)”; “\#634: region fills drawn by their own helper, and the long region-paint test split by case, for cognitive\_complexity”; and 9 more (refs \#1517, \#1289, \#1509, \#634, \#1061, …). Also in this area: 1 commit (0 fixes) modifying crates/pdf; 19 commits (1 fix) modifying crates/doc; 5 commits (3 fixes) fixing crates/pdf.
crates/pdf · medium confidence · unverified
12 commits (0 fixes) modifying packaging/web
A change to existing behaviour in packaging/web — 12 commits, 4 files: “M9: Home ▸ Online shows the server's team list, and its files open by links without a secret (desktop and browser)”; “packaging/web: say that ?host=parent takes precedence over data-host="page"”; “M9: publish to a server from the browser (Share \> Online and Publish to server in the web build, \#917) (\#1567)”; and 9 more (refs \#917, \#1567, \#1472, \#1511, \#106, …).
packaging/web · medium confidence · unverified
2 commits (0 fixes) modifying plugins/examples
A change to existing behaviour in plugins/examples — 2 commits, 3 files: “M6: plugin widgets have hover styles (gap 6) (\#1634)”; “M11: a widget opens its plugin's panel (plugin API 5) (\#1684)” (refs \#1634, \#1684). Also in this area: 1 commit (0 fixes) modifying crates/plugin, plugins/examples, plugins/sdk.
plugins/sdk · low confidence · unverified
2 commits (0 fixes) modifying plugins/examples, plugins/sdk
A change to existing behaviour in plugins/examples, plugins/sdk — 2 commits, 5 files: “M11: plugin widgets and the plugin panel tail”; “M7: plugin panels and settings (\#124)” (refs \#124).
plugins/examples/swatch-grid · medium confidence · unverified
4 commits (0 fixes) modifying crates/format/src/fig/export, crates/format/src/rest
A change to existing behaviour in crates/format/src/fig/export, crates/format/src/rest — 4 commits, 6 files: “M3: stored variable and collection references keep their identity (\#1613)”; “M5: an Open link action can open in place of the prototype, with Open in new tab off (\#1685)”; “M3: colour variables can be calculated from others, faded or mixed per mode (\#1280)”; and 1 more (refs \#1613, \#1685, \#1280, \#1635). Also in this area: 3 commits (1 fix) modifying crates/format.
crates/format/src/rest · medium confidence · unverified
4 commits (0 fixes) modifying crates/layout
A change to existing behaviour in crates/layout — 4 commits, 6 files: “M2: auto layout depth: min/max UI, ignore auto layout toggle, text baseline alignment, grid tracks and cells (\#3)”; “M0.5: layout (auto layout + constraints), format, svg, engine (commands, history, tools, components, styles, variables)”; “M2: auto layout nesting: one-pass nested hug/fill, coherent sizing, drag across nested frames (\#45)”; and 1 more (refs \#3, \#45). Also in this area: 3 commits (2 fixes) fixing crates/svg; 1 commit (0 fixes) modifying crates/render, crates/svg; 2 commits (1 fix) modifying crates/render, crates/svg; 1 commit (1 fix) fixing crates/svg.
crates/svg/src · low confidence · unverified
4 commits (1 fix) modifying crates/color
A change to existing behaviour in crates/color — 4 commits (1 fix), 7 files: “Image crop mode: on-canvas crop handles (move, proportional corner scale); Crop defaults to the Fill placement”; “Fixes from agent reports: hex colours everywhere, camelCase in/out, unique variable ids, strict batch, ui.key modifiers, export rounding, Fit images, inner shadows on all edges”; “M0.9: MCP server + figcraft-cli, PDF export, web app, release/CI packaging, vector edit mode, workspace lint cleanup”; and 1 more. Also in this area: 1 commit (0 fixes) modifying crates/doc, crates/geom; 1 commit (1 fix) fixing crates/geom; 48 commits (14 fixes) modifying crates/ui-egui.
crates/geom · medium confidence · unverified
4 commits (1 fix) modifying crates/text
A change to existing behaviour in crates/text — 4 commits (1 fix), 6 files: “Text: colour-glyph comments say only what the fonts are documented to carry”; “Text: colour emoji draw from their own colour tables (\#268)”; “Text: colour-glyph comments cite the right source and size”; and 1 more (refs \#268, \#228). Also in this area: 48 commits (14 fixes) modifying crates/ui-egui.
crates/format/src/sketch, crates/text · medium confidence · unverified
48 commits (14 fixes) modifying crates/ui-egui
A change to existing behaviour in crates/ui-egui — 48 commits (14 fixs), 175 files: “M11: plugin installs saved at once; directory and library requests off the UI thread”; “M9: standalone collaboration server with share links and permissions (\#112)”; “M4: live boolean editing, arc fields, shape builder on strokes, one-sided widths (\#111)”; and 45 more (refs \#112, \#111, \#117, \#123, \#131, …). Also in this area: 1 commit (1 fix) fixing crates/mcp; 19 commits (1 fix) modifying crates/doc; 1 commit (0 fixes) modifying apps/figcraft-cli, crates/mcp; 3 commits (2 fixes) fixing crates/mcp.
(repo-wide) · low confidence · unverified
489 commits (32 fixes) modifying (repo-wide)
A change to existing behaviour in (repo-wide) — 489 commits (32 fixs), 14 files: “M3: variable bindings follow paint and effect lists (\#73)”; “Copy the shared house rules into AGENTS.md”; “M1: save files automatically”; and 485 more (refs \#73, \#1588, \#1648, \#1341, \#101, …).
(repo-wide) · low confidence · unverified
7 commits (0 fixes) modifying crates/engine
A change to existing behaviour in crates/engine — 7 commits, 21 files: “Reject fractional index in proto.interaction.remove and set (\#1874)”; “M4: wrap style on a text layer: Auto, Balance and Pretty decide where its lines break (\#1827) (\#1871)”; “perf(engine): look up a component's asset root once per usage report, and skip mode migration without instances (\#1966)”; and 4 more (refs \#1874, \#1827, \#1871, \#1966, \#1892, …). Also in this area: 2 commits (2 fixes) fixing crates/doc; 1 commit (0 fixes) modifying crates/doc; 19 commits (1 fix) modifying crates/doc; 1 commit (1 fix) fixing crates/doc.
crates/doc, crates/mcp/tests · medium confidence · unverified
Fixes
1 commit (1 fix) fixing apps/figcraft-cli
A fix in apps/figcraft-cli — 1 commit (1 fix), 1 file: “fix(cli): M2.1: scope dead-code expectation (\#1816)” (refs \#1816). Also in this area: 5 commits (0 fixes) modifying apps/figcraft-cli.
apps/figcraft-cli/examples · low confidence · unverified
Test coverage
1 commit adding/updating tests in apps/figcraft-server/tests, crates/format/tests; 2 commits adding/updating tests in crates/engine/tests; 2 commits adding/updating tests in crates/text/tests.
Written by cca.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 68.
Lenses
- Code Health 81
- Architecture 95
- Maturity 77
- Readiness 61
- Security 65
- Event Sourcing 100
- Performance 100
Changes since last survey
- 300 commits — 256 feature/other, 44 fixes
By area
- (repo) — 88 commits
- crates/engine — 59 commits
- crates/ui-egui — 49 commits
- (root) — 17 commits
- crates/format — 14 commits
- crates/render — 9 commits
- apps/figcraft-server — 8 commits
- crates/text — 7 commits
- apps/figcraft-cli — 5 commits
- crates/collab — 5 commits
- crates/doc — 5 commits
- apps/figcraft-web — 4 commits
- crates/svg — 4 commits
- crates/mcp — 3 commits
- .github/workflows — 2 commits
- apps/figcraft — 2 commits
- crates/collab-net — 2 commits
- crates/color — 2 commits
- crates/layout — 2 commits
- crates/pathops — 2 commits
Notable commits
- fix: Fix code export printing inf for very large finite numbers (#1757)
- fix: M1: leave ROADMAP unchanged in the sidebar focus fix
- fix: M8: regression tests for one-sided strokes on rounded shapes and XML-forbidden characters in SVG (#1351, #1124) (#1719)
- fix: Merge pull request #1505 from markx77/fix/german-labels
- fix: Merge pull request #1608 from avhn/fix/1114-variables-file-cap
- fix: Merge pull request #1609 from avhn/fix/1085-grouped-panic-rollback
- fix: Merge pull request #1614 from avhn/fix/1130-operator-key-hash
- fix: Merge pull request #1615 from avhn/fix/1396-cli-completions-man-pages
- fix: Merge pull request #1616 from avhn/fix/1076-fig-image-budget
- fix: Merge pull request #1618 from avhn/fix/1613-stored-variable-ids
- fix: Merge pull request #1626 from samhyun/fix/scaled-effect-reach
- fix: Merge pull request #1633 from samhyun/fix/partial-backdrop-at-view-edge
- fix: Merge pull request #1636 from ChristopherLinnett/fix/574-fig-import-large
- fix: Merge pull request #1651 from Carbocode/fix/sidebar-input-focus
- fix: Merge pull request #1657 from avhn/fix/1125-font-offset-overflow
- fix: Merge pull request #1725 from Silvertree2010/fix/h4127-outside-stroke-on-a-rectangle-ig
- fix: Merge pull request #1734 from Silvertree2010/fix/h4145-parse-css-accepts-empty-argument
- fix: Merge remote-tracking branch 'origin/main' into fix/1076-fig-image-budget
- fix: Merge remote-tracking branch 'origin/main' into fix/1085-grouped-panic-rollback
- fix: Merge remote-tracking branch 'origin/main' into fix/1130-operator-key-hash
- …and 280 more
Written by cca.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
storytold/figcraft was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 7 November 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 0b97f3f1801a9b7b96fd7a4f3c0942a3f1a676f3 — the exact code this score is about.
- Scored under rubric-2026.11.2 — the same rubric and the same method as every other entry in this index.
- Measured by Canine Code Analyzer (cca.canine.dev) using cca measure-2026.11.3+preprod-5f8314471808.