Graphite progress report (Q4 2024)

By Keavon Chambers & Hypercube. December 30, 2024.

Graphite, a new open source 2D procedural graphics editor, has spent October-December on a multitude of smaller quality-of-life features and bug fixes, making Graphite a usable alternative to vector graphics software such as Inkscape for the web.

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

This is the forth in our series of quarterly progress reports (congratulations on a full year @Keavon). If you missed the last one, be sure to check it out as well. If you'd like to help speed up future progress, please consider getting involved with code, QA/bug testing, or art/marketing projects. Donations are also valued, as are stars of GitHub. Follow along and partake in our Discord community, too.

The new todo!() artwork shown here ...

Vector art of ...

todo!()
Open this artwork to
explore it yourself.

Additions

  • Add line height and character spacing to the Text node (#2016)
  • Add support for pinning nodes in the Properties panel (commit e6d8c47)
  • New demo artwork: "Changing Seasons" (commit fa6b5f2)
  • New node: Offset Path (#2030)
  • Make Copy to Points and (Circular) Repeat and nodes output group data, and add flattening nodes (#2011)
  • Allow the Fill and Stroke nodes to work on groups (#2046)
  • Add switch node and fix log to console node (#2064)
  • New node: Bevel (#2067)
  • Add a node insertion button and layer renaming from the Properties panel (#2072)
  • In the Path tool, make Space shift the anchor while dragging handles (#2065)
  • Add Path tool support for the Tab key swapping to dragging the opposite handle (#2058)
  • Allow the Pen tool to connect layers by their endpoints, merging into a single layer (#2076)
  • New nodes: "Clamp", "To U32", and "To U64" (#2087)
  • New node: Jitter Points (commit 7d86bf4)
  • Improve the node graph with revamped top bar and disabling tools when graph is open (#2093)
  • Add merging nodes into a subgraph with Ctrl+M and basic subgraph signature customization (#2097)
  • New node: Dot Product (#2126)
  • New node: Math (#2121)
  • Add Freehand tool drawing new subpaths on an existing layer with Shift held (commit ed119ad)
  • Automatically place layers into the artboard they're drawn inside of (#2110)
  • Add more actions to the Layer menu bar entries (commit feba874)
  • Add selection removal to the Select tool's box select (Ctrl+Shift modifier) (#2162)

Fixes

  • Make Upload Texture node resolution-aware (#2018)
  • Always close subpaths before applying boolean ops (#2014)
  • Fix double clicking anchor to convert between smooth and sharp (#2023)
  • Fix faulty contravariance checking (#2025)
  • Fix the Scatter Points node (commit 7a56af0)
  • Update Wasm dependencies to fix WebGPU spec change crash in Firefox with Vello (#2027)
  • Factor in artboard clipping to the click target x-ray function (#2028)
  • Fix Ctrl+H layer hiding and Ctrl+L layer locking only working with the graph open (#2029)
  • Improve text overlay styling and fix artboard label positioning bug (#2032)
  • Fix crash from empty document with no artboards introduced in #2028 (#2036)
  • Fix brush tool broken by #2011 (#2045)
  • Allow multiple top output wires to come from layers (#2049)
  • Fix various crashes and bugs (#2075)
  • Fix gradient render transforms with Vello (#2059)
  • Fix alignment snapping not preserving aspect ratio when Shift is held (#2062)
  • Fix Text tool clearing text when hitting Escape by changing it to commit the edit instead (#2052)
  • Allow the Path tool to edit an upstream path even if there's a type conversion midway (#2055)
  • Fix layer name text input (#2081)
  • Fix NumberInput widget not being reactive to changes to the unit (#2080)
  • Improve Sample Points, Scatter Points, and Splines from Points to include segments and work with subpaths (#2085)
  • Avoid sometimes breaking the selected layer upon switching away from the Select tool (commit 8d3da83)
  • Hide the left border notch in layers when a wire isn't entering from the layer's left (commit 12ca060)
  • Fix point nudging to work in document space (#2095)
  • Fix Bevel node crash with zero-length segments (#2096)
  • Fix the spline node algorithm to be continuous across start/end points (#2092)
  • Improve nudging when tilted and add Artboard tool nudge resizing; disable menu bar entries when no layer is selected (#2098)
  • Add Brush tool warning; move font list loading to document creation time (commit de366f9)
  • Make the Pen tool only append new paths when Shift is held (#2102)
  • Make Pen tool always snap to endpoint anchors, even when snapping is off (#2107)
  • Fix crash when upgrading a document with a Modulo node from 3 commits ago (commit 4c4d559)
  • Clean up editor preferences dialog (commit 99cf8f0)
  • Refactor collection of snap targets (#2114)
  • Remove Double-Click Behavior for Switching to Path Tool on Non-Path Layers (#2116)
  • Disabling colinear state when both the handles are selected and moved (#2120)
  • Fix bitmap bounding box (#2122)
  • Fixes shortcut key not showed in File->Close (#2135)
  • Fix SVG viewBox capitalization in renderer (#2131)
  • Tidy up the UI with clearer Layers panel selection marks and removal of most "coming soon" UI elements (commit 1264ea8)
  • Improve issues with selection history (#2138)
  • Fix transform cage rotation abort causing broken state upon next transformation (#2149)
  • Make Path tool deselect all points on single-click, and select all on double-click, of shape's fill (#2148)
  • Fix Select tool's box selection not being able to extend a selection with shift (#2157)
  • Fix several bugged vector-related nodes (commit b81f483)
  • Improve quick measurement overlays across all possible arrangement scenarios (#2147)
  • Improve quick measurement overlays with better number alignment and decimal rounding (#2155)
  • Improve Text tool click targets on text layers to use the text box (#2145)

Internal

  • Simplify the Bezier-rs interactive web demo code (#2020)
  • Fix/suppress new Clippy warnings introduced in Rust 1.82 (commit a395fbf)
  • Raw-rs: Refactor to run multiple steps in a single loop (#1972)
  • Raw-rs: Fix naming convention of matrices (#2071)
  • Raw-rs: Remove from workspace (#2066)
  • Clean up old usages of NodeId(generate_uuid()) by replacing it with NodeId::new() (#2009)
  • Fix Bezier-rs web demos failing to run wasm-opt in CI (commit 4df7803)
  • Raw-rs: Remove fortuples dependency (#2082)
  • Rename Raw-rs to Rawkit (#2088)
  • Parse description from node doc comments (#2089)
  • Upgrade and document the math operation nodes (commit d649052)
  • Bezier-rs: Make rectangle constructor produce linear segments (#2109)
  • Add math-parser library (#2033)
  • Fix clippy lints (#2119)
  • Simplify the implementation of the message buffering (#2123)
  • Update some dependencies (#2134)
  • Parse doc comments on node parameters (#2163)

Website

  • Blog post: Graphite progress report (Q3 2024) (#2013)
  • Update the screenshots on the website home page carousel (commit f892687)
  • Update the website roadmap and other details (commit d7a271f)

Announcements

Community art contest

There were no submissions to the Q4 art contest. Post your creations in the #🎨art-showcase channel in our Discord before the end of March to be featured in the Q1 progress report.