What's Changed
- #1063: a fill or stroke chosen with characters selected colours just them by @bflatastic in #1075
- Fix font size and horizontal scale after text/group scaling by @lollinoo in #1045
- Type: Proportional Metrics — full-width glyphs on the font's proportional widths,
palt(#966) by @imachus in #1067 - Object: Align, Move, Arrange and other commands that change nothing record no undo step by @dotCooCoo in #1060
- #1032: spot colours defined in Lab keep their Lab values by @bflatastic in #1076
- Build: generated sources are rewritten only when they change by @bobtherobot in #1051
- Gradient mesh: a fill colour recolours the point last clicked (#1050) by @MarekSpodBiedry in #1052
- fix(ui): keep All Tools drawer compact on wide screens by @Ni-zav in #1054
- fix(textwrap): reject malformed explicit object targets atomically by @Ni-zav in #1055
- fix(gradient): reject malformed freeform line index lists by @Ni-zav in #1056
- fix(corners): reject malformed explicit dialog targets by @Ni-zav in #1057
- fix(views): validate saved-view coordinates and rotation by @Ni-zav in #1058
- Tests: the command sweeps no longer skip junk scale, spacing and artboard values by @dotCooCoo in #1059
- EPS: arc and arcn with huge angles no longer hang the import by @dotCooCoo in #1062
- Align: a compound path or selected group that contains the key object stays in place by @dotCooCoo in #1074
- #1068: a .ai read as its PDF part keeps its artboard layout by @bflatastic in #1084
- fix(layers): validate explicit Layer Options targets by @Ni-zav in #1077
- fix(shaper): reject invalid explicit scribble targets by @Ni-zav in #1078
- fix(width): validate every explicit width-point removal index by @Ni-zav in #1079
- fix(ui): show Preferences checkbox outlines in every theme by @Ni-zav in #1080
- Adopt shared docking with panel menus and saved return locations by @skylartaylor in #1090
- #885: every checkbox keeps a visible box at rest by @bflatastic in #1112
- Width points: set and copy refuse a malformed index by @bflatastic in #1113
- #1102: an EPS keeps its page and stacked text strokes through its layers by @bflatastic in #1120
- #1085: the DMG's app passes codesign --strict by @bflatastic in #1121
- Drops: libraries, presets and plug-ins open on a drop, as File › Open opens them by @dotCooCoo in #1083
- Align: a key object needs two or more selected objects by @dotCooCoo in #1088
- Align: Align to Artboard uses the active artboard by @dotCooCoo in #1105
- Align, Reflect and Shear: object.align needs a direction; unknown choices are errors by @dotCooCoo in #1106
- MCP: object.setProps removes the objects it hides or locks from the selection by @dotCooCoo in #1107
- Part of #394: Align and Distribute move pattern tiles when Transform Pattern Tiles is on by @dotCooCoo in #1108
- Object: Lock and Hide › All Artwork Above deselect the objects they lock or hide by @dotCooCoo in #1109
- Swatches: swatch.library.save counts only the swatches the file holds by @dotCooCoo in #1110
- #1095: an artboard's name stays at its corner in a rotated view by @bflatastic in #1122
- #1111: Ctrl+Shift+L, C, R, J and F align paragraphs by @bflatastic in #1127
- Fix #867: macOS file dialogs are sheets, and no dialog runs inside the event handler by @Emlembow in #1099
- #893: Shape Builder merges leave no seams on grids of lines by @NoJuanNobody in #1081
- Type: Proportional Metrics in vertical type — upright glyphs on the font's proportional heights,
vpal(#966) by @imachus in #1082 - Plug-ins: whole-number parameters keep their exact value and stay in range by @webdevtodayjason in #1091
- PDF/.ai import: glyphs spaced each their own way keep their place by @p0lyg0n in #1101
- Direct Selection: drag paths selected whole by an anchor; Alt-copy at any time, snapping by that anchor by @bobtherobot in #1104
- #1129: the toolbar's paint buttons fit its width by @bflatastic in #1134
- #1089: an image copied in a browser pastes as the picture, also from its markup by @bflatastic in #1135
- #788: file.place frames an SVG by its viewBox when crop is given by @bflatastic in #1145
- Part of #812: Ctrl/Cmd and Alt shape a star while it's dragged by @bflatastic in #1146
- #1018: Edit Toolbar opens a drawer beside the toolbar; tools drag in and out by @bflatastic in #1149
- Icons: the Selection arrow is black and Direct Selection's white in every theme by @bflatastic in #1150
- fix(fonts): preserve highlighted font across menu list refreshes by @Ni-zav in #1116
- Fix #662: the Windows installer offers a desktop shortcut by @mateususa in #1128
- #819: more noise removal never gives more paths by @mateususa in #1130
- Lint: clippy -D warnings passes for the wasm32 web build by @dotCooCoo in #1132
- Fix #1140: gradient stops blend colour and opacity apart on the canvas, as the exports do by @Biromedic in #1142
- Fix #1141: SVG import keeps a mask whose art is all hidden, so its object stays hidden by @Biromedic in #1143
- #1139: Shift-click selects several artboards, which move and delete together by @bflatastic in #1154
- Render: a shape far beyond any page is left undrawn, never crashing the app by @bflatastic in #1155
- #1144: Live Corners round corners between curved segments too by @bflatastic in #1159
- #1133: Zig Zag's dialog has sliders and radio buttons, as in Illustrator by @bflatastic in #1160
- #1152: Offset Path opens on the values it was last applied with by @bflatastic in #1166
- #1103: a marquee selects only the objects whose paths it touches by @bflatastic in #1167
- #1151: Preferences › Performance › Linux Display Server opens the window through XWayland, where file drops work by @bflatastic in #1170
- #1111: a selected gradient mesh shows its mesh lines and points by @bflatastic in #1171
- #1111: a blend's spine bends into a curve by @bflatastic in #1174
- #1158: Alt-click on a layer's eye or lock isolates that layer by @bflatastic in #1175
- #1163: Release splits a path of several subpaths into one path each by @bflatastic in #1176
- #1163: MCP render_preview takes an artboard index by @bflatastic in #1177
- MCP: drawing tools describe inherited paint and export text options by @KnottyDyes in #1148
- Reject malformed desktop automation root arguments before startup by @piero-83 in #1157
- Review: house header for the root-argument integration test (#1157) by @bflatastic in #1178
- PDF export: warn when raster effects render below the requested resolution by @KnottyDyes in #1147
- #1163: command_batch can be one undo step by @bflatastic in #1179
- #1163: file.list lists a folder for agents, held to the read root by @bflatastic in #1181
- Type: Thai falls back to a font made for Thai by @bflatastic in #1185
- Type: the caret steps over whole clusters (Thai marks, accents, emoji) by @bflatastic in #1186
- Docs: type parity has one status line again by @bflatastic in #1187
- Type: Thai, Lao, Khmer and Myanmar lines break between words by @bflatastic in #1188
- Font menu: a Thai script filter by @bflatastic in #1190
- Type: Noto Sans Thai from craft-fonts is the Thai fallback, on the web too by @bflatastic in #1191
- Type: the caret and double-click take Thai word by word by @bflatastic in #1195
- Release: embed the current craft-fonts (Thai, Arabic, Chinese) by @bflatastic in #1204
- #1197: Make Compound Path cuts holes where paths overlap by @bflatastic in #1213
- Test: the idle place test waits for the link scan in real time by @bflatastic in #1214
- #1194: Direct3D 12 shaders compile with FXC by @bflatastic in #1215
- #1180: Align aligns the selected anchor points by @bflatastic in #1216
- #955: a move grabbed by an anchor lands it on another anchor by @bflatastic in #1217
- .ai import: copied area type and type on a path keep their own place by @p0lyg0n in #1208
- EPS/.ai import: a font is found by its exact PostScript name before the name is split by @p0lyg0n in #1207
- Part of #1102: type from the text document keeps its line spacing across paragraphs by @DisasterAreaDesigns in #1206
- pt-BR: translate the remaining UI labels and engine messages by @WladmirJunior in #1205
- i18n: complete the Czech (cs) catalog: panels, dialogs, plurals and messages by @Losminek in #1189
- Type: Digits — Default, Arabic, Hindi and Farsi numeral systems (Character panel menu, Middle Eastern options) by @zakariayacine in #1201
- Linux: Automatic draws on the GPU the Wayland compositor draws with by @atoslins in #1200
- perf: large documents (#1172): big selections 100×+, live effects 18×, Pathfinder 11–20×, 41% less undo memory by @arhammusheer in #1173
- Docs: record the large-document performance work (#1173) by @bflatastic in #1240
- fix: 複合パスの外観と塗り規則を修正する #1197 by @haranishi in #1225
- Object: Lock, Transform Each, Perspective and other commands that change nothing record no undo step by @dotCooCoo in #1233
- Part of #394: art moved or duplicated with an artboard follows Transform Pattern Tiles by @dotCooCoo in #1219
- Shape Builder: a line's loose end past a crossing no longer runs out and back in most cases by @dotCooCoo in #1230
- Align: Align to Key Object makes the topmost selected object the key by @dotCooCoo in #1221
- MCP: select.key checks its id, and agents can read the key object by @dotCooCoo in #1222
- Palette: the entry that cancels the key object reads Cancel Key Object by @dotCooCoo in #1224
- Tests: the command sweeps and import fuzz tests fail when a command panics by @dotCooCoo in #1218
- Tests: the envelope export test ignores the PDF's XMP dates and file ID by @dotCooCoo in #1220
- fix: macOSの保存画面に形式選択を追加する #866 by @haranishi in #1235
- Direct Selection: a click on an already selected anchor selects it alone by @zakariayacine in #1237
- Hand and Zoom cursors drawn like the tool cursors (Windows showed the move arrows, no magnifier) by @zakariayacine in #1238
- i18n (cs): Pathfinder Add reads "Sjednotit", plus the remaining looked-up strings by @Losminek in #1226
- Fix Rectangular Grid click options dialog by @FredApps in #1169
- Graph designs and marker designs: Object › Graph › Design… and Marker… by @IHAGI-c in #1092
- Graph Data: Transpose and Switch x/y; | line breaks in labels; pie Legend, Position and Sort by @IHAGI-c in #1115
- Graph Type: Add Drop Shadow and Add Legend Across Top by @IHAGI-c in #1119
- Graph Type: widths past 100%, First Row and First Column in Front, Draw Filled Lines by @IHAGI-c in #1136
- Graphs keep their label formatting when drawn again by @IHAGI-c in #1137
- Graph Data: a worksheet window by @IHAGI-c in #1138
- Preserve SVG data attributes and validate export artboard ranges by @sanyamsingh001 in #989
- Correct Arabic shaping assertions and cover embedded PDF fonts by @sanyamsingh001 in #993
- Fix Pen endpoint picking and commit handle previews by @sanyamsingh001 in #821
- Preserve placed links in editable exports and honor AI artboard options by @sanyamsingh001 in #718
- feat(ui): add horizontal and vertical center align button by @Muratv07 in #1073
- Color params: one scale per CMYK colour, not per component by @japbcoelho in #1249
- MCP: lost replies report uncertainty instead of replaying edits by @KnottyDyes in #1246
- Trace: colour mode keeps close dark tones apart by @japbcoelho in #1247
- Docs: ROADMAP progress for 2026-10-12 by @bflatastic in #1310
- fix: 線の色追加時にゼロ幅を既定値へ戻す #1253 by @haranishi in #1256
- Direct Selection: Shift-click deselects one anchor of a path selected whole by @itrycodinganditsbad in #1263
- fix: Direct Selectionで線分だけを選択・削除する #1278 by @haranishi in #1300
- fix: ロック中と隔離の外側の図形から色を取得する #1251 by @haranishi in #1260
- fix: スポイトの通常カーソルを十字表示から修正する #1269 by @haranishi in #1288
- fix: 動かないアンカー整列でUndo履歴を増やさない #1180 by @haranishi in #1276
- fix: フォントのフルネームを正しい書体へ解決する #1258 by @haranishi in #1267
- fix: Curvature Toolの点表示を整理する #1236 by @haranishi in #1284
- Type: Proportional Metrics bring their kerning —
apknwithpalt,vkrnandvapkwithvpal(#966) by @imachus in #1291 - perf: テクスチャ効果の距離判定を軽くする #1257 by @haranishi in #1265
- fix(packaging): RPMの必須依存を共有ライブラリ能力で宣言 (#1275) by @haranishi in #1290
- G2: add Artistic Film Grain live effect by @Tevinhead in #1282
- fix: Simplify後の選択を更新して点数を表示する #1272 by @haranishi in #1305
- Pen + Alt converts anchors of paths in a selected group (#1273) by @itrycodinganditsbad in #1306
- Part of #394: new and imported documents use the Gridline every and Subdivisions preferences by @dotCooCoo in #1314
- Transform: Transform Again repeats the options of the transform it repeats by @dotCooCoo in #1303
- Layers: Send to Current Layer refuses a hidden or locked current layer by @dotCooCoo in #1301
- Links: Find in Folder… looks for missing linked files in a folder and its subfolders by @dotCooCoo in #1287
- Fix Escape exiting Artboard editing by @LucaLorenz in #1296
- Fix Document Setup → Edit Artboards dialog handoff by @LucaLorenz in #1294
- Validate explicit targets in layer row commands (part of #785). by @FredApps in #1255
- i18n (cs): translate labels that bypass the catalog lookup (file filters, diagnostics, credits, gradients, print marks) by @Losminek in #1259
- i18n: add Hungarian (hu) UI translation by @Skaywalker in #1302
- Artboards: the Artboard tool starts on the active artboard by @dotCooCoo in #1309
- EPS: closepath no longer grows the path past its limit by @dotCooCoo in #1311
- Snap to Point: drag a selection by the anchor pressed near (#1274) by @itrycodinganditsbad in #1313
- Image Trace: an image over 64 megapixels is traced scaled down by @fabian-co in #1315
- Type: Change Case, Smart Punctuation and other commands that change nothing record no undo step by @dotCooCoo in #1316
- ci: upgrade actions to Node 24 to fix deprecation warnings by @dylanmtaylor in #1321
- fix(cad): set the closed bit on DXF SPLINE entities so closed curves import into CAM (#1299) by @rollroyces in #1320
- Docs: merge duplicated table rows, record the rest of 2026-10-12 by @bflatastic in #1323
- Select: Select All skips hidden isolated groups, and menu commands stay within what it selects by @dotCooCoo in #1325
- Plug-ins: whole-number fields keep values past 2^53 exactly as typed by @webdevtodayjason in #1327
- EPS: shading functions in shared arrays no longer hang the import by @dotCooCoo in #1330
- EPS: huge arcs, fine dashes and rectangle arrays in a loop no longer hang the import by @dotCooCoo in #1329
- Paint: fill, stroke, gradient and Appearance panel commands that change nothing record no undo step by @dotCooCoo in #1331
- EPS: loops under a long dash array no longer hang the import by @dotCooCoo in #1332
- Docs: ROADMAP 2026-10-12 adds #1325, #1327, #1329–#1332 by @bflatastic in #1333
- Transparency: opacity mask options that change nothing record no undo step by @dotCooCoo in #1336
- Path: Simplify and Add Anchor Points record no undo step when they change no path by @dotCooCoo in #1337
- perf: bound memory on large documents (#1244) by @arhammusheer in #1245
- EPS: the PostScript reader reads many tiling patterns, spot inks and shadings in linear time by @dotCooCoo in #1341
- Docs: ROADMAP 2026-10-12 adds #1245, #1336, #1337, #1341 by @bflatastic in #1343
- Part of #1286: constant alpha masks are drawn white by @bflatastic in #1359
- Adopt craft-print for desktop printing, preserving Windows 7 by @skylartaylor in #1324
- G16: Korean interface (ko) by @Johau91 in #1352
- PDF import: gradient-filled shapes open as one path, not a clipped rectangle (#1304) by @aguo890 in #1351
- PDF/.ai import: a .ai opens on its artboard with its bleed round it (#1266) by @aguo890 in #1349
- Part of #868: PDFs saved with the reference app's editing data open from it, as .ai files do by @dotCooCoo in #1345
- Layers: art moved into a hidden or locked layer, or hidden by a data set, is deselected by @dotCooCoo in #1355
- perf: deselect hidden and locked objects in linear time by @osaidahmed in #1353
- Part of #394: art moved whole with direct-selected anchors follows Transform Pattern Tiles by @dotCooCoo in #1354
- Part of #394: Appearance of Black › On Screen shows pure CMYK black as RGB black by @aguo890 in #1350
- fix(cad): DXFの制御点SPLINEの閉鎖を読み込みに反映する (#1299) by @haranishi in #1318
- fix(ui): 数値欄のフォーカス時にドラッグ選択を保つ (#1326) by @haranishi in #1339
- fix(pathfinder): 開いた切断線で図形を分割する (#1307) by @haranishi in #1335
- fix: Pathfinderの名前とSVG IDを保持する #1293 by @haranishi in #1308
- Align: Object › Align follows Align To, and the choice is kept across restarts by @dotCooCoo in #1347
- fix: 図形のクリックからアートボードを作成する #1227 by @haranishi in #1252
- feat: 定規の原点を変更・リセットする #1212 by @haranishi in #1250
- Live Corners: with Direct Selection, a click on a widget selects its corner by @zakariayacine in #1239
- Add a Polar Grid canvas-click dialog by @FredApps in #1192
- Part of #1264: an image on %_ lines of a .ai file's editing data is read as an image by @bflatastic in #1364
- PDF export: art beyond 1,000,000,000 pt is left out, so dev and test builds no longer abort by @dotCooCoo in #1360
- Part of #666: Affinity rectangles keep per-corner radii and straight corners by @callmeBalloch in #1369
- Toolbar: centre the tool buttons inside the panel's border by @AyberkA0 in #1363
- i18n(es): add 371 rows other catalogs already had by @diegozpy in #1371
- Part of #1358: the Image Trace section no longer widens the Properties panel by @bflatastic in #1374
New Contributors
- @lollinoo made their first contribution in #1045
- @MarekSpodBiedry made their first contribution in #1052
- @skylartaylor made their first contribution in #1090
- @Emlembow made their first contribution in #1099
- @NoJuanNobody made their first contribution in #1081
- @webdevtodayjason made their first contribution in #1091
- @Biromedic made their first contribution in #1142
- @KnottyDyes made their first contribution in #1148
- @piero-83 made their first contribution in #1157
- @WladmirJunior made their first contribution in #1205
- @Losminek made their first contribution in #1189
- @zakariayacine made their first contribution in #1201
- @atoslins made their first contribution in #1200
- @arhammusheer made their first contribution in #1173
- @FredApps made their first contribution in #1169
- @sanyamsingh001 made their first contribution in #989
- @Muratv07 made their first contribution in #1073
- @itrycodinganditsbad made their first contribution in #1263
- @Tevinhead made their first contribution in #1282
- @LucaLorenz made their first contribution in #1296
- @Skaywalker made their first contribution in #1302
- @rollroyces made their first contribution in #1320
- @Johau91 made their first contribution in #1352
- @aguo890 made their first contribution in #1351
- @osaidahmed made their first contribution in #1353
- @diegozpy made their first contribution in #1371
Full Changelog: v0.9.0...v0.10.0