Graphite progress report (Q1 2025)

By Keavon Chambers & Hypercube. April 03, 2025.

Graphite, a new open source 2D procedural graphics editor, has spent January-March introducing animations, new nodes, and improved vector editing.

Through these first three months of 2025, we are delighted to have seen many contributions both from new and recurrent contributors; a big thank you for making this ambitious project more of a reality. If you are interested in getting involved or just following development, see the contributor guide and join our Discord.

All Q1 2024 commits may be viewed in this list and all noteworthy changes are detailed below.

Additions

  • Add Path tool support for G/R/S rotation and scaling with a single selected handle (#2180)

  • Change Spline tool behavior to use Path and Spline from Points nodes instead of legacy Spline node (#2200)

  • Add handle visualization during point insertion in the Path tool (#2197)

  • Polish user-created subgraph nodes: imports in the Properties panel; reorder/delete/rename imports/exports (#2105)

  • Add visualization overlays to G/R/S (#2195)

  • Implement extending, joining, and creating new subpaths with the Spline tool (#2203)

  • Give the current snapping target layer(s) an outline (#2224)

  • Experimental vector meshes (#2223)

  • Add an editor preference for touched/enclosed/directional based selection (#2156)

  • Add G/R/S to the Pen tool to control the outgoing segment handle (#2211)

  • Make the transform cage show/hide resize grips as space allows (#2209)

  • Add joining of path endpoints with Ctrl+J in the Path tool (#2227)

  • Add lasso selection mode (#2235)

  • Add support for skewing the transform cage by Ctrl-dragging its edges (#2251)

  • Make primitive shape tools no longer draw transformed unit shapes (#2236)

  • Add pin and cut icons; improve menu bar shortcut labels to choose shortest (commit 0ec91bf)

  • Add new icons to all menu bar entries (commit 0037f51)

  • Add a "Reverse" command to the "Order" menu (#2273)

  • Add Pen and Path tool modes to avoid showing all handles (#2264, commit 7bbbf7f)

  • Add the style of right-angle grid-aligned wires in the graph (#2182)

  • Implement merging pairs of {paths, splines} with the Pen and Spline tools (#2269, #2292, #2319)

  • Add the compass rose translation gizmo to the transform cage (#2277)

  • Add the Select Parent command (#2329)

  • Add draggable skew triangles to the transform cage (#2300)

  • Enable free movement of transform cage edge during skew when Ctrl is held (#2358)

  • Allow the Line tool to drag start and end points of line layers (#2278)

  • Add recursive folder expand/collapse to the Layers panel (#2419)

  • Add sizing gizmos to the Text tool's text area (#2176)

  • New node: Merge by Distance (#2307)

  • Add Path tool support for dragging along an axis when Shift is held (#2449)

  • Add the Spreadsheet panel to inspect node output data (#2442)

  • Experimental animation support (#2443, commit 08a4b69, #2471)

  • New nodes: Mirror, Round Corners, Box Warp, Remove/Generate Handles, Spatial Merge by Distance (#2448)

Fixes

  • Fix isometric dotted grid and avoid antialiasing on dashed line overlays (commit 1c880da)

  • Improve snapping with better snap target names, tooltips, cleaner overlay labels, code cleanup (commit 07601a5)

  • Fix drawing new layers not being put next to nested selected layers (commit 51d1c4e)

  • Remove the Pen tool's anchor square under the cursor when drawing a not-yet-placed segment (commit 3582126)

  • Make the Text tool delete empty text layers when clicking away wth LMB (#2192)

  • Update the bounding box snapping modes to use Align with Edges for edges and alignment (#2185)

  • Remove trailing zeros in rendered SVG path output (commit 1e62af8)

  • Restore Pen tool undo/redo and fix incorrect triggering of undo when changing tools (#2193)

  • Improve older document upgrading compatibility and make node type errors clearer (#2201)

  • Retain transforms of layers when transferred between transformed groups (#2212)

  • In Path tool when dragging a handle, make Alt recover the opposing handle if it's not cubic rather than zero-length (#2196)

  • Remove useful line following cursor in snap overlays during constrained line drawing (#2206)

  • Make the document auto-save system initially restore the last-viewed tab before loading the rest (#2194)

  • Fix blurry overlay rendering when the pixel display ratio isn't 100% (#2204)

  • Fix regressions from #2105 (more control over subgraph imports/exports handling) (#2213)

  • Fix regression where Pen tool resumes segment placement after returning from another tool (#2234)

  • Fix a minor regression in monitor nodes with VectorData (#2237)

  • Fix regression causing pasted images to have a zero-size transform (#2238)

  • Fix Document > Clear Artboards so it doesn't also clear everything else (#2177)

  • Avoid adding an unnecessary Transform node with the TransformChange message (commit 303c1d4)

  • Polish the G/R/S feature behavior, visualizations, and hints (#2229)

  • Make the transform cage resize about the pivot when Alt is pressed (#2226)

  • Group layers with Ctrl+G into independent groups if they're spread across artboards (#2239)

  • Fix demo artwork (commit 5fedd5c)

  • Fix Path tool issue where the selected points could be dragged from afar within the layer interior (#2260)

  • Improve the Pen tool's colinearity and equidistance controls (#2242)

  • Make the Select tool avoid updating hints just when clicking but not dragging (#2248)

  • Fix shallow select mode not allowing a Ctrl-click select deepest if the target's ancestor is already selected (#2247)

  • Fix copied/duplicated selected layers getting misordered (#2257)

  • Make joining path endpoints across layers work to merge the two layers (#2245)

  • Fix some number input widgets becoming selected after dragging left/right in Firefox (#2250)

  • Further polishing of G/R/S visualization and features (#2243)

  • Standardize increment snapping to use the Shift key (commit f13efd2)

  • Polish and add aborting to several input widgets: no Esc closing parent menus; color picker axis align; repeat on arrow buttons (#2276)

  • Fix crash when ungrouping a direct child of the root in debug mode (#2241)

  • Fix scale transform being applied when drawing shapes while zoomed in (#2286)

  • Fix unresolved types in graph wires when repeatedly undoing and redoing (#2283)

  • Fixed minor issues related to frontier selection visibility in the Pen/Path tools (#2291)

  • Improve grab/rotate/scale handling of pan/tilt/zoom (#2285)

  • Make the Pen tool use Ctrl to lock the angle of handles such that they maintain colinearity (#2284)

  • Fix self-chaining of transforms; fix compass rose getting offset when rotating a layer (#2296)

  • Fix regressions introduced in #2282 with the compass rose feature (#2298)

  • Make the Pen tool extend an endpoint by starting with a colinear, equidistant handle (#2295)

  • Fix transform cage bug where aborted resize/rotate after drag is used for next resize/rotate (#2308)

  • Make grid-aligned node graph wires an experimental feature disabled by default (commit 5115a05)

  • Limit the Sample to Points node's spacing value to prevent freezing when 0 (commit 390574d)

  • Fix incorrect Properties panel widget types for proto nodes (#2323)

  • Add feature for switching existing boolean ops to another type in the Select tool (#2322)

  • Fix duplicates not all being selected after Ctrl+D (#2324)

  • Add a workaround to prevent nudge resizing from giving lines a NaN scale (#2331)

  • Make Ctrl+D duplication interleave each layer like Alt+drag duplication already does (#2328)

  • Fix several minor Pen and Path tool bugs (#2327)

  • Make it easier to resize short/narrow edges of the transform cage without corners taking precedence (#2320)

  • Fix bug introduced in #2276 causing number inputs to abort on any keyboard input, not just Esc (commit bc6e762)

  • Remove checks from append_subpath to improve vector editing performance (#2190)

  • Fix wrong node parameter widgets, attempt 2 at #2323 (commit e41471c)

  • Fix wrong node parameter widgets, attempt 3 at #2323 (#2334)

  • Fix perf regression from updating the hints bar every frame (#2360)

  • Fix Vello rendering the infinite canvas without a white background color (#2361)

  • Fix Pen tool click-dragging from handle causing opposite colinear handle to rotate with drag (#2338)

  • Fix chaining GRS commands so they work smoothly and don't add intermediate undo steps (#2297)

  • Fix document upgrades to work recursively within subgraph nodes (#2369)

  • Fix regresion from #2265 causing an extra default artboard to show up (commit 22a900b)

  • Disable the Path tool's "Colinear Handles" checkbox when no interior anchors are selected (#2339)

  • Fix noise pattern parameter issue (#2412)

  • Fix fill tool on raster image temporarily breaks the graph (#2398)

  • Fix inconsistent stroke width in 'Outline' view mode (#2417)

  • In the Pen tool, make Space drag the whole manipulator group while dragging a handle (#2416)

  • Fix quick measuring of skewed and rotated layers by using the viewport space AABB (#2396)

  • Fix autosaved document ID being incorrectly added to browser storage at the wrong time without its document data (#2426)

  • Fix constrained snap when dragging by a compass rose axis and fix that axis line's jiggling (#2333)

  • Make the Transform node's skew parameter input actually in degrees (#2431)

  • Fix drawing tools to work in viewport space instead of document space (#2438)

  • Make the Select tool box-select the deepest individual layers or their common shared parent (#2424)

  • Fix Select tool resizing with Shift held allowing the constrained aspect ratio to change when snapping (#2441)

  • Fix Pen tool so it cancels (not confirms) a handle drag in which setting colinearity moves the other handle (#2439)

  • Refactor GRS messages and fix regression in chained GRS operations (#2450)

  • Avoid crashing when a document can't be loaded (#2453)

  • Refactor many usages of Color to natively store linear not gamma (#2457)

  • Improve Text tool resize/drag behavior (#2428)

  • Fix device pixel ratio being tied to the document by moving it from overlays to portfolio (commit 4e418bb)

  • Fix the Into nodes, which were broken but unused except in GPU nodes (#2480)

  • Work around unwrap crash (commit 158f18d)

Internal

  • Rename "options/top bar" terminology to "control bar" and update comments (commit 9eb544d)

  • Bezier-rs: Add method to check subpath insideness (#2183)

  • Remove blob URL dead code and clean up more frontend code (#2199)

  • Add marbled mandelbrot as unpublished demo art (commit 9a25555)

  • Instance tables

    • Instance tables refactor part 1: wrap graphical data in the new Instances struct (#2230)

    • Instance tables refactor part 2: move the transform and alpha_blending fields up a level (#2249)

    • Instance tables refactor part 3: flatten ImageFrame

      in lieu of Image

      (#2256)

    • Instance tables refactor part 4: replace ArtboardGroups with multi-row Instances (#2265)

    • Instance tables refactor part 5: unwrap GraphicGroup as multi-row Instance tables and move up transforms (#2363)

    • Improve naming for variables from the lasso selection feature (#2244)

    • Update most Rust dependencies (#2259)

    • Code cleanup around the input mapper system (commit 0cda8e2)

    • Add upgrade script to convert "Spline" node to "Path" -> "Spline from Points" (#2274)

    • Update some UI components to polish the frontend (commit 2c88bee)

    • Reorganize the menu bar and add additional commands to it (commit ddb0c8c)

    • Replace Footprint/() call arguments with dynamically-bound Contexts (#2232)

    • Tidy up NodeNetworkInterface, replacing &[] root network arguments with methods for the document network (#2393)

    • Update dependencies throughout the project (#2401)

    • Allow printing proto graph in graphite-cli (#2388) (commit 85fac63)

    • Upgrade to the Rust 2024 edition (#2367)

    • Remove subtyping for () from node graph type system (#2418)

    • Testing

      • Add tests to the Ellipse, Artboard, and Fill tools (#2181)

      • Add tests for GRS transform cancellation (#2467)

      • Add test for chained GRS transformations (#2475)

      • Add tests for document panning, zooming, and rotating (#2492)

      Website