FigCraft v0.12.1
- Reject non-finite percent strings for lineHeight and letterSpacing by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1274
- Measure distribute span to the group's outermost edge by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1282
- Fix code export printing whole numbers of 2^63 or more as i64::MAX by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1296
- Keep significant digits in SVG matrix scale coefficients by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1317
- Rename component parameters that are strict-mode reserved words by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1323
- Accept a unit typed after a space in number fields by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1326
- fix: Issue #1150 a section's title draws above the labels of frames inside it (#1150) by @Ridzzz0Alam in https://github.com/storytold/figcraft/pull/1276
- Canvas: hover distances go when the pointer leaves the canvas by @bflatastic in https://github.com/storytold/figcraft/pull/1251
- Keep context menu open after a same-frame trackpad tap by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1144
- M8: Copy link to selection in the layer context menu by @watchakorn-18k in https://github.com/storytold/figcraft/pull/1291
- M4: justified text doesn't widen U+200B by @Salah1St in https://github.com/storytold/figcraft/pull/1218
- Text: Backspace removes Thai and other marks one at a time (#1220) by @SusieeTheLinuxUser in https://github.com/storytold/figcraft/pull/1242
- Dialogs start in the folder of the last file picked by @marcoarnulfo in https://github.com/storytold/figcraft/pull/1303
- M9: the hello deadline refuses a connection even when a read times out early by @dotCooCoo in https://github.com/storytold/figcraft/pull/1310
- M0.9: allow literal dash-prefixed CLI filenames by @MMexicann in https://github.com/storytold/figcraft/pull/954
- i18n(pl): native review, catch-up and terminology fixes by @lukasz-sklad in https://github.com/storytold/figcraft/pull/931
- Reject multiple leading '#' in Color::from_hex by @Silvertree2010 in https://github.com/storytold/figcraft/pull/944
- Keep style runs disjoint when inserting text at a run boundary by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1295
- Migrate FigCraft to egui 0.37 by @skylartaylor in https://github.com/storytold/figcraft/pull/1312
- feat: startup update prompt modal and direct self-updating by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1328
- build: pin craft-update to craft-libs main (495e597) by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1347
- build: pin craft-update to craft-libs main (495e597) by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1348
- chore(deps): safe dependency refresh by @aiongg in https://github.com/storytold/figcraft/pull/1352
- command.batch: named step references (
as/$ref) and paths infieldby @kkilchrist in https://github.com/storytold/figcraft/pull/1003 - fig import: a note says how much of the file it covers (#467) by @Hamza0101 in https://github.com/storytold/figcraft/pull/951
- Large
.figfiles keep their layers and their library links (#981) by @Ridzzz0Alam in https://github.com/storytold/figcraft/pull/989 - Web build: Save, Save as and Export arrive as downloads by @Ridzzz0Alam in https://github.com/storytold/figcraft/pull/1010
- M7: missing fonts: follow each font variable's aliases once (#752) by @Nael-Nathanael in https://github.com/storytold/figcraft/pull/1035
- M9: fall back to the Noto symbol and math fonts on Linux (#1156) by @switch87 in https://github.com/storytold/figcraft/pull/1163
- Fix stroke-only boolean operand outlines by @saturngod in https://github.com/storytold/figcraft/pull/1184
- M7: avoid Windows GNU UI Automation crash by @YarilaFox in https://github.com/storytold/figcraft/pull/919
- M9: avoid unnecessary snapshot rewrites and duplicate buffers by @F3R9 in https://github.com/storytold/figcraft/pull/1134
- Review fixes for #1184, #919 and #1134 by @bflatastic in https://github.com/storytold/figcraft/pull/1355
- build: one craft-libs rev for every craft-libs crate (495e597) by @bflatastic in https://github.com/storytold/figcraft/pull/1354
- M5: controller buttons wait while the link notice shows by @dotCooCoo in https://github.com/storytold/figcraft/pull/1349
- fix: Issue #1060 Dash patterns too fine for their path draw solid instead of running out of memory by @Ridzzz0Alam in https://github.com/storytold/figcraft/pull/1278
- Scale down images past 16384 px a side instead of drawing nothing by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1337
- Dev Mode: React + Tailwind page code and Tailwind theme export by @lucasmartins-ai in https://github.com/storytold/figcraft/pull/1011
- refactor: clear SonarCloud new-code issues (S3776, S107) and exclude generated coverage tree by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1353
- Keep synthetic Copy link commands inside the clipboard fence by @skylartaylor in https://github.com/storytold/figcraft/pull/1346
- i18n(ka): shorter Georgian for 13 labels that were cut off by @devius in https://github.com/storytold/figcraft/pull/1339
- Docs: the PNG row names ignore overlapping layers and where include bounding box is offered by @dotCooCoo in https://github.com/storytold/figcraft/pull/1350
- Scale the path of text on a path in transform.scale by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1315
- Scale per-point corner radius of vector layers in transform.scale by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1329
- Fix missing end arrowhead when a closed subpath follows an open one by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1324
- Skip zero-length segments when finding arrowhead direction by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1297
- M4: Thai faces in the text fallback list by @Salah1St in https://github.com/storytold/figcraft/pull/1215
- Add Italian (it) interface language by @CosmoNetinfo in https://github.com/storytold/figcraft/pull/1224
- M7: Noto Sans Thai as a UI fallback when the build embeds it by @Salah1St in https://github.com/storytold/figcraft/pull/1216
- M7: FIGCRAFT_DEFAULT_FONT names the font new text starts in by @Salah1St in https://github.com/storytold/figcraft/pull/1217
- i18n(fr): translate the missing strings and review the draft catalog by @leandrodslv in https://github.com/storytold/figcraft/pull/681
- M7: paste images into selected shapes by @YarilaFox in https://github.com/storytold/figcraft/pull/921
- Fix the system theme mode always drawing light on Linux and the BSDs by @ahmedhosnypro in https://github.com/storytold/figcraft/pull/623
- M4: preserve stroke rings when outlining shapes by @MMexicann in https://github.com/storytold/figcraft/pull/607
- M1: crop image fills on Command/Ctrl resize by @timrrrr in https://github.com/storytold/figcraft/pull/703
- M7: toolbar flyout carets get a wider target clear of their tool (#988) by @muamerETS in https://github.com/storytold/figcraft/pull/1019
- M6: mobile layout (phones and portrait tablets) by @aryann2611 in https://github.com/storytold/figcraft/pull/1209
- M7: find fonts activated through Adobe Fonts on macOS (#298) by @AganzeFelicite in https://github.com/storytold/figcraft/pull/661
- M9: make graphics-startup assertions independent of UI language (#1017) by @bflatastic in https://github.com/storytold/figcraft/pull/1357
- M9: make graphics-startup assertions independent of UI language by @F3R9 in https://github.com/storytold/figcraft/pull/1017
- UI: Route text clipboard writes through egui (#1239) by @SusieeTheLinuxUser in https://github.com/storytold/figcraft/pull/1243
- fix: Issue (#1062) render bounds stop at the depth the renderer draws. by @Ridzzz0Alam in https://github.com/storytold/figcraft/pull/1275
- Name the failing step in batch command errors by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1340
- i18n(sv): translate 38 new strings, use the agreed terms in 93 by @kler in https://github.com/storytold/figcraft/pull/984
- ui: server key field in the Share popover (plus a longer publish reply timeout) by @mojtabajafarzadeh in https://github.com/storytold/figcraft/pull/1299
- i18n: add Vietnamese (vi) interface localization by @sonth87 in https://github.com/storytold/figcraft/pull/1026
- M7: don't save over a file whose images past the budget weren't loaded by @denisg0mes in https://github.com/storytold/figcraft/pull/1314
- M4: CJK kinsoku completed to JIS X 4051 by @midasdf in https://github.com/storytold/figcraft/pull/990
- Vector editing, property copy/paste, dev-mode assets, ArkUI codegen and shape-builder fixes by @culiulemon in https://github.com/storytold/figcraft/pull/1202
- feat(plugin): add saveFile permission with host-owned save dialog by @Dubblbindong in https://github.com/storytold/figcraft/pull/698
- M6: .sketch import (Sketch 48 and newer) by @sarsonj in https://github.com/storytold/figcraft/pull/1021
- M7: offer the installed styles of an embedded font family (#1246) by @AganzeFelicite in https://github.com/storytold/figcraft/pull/1294
- M10: Thai UI fonts and a Thai draft catalog by @watchakorn-18k in https://github.com/storytold/figcraft/pull/1287
- M12: boards dot grid, re-attaching connector ends, curved connectors by @bflatastic in https://github.com/storytold/figcraft/pull/1249
- M12: board timer and voting sessions by @bflatastic in https://github.com/storytold/figcraft/pull/1361
- fix: fsync the files directory after creating a new files folder by @peda-cos in https://github.com/storytold/figcraft/pull/1362
- Keep 8-bit alpha when printing colours with Color::to_css by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1359
- M12: board templates and tables by @bflatastic in https://github.com/storytold/figcraft/pull/1363
- Docs: README screenshots of Boards and Dev Mode measurements by @bflatastic in https://github.com/storytold/figcraft/pull/1252
- M11: widgets take text input and a property menu (plugin API 4) by @bflatastic in https://github.com/storytold/figcraft/pull/1365
- M10: branches in live sessions by @bflatastic in https://github.com/storytold/figcraft/pull/1367
- M7: find fonts that macOS font managers activate outside the font folders by @denisg0mes in https://github.com/storytold/figcraft/pull/1309
- Add Korean support by @arksky1 in https://github.com/storytold/figcraft/pull/966
- M4: truncated text fills its last line, keeps truncating when resized, and auto height takes max lines (#1375, #1376, #1377) by @muamerETS in https://github.com/storytold/figcraft/pull/1378
- Save NaN or infinite numbers as 0 so the file reopens by @Silvertree2010 in https://github.com/storytold/figcraft/pull/959
- fix: Issue #1338 an instance-swap property's default menu scrolls by @Ridzzz0Alam in https://github.com/storytold/figcraft/pull/1373
- Capitalise title-case word after an opening apostrophe by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1053
- fix: Issue #1330 Save no longer overwrites changes another app made to the open file by @Ridzzz0Alam in https://github.com/storytold/figcraft/pull/1374
- M7: show a magnified image's pixels on the canvas by @denisg0mes in https://github.com/storytold/figcraft/pull/1371
- follow-up: server publish timeout, key-to-server binding, and "Go to main component" in the context menu by @mojtabajafarzadeh in https://github.com/storytold/figcraft/pull/1369
- web: window.figcraft, the control channel for the page by @youngeuibae in https://github.com/storytold/figcraft/pull/824
- engine: restore tabs closed inside a failed command group by @g1obalworlds in https://github.com/storytold/figcraft/pull/1133
- Keep full precision when converting px to rem in code export by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1366
- Transliterate non-ASCII layer names into code-export class names by @lileeei in https://github.com/storytold/figcraft/pull/1372
- M1: a selected unfilled shape drags over a filled layer stacked below it (#1370) by @muamerETS in https://github.com/storytold/figcraft/pull/1384
- .fig export: files Figma imports, with component set properties by @ricardoavilesfoto-collab in https://github.com/storytold/figcraft/pull/1152
- M6: a Vue code target (single-file components) by @phonedu in https://github.com/storytold/figcraft/pull/664
- M5: overlay positions relative to the layer that opens them by @JimKnoxx in https://github.com/storytold/figcraft/pull/650
- perf(canvas): preview cold zoom and page transitions once they run long (M8) by @tylerjenningsw in https://github.com/storytold/figcraft/pull/320
- perf(render): keep glass shapes between renders, fix a glass seam (#256) by @Nael-Nathanael in https://github.com/storytold/figcraft/pull/287
- M6: export variables as Dart constants for Flutter by @ijashuzain in https://github.com/storytold/figcraft/pull/726
- M6: export as Android Vector Drawable (XML) by @StrajnarFilip in https://github.com/storytold/figcraft/pull/840
- M1: LCH and OKLCH models in the colour picker by @mateusvillain in https://github.com/storytold/figcraft/pull/827
- ci: require nextest 0.9.150 by @skylartaylor in https://github.com/storytold/figcraft/pull/1395
- refactor: shared module layout (craft-contrib#20) by @aiongg in https://github.com/storytold/figcraft/pull/1394
- fix(ui): dropdown menus grow back after a search with no matches by @aiongg in https://github.com/storytold/figcraft/pull/1429
- Speed up raster export: faster blur and spread passes by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1437
- Windows installation policy: FigCraft by @Jeremy8776 in https://github.com/storytold/figcraft/pull/1399
- Enforce Rust coding standards via Clippy by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1403
- Grant network access so update checks can reach GitHub by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1471
- @watchakorn-18k made their first contribution in https://github.com/storytold/figcraft/pull/1291
- @Salah1St made their first contribution in https://github.com/storytold/figcraft/pull/1218
- @SusieeTheLinuxUser made their first contribution in https://github.com/storytold/figcraft/pull/1242
- @MMexicann made their first contribution in https://github.com/storytold/figcraft/pull/954
- @saturngod made their first contribution in https://github.com/storytold/figcraft/pull/1184
- @F3R9 made their first contribution in https://github.com/storytold/figcraft/pull/1134
- @CosmoNetinfo made their first contribution in https://github.com/storytold/figcraft/pull/1224
- @ahmedhosnypro made their first contribution in https://github.com/storytold/figcraft/pull/623
- @timrrrr made their first contribution in https://github.com/storytold/figcraft/pull/703
- @aryann2611 made their first contribution in https://github.com/storytold/figcraft/pull/1209
- @mojtabajafarzadeh made their first contribution in https://github.com/storytold/figcraft/pull/1299
- @sonth87 made their first contribution in https://github.com/storytold/figcraft/pull/1026
- @denisg0mes made their first contribution in https://github.com/storytold/figcraft/pull/1314
- @midasdf made their first contribution in https://github.com/storytold/figcraft/pull/990
- @culiulemon made their first contribution in https://github.com/storytold/figcraft/pull/1202
- @Dubblbindong made their first contribution in https://github.com/storytold/figcraft/pull/698
- @sarsonj made their first contribution in https://github.com/storytold/figcraft/pull/1021
- @peda-cos made their first contribution in https://github.com/storytold/figcraft/pull/1362
- @arksky1 made their first contribution in https://github.com/storytold/figcraft/pull/966
- @youngeuibae made their first contribution in https://github.com/storytold/figcraft/pull/824
- @g1obalworlds made their first contribution in https://github.com/storytold/figcraft/pull/1133
- @ricardoavilesfoto-collab made their first contribution in https://github.com/storytold/figcraft/pull/1152
- @ijashuzain made their first contribution in https://github.com/storytold/figcraft/pull/726
- @Jeremy8776 made their first contribution in https://github.com/storytold/figcraft/pull/1399
Full Changelog: https://github.com/storytold/figcraft/compare/v0.11.2...v0.12.1
FigCraft v0.11.2
- test: explain the discarded reads in the fake servers (SonarCloud rust:S7450) by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1221
- packaging: bash test and function hygiene (SonarCloud S7688, S7679, S7682, S131, S7677) by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1201
- packaging: use [[ for bash conditional tests (SonarCloud S7688) by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1225
- CI: one test binary per crate, nextest, line tables only by @aiongg in https://github.com/storytold/figcraft/pull/1208
- Packaging: pin the signing client and appimagetool, and check their hashes by @aiongg in https://github.com/storytold/figcraft/pull/950
- Tests: paragraph indent test no longer depends on test order by @aiongg in https://github.com/storytold/figcraft/pull/1227
- CI: shared gate workflow; FreeBSD nightly and on release by @aiongg in https://github.com/storytold/figcraft/pull/1206
- Docs: roadmap entries for the community PRs in #507, #510, #529 and #530 by @bflatastic in https://github.com/storytold/figcraft/pull/587
- i18n: a missing translation fails no check; cargo xtask i18n-report lists them by @aiongg in https://github.com/storytold/figcraft/pull/1228
- M6: Dev Mode tail: imports in layer trees, compare with versions, an inspect-only canvas by @bflatastic in https://github.com/storytold/figcraft/pull/538
- ci(sonar): stop cancelling main-branch runs so coverage is published by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1231
- M12: Boards — a collaborative whiteboard file kind by @bflatastic in https://github.com/storytold/figcraft/pull/1229
- PDF: write with craft-libs' krilla, which bounds decoded PNGs by @aiongg in https://github.com/storytold/figcraft/pull/1240
- chore: resolve SonarCloud maintainability issues by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1241
- Community batch r2-1: 63 reviewed PRs by @bflatastic in https://github.com/storytold/figcraft/pull/1244
- Cap the issue list returned by Document::validate by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1187
- Strip bidi control characters from names and report reasons by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1192
- Regression test for #237 by @skylartaylor in https://github.com/storytold/figcraft/pull/1197
- M3: instance-swap properties in the Dev Mode component playground by @marcoarnulfo in https://github.com/storytold/figcraft/pull/1199
- Control server: wait after a failed accept instead of retrying at once by @oracola91 in https://github.com/storytold/figcraft/pull/1212
- M5: a top-level frame taller than the device scrolls without an overflow setting by @seltzdesign in https://github.com/storytold/figcraft/pull/1232
- Fix duplicate SVG ids when a layer name matches a generated id by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1238
- engine: fill rules as vector.fillRule and vector.reverseLoop by @yelintong in https://github.com/storytold/figcraft/pull/740
- M1: write grid track sizes in .fig export (#465) by @xiaou61 in https://github.com/storytold/figcraft/pull/904
- Keep a solid paint's own opacity when binding a colour variable by @Silvertree2010 in https://github.com/storytold/figcraft/pull/948
- fix(ui): keep the style picker open while editing a style's colour by @kollakek1 in https://github.com/storytold/figcraft/pull/976
- Fix invisible dropdown options in the light theme by @Ridzzz0Alam in https://github.com/storytold/figcraft/pull/983
- fix: = zooms in, matching - zooming out (#973) by @Ridzzz0Alam in https://github.com/storytold/figcraft/pull/986
- M7: keep keyboard focus inside the Interface size menu by @YarilaFox in https://github.com/storytold/figcraft/pull/1014
- M1: a selected unfilled shape drags from inside its box (#910) by @muamerETS in https://github.com/storytold/figcraft/pull/1018
- fix(engine): show the Pen's Shift 45° step in its preview line (#970) by @vxMacDev in https://github.com/storytold/figcraft/pull/1023
- M1: individual corner fields sit at their corners, each with its own icon (#1002) by @muamerETS in https://github.com/storytold/figcraft/pull/1030
- Treat U+2007 FIGURE SPACE as non-breaking in line breaking by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1031
- M8: save-format tests keep their temp folders apart by @MortenHusted in https://github.com/storytold/figcraft/pull/1032
- M3: a variant switch takes the new variant's resizing unless the instance set its own by @MortenHusted in https://github.com/storytold/figcraft/pull/1033
- M6: SVG import fills open subpaths the way SVG does by @MortenHusted in https://github.com/storytold/figcraft/pull/1034
- M3: a variable mode set on a layer inside an instance is an override by @MortenHusted in https://github.com/storytold/figcraft/pull/1037
- Keep
not <var>from reading back as a variable named "not …" by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1041 - M3: style links given in a call apply after its values by @MortenHusted in https://github.com/storytold/figcraft/pull/1042
- M3: a swapped nested instance keeps its outer main's overrides by @MortenHusted in https://github.com/storytold/figcraft/pull/1043
- M4: individual stroke weights follow the corner radius like CSS borders by @MortenHusted in https://github.com/storytold/figcraft/pull/1044
- M7: Type settings keeps its width with long labels (#1029) by @AganzeFelicite in https://github.com/storytold/figcraft/pull/1047
- Drop XML-forbidden control characters from live-text SVG export by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1052
- M5: prototype actions lay out what they change like the canvas does by @MortenHusted in https://github.com/storytold/figcraft/pull/1135
- Write a final Greek sigma in lower-case text layout by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1142
- Remove all leftover temp files at server startup by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1145
- Guard file generation increments against u64 overflow by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1146
- Restrict a pre-existing data directory to 0700 by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1147
- Bound the library/plugins close drain with a deadline by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1149
- Never drop Sync events when the live inbox is full by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1151
- Match widget data check depth to serde_json's recursion limit by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1153
- FreeBSD: package the aarch64 cross build (craft-common-actions#39) by @zuujiscom in https://github.com/storytold/figcraft/pull/1158
- M0.9: figcraft-cli export names files as the app's export does (#1154) by @switch87 in https://github.com/storytold/figcraft/pull/1160
- M0.9: --help and -h after a figcraft-cli subcommand print the usage (#1155) by @switch87 in https://github.com/storytold/figcraft/pull/1161
- Reject non-finite coordinates in control-channel ui.input by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1164
- Make SVG unique_id linear for repeated layer names by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1165
- M7: Cmd/Ctrl+S saves while a panel field has the keyboard (#1157) by @switch87 in https://github.com/storytold/figcraft/pull/1166
- Refuse library versions that leave no newer one to publish by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1169
- Never overwrite a file's log when it can't be read by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1171
- M8: the unsaved-changes question on close offers Save (#1170) by @switch87 in https://github.com/storytold/figcraft/pull/1173
- Keep the hello size limit until a connection is admitted by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1175
- Enforce per-address storage caps per IPv6 /64, /56 and /48 by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1178
- Refuse text.loadFont path for plugins by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1181
- Shut kicked and removed connections when their close can't be queued by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1182
- Enforce an absolute pre-hello deadline against ping slowloris by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1183
- Make is_ancestor fail closed on deep or looping parent chains by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1185
- Stop stale next_id from making pastes overwrite existing nodes by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1186
- M4: vector edit transform box around points of several layers by @marcoarnulfo in https://github.com/storytold/figcraft/pull/1189
- Refuse non-local library paths in the library Cache by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1190
- Deny library.publishToServer to plugins by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1191
- Accept a version string for the plugin manifest api field by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1195
- Don't run the expiry sweep from offline CLI commands by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1196
- fill/stroke props: accept "none" and null as no paint by @lileeei in https://github.com/storytold/figcraft/pull/1198
- The colour picker's eyedropper applies the colour to the paint the picker edits (Reported in storytold/vectorcraft#3342) by @marcoarnulfo in https://github.com/storytold/figcraft/pull/1200
- Honour even-odd fill rule when hit testing vectors by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1230
- M5: one presentation tab per page of a file by @JimKnoxx in https://github.com/storytold/figcraft/pull/660
- M1: say that the automation roots reach only the headless side (#835) by @xiaou61 in https://github.com/storytold/figcraft/pull/905
- Keep literal true/false distinct from variables named true/false by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1038
- M6: Dev Mode measurements kept on the canvas, a read-only layers panel by @bflatastic in https://github.com/storytold/figcraft/pull/1248
- variable.export css: number lengths in px by @lucasmartins-ai in https://github.com/storytold/figcraft/pull/1008
- Show a boolean property's default on the main component's bound layers by @kkilchrist in https://github.com/storytold/figcraft/pull/1006
- MCP: inspect_document answers within what a client can read by @Hamza0101 in https://github.com/storytold/figcraft/pull/915
- node.reparent: index is the layer's final position by @kkilchrist in https://github.com/storytold/figcraft/pull/1005
- node.set: accept
pathto replace a vector's geometry by @kkilchrist in https://github.com/storytold/figcraft/pull/1004 - data.fill and text.fit: fill copies of a frame from rows of data by @lucasmartins-ai in https://github.com/storytold/figcraft/pull/1009
- chore: drop redundant 'static lifetimes (Sonar S8863) by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1254
- fix(security): prevent symlink traversal in asset walker, safe cert tmpdir, and safe icon copy by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1255
- fix(security): owner-only recovery permissions, linear cli export suffixing, and web noopener by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1256
- fix(security): bound decoration steps, text-on-path elements, and rename expansions by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1257
- fix(security): cap COLR layers, PNG glyph dimensions, and layout cache capacity by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1264
- fix(security): linear docprops reordering and deduplicate restored deletion nodes by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1258
- Clamp control-channel document.inspect depth to 64 by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1162
- Convert text decoration colour in colour profile conversion by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1247
- Clip Inside/Outside strokes by the shape's even-odd fill rule by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1253
- Validate image member names when reading .figcraft archives by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1148
- Clear plugin settings when a plugin id is re-registered by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1159
- Restore the clipboard when a command fails and is rolled back by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1167
- Cap layout.setTrack track count at MAX_TRACKS by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1168
- Keep wrong join-code streak when a correct code is tried by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1174
- Check SVG nesting depth after DTD entity expansion by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1177
- Count scalar kiwi fields against the decoded-value budget by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1188
- Require a per-client secret to resume a collab client id by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1193
- security: linear vector import, stroking and rounding, validation, and cyclic dev snapshots by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1306
- Merge 13 open PRs (tested batch) by @aiongg in https://github.com/storytold/figcraft/pull/1311
- M3: apply and detach color variables from Selection colors by @dotCooCoo in https://github.com/storytold/figcraft/pull/1273
- M6: Dev Mode refuses edits from dropped files, the Pages list and the Assets panel by @dotCooCoo in https://github.com/storytold/figcraft/pull/1277
- M3: bind variables to a text style's fields from the style editor by @dotCooCoo in https://github.com/storytold/figcraft/pull/1281
- M3: style variable pickers offer only variables scoped to the field by @dotCooCoo in https://github.com/storytold/figcraft/pull/1283
- M3: apply variables to a text layer's font family and font style by @dotCooCoo in https://github.com/storytold/figcraft/pull/1284
- M4: corner smoothing on polygons and stars by @dotCooCoo in https://github.com/storytold/figcraft/pull/1286
- M1: the iOS button next to Corner smoothing sets 60% by @dotCooCoo in https://github.com/storytold/figcraft/pull/1288
- Docs: parity rows for mouse-trigger delays, outline options and missing fonts by @dotCooCoo in https://github.com/storytold/figcraft/pull/1293
- M4: the Text on a path tool by @dotCooCoo in https://github.com/storytold/figcraft/pull/1298
- M4: text put on a path takes the path's fill and effects by @dotCooCoo in https://github.com/storytold/figcraft/pull/1301
- M5: a notice before a prototype's Open link leaves for a website by @dotCooCoo in https://github.com/storytold/figcraft/pull/1304
- M7: with Contents only on, a slice in a frame or group exports only that container by @dotCooCoo in https://github.com/storytold/figcraft/pull/1305
- M7: the export settings name Ignore overlapping layers and offer Include bounding box for text layers only by @dotCooCoo in https://github.com/storytold/figcraft/pull/1307
- Follow-ups from the #1311 review: link notice clicks, variable scopes, corner tooltip by @aiongg in https://github.com/storytold/figcraft/pull/1316
- @aiongg made their first contribution in https://github.com/storytold/figcraft/pull/1208
- @oracola91 made their first contribution in https://github.com/storytold/figcraft/pull/1212
- @seltzdesign made their first contribution in https://github.com/storytold/figcraft/pull/1232
- @xiaou61 made their first contribution in https://github.com/storytold/figcraft/pull/904
- @kollakek1 made their first contribution in https://github.com/storytold/figcraft/pull/976
- @Ridzzz0Alam made their first contribution in https://github.com/storytold/figcraft/pull/983
- @zuujiscom made their first contribution in https://github.com/storytold/figcraft/pull/1158
- @switch87 made their first contribution in https://github.com/storytold/figcraft/pull/1160
- @lileeei made their first contribution in https://github.com/storytold/figcraft/pull/1198
- @lucasmartins-ai made their first contribution in https://github.com/storytold/figcraft/pull/1008
- @kkilchrist made their first contribution in https://github.com/storytold/figcraft/pull/1006
- @dotCooCoo made their first contribution in https://github.com/storytold/figcraft/pull/1273
Full Changelog: https://github.com/storytold/figcraft/compare/v0.10.0...v0.11.2
FigCraft v0.10.0
[!NOTE] FreeBSD aarch64 is dropped from this release. We had to cut releases, and we cannot build this target within the 5-hour CI limit for any of the Craft apps, so we are dropping it for now. This is a known blocker, flagged for a future fix in storytold/craft-common-actions#39. FreeBSD x86_64 and every other platform are included.
- security: enforce HTTPS on curl downloads (SonarCloud S6506) by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1016
- ci: pin GitHub Actions to full commit SHA (SonarCloud S7637) by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1015
- README: the app icon above the title by @bflatastic in https://github.com/storytold/figcraft/pull/1049
- Use chrono instead of hand-rolled UTC conversion by @dylanmtaylor in https://github.com/storytold/figcraft/pull/975
Full Changelog: https://github.com/storytold/figcraft/compare/v0.9.0...v0.10.0
FigCraft v0.9.0
[!NOTE] FreeBSD aarch64 is dropped from this release. We had to cut releases, and we cannot build this target within the 5-hour CI limit for any of the Craft apps, so we are dropping it for now. This is a known blocker, flagged for a future fix in storytold/craft-common-actions#39. FreeBSD x86_64 and every other platform are included.
- docs: add SonarCloud and CodeRabbit badges to README by @dylanmtaylor in https://github.com/storytold/figcraft/pull/820
- Skip CodeRabbit reviews on Dependabot PRs by @echelon in https://github.com/storytold/figcraft/pull/937
- Reject malformed alpha and extra args in Color::parse_css by @Silvertree2010 in https://github.com/storytold/figcraft/pull/911
- Strip default port in same_server when the address has a path by @Silvertree2010 in https://github.com/storytold/figcraft/pull/938
- Fix trim_num saturating whole numbers beyond i64 range by @Silvertree2010 in https://github.com/storytold/figcraft/pull/943
- Fix Title Case restarting mid-word across styled runs in SVG export by @Silvertree2010 in https://github.com/storytold/figcraft/pull/958
- Keep open subpaths open in ReverseSubpaths::reverse_subpaths by @Silvertree2010 in https://github.com/storytold/figcraft/pull/961
- Reject non-hex characters in Local::from_link token by @Silvertree2010 in https://github.com/storytold/figcraft/pull/929
- M7: show the chosen filename for saved documents by @YarilaFox in https://github.com/storytold/figcraft/pull/935
- M7: dismiss comment draft when switching tools by @YarilaFox in https://github.com/storytold/figcraft/pull/939
- M7: a document dropped on the canvas opens as a new file (#916) by @AganzeFelicite in https://github.com/storytold/figcraft/pull/928
- #903: Combine as variants in the context menu and Design panel; Add variant on a lone component by @RiceDee in https://github.com/storytold/figcraft/pull/908
- ui: keep the current page scrolled into view in the pages list (#930) by @SiadeLucas in https://github.com/storytold/figcraft/pull/933
- #903 follow-up: name new component sets from the variant path, not the first property by @RiceDee in https://github.com/storytold/figcraft/pull/909
- test(ui-egui): idle harness scans system fonts before its first frame by @RiceDee in https://github.com/storytold/figcraft/pull/907
- feat(window): adopt shared craft-window for Linux decorations (depends on craft-libs#217) by @dylanmtaylor in https://github.com/storytold/figcraft/pull/971
- @RiceDee made their first contribution in https://github.com/storytold/figcraft/pull/908
- @SiadeLucas made their first contribution in https://github.com/storytold/figcraft/pull/933
Full Changelog: https://github.com/storytold/figcraft/compare/v0.8.0...v0.9.0
FigCraft v0.8.0
- Community batch 16: canvas label rename, View toggles kept, missing fonts, macOS glyphs (4 PRs) + rename selects the name by @bflatastic in https://github.com/storytold/figcraft/pull/785
- M7: list the fonts a file uses that aren't installed (#752) by @Nael-Nathanael in https://github.com/storytold/figcraft/pull/758
- M8: draw the macOS shortcut glyphs the UI font lacks by @JimKnoxx in https://github.com/storytold/figcraft/pull/762
- M1: double-click a frame's name on the canvas to rename it (#757) by @StrajnarFilip in https://github.com/storytold/figcraft/pull/766
- Keep View toggles such as Rulers in the preferences by @Silvertree2010 in https://github.com/storytold/figcraft/pull/385
- Community batch 17: glass labels, pencil preview, prototype delete fix, presenter menus, French catalog, Home search (6 PRs) by @bflatastic in https://github.com/storytold/figcraft/pull/788
- Search Home files and templates by @YarilaFox in https://github.com/storytold/figcraft/pull/765
- fix(ui): glass settings: label the light intensity, keep labels in their fields (#256) by @Nael-Nathanael in https://github.com/storytold/figcraft/pull/770
- fix(canvas): the Pencil previews its stroke in its own colour and weight (#256) by @Nael-Nathanael in https://github.com/storytold/figcraft/pull/771
- Use theme tokens in the presenter by @YarilaFox in https://github.com/storytold/figcraft/pull/772
- M9: French catalog at 100% of the strings (still a draft) by @pechnikov2026-star in https://github.com/storytold/figcraft/pull/783
- fix(proto): delete prototype interaction without deleting component (#767) by @Natnael-Dev in https://github.com/storytold/figcraft/pull/776
- M9: Dutch catalog, machine-drafted (nl.toml) by @pechnikov2026-star in https://github.com/storytold/figcraft/pull/787
- M7: quitting on macOS ends the process after saving, avoiding the Touch Bar teardown crash (#781) by @bflatastic in https://github.com/storytold/figcraft/pull/791
- M3: variable.import reads variables outside
metaand never imports nothing silently (#790) by @bflatastic in https://github.com/storytold/figcraft/pull/793 - M1: REST import keeps slot layers and instances' slot content (#792) by @bflatastic in https://github.com/storytold/figcraft/pull/796
- Community batch 18: recovery lock wait (#334), Finnish catalog (2 PRs) by @bflatastic in https://github.com/storytold/figcraft/pull/800
- i18n: add Finnish (fi) interface by @esakom in https://github.com/storytold/figcraft/pull/794
- M8: wait for a recovery folder lock that frees itself (#334) by @ashsajal1 in https://github.com/storytold/figcraft/pull/795
- M9: the other item lists merge one by item when a branch merges (gap 17) by @ashsajal1 in https://github.com/storytold/figcraft/pull/798
- M1: vector.create honours width/height by scaling the path by @phonedu in https://github.com/storytold/figcraft/pull/801
- M3: a bound colour variable's alpha applies once, not squared (#802) by @bflatastic in https://github.com/storytold/figcraft/pull/804
- docs: drop references to competing commercial software by @dylanmtaylor in https://github.com/storytold/figcraft/pull/786
- ci: configure Dependabot for Cargo and GitHub Actions by @dylanmtaylor in https://github.com/storytold/figcraft/pull/825
- Desktop: refuse unknown command-line options instead of ignoring them (#836) by @skylartaylor in https://github.com/storytold/figcraft/pull/844
- Community batch 20: automation roots for the CLI and links, web file opening, CI bump (4 PRs) by @bflatastic in https://github.com/storytold/figcraft/pull/883
- M7: the web build opens files: File ▸ Open, Import and dropped files (#759) by @muamerETS in https://github.com/storytold/figcraft/pull/830
- ci(deps): bump actions/checkout from 4 to 7 in the actions group across 1 directory by @dependabot[bot] in https://github.com/storytold/figcraft/pull/841
- M8: a path in a root reached through a link is told why it is refused by @MortenHusted in https://github.com/storytold/figcraft/pull/819
- cli: confine info, export, convert, render and run to automation roots by @Hamza0101 in https://github.com/storytold/figcraft/pull/839
- M1: wrap errors name the command that was run by @MortenHusted in https://github.com/storytold/figcraft/pull/807
- M3: an explicit paint edit detaches the variable bound to what it changed by @MortenHusted in https://github.com/storytold/figcraft/pull/811
- M3: explicit edits of bound scalar fields detach their variable (#809) by @justinjohn0306 in https://github.com/storytold/figcraft/pull/871
- M3: removing auto layout drops its gap and padding bindings (#810) by @muamerETS in https://github.com/storytold/figcraft/pull/814
- M1: copying text layers puts their text on the clipboard (#808) by @muamerETS in https://github.com/storytold/figcraft/pull/817
- Refuse empty mode lists and blank names in variable.createCollection by @Silvertree2010 in https://github.com/storytold/figcraft/pull/842
- Accept --control=PORT like --control PORT by @Silvertree2010 in https://github.com/storytold/figcraft/pull/848
- M7: CSS borders follow individual stroke sides by @MortenHusted in https://github.com/storytold/figcraft/pull/849
- M3: a refused slot names component.makeSlot by @MortenHusted in https://github.com/storytold/figcraft/pull/850
- M3: effects refuse keys they don't read instead of dropping them by @MortenHusted in https://github.com/storytold/figcraft/pull/851
- Reject server addresses whose port is not all ASCII digits by @Silvertree2010 in https://github.com/storytold/figcraft/pull/869
- Reject non-hex characters inside invite link percent escapes by @Silvertree2010 in https://github.com/storytold/figcraft/pull/876
- Clamp overflowing colour channels to 1 instead of 0 by @Silvertree2010 in https://github.com/storytold/figcraft/pull/875
- Reject non-hex characters in live::parse_color by @Silvertree2010 in https://github.com/storytold/figcraft/pull/878
- Keep multiline layer names inside the SwiftUI/Compose too-deep comment by @Silvertree2010 in https://github.com/storytold/figcraft/pull/829
- M4: toolbar marks share one size and stroke weight; a simpler Slice icon (#737, #738, #739) by @slyim in https://github.com/storytold/figcraft/pull/826
- M7: Preserve active tab and support tab reordering by @YarilaFox in https://github.com/storytold/figcraft/pull/866
- M7: Keep tab strip usable with many files by @YarilaFox in https://github.com/storytold/figcraft/pull/831
- M7: refresh FigCraft brand colors and wordmark by @YarilaFox in https://github.com/storytold/figcraft/pull/880
- fix(pages): Delete deletes the page picked in the Pages list (#859) by @AganzeFelicite in https://github.com/storytold/figcraft/pull/865
- #855: The Search button for the pages doesn't work as expected by @AJMakesStuff in https://github.com/storytold/figcraft/pull/861
- M1: smart-selection drag reordering by @campbellcody in https://github.com/storytold/figcraft/pull/854
- adding individual padding controls in Layout panel by @Ahmed5Emad in https://github.com/storytold/figcraft/pull/832
- fix(text): a line separator breaks the line inside its paragraph (#852) by @AganzeFelicite in https://github.com/storytold/figcraft/pull/867
- M7: a preference to start on the Home screen (#857) by @justinjohn0306 in https://github.com/storytold/figcraft/pull/874
- feat(ui): add the interface size preference (#540) by @leandrodslv in https://github.com/storytold/figcraft/pull/818
- M3: .fig imports keep component property bindings and values by @MortenHusted in https://github.com/storytold/figcraft/pull/847
- M3: instances follow the variable modes their main component sets by @MortenHusted in https://github.com/storytold/figcraft/pull/862
- M3: copied components paste as instances within their file by @MortenHusted in https://github.com/storytold/figcraft/pull/870
- M4: fonts installed while the app runs: text.rescanFonts, text.loadFont, text.refit by @attisvalentin in https://github.com/storytold/figcraft/pull/821
- feat(i18n): Complete Polish translation (pl) by @lukasz-sklad in https://github.com/storytold/figcraft/pull/812
- i18n: Georgian (ka) interface language by @devius in https://github.com/storytold/figcraft/pull/872
- Add Bengali UI Translation by @alrifatsabbir in https://github.com/storytold/figcraft/pull/813
- Place files dropped together on the canvas side by side by @Silvertree2010 in https://github.com/storytold/figcraft/pull/888
- M9: web release draws text again; craft-fonts pin back to the Latin fonts (#885) by @bflatastic in https://github.com/storytold/figcraft/pull/895
- fix(collab-net): allow live sessions above 64 MiB and report accurate transport limits (#857) by @kk376 in https://github.com/storytold/figcraft/pull/889
- Layout grids: Auto line width for columns and rows by @yelintong in https://github.com/storytold/figcraft/pull/881
- M1: nudge while measuring; distances follow, handles hide (#894) by @bflatastic in https://github.com/storytold/figcraft/pull/898
- M1: node.get reports layer data (pluginData) (#879) by @bflatastic in https://github.com/storytold/figcraft/pull/899
- M1: readable disabled and selected text (#890) by @bflatastic in https://github.com/storytold/figcraft/pull/900
- i18n(ka): say how the Georgian catalog was made (AI-assisted, native-reviewed); still a draft by @devius in https://github.com/storytold/figcraft/pull/897
- Add missing Brazilian Portuguese UI translations by @johnpetersa19 in https://github.com/storytold/figcraft/pull/896
- M3: duplicating a main component makes an instance (#892) by @bflatastic in https://github.com/storytold/figcraft/pull/902
- M9: Russian catalog catch-up: the 56 strings added since the review (machine-drafted) by @pechnikov2026-star in https://github.com/storytold/figcraft/pull/901
- @pechnikov2026-star made their first contribution in https://github.com/storytold/figcraft/pull/783
- @Natnael-Dev made their first contribution in https://github.com/storytold/figcraft/pull/776
- @esakom made their first contribution in https://github.com/storytold/figcraft/pull/794
- @ashsajal1 made their first contribution in https://github.com/storytold/figcraft/pull/795
- @muamerETS made their first contribution in https://github.com/storytold/figcraft/pull/830
- @dependabot[bot] made their first contribution in https://github.com/storytold/figcraft/pull/841
- @MortenHusted made their first contribution in https://github.com/storytold/figcraft/pull/819
- @slyim made their first contribution in https://github.com/storytold/figcraft/pull/826
- @AJMakesStuff made their first contribution in https://github.com/storytold/figcraft/pull/861
- @campbellcody made their first contribution in https://github.com/storytold/figcraft/pull/854
- @leandrodslv made their first contribution in https://github.com/storytold/figcraft/pull/818
- @attisvalentin made their first contribution in https://github.com/storytold/figcraft/pull/821
- @lukasz-sklad made their first contribution in https://github.com/storytold/figcraft/pull/812
- @devius made their first contribution in https://github.com/storytold/figcraft/pull/872
- @alrifatsabbir made their first contribution in https://github.com/storytold/figcraft/pull/813
- @kk376 made their first contribution in https://github.com/storytold/figcraft/pull/889
- @yelintong made their first contribution in https://github.com/storytold/figcraft/pull/881
- @johnpetersa19 made their first contribution in https://github.com/storytold/figcraft/pull/896
Full Changelog: https://github.com/storytold/figcraft/compare/v0.7.0...v0.8.0
FigCraft v0.7.0
- ci: add comfortable runtime limits to unbounded jobs by @skylartaylor in https://github.com/storytold/figcraft/pull/397
- M7: home tests wait for the recent files reader instead of a fixed frame count (#351) by @Barzabel in https://github.com/storytold/figcraft/pull/354
- Community batch 1: 22 reviewed fixes by @bflatastic in https://github.com/storytold/figcraft/pull/507
- M7: follow system theme from the first frame by @VanTan666 in https://github.com/storytold/figcraft/pull/262
- M7: a slice's export preview shows the page content under it by @ahmed-226 in https://github.com/storytold/figcraft/pull/265
- M7: double-clicking a page in the Pages list no longer closes the app by @marcoarnulfo in https://github.com/storytold/figcraft/pull/271
- fix(ui): gradient type icons that show their gradient (#256) by @Nael-Nathanael in https://github.com/storytold/figcraft/pull/275
- fix(ui): disable alignment when the selection can't be aligned (#256) by @Nael-Nathanael in https://github.com/storytold/figcraft/pull/276
- fix(pen): show the bezier handles while drawing (#256) by @Nael-Nathanael in https://github.com/storytold/figcraft/pull/277
- fix(engine): Alt-drag copies snap to their original; Cmd+D repeats the step (#256) by @Nael-Nathanael in https://github.com/storytold/figcraft/pull/283
- M1: a press on a corner handle resizes instead of picking the corner-radius handle by @marcoarnulfo in https://github.com/storytold/figcraft/pull/293
- fix(desktop): Windows' first preferred language picks the UI language (#291) by @fede9234 in https://github.com/storytold/figcraft/pull/294
- fix(server): keep each team library version in its own file (#206) by @MarekSpodBiedry in https://github.com/storytold/figcraft/pull/302
- fix(pages): inherit the current page background when adding pages (M1) by @tylerjenningsw in https://github.com/storytold/figcraft/pull/311
- fix(home): recent files notice files deleted while the home screen is open by @rcoenen in https://github.com/storytold/figcraft/pull/318
- fix(home): keep a long path from drawing over the file name in Open files by @patlux in https://github.com/storytold/figcraft/pull/324
- M1: SVG export keeps a nested frame's fill and stroke inside its parent's clip by @marcoarnulfo in https://github.com/storytold/figcraft/pull/327
- M9: a compaction cut short closes the file instead of confirming lost edits (#183) by @Barzabel in https://github.com/storytold/figcraft/pull/340
- M7: the Small caps sample in Type settings draws without a box by @StrajnarFilip in https://github.com/storytold/figcraft/pull/355
- fix(engine): new text is readable on the frame it is drawn in (#362) by @vxMacDev in https://github.com/storytold/figcraft/pull/372
- Copy and paste through the system clipboard in the browser by @mateusvillain in https://github.com/storytold/figcraft/pull/375
- Outline stroke on every selected layer, not just the first by @Silvertree2010 in https://github.com/storytold/figcraft/pull/386
- Keep corner resize cursors diagonal on wide and tall layers by @Silvertree2010 in https://github.com/storytold/figcraft/pull/388
- Keep text selection highlight inside the box at the end of the text by @Silvertree2010 in https://github.com/storytold/figcraft/pull/390
- Fix Send to back leaving layers above siblings across frames by @Silvertree2010 in https://github.com/storytold/figcraft/pull/444
- Community batch 2: 20 reviewed fixes by @bflatastic in https://github.com/storytold/figcraft/pull/510
- Add Japanese labels for templates, recent files, and editor controls by @haranishi in https://github.com/storytold/figcraft/pull/288
- packaging: RPM declares the glibc 2.35 floor, so RHEL 9 refuses it by @tydude001 in https://github.com/storytold/figcraft/pull/328
- collab: refuse sequence numbers a host cannot advance by @midasmatterhorn in https://github.com/storytold/figcraft/pull/343
- doc: name counters stop at u64::MAX instead of overflowing by @midasmatterhorn in https://github.com/storytold/figcraft/pull/344
- Replace every occurrence in edit.findReplace when replacement contains find by @Silvertree2010 in https://github.com/storytold/figcraft/pull/358
- Reject negative or fractional index in effect.set, export.update and export.remove by @Silvertree2010 in https://github.com/storytold/figcraft/pull/384
- M4: hanging punctuation test holds for fonts that kern with x offsets by @rcoenen in https://github.com/storytold/figcraft/pull/471
- M1: Cmd+R rename test sends Ctrl+R only where Ctrl is the command key by @rcoenen in https://github.com/storytold/figcraft/pull/472
- Refuse negative or fractional indexes in page.select and doc.switch by @Silvertree2010 in https://github.com/storytold/figcraft/pull/475
- fix(engine): read the documented gradient shorthand on every route (#252) by @pcastro93 in https://github.com/storytold/figcraft/pull/254
- fix(engine): roll back failed commands during interactions too by @notdezzi in https://github.com/storytold/figcraft/pull/282
- fix(format): exclusive unique staging files for atomic save/export by @notdezzi in https://github.com/storytold/figcraft/pull/284
- M1: open .figcraft files from Finder, Open With and the Dock on macOS by @marcoarnulfo in https://github.com/storytold/figcraft/pull/290
- Count a recovery revision as copied only after its write succeeds by @Silvertree2010 in https://github.com/storytold/figcraft/pull/297
- Keep the redo steps when a failed command batch rolls back (#196) by @MarekSpodBiedry in https://github.com/storytold/figcraft/pull/301
- M1: creating a variable collection no longer closes the app (#224) by @Barzabel in https://github.com/storytold/figcraft/pull/314
- M1: deeply nested layers don't run the layout out of stack (#210) by @Barzabel in https://github.com/storytold/figcraft/pull/330
- M3: renaming a style folder no longer closes the app by @Barzabel in https://github.com/storytold/figcraft/pull/337
- M1: cursor and double-click tests scan the system fonts themselves (#333) by @Barzabel in https://github.com/storytold/figcraft/pull/339
- engine: long digit strings no longer overflow object.opacityKeys by @midasmatterhorn in https://github.com/storytold/figcraft/pull/353
- Community batch 3: 20 reviewed PRs by @bflatastic in https://github.com/storytold/figcraft/pull/529
- Avoid macOS file dialog reentrancy crashes by @justinjohn0306 in https://github.com/storytold/figcraft/pull/253
- M9: Russian interface translation by @VanTan666 in https://github.com/storytold/figcraft/pull/257
- M9: Turkish catalog (reviewed) by @yyamandevrim in https://github.com/storytold/figcraft/pull/263
- M6: .fig import lays out the layers of resized instances by their constraints by @marcoarnulfo in https://github.com/storytold/figcraft/pull/279
- Fix text edits rolling back prior document changes by @justinjohn0306 in https://github.com/storytold/figcraft/pull/280
- fix(format): import explicit variable modes referenced by asset key by @notdezzi in https://github.com/storytold/figcraft/pull/281
- Recovery: wait for the write in flight before an emergency save and before removing copies (#202) by @MarekSpodBiedry in https://github.com/storytold/figcraft/pull/303
- engine: refuse page.move for node ids that are not pages by @midasmatterhorn in https://github.com/storytold/figcraft/pull/310
- M0.9: answer control requests while the window is hidden (#269) by @AganzeFelicite in https://github.com/storytold/figcraft/pull/313
- fix(recovery): keep the version history and branches in recovery copies (#185) by @vxMacDev in https://github.com/storytold/figcraft/pull/331
- M0.9: every hidden window answers control requests, not only the main one (#269) by @patlux in https://github.com/storytold/figcraft/pull/332
- M1: keep a recovery copy until this run has its own (#187) by @Barzabel in https://github.com/storytold/figcraft/pull/336
- Set the native window identity to match the desktop entry by @IanHollow in https://github.com/storytold/figcraft/pull/346
- Make edit.findReplace replace case-insensitive matches by @Silvertree2010 in https://github.com/storytold/figcraft/pull/361
- i18n: Czech (cs) UI catalog (draft) by @Losminek in https://github.com/storytold/figcraft/pull/469
- M7: find Unix user fonts under XDG_DATA_HOME by @IanHollow in https://github.com/storytold/figcraft/pull/474
- M9: Indonesian draft catalog by @RevDonz in https://github.com/storytold/figcraft/pull/477
- Text: colour emoji draw from their own colour tables (#268) by @fede9234 in https://github.com/storytold/figcraft/pull/300
- Community batch 4: 11 reviewed PRs by @bflatastic in https://github.com/storytold/figcraft/pull/530
- fix(ui): scroll a long pages list in its own area so the layers stay in view by @marcoarnulfo in https://github.com/storytold/figcraft/pull/272
- M1: save files automatically (#296) by @AganzeFelicite in https://github.com/storytold/figcraft/pull/305
- M1: leaving Design ends the pen path and goes back to Move by @marcoarnulfo in https://github.com/storytold/figcraft/pull/308
- fix(vector): keep the canvas still when entering vector edit mode and picking a region by @rcoenen in https://github.com/storytold/figcraft/pull/322
- M9: remove someone from a live session by @HaSh3003 in https://github.com/storytold/figcraft/pull/338
- fix(ui): step through the font picker with Up and Down (#345) by @vxMacDev in https://github.com/storytold/figcraft/pull/352
- fix(engine): drag with the Text tool to make a fixed-width text box (#360) by @vxMacDev in https://github.com/storytold/figcraft/pull/363
- Variables export as a download in the browser by @mateusvillain in https://github.com/storytold/figcraft/pull/368
- Let batch steps reference ids created by earlier steps by @edivanteixeira in https://github.com/storytold/figcraft/pull/400
- M0.9: a control line that isn't JSON ends the connection by @bflatastic in https://github.com/storytold/figcraft/pull/589
- Community batch 5: 59 reviewed PRs (#482 and up) by @bflatastic in https://github.com/storytold/figcraft/pull/591
- Skip divider rows in Next page and Previous page by @Silvertree2010 in https://github.com/storytold/figcraft/pull/517
- fix(ui): show error toasts raised by a slow frame for their full 3 s by @volkovskey in https://github.com/storytold/figcraft/pull/518
- Keep a styled layer's fill variable through .fig round trips by @Silvertree2010 in https://github.com/storytold/figcraft/pull/521
- Pen tool: a click's small wobble pulls out no handle by @seun-ipaye in https://github.com/storytold/figcraft/pull/522
- Close a layer's colour picker when the selection changes by @Silvertree2010 in https://github.com/storytold/figcraft/pull/523
- Keep a Rectangle in the smallest synthetic perf documents by @Silvertree2010 in https://github.com/storytold/figcraft/pull/525
- Fix perf failing with 'no card' on small instance counts by @Silvertree2010 in https://github.com/storytold/figcraft/pull/526
- Include empty outlines in no-op shapeBuilder.merge response by @Silvertree2010 in https://github.com/storytold/figcraft/pull/527
- Don't record an undo step for an abandoned empty text box by @Silvertree2010 in https://github.com/storytold/figcraft/pull/531
- Fix cross-axis arrows and drop slot on single-item wrapped lines by @Silvertree2010 in https://github.com/storytold/figcraft/pull/533
- Report changed=false when list indentation is capped by @Silvertree2010 in https://github.com/storytold/figcraft/pull/534
- Fix eraser missing brush crossings narrower than the sample spacing by @Silvertree2010 in https://github.com/storytold/figcraft/pull/536
- fix(rest): keep a text hyperlink destination whole on import by @Hamza0101 in https://github.com/storytold/figcraft/pull/539
- Keep character-range text styles when publishing and placing components by @Silvertree2010 in https://github.com/storytold/figcraft/pull/542
- Refresh linked layers when a library update changes only a style by @Silvertree2010 in https://github.com/storytold/figcraft/pull/545
- Point library style variable bindings at imported library variables by @Silvertree2010 in https://github.com/storytold/figcraft/pull/547
- Keep frame min/max size in .fig export without an auto layout parent by @Silvertree2010 in https://github.com/storytold/figcraft/pull/551
- Keep region loops in ring order when adding a point to a reversed edge by @Silvertree2010 in https://github.com/storytold/figcraft/pull/556
- Keep Mixed line height when Enter is pressed without typing (#439) by @MarekSpodBiedry in https://github.com/storytold/figcraft/pull/558
- Keep per-character text fills in SVG export (#429) by @MarekSpodBiedry in https://github.com/storytold/figcraft/pull/559
- Keep the selected guide selected when an earlier guide is removed (#418) by @MarekSpodBiedry in https://github.com/storytold/figcraft/pull/561
- Keep flows, prototype settings and guides when duplicating a page (#417) by @MarekSpodBiedry in https://github.com/storytold/figcraft/pull/562
- Refuse to create a variable collection with a name that is already taken (#416) by @MarekSpodBiedry in https://github.com/storytold/figcraft/pull/563
- Docs: FIG export guides no longer say variables and style links are omitted (#398) by @MarekSpodBiedry in https://github.com/storytold/figcraft/pull/564
- Colour picker: record only the final colour of a drag in Recent colors (#395) by @MarekSpodBiedry in https://github.com/storytold/figcraft/pull/565
- docs: document perf --instances in the CLI reference (#391) by @MarekSpodBiedry in https://github.com/storytold/figcraft/pull/566
- fix(render): glass looks the same wherever a render cuts it, and samples once where it doesn't bend (#256) by @Nael-Nathanael in https://github.com/storytold/figcraft/pull/576
- Colour names in hex fields (red → FF0000) by @mateusvillain in https://github.com/storytold/figcraft/pull/577
- Fix typography spacing icon scrubbing by @VanTan666 in https://github.com/storytold/figcraft/pull/579
- Fields select their text on focus by @mateusvillain in https://github.com/storytold/figcraft/pull/583
- Cmd/Ctrl+= and - zoom the canvas only, not the whole interface by @marcoarnulfo in https://github.com/storytold/figcraft/pull/584
- i18n: Swedish (sv) interface translation by @kler in https://github.com/storytold/figcraft/pull/482
- Keep layer text and string defaults unchanged in rem code output by @Silvertree2010 in https://github.com/storytold/figcraft/pull/485
- Make empty ranges link and unlink text styles on all characters by @Silvertree2010 in https://github.com/storytold/figcraft/pull/486
- Fix paint bucket leaving a face filled when its region is duplicated by @Silvertree2010 in https://github.com/storytold/figcraft/pull/488
- Leave missing vertices out of region point queries by @Silvertree2010 in https://github.com/storytold/figcraft/pull/489
- Skip missing segments when starting a region loop walk by @Silvertree2010 in https://github.com/storytold/figcraft/pull/490
- Brace variable names in expression text that would not read back by @Silvertree2010 in https://github.com/storytold/figcraft/pull/491
- Keep hidden export roots from enlarging the exported image by @Silvertree2010 in https://github.com/storytold/figcraft/pull/493
- Default CLI render and export to the first non-divider page by @Silvertree2010 in https://github.com/storytold/figcraft/pull/494
- Keep the colour picker and open settings on their item after a removal by @Silvertree2010 in https://github.com/storytold/figcraft/pull/496
- Fix variable.update scopes: null not resetting to all supported by @Silvertree2010 in https://github.com/storytold/figcraft/pull/497
- Keep committed line height and letter spacing in the text style editor by @Silvertree2010 in https://github.com/storytold/figcraft/pull/499
- Save the PDF from File > Export frames to PDF by @Silvertree2010 in https://github.com/storytold/figcraft/pull/502
- Fix panic drawing a selected guide label in a zero-width canvas by @Silvertree2010 in https://github.com/storytold/figcraft/pull/504
- Reveal the comment's page when opening it via ui.set commentOpen by @Silvertree2010 in https://github.com/storytold/figcraft/pull/505
- Fix view jump when returning after a pan released over a panel by @Silvertree2010 in https://github.com/storytold/figcraft/pull/506
- Drop the draw or marquee gesture a canvas double-click starts by @Silvertree2010 in https://github.com/storytold/figcraft/pull/508
- Stop a guide drag released off the canvas from continuing on the next click by @Silvertree2010 in https://github.com/storytold/figcraft/pull/509
- Draw layer blurs up to the documented 10,000 radius by @Silvertree2010 in https://github.com/storytold/figcraft/pull/511
- Keep CMYK conversion inside PDF vector pattern tiles by @Silvertree2010 in https://github.com/storytold/figcraft/pull/512
- Anti-alias rectangular frame clips on fractional device edges by @Silvertree2010 in https://github.com/storytold/figcraft/pull/513
- fix(ui): a scrub is one undo step in the colour picker, prototype and Scale panels (#256) by @Nael-Nathanael in https://github.com/storytold/figcraft/pull/514
- Keep nested frames out of the ready-for-dev list by @marcoarnulfo in https://github.com/storytold/figcraft/pull/515
- Reject layer IDs as targets of page.rename, delete and setBackground by @Silvertree2010 in https://github.com/storytold/figcraft/pull/516
- Cap startup operator problems at the latest 200 by @Silvertree2010 in https://github.com/storytold/figcraft/pull/519
- Give case-colliding variant properties distinct data attributes by @Silvertree2010 in https://github.com/storytold/figcraft/pull/483
- Fix MCP layer screenshots exceeding maxSize by @Silvertree2010 in https://github.com/storytold/figcraft/pull/495
- Keep consecutive spaces in recent file accessible names by @Silvertree2010 in https://github.com/storytold/figcraft/pull/503
- Community batch 5: #312's sturdier zoom-preview test; record four rebased heads by @bflatastic in https://github.com/storytold/figcraft/pull/588
- M1: say why when the window can't open (#261) by @Barzabel in https://github.com/storytold/figcraft/pull/306
- M1: drop shadows under a background blur (#255) by @Barzabel in https://github.com/storytold/figcraft/pull/317
- M1: memory budgets for decoded images and a file's images (#203, #189) by @Barzabel in https://github.com/storytold/figcraft/pull/326
- perf(canvas): refresh full-viewport previews during zoom (M8) by @tylerjenningsw in https://github.com/storytold/figcraft/pull/312
- Community batch 6: 8 reviewed PRs by @bflatastic in https://github.com/storytold/figcraft/pull/598
- perf(ui): look for CJK names in edits, not on every pan by @volkovskey in https://github.com/storytold/figcraft/pull/478
- Merge text runs made identical by style updates by @Silvertree2010 in https://github.com/storytold/figcraft/pull/487
- doc: runs of a file that reach past the text can't overflow a text edit by @midasmatterhorn in https://github.com/storytold/figcraft/pull/528
- Keep cleared range hyperlinks through FIG export and import by @Silvertree2010 in https://github.com/storytold/figcraft/pull/549
- Point duplicated page navigation at the copied frames by @Silvertree2010 in https://github.com/storytold/figcraft/pull/554
- text: scripted text stores CRLF, CR, U+2028 and U+2029 as LF like the editor (#427) by @MarekSpodBiedry in https://github.com/storytold/figcraft/pull/560
- M7: skip special files when scanning system fonts by @IanHollow in https://github.com/storytold/figcraft/pull/568
- Community batch 7: Czech plurals and bounded canvas overscan by @bflatastic in https://github.com/storytold/figcraft/pull/602
- i18n: Czech one/few/other plurals by @Losminek in https://github.com/storytold/figcraft/pull/596
- Reduce blank strips while panning with bounded canvas overscan by @YarilaFox in https://github.com/storytold/figcraft/pull/597
- Community batch 8: drop files anywhere, duplicate fill tests by @bflatastic in https://github.com/storytold/figcraft/pull/606
- M1: a duplicate's fill stays its own (#586) by @Barzabel in https://github.com/storytold/figcraft/pull/600
- Reject negative or fractional index in file.close by @Silvertree2010 in https://github.com/storytold/figcraft/pull/608
- M7: drop files anywhere to open them by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/601
- Docs: roadmap rows for the community fixes from #478 up by @bflatastic in https://github.com/storytold/figcraft/pull/605
- ci: delegate release, freebsd, windows-arm64, packaging-lint to craft-common-actions and add nix check by @dylanmtaylor in https://github.com/storytold/figcraft/pull/176
- ci: standardize FreeBSD workflow on shared FreeBSD 15.1 action by @dylanmtaylor in https://github.com/storytold/figcraft/pull/640
- M1: convert frames to sections and sections to frames (#719) by @bflatastic in https://github.com/storytold/figcraft/pull/721
- Plugins: refuse file and network access through path params and collab by @bflatastic in https://github.com/storytold/figcraft/pull/723
- M3: number variables in the text content picker (#629) by @bflatastic in https://github.com/storytold/figcraft/pull/725
- Community batch 9: the .fig import series (11 PRs by @Skyfuller1303) by @bflatastic in https://github.com/storytold/figcraft/pull/727
- M1: keep explicit instance identity and cached library components in .fig import by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/626
- M1: apply instance overrides by key and order, settle bound paints, keep stroke outline styles by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/627
- M1: let local text values and instance overrides win over a shared text style in .fig import by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/628
- M1: keep grid track sizes in .fig import by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/630
- M1: distinguish unresolved vector segment style metadata in .fig import by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/631
- M1: import editable text on a path from .fig files by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/632
- M1: import image adjustments from .fig files by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/635
- M1: import component slot content from .fig files by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/636
- M1: keep text decoration skip ink from .fig files by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/637
- M1: keep paragraph options from .fig files by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/638
- M1: import labels of straight connectors from .fig files by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/639
- Community batch 10: .fig import and file handling (12 PRs) by @bflatastic in https://github.com/storytold/figcraft/pull/728
- fix(format): open large .fig files within budgets from the file's size by @volkovskey in https://github.com/storytold/figcraft/pull/524
- fix(format): keep vertical trim on .fig import (#466) by @vxMacDev in https://github.com/storytold/figcraft/pull/610
- M1: keep imported file bytes out of the command journal by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/612
- M1: keep per-point stroke joins on .fig import by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/617
- M1: show an import report after opening a file by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/620
- M1: paste layers copied in Figma by @JimKnoxx in https://github.com/storytold/figcraft/pull/647
- M1: .fig import reads images carried in the message (image.dataBlob) by @th0mate in https://github.com/storytold/figcraft/pull/656
- fix(format): numbered lists from .fig files keep their start number (#686) by @Nael-Nathanael in https://github.com/storytold/figcraft/pull/695
- Cap stroke width in the outliner so huge weights don't panic by @Silvertree2010 in https://github.com/storytold/figcraft/pull/697
- Skip layers with children in vector.offset by @Silvertree2010 in https://github.com/storytold/figcraft/pull/711
- M1: save a copy as .fig by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/619
- M1: translate the vector style import notes by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/651
- Community batch 11: editor fixes and the Actions palette (9 PRs) by @bflatastic in https://github.com/storytold/figcraft/pull/733
- M4: Flatten keeps open paths (#377) by @AganzeFelicite in https://github.com/storytold/figcraft/pull/654
- M4: points dropped on a point merge (#401) by @AganzeFelicite in https://github.com/storytold/figcraft/pull/657
- Live font preview on hover in font picker by @Ahmed5Emad in https://github.com/storytold/figcraft/pull/666
- fix(engine): Shift-drag on a selected layer moves the selection (#498) by @Nael-Nathanael in https://github.com/storytold/figcraft/pull/691
- fix(ui): Cmd/Ctrl+V pastes an image copied in another app (#663) by @Nael-Nathanael in https://github.com/storytold/figcraft/pull/693
- Rework Actions Palette with Figma-style Panel and Improved UI by @Ahmed5Emad in https://github.com/storytold/figcraft/pull/707
- fix(doc): thin strokes take a double-click a few pixels away (#646) by @itrejomx in https://github.com/storytold/figcraft/pull/713
- fix(ui): Shift+Cmd/Ctrl+V pastes over the selection and Alt+Cmd/Ctrl+V pastes properties (#716) by @Nael-Nathanael in https://github.com/storytold/figcraft/pull/717
- #710: Resources and Shift+I open the Assets panel by @justinjohn0306 in https://github.com/storytold/figcraft/pull/718
- Community batch 12: engine checks, server limits, web join links, menus and more (13 PRs) by @bflatastic in https://github.com/storytold/figcraft/pull/735
- M0.9: a script runs as one undo step and resolves $step, like command.batch by @phonedu in https://github.com/storytold/figcraft/pull/673
- M9: a damaged generation field no longer drops a log's flushed edits (#408) by @Barzabel in https://github.com/storytold/figcraft/pull/687
- Fix parameterized menu actions and language selection by @YarilaFox in https://github.com/storytold/figcraft/pull/699
- feat(web): join a live session from ?join= in the page URL by @sushi-killer in https://github.com/storytold/figcraft/pull/712
- i18n(sv): translate the command and menu labels and 19 new strings by @kler in https://github.com/storytold/figcraft/pull/599
- Contributors: add Marco Arnulfo by @marcoarnulfo in https://github.com/storytold/figcraft/pull/616
- Refuse edits that leave a layer with non-finite geometry by @Silvertree2010 in https://github.com/storytold/figcraft/pull/625
- ci: switch to shared nix workflow from craft-common-actions by @dylanmtaylor in https://github.com/storytold/figcraft/pull/633
- docs: correct README example plugin count (#392) by @Zaxaerith in https://github.com/storytold/figcraft/pull/641
- Reject negative or fractional index in fill.set and stroke.set by @Silvertree2010 in https://github.com/storytold/figcraft/pull/655
- Make the control server's connection-limit test pass on macOS by @Hamza0101 in https://github.com/storytold/figcraft/pull/670
- M1: a param that names a layer says so when it isn't one by @phonedu in https://github.com/storytold/figcraft/pull/675
- Refuse pages in edit.copy and edit.cut by @Silvertree2010 in https://github.com/storytold/figcraft/pull/680
- fix(server): let message limits follow max_file_mb so files above 64 MiB publish and open by @sushi-killer in https://github.com/storytold/figcraft/pull/705
- Community batch 13: colour picker, text strokes and selection, pages divider, variant reorder (8 PRs) by @bflatastic in https://github.com/storytold/figcraft/pull/736
- fix(render): text strokes follow their alignment (#615) by @vxMacDev in https://github.com/storytold/figcraft/pull/621
- M1: pop up colour picker when adding a fill or stroke (#404) by @krinry in https://github.com/storytold/figcraft/pull/624
- M3: re-read a library file whose stamp is as recent as the read by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/652
- perf(render): work out paint bounds once per render by @volkovskey in https://github.com/storytold/figcraft/pull/667
- fix(ui): drag the line between pages and layers to size the pages list by @volkovskey in https://github.com/storytold/figcraft/pull/668
- Text: selection highlights after a line break start at the line's start, and the empty last line shows by @marcoarnulfo in https://github.com/storytold/figcraft/pull/671
- Hold the duplicate step for a dragged and a nudged copy by @Hamza0101 in https://github.com/storytold/figcraft/pull/672
- M3: drag variant properties to reorder them in the Properties section by @marcoarnulfo in https://github.com/storytold/figcraft/pull/679
- UI: submenu hover fixes (stale state, safe triangle, hover delay) by @Jorrevdb in https://github.com/storytold/figcraft/pull/729
- Docs: roadmap rows for the community fixes from #524 up by @bflatastic in https://github.com/storytold/figcraft/pull/744
- M3: instance layers keep resizing overrides (#731); .fig/REST imports keep Hug (#732) by @bflatastic in https://github.com/storytold/figcraft/pull/745
- M8: confine MCP file access with --automation-read-root/--automation-write-root (#715) by @bflatastic in https://github.com/storytold/figcraft/pull/746
- M8: the control channel answers while the window is minimized (#720) by @bflatastic in https://github.com/storytold/figcraft/pull/751
- Community batch 14: selection colors, spacing, presenter tab, Wayland controls and more (10 PRs) by @bflatastic in https://github.com/storytold/figcraft/pull/753
- M7: test credits column sizing and horizontal scrolling by @IanHollow in https://github.com/storytold/figcraft/pull/347
- M7: align native-density canvas textures to device pixels by @Skyfuller1303 in https://github.com/storytold/figcraft/pull/359
- M1: adding auto layout to an existing frame keeps its size instead of hugging by @Ahmed5Emad in https://github.com/storytold/figcraft/pull/369
- Add a dedicated presentation tab with device and scale controls by @YarilaFox in https://github.com/storytold/figcraft/pull/537
- M3: add Selection colors for mixed selections by @VanTan666 in https://github.com/storytold/figcraft/pull/575
- Restore window controls on Wayland without server decorations by @danielmigueltejedor in https://github.com/storytold/figcraft/pull/592
- Add smart-selection spacing fields and canvas handles by @VanTan666 in https://github.com/storytold/figcraft/pull/595
- node.set: refuse auto layout keys off frames, and font styles the family lacks by @edivanteixeira in https://github.com/storytold/figcraft/pull/603
- M8: Keyboard shortcuts panel closes on the home screen (#548) by @MarekSpodBiedry in https://github.com/storytold/figcraft/pull/749
- M7: use native macOS paste modifiers in tests by @VanTan666 in https://github.com/storytold/figcraft/pull/750
- Docs: parity rows for the 2026-10-17 landings by @bflatastic in https://github.com/storytold/figcraft/pull/756
- M7: translate the .fig import notes by @bflatastic in https://github.com/storytold/figcraft/pull/761
- M1: IME composition in text layers (#747) by @bflatastic in https://github.com/storytold/figcraft/pull/755
- Batch 15: .fig distributed alignment (#552), REST grid tracks, macOS CJK fonts, pen Esc by @bflatastic in https://github.com/storytold/figcraft/pull/775
- Keep space-around and space-evenly alignment on FIG import by @Silvertree2010 in https://github.com/storytold/figcraft/pull/552
- Open only web links and local libraries from a document by @skylartaylor in https://github.com/storytold/figcraft/pull/777
- fix(ui): SVG and PDF export rows offer no size (#256) by @Nael-Nathanael in https://github.com/storytold/figcraft/pull/768
- fix(ui): Rotation gets its own icon, not Corner radius's (#256) by @Nael-Nathanael in https://github.com/storytold/figcraft/pull/769
- @skylartaylor made their first contribution in https://github.com/storytold/figcraft/pull/397
- @Barzabel made their first contribution in https://github.com/storytold/figcraft/pull/354
- @VanTan666 made their first contribution in https://github.com/storytold/figcraft/pull/262
- @ahmed-226 made their first contribution in https://github.com/storytold/figcraft/pull/265
- @marcoarnulfo made their first contribution in https://github.com/storytold/figcraft/pull/271
- @Nael-Nathanael made their first contribution in https://github.com/storytold/figcraft/pull/275
- @MarekSpodBiedry made their first contribution in https://github.com/storytold/figcraft/pull/302
- @tylerjenningsw made their first contribution in https://github.com/storytold/figcraft/pull/311
- @patlux made their first contribution in https://github.com/storytold/figcraft/pull/324
- @StrajnarFilip made their first contribution in https://github.com/storytold/figcraft/pull/355
- @vxMacDev made their first contribution in https://github.com/storytold/figcraft/pull/372
- @mateusvillain made their first contribution in https://github.com/storytold/figcraft/pull/375
- @Silvertree2010 made their first contribution in https://github.com/storytold/figcraft/pull/386
- @haranishi made their first contribution in https://github.com/storytold/figcraft/pull/288
- @tydude001 made their first contribution in https://github.com/storytold/figcraft/pull/328
- @midasmatterhorn made their first contribution in https://github.com/storytold/figcraft/pull/343
- @pcastro93 made their first contribution in https://github.com/storytold/figcraft/pull/254
- @notdezzi made their first contribution in https://github.com/storytold/figcraft/pull/282
- @yyamandevrim made their first contribution in https://github.com/storytold/figcraft/pull/263
- @AganzeFelicite made their first contribution in https://github.com/storytold/figcraft/pull/313
- @IanHollow made their first contribution in https://github.com/storytold/figcraft/pull/346
- @Losminek made their first contribution in https://github.com/storytold/figcraft/pull/469
- @RevDonz made their first contribution in https://github.com/storytold/figcraft/pull/477
- @HaSh3003 made their first contribution in https://github.com/storytold/figcraft/pull/338
- @edivanteixeira made their first contribution in https://github.com/storytold/figcraft/pull/400
- @volkovskey made their first contribution in https://github.com/storytold/figcraft/pull/518
- @seun-ipaye made their first contribution in https://github.com/storytold/figcraft/pull/522
- @Hamza0101 made their first contribution in https://github.com/storytold/figcraft/pull/539
- @kler made their first contribution in https://github.com/storytold/figcraft/pull/482
- @YarilaFox made their first contribution in https://github.com/storytold/figcraft/pull/597
- @Skyfuller1303 made their first contribution in https://github.com/storytold/figcraft/pull/601
- @dylanmtaylor made their first contribution in https://github.com/storytold/figcraft/pull/176
- @JimKnoxx made their first contribution in https://github.com/storytold/figcraft/pull/647
- @th0mate made their first contribution in https://github.com/storytold/figcraft/pull/656
- @Ahmed5Emad made their first contribution in https://github.com/storytold/figcraft/pull/666
- @itrejomx made their first contribution in https://github.com/storytold/figcraft/pull/713
- @phonedu made their first contribution in https://github.com/storytold/figcraft/pull/673
- @sushi-killer made their first contribution in https://github.com/storytold/figcraft/pull/712
- @Zaxaerith made their first contribution in https://github.com/storytold/figcraft/pull/641
- @krinry made their first contribution in https://github.com/storytold/figcraft/pull/624
- @Jorrevdb made their first contribution in https://github.com/storytold/figcraft/pull/729
- @danielmigueltejedor made their first contribution in https://github.com/storytold/figcraft/pull/592
Full Changelog: https://github.com/storytold/figcraft/compare/v0.6.0...v0.7.0
FigCraft v0.6.0
- Everyday editing: number fields, outline options, Hide when publishing, cursors, panel widths, dark pages by @bflatastic in https://github.com/storytold/figcraft/pull/166
- Docs: privacy and online sharing by @bflatastic in https://github.com/storytold/figcraft/pull/167
- Your online files: remembered ownership, Home ▸ Online, tab marks, safe crash recovery by @bflatastic in https://github.com/storytold/figcraft/pull/165
- Starter templates, a Templates section on the home screen and first-run help by @bflatastic in https://github.com/storytold/figcraft/pull/170
- Online sharing: terms for the default server, and a build-time switch for it by @bflatastic in https://github.com/storytold/figcraft/pull/169
- .fig export: instance sizes, variables with modes, shared styles, variable-width strokes by @bflatastic in https://github.com/storytold/figcraft/pull/168
- Sessions test waits for the rename it asserts on by @bflatastic in https://github.com/storytold/figcraft/pull/172
- Core editor: wrapped-line alignment, prototype delays and overlay offsets, frame/group convert, effects on groups, variables in styles, component playground by @bflatastic in https://github.com/storytold/figcraft/pull/171
- fix(geom): enforce the path sample limit while flattening (fixes #204) by @saadkhantareen in https://github.com/storytold/figcraft/pull/217
- fix(engine): preserve the underlying repeat command by @euisuh in https://github.com/storytold/figcraft/pull/212
- fix(control): bound frames and expire queued requests by @euisuh in https://github.com/storytold/figcraft/pull/213
- Fix silent truncation of deep SVG/PDF exports by @YTwsy in https://github.com/storytold/figcraft/pull/218
- fix(mcp): prevent replay after lost attached replies by @euisuh in https://github.com/storytold/figcraft/pull/211
- fix(collab): reject reverting an active live document by @euisuh in https://github.com/storytold/figcraft/pull/214
- fix(plugin): bound logs before allocation and host forwarding by @YTwsy in https://github.com/storytold/figcraft/pull/216
- fix(engine): keep proportions when a linked width or height is typed by @fede9234 in https://github.com/storytold/figcraft/pull/222
- fix(plugin): meter every host call and copied byte by @LabDennis in https://github.com/storytold/figcraft/pull/221
- fix(desktop): use Direct3D 12 on Windows instead of Vulkan by @JeremyYao in https://github.com/storytold/figcraft/pull/226
- fix(text): don't rebuild every time a craft-fonts manifest is missing by @JeremyYao in https://github.com/storytold/figcraft/pull/228
- Implement centralized transactional fix for command batch failures by @giuseeee88 in https://github.com/storytold/figcraft/pull/229
- fix(render): keep one outline depth budget through nested booleans by @justinjohn0306 in https://github.com/storytold/figcraft/pull/231
- feat(packaging): run figcraft-cli from the AppImage with
cli <args>by @muhammadyusuf-kurbonov in https://github.com/storytold/figcraft/pull/232 - Docs: roadmap entries for the community fixes in #211, #213, #214, #216 and #218 by @bflatastic in https://github.com/storytold/figcraft/pull/230
- fix(deps): require ruzstd 0.9.1 for RUSTSEC-2026-0344 by @justinjohn0306 in https://github.com/storytold/figcraft/pull/234
- fix(doc): reject and repair layer cycles and repeated children by @justinjohn0306 in https://github.com/storytold/figcraft/pull/233
- fix(desktop): write preferences owner-only on Unix by @justinjohn0306 in https://github.com/storytold/figcraft/pull/235
- fix(server): never persist a snapshot the reader refuses by @justinjohn0306 in https://github.com/storytold/figcraft/pull/236
- fix(ui): keep wrapped colour picker swatches inside the picker by @justinjohn0306 in https://github.com/storytold/figcraft/pull/237
- M1: full screen (F11 / View > Full screen) by @nathan-fontenele in https://github.com/storytold/figcraft/pull/238
- feat(dev-mode): Leptos code with component properties, instance calls and Code Connect by @justinjohn0306 in https://github.com/storytold/figcraft/pull/240
- fix(svg): budget SVGZ expansion and embedded SVG documents on import by @nathan-fontenele in https://github.com/storytold/figcraft/pull/241
- fix(format): report images a native file lost on loading by @nathan-fontenele in https://github.com/storytold/figcraft/pull/242
- feat(vector): hover, hatch, select and drag filled regions in vector edit mode by @rcoenen in https://github.com/storytold/figcraft/pull/243
- Docs: roadmap entries for the community fixes in #221, #226, #228, #229, #231 to #238 and #240 to #242 by @bflatastic in https://github.com/storytold/figcraft/pull/246
- CI: FreeBSD and Windows ARM64 nightly and on release, not per PR by @echelon in https://github.com/storytold/figcraft/pull/121
- feat(home): recent files as thumbnail cards, with list view and sorting by @rcoenen in https://github.com/storytold/figcraft/pull/249
- @saadkhantareen made their first contribution in https://github.com/storytold/figcraft/pull/217
- @euisuh made their first contribution in https://github.com/storytold/figcraft/pull/212
- @YTwsy made their first contribution in https://github.com/storytold/figcraft/pull/218
- @fede9234 made their first contribution in https://github.com/storytold/figcraft/pull/222
- @LabDennis made their first contribution in https://github.com/storytold/figcraft/pull/221
- @JeremyYao made their first contribution in https://github.com/storytold/figcraft/pull/226
- @giuseeee88 made their first contribution in https://github.com/storytold/figcraft/pull/229
- @justinjohn0306 made their first contribution in https://github.com/storytold/figcraft/pull/231
- @muhammadyusuf-kurbonov made their first contribution in https://github.com/storytold/figcraft/pull/232
- @nathan-fontenele made their first contribution in https://github.com/storytold/figcraft/pull/238
- @rcoenen made their first contribution in https://github.com/storytold/figcraft/pull/243
Full Changelog: https://github.com/storytold/figcraft/compare/v0.5.1...v0.6.0
FigCraft v0.5.1
- Double-clicks into text in groups, and a drag threshold by @bflatastic in https://github.com/storytold/figcraft/pull/160
- Batch 18: text double-click select-all, .fig export that opens elsewhere, live sessions per document, measured text metrics by @bflatastic in https://github.com/storytold/figcraft/pull/161
- Share with a join code: online through the built-in server, or on the local network by @bflatastic in https://github.com/storytold/figcraft/pull/162
- Release prep: 0.5.1 by @bflatastic in https://github.com/storytold/figcraft/pull/163
- Release: retry stapling and its validation on macOS by @bflatastic in https://github.com/storytold/figcraft/pull/164
Full Changelog: https://github.com/storytold/figcraft/compare/v0.5.0...v0.5.1
FigCraft v0.5.0
- App icon: the chameleon, vectorised like the other Crafting Apps by @bflatastic in https://github.com/storytold/figcraft/pull/156
- App mark: the chameleon's curled tail by @bflatastic in https://github.com/storytold/figcraft/pull/157
- Docs: retake the README screenshots with the new app mark by @bflatastic in https://github.com/storytold/figcraft/pull/158
- App icon: full rounded tile on Windows and Linux by @bflatastic in https://github.com/storytold/figcraft/pull/159
Full Changelog: https://github.com/storytold/figcraft/compare/v0.4.0...v0.5.0
FigCraft v0.4.0
- M9: live sessions in the browser; join links and dialog polish by @bflatastic in https://github.com/storytold/figcraft/pull/106
- M9: collaboration polish: unique ids for styles, variables and comments; live text carets by @bflatastic in https://github.com/storytold/figcraft/pull/107
- M4: live boolean editing, arc fields, shape builder on strokes, one-sided widths by @bflatastic in https://github.com/storytold/figcraft/pull/111
- M7: home and moon icon fixes by @bflatastic in https://github.com/storytold/figcraft/pull/110
- M9: standalone collaboration server with share links and permissions by @bflatastic in https://github.com/storytold/figcraft/pull/112
- M3: extended variable collections, variables import/export, gradient stop and variant bindings by @bflatastic in https://github.com/storytold/figcraft/pull/114
- M1: open recent, outlines for the selection, mask outlines by @bflatastic in https://github.com/storytold/figcraft/pull/115
- M6: animated GIF fills and TIFF images by @bflatastic in https://github.com/storytold/figcraft/pull/116
- M9: branches: create, update from main, review and merge by @bflatastic in https://github.com/storytold/figcraft/pull/119
- M9: team libraries on the server; swap library by @bflatastic in https://github.com/storytold/figcraft/pull/117
- M4: text on a path and pattern fills by @bflatastic in https://github.com/storytold/figcraft/pull/118
- M4: stretch and scatter brushes, pen pressure by @bflatastic in https://github.com/storytold/figcraft/pull/120
- M6: code connect: link components to real code by @bflatastic in https://github.com/storytold/figcraft/pull/122
- M8: canvas fixes: boolean hit testing, group drags, frame outlines and slices view, a flaky idle test by @bflatastic in https://github.com/storytold/figcraft/pull/123
- M7: plugin panels and settings by @bflatastic in https://github.com/storytold/figcraft/pull/124
- M9: hosting figcraft-server: wss in the desktop app, server releases, deployment guide by @bflatastic in https://github.com/storytold/figcraft/pull/125
- M7: localization layer by @bflatastic in https://github.com/storytold/figcraft/pull/128
- M8: several windows: New window, open a tab in its own window, per-window control and MCP by @bflatastic in https://github.com/storytold/figcraft/pull/126
- M8: Display P3 honest minimum: gamut warning in the colour picker, soft-proof sRGB by @bflatastic in https://github.com/storytold/figcraft/pull/127
- M2: auto layout behaviour suite and fixes by @bflatastic in https://github.com/storytold/figcraft/pull/130
- M8: Windows QA fixes by @bflatastic in https://github.com/storytold/figcraft/pull/131
- M6: .fig import (best effort) by @bflatastic in https://github.com/storytold/figcraft/pull/132
- M1: selection and transform behaviour suite and fixes by @bflatastic in https://github.com/storytold/figcraft/pull/133
- M4: text behaviour suite: metrics, line height, CJK by @bflatastic in https://github.com/storytold/figcraft/pull/134
- M1: layers panel keyboard (box selection, F2 rename, context menu) and stroke styles by @bflatastic in https://github.com/storytold/figcraft/pull/135
- M3: embedded image colour profiles by @bflatastic in https://github.com/storytold/figcraft/pull/136
- Batch: components, prototyping, styles and variables, frames behaviour suites by @bflatastic in https://github.com/storytold/figcraft/pull/138
- Batch: paint and effects, shapes and vector, .fig import tail, export and inspect, canvas navigation by @bflatastic in https://github.com/storytold/figcraft/pull/139
- Batch: comments and version history, text lists and decorations, docs recompute by @bflatastic in https://github.com/storytold/figcraft/pull/140
- Batch: branch version history, extended collections tail, dev resources links by @bflatastic in https://github.com/storytold/figcraft/pull/141
- M4: vector multi-edit and edit tail by @bflatastic in https://github.com/storytold/figcraft/pull/142
- Batch: layers and assets panels suite, cursor chat and spotlight by @bflatastic in https://github.com/storytold/figcraft/pull/143
- M9: French, German and Brazilian Portuguese draft catalogs by @bflatastic in https://github.com/storytold/figcraft/pull/144
- Batch: plugin widgets, Japanese and Korean catalogs with CJK UI fonts by @bflatastic in https://github.com/storytold/figcraft/pull/145
- Batch: plugin directory on figcraft-server, prototyping tail by @bflatastic in https://github.com/storytold/figcraft/pull/146
- Batch: Latin American Spanish overlay, Simplified Chinese draft catalog by @bflatastic in https://github.com/storytold/figcraft/pull/147
- M11: plugin installs saved at once; directory and library requests off the UI thread by @bflatastic in https://github.com/storytold/figcraft/pull/148
- M1: keyboard shortcut parity suite and bindings by @bflatastic in https://github.com/storytold/figcraft/pull/149
- M6: experimental .fig export by @bflatastic in https://github.com/storytold/figcraft/pull/150
- Batch: rotation origin and place-with-Enter, draft catalogs catch up by @bflatastic in https://github.com/storytold/figcraft/pull/151
- Docs: README showcase screenshots and example files by @bflatastic in https://github.com/storytold/figcraft/pull/152
- M7: headless renders use system fonts by @bflatastic in https://github.com/storytold/figcraft/pull/153
- M9: open hosting mode for a public figcraft-server by @bflatastic in https://github.com/storytold/figcraft/pull/154
- Release prep: 0.4.0 by @bflatastic in https://github.com/storytold/figcraft/pull/155
Full Changelog: https://github.com/storytold/figcraft/compare/v0.3.1...v0.4.0