diff --git a/website/content/blog/2025-04-03-graphite-progress-report-q1-2025.md b/website/content/blog/2025-04-03-graphite-progress-report-q1-2025.md new file mode 100644 index 0000000000..27d56d70e1 --- /dev/null +++ b/website/content/blog/2025-04-03-graphite-progress-report-q1-2025.md @@ -0,0 +1,351 @@ ++++ +title = "Graphite progress report (Q1 2025)" +date = 2025-04-03 +[extra] +banner = "…" +banner_png = "…" +author = "Keavon Chambers & Hypercube" +summary = "Graphite's Q1 2025 update introduces experimental animations and improved vector editing" +reddit = "…" +twitter = "…" +css = ["/component/demo-artwork.css"] ++++ + +[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](/volunteer/guide) and join [our Discord](https://discord.graphite.rs). + +All Q1 2024 commits may be [viewed in this list](https://github.com/GraphiteEditor/Graphite/commits/master/?since=2025-01-01&until=2025-03-31) 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](https://github.com/GraphiteEditor/Graphite/pull/2180)) + +- Change Spline tool behavior to use Path and Spline from Points nodes instead of legacy Spline node ([#2200](https://github.com/GraphiteEditor/Graphite/pull/2200)) + +- Add handle visualization during point insertion in the Path tool ([#2197](https://github.com/GraphiteEditor/Graphite/pull/2197)) + +- Polish user-created subgraph nodes: imports in the Properties panel; reorder/delete/rename imports/exports ([#2105](https://github.com/GraphiteEditor/Graphite/pull/2105)) + +- Add visualization overlays to G/R/S ([#2195](https://github.com/GraphiteEditor/Graphite/pull/2195)) + +- Implement extending, joining, and creating new subpaths with the Spline tool ([#2203](https://github.com/GraphiteEditor/Graphite/pull/2203)) + +- Give the current snapping target layer(s) an outline ([#2224](https://github.com/GraphiteEditor/Graphite/pull/2224)) + +- Experimental vector meshes ([#2223](https://github.com/GraphiteEditor/Graphite/pull/2223)) + +- Add an editor preference for touched/enclosed/directional based selection ([#2156](https://github.com/GraphiteEditor/Graphite/pull/2156)) + +- Add G/R/S to the Pen tool to control the outgoing segment handle ([#2211](https://github.com/GraphiteEditor/Graphite/pull/2211)) + +- Make the transform cage show/hide resize grips as space allows ([#2209](https://github.com/GraphiteEditor/Graphite/pull/2209)) + +- Add joining of path endpoints with Ctrl+J in the Path tool ([#2227](https://github.com/GraphiteEditor/Graphite/pull/2227)) + +- Add lasso selection mode ([#2235](https://github.com/GraphiteEditor/Graphite/pull/2235)) + +- Add support for skewing the transform cage by Ctrl-dragging its edges ([#2251](https://github.com/GraphiteEditor/Graphite/pull/2251)) + +- Make primitive shape tools no longer draw transformed unit shapes ([#2236](https://github.com/GraphiteEditor/Graphite/pull/2236)) + +- Add pin and cut icons; improve menu bar shortcut labels to choose shortest ([commit 0ec91bf](https://github.com/GraphiteEditor/Graphite/commit/0ec91bfe01a7ca3a97cf4c7f073ccb13731b11d8)) + +- Add new icons to all menu bar entries ([commit 0037f51](https://github.com/GraphiteEditor/Graphite/commit/0037f5158ce01c4376e18f844e5b220115dbdf99)) + +- Add a "Reverse" command to the "Order" menu ([#2273](https://github.com/GraphiteEditor/Graphite/pull/2273)) + +- Add Pen and Path tool modes to avoid showing all handles ([#2264](https://github.com/GraphiteEditor/Graphite/pull/2264), [commit 7bbbf7f](https://github.com/GraphiteEditor/Graphite/commit/7bbbf7fa7cf5b9d71584bb936023e1ee644e316f)) + +- Add the style of right-angle grid-aligned wires in the graph ([#2182](https://github.com/GraphiteEditor/Graphite/pull/2182)) + +- Implement merging pairs of {paths, splines} with the Pen and Spline tools ([#2269](https://github.com/GraphiteEditor/Graphite/pull/2269), [#2292](https://github.com/GraphiteEditor/Graphite/pull/2292), [#2319](https://github.com/GraphiteEditor/Graphite/pull/2319)) + +- Add the compass rose translation gizmo to the transform cage ([#2277](https://github.com/GraphiteEditor/Graphite/pull/2277)) + +- Add the Select Parent command ([#2329](https://github.com/GraphiteEditor/Graphite/pull/2329)) + +- Add draggable skew triangles to the transform cage ([#2300](https://github.com/GraphiteEditor/Graphite/pull/2300)) + +- Enable free movement of transform cage edge during skew when Ctrl is held ([#2358](https://github.com/GraphiteEditor/Graphite/pull/2358)) + +- Allow the Line tool to drag start and end points of line layers ([#2278](https://github.com/GraphiteEditor/Graphite/pull/2278)) + +- Add recursive folder expand/collapse to the Layers panel ([#2419](https://github.com/GraphiteEditor/Graphite/pull/2419)) + + +- Add sizing gizmos to the Text tool's text area ([#2176](https://github.com/GraphiteEditor/Graphite/pull/2176)) + +- New node: Merge by Distance ([#2307](https://github.com/GraphiteEditor/Graphite/pull/2307)) + +- Add Path tool support for dragging along an axis when Shift is held ([#2449](https://github.com/GraphiteEditor/Graphite/pull/2449)) + +- Add the Spreadsheet panel to inspect node output data ([#2442](https://github.com/GraphiteEditor/Graphite/pull/2442)) + +- Experimental animation support ([#2443](https://github.com/GraphiteEditor/Graphite/pull/2443), [commit 08a4b69](https://github.com/GraphiteEditor/Graphite/commit/08a4b69948d9f2b8cdaf1a47caa30db7f3029aab), [#2471](https://github.com/GraphiteEditor/Graphite/pull/2471)) + +- New nodes: Mirror, Round Corners, Box Warp, Remove/Generate Handles, Spatial Merge by Distance ([#2448](https://github.com/GraphiteEditor/Graphite/pull/2448)) + + +## Fixes + +- Fix isometric dotted grid and avoid antialiasing on dashed line overlays ([commit 1c880da](https://github.com/GraphiteEditor/Graphite/commit/1c880daea2c0e67c80eaf45cd4024cf58c1ff1bf)) + +- Improve snapping with better snap target names, tooltips, cleaner overlay labels, code cleanup ([commit 07601a5](https://github.com/GraphiteEditor/Graphite/commit/07601a5c6c4c67ffc2d6f08471a67029e6321aa3)) + +- Fix drawing new layers not being put next to nested selected layers ([commit 51d1c4e](https://github.com/GraphiteEditor/Graphite/commit/51d1c4eeacec6e4baf095fae8c5095b768391e93)) + +- Remove the Pen tool's anchor square under the cursor when drawing a not-yet-placed segment ([commit 3582126](https://github.com/GraphiteEditor/Graphite/commit/3582126dedd747fd8441aba0e4eb9acb9594a9fd)) + +- Make the Text tool delete empty text layers when clicking away wth LMB ([#2192](https://github.com/GraphiteEditor/Graphite/pull/2192)) + +- Update the bounding box snapping modes to use Align with Edges for edges and alignment ([#2185](https://github.com/GraphiteEditor/Graphite/pull/2185)) + +- Remove trailing zeros in rendered SVG path output ([commit 1e62af8](https://github.com/GraphiteEditor/Graphite/commit/1e62af88cd746674ea879ef17cd9423ed94e0b6a)) + +- Restore Pen tool undo/redo and fix incorrect triggering of undo when changing tools ([#2193](https://github.com/GraphiteEditor/Graphite/pull/2193)) + +- Improve older document upgrading compatibility and make node type errors clearer ([#2201](https://github.com/GraphiteEditor/Graphite/pull/2201)) + +- Retain transforms of layers when transferred between transformed groups ([#2212](https://github.com/GraphiteEditor/Graphite/pull/2212)) + +- In Path tool when dragging a handle, make Alt recover the opposing handle if it's not cubic rather than zero-length ([#2196](https://github.com/GraphiteEditor/Graphite/pull/2196)) + +- Remove useful line following cursor in snap overlays during constrained line drawing ([#2206](https://github.com/GraphiteEditor/Graphite/pull/2206)) + +- Make the document auto-save system initially restore the last-viewed tab before loading the rest ([#2194](https://github.com/GraphiteEditor/Graphite/pull/2194)) + +- Fix blurry overlay rendering when the pixel display ratio isn't 100% ([#2204](https://github.com/GraphiteEditor/Graphite/pull/2204)) + +- Fix regressions from #2105 (more control over subgraph imports/exports handling) ([#2213](https://github.com/GraphiteEditor/Graphite/pull/2213)) + +- Fix regression where Pen tool resumes segment placement after returning from another tool ([#2234](https://github.com/GraphiteEditor/Graphite/pull/2234)) + +- Fix a minor regression in monitor nodes with VectorData ([#2237](https://github.com/GraphiteEditor/Graphite/pull/2237)) + +- Fix regression causing pasted images to have a zero-size transform ([#2238](https://github.com/GraphiteEditor/Graphite/pull/2238)) + +- Fix Document > Clear Artboards so it doesn't also clear everything else ([#2177](https://github.com/GraphiteEditor/Graphite/pull/2177)) + +- Avoid adding an unnecessary Transform node with the TransformChange message ([commit 303c1d4](https://github.com/GraphiteEditor/Graphite/commit/303c1d45f89def4c1fc0833edd3b5cfceca7e5d3)) + +- Polish the G/R/S feature behavior, visualizations, and hints ([#2229](https://github.com/GraphiteEditor/Graphite/pull/2229)) + +- Make the transform cage resize about the pivot when Alt is pressed ([#2226](https://github.com/GraphiteEditor/Graphite/pull/2226)) + +- Group layers with Ctrl+G into independent groups if they're spread across artboards ([#2239](https://github.com/GraphiteEditor/Graphite/pull/2239)) + +- Fix demo artwork ([commit 5fedd5c](https://github.com/GraphiteEditor/Graphite/commit/5fedd5c234bece5206c668af316c61d26c15eb3c)) + +- Fix Path tool issue where the selected points could be dragged from afar within the layer interior ([#2260](https://github.com/GraphiteEditor/Graphite/pull/2260)) + +- Improve the Pen tool's colinearity and equidistance controls ([#2242](https://github.com/GraphiteEditor/Graphite/pull/2242)) + +- Make the Select tool avoid updating hints just when clicking but not dragging ([#2248](https://github.com/GraphiteEditor/Graphite/pull/2248)) + +- Fix shallow select mode not allowing a Ctrl-click select deepest if the target's ancestor is already selected ([#2247](https://github.com/GraphiteEditor/Graphite/pull/2247)) + +- Fix copied/duplicated selected layers getting misordered ([#2257](https://github.com/GraphiteEditor/Graphite/pull/2257)) + +- Make joining path endpoints across layers work to merge the two layers ([#2245](https://github.com/GraphiteEditor/Graphite/pull/2245)) + +- Fix some number input widgets becoming selected after dragging left/right in Firefox ([#2250](https://github.com/GraphiteEditor/Graphite/pull/2250)) + +- Further polishing of G/R/S visualization and features ([#2243](https://github.com/GraphiteEditor/Graphite/pull/2243)) + +- Standardize increment snapping to use the Shift key ([commit f13efd2](https://github.com/GraphiteEditor/Graphite/commit/f13efd2d06082d9e4d580bd7660eff8d106f9e86)) + +- Polish and add aborting to several input widgets: no Esc closing parent menus; color picker axis align; repeat on arrow buttons ([#2276](https://github.com/GraphiteEditor/Graphite/pull/2276)) + +- Fix crash when ungrouping a direct child of the root in debug mode ([#2241](https://github.com/GraphiteEditor/Graphite/pull/2241)) + +- Fix scale transform being applied when drawing shapes while zoomed in ([#2286](https://github.com/GraphiteEditor/Graphite/pull/2286)) + +- Fix unresolved types in graph wires when repeatedly undoing and redoing ([#2283](https://github.com/GraphiteEditor/Graphite/pull/2283)) + +- Fixed minor issues related to frontier selection visibility in the Pen/Path tools ([#2291](https://github.com/GraphiteEditor/Graphite/pull/2291)) + +- Improve grab/rotate/scale handling of pan/tilt/zoom ([#2285](https://github.com/GraphiteEditor/Graphite/pull/2285)) + +- Make the Pen tool use Ctrl to lock the angle of handles such that they maintain colinearity ([#2284](https://github.com/GraphiteEditor/Graphite/pull/2284)) + +- Fix self-chaining of transforms; fix compass rose getting offset when rotating a layer ([#2296](https://github.com/GraphiteEditor/Graphite/pull/2296)) + +- Fix regressions introduced in #2282 with the compass rose feature ([#2298](https://github.com/GraphiteEditor/Graphite/pull/2298)) + +- Make the Pen tool extend an endpoint by starting with a colinear, equidistant handle ([#2295](https://github.com/GraphiteEditor/Graphite/pull/2295)) + +- Fix transform cage bug where aborted resize/rotate after drag is used for next resize/rotate ([#2308](https://github.com/GraphiteEditor/Graphite/pull/2308)) + +- Make grid-aligned node graph wires an experimental feature disabled by default ([commit 5115a05](https://github.com/GraphiteEditor/Graphite/commit/5115a05c5bd2dd4171f68cecc3b863c0efff12ad)) + +- Limit the Sample to Points node's spacing value to prevent freezing when 0 ([commit 390574d](https://github.com/GraphiteEditor/Graphite/commit/390574d5c6f9282bf474d2d5bedb319dd6464d7d)) + +- Fix incorrect Properties panel widget types for proto nodes ([#2323](https://github.com/GraphiteEditor/Graphite/pull/2323)) + +- Add feature for switching existing boolean ops to another type in the Select tool ([#2322](https://github.com/GraphiteEditor/Graphite/pull/2322)) + +- Fix duplicates not all being selected after Ctrl+D ([#2324](https://github.com/GraphiteEditor/Graphite/pull/2324)) + +- Add a workaround to prevent nudge resizing from giving lines a NaN scale ([#2331](https://github.com/GraphiteEditor/Graphite/pull/2331)) + +- Make Ctrl+D duplication interleave each layer like Alt+drag duplication already does ([#2328](https://github.com/GraphiteEditor/Graphite/pull/2328)) + +- Fix several minor Pen and Path tool bugs ([#2327](https://github.com/GraphiteEditor/Graphite/pull/2327)) + +- Make it easier to resize short/narrow edges of the transform cage without corners taking precedence ([#2320](https://github.com/GraphiteEditor/Graphite/pull/2320)) + +- Fix bug introduced in #2276 causing number inputs to abort on any keyboard input, not just Esc ([commit bc6e762](https://github.com/GraphiteEditor/Graphite/commit/bc6e76208daef2f8a031ede23f0425ecafcd17de)) + +- Remove checks from append_subpath to improve vector editing performance ([#2190](https://github.com/GraphiteEditor/Graphite/pull/2190)) + +- Fix wrong node parameter widgets, attempt 2 at #2323 ([commit e41471c](https://github.com/GraphiteEditor/Graphite/commit/e41471c088619474f275acae4da797ae8deba157)) + +- Fix wrong node parameter widgets, attempt 3 at #2323 ([#2334](https://github.com/GraphiteEditor/Graphite/pull/2334)) + +- Fix perf regression from updating the hints bar every frame ([#2360](https://github.com/GraphiteEditor/Graphite/pull/2360)) + +- Fix Vello rendering the infinite canvas without a white background color ([#2361](https://github.com/GraphiteEditor/Graphite/pull/2361)) + +- Fix Pen tool click-dragging from handle causing opposite colinear handle to rotate with drag ([#2338](https://github.com/GraphiteEditor/Graphite/pull/2338)) + + +- Fix chaining GRS commands so they work smoothly and don't add intermediate undo steps ([#2297](https://github.com/GraphiteEditor/Graphite/pull/2297)) + +- Fix document upgrades to work recursively within subgraph nodes ([#2369](https://github.com/GraphiteEditor/Graphite/pull/2369)) + +- Fix regresion from #2265 causing an extra default artboard to show up ([commit 22a900b](https://github.com/GraphiteEditor/Graphite/commit/22a900b35e0de0440eecca9321b7174d223f91ef)) + +- Disable the Path tool's "Colinear Handles" checkbox when no interior anchors are selected ([#2339](https://github.com/GraphiteEditor/Graphite/pull/2339)) + + +- Fix noise pattern parameter issue ([#2412](https://github.com/GraphiteEditor/Graphite/pull/2412)) + +- Fix fill tool on raster image temporarily breaks the graph ([#2398](https://github.com/GraphiteEditor/Graphite/pull/2398)) + +- Fix inconsistent stroke width in 'Outline' view mode ([#2417](https://github.com/GraphiteEditor/Graphite/pull/2417)) + + +- In the Pen tool, make Space drag the whole manipulator group while dragging a handle ([#2416](https://github.com/GraphiteEditor/Graphite/pull/2416)) + +- Fix quick measuring of skewed and rotated layers by using the viewport space AABB ([#2396](https://github.com/GraphiteEditor/Graphite/pull/2396)) + + +- Fix autosaved document ID being incorrectly added to browser storage at the wrong time without its document data ([#2426](https://github.com/GraphiteEditor/Graphite/pull/2426)) + + +- Fix constrained snap when dragging by a compass rose axis and fix that axis line's jiggling ([#2333](https://github.com/GraphiteEditor/Graphite/pull/2333)) + +- Make the Transform node's skew parameter input actually in degrees ([#2431](https://github.com/GraphiteEditor/Graphite/pull/2431)) + +- Fix drawing tools to work in viewport space instead of document space ([#2438](https://github.com/GraphiteEditor/Graphite/pull/2438)) + +- Make the Select tool box-select the deepest individual layers or their common shared parent ([#2424](https://github.com/GraphiteEditor/Graphite/pull/2424)) + +- Fix Select tool resizing with Shift held allowing the constrained aspect ratio to change when snapping ([#2441](https://github.com/GraphiteEditor/Graphite/pull/2441)) + +- Fix Pen tool so it cancels (not confirms) a handle drag in which setting colinearity moves the other handle ([#2439](https://github.com/GraphiteEditor/Graphite/pull/2439)) + +- Refactor GRS messages and fix regression in chained GRS operations ([#2450](https://github.com/GraphiteEditor/Graphite/pull/2450)) + +- Avoid crashing when a document can't be loaded ([#2453](https://github.com/GraphiteEditor/Graphite/pull/2453)) + +- Refactor many usages of Color to natively store linear not gamma ([#2457](https://github.com/GraphiteEditor/Graphite/pull/2457)) + +- Improve Text tool resize/drag behavior ([#2428](https://github.com/GraphiteEditor/Graphite/pull/2428)) + +- Fix device pixel ratio being tied to the document by moving it from overlays to portfolio ([commit 4e418bb](https://github.com/GraphiteEditor/Graphite/commit/4e418bbfe1ecc415a6ff924c0392c865d1411a73)) + +- Fix the Into nodes, which were broken but unused except in GPU nodes ([#2480](https://github.com/GraphiteEditor/Graphite/pull/2480)) + +- Work around unwrap crash ([commit 158f18d](https://github.com/GraphiteEditor/Graphite/commit/158f18df0d8421785d8b949e03253dd479af22c7)) + +## Internal + +- Rename "options/top bar" terminology to "control bar" and update comments ([commit 9eb544d](https://github.com/GraphiteEditor/Graphite/commit/9eb544df740a6c9188c2255b623f0a716bd64fb3)) + +- Bezier-rs: Add method to check subpath insideness ([#2183](https://github.com/GraphiteEditor/Graphite/pull/2183)) + +- Remove blob URL dead code and clean up more frontend code ([#2199](https://github.com/GraphiteEditor/Graphite/pull/2199)) + +- Add marbled mandelbrot as unpublished demo art ([commit 9a25555](https://github.com/GraphiteEditor/Graphite/commit/9a25555732e90a6cad386097b957975694b31538)) + +- Instance tables + - Instance tables refactor part 1: wrap graphical data in the new Instances struct ([#2230](https://github.com/GraphiteEditor/Graphite/pull/2230)) + + - Instance tables refactor part 2: move the transform and alpha_blending fields up a level ([#2249](https://github.com/GraphiteEditor/Graphite/pull/2249)) + + - Instance tables refactor part 3: flatten ImageFrame

in lieu of Image

([#2256](https://github.com/GraphiteEditor/Graphite/pull/2256)) + + - Instance tables refactor part 4: replace ArtboardGroups with multi-row Instances ([#2265](https://github.com/GraphiteEditor/Graphite/pull/2265)) + + - Instance tables refactor part 5: unwrap GraphicGroup as multi-row Instance tables and move up transforms ([#2363](https://github.com/GraphiteEditor/Graphite/pull/2363)) + + +- Improve naming for variables from the lasso selection feature ([#2244](https://github.com/GraphiteEditor/Graphite/pull/2244)) + +- Update most Rust dependencies ([#2259](https://github.com/GraphiteEditor/Graphite/pull/2259)) + +- Code cleanup around the input mapper system ([commit 0cda8e2](https://github.com/GraphiteEditor/Graphite/commit/0cda8e2bb41fbc75dbc9597fc5e567475f7eaef1)) + +- Add upgrade script to convert "Spline" node to "Path" -> "Spline from Points" ([#2274](https://github.com/GraphiteEditor/Graphite/pull/2274)) + +- Update some UI components to polish the frontend ([commit 2c88bee](https://github.com/GraphiteEditor/Graphite/commit/2c88bee0ee42c3ead8095cbc8460ba531a9120f8)) + +- Reorganize the menu bar and add additional commands to it ([commit ddb0c8c](https://github.com/GraphiteEditor/Graphite/commit/ddb0c8c2496b99a559fd9b045b86c256b501a3a7)) + +- Replace Footprint/() call arguments with dynamically-bound Contexts ([#2232](https://github.com/GraphiteEditor/Graphite/pull/2232)) + +- Tidy up NodeNetworkInterface, replacing &[] root network arguments with methods for the document network ([#2393](https://github.com/GraphiteEditor/Graphite/pull/2393)) + +- Update dependencies throughout the project ([#2401](https://github.com/GraphiteEditor/Graphite/pull/2401)) + +- Allow printing proto graph in graphite-cli (#2388) ([commit 85fac63](https://github.com/GraphiteEditor/Graphite/commit/85fac63bb264f281e63017df677c8e212e8cb63a)) + +- Upgrade to the Rust 2024 edition ([#2367](https://github.com/GraphiteEditor/Graphite/pull/2367)) + +- Remove subtyping for () from node graph type system ([#2418](https://github.com/GraphiteEditor/Graphite/pull/2418)) + + + +## Testing + +- Add tests to the Ellipse, Artboard, and Fill tools ([#2181](https://github.com/GraphiteEditor/Graphite/pull/2181)) + +- Add tests for GRS transform cancellation ([#2467](https://github.com/GraphiteEditor/Graphite/pull/2467)) + +- Add test for chained GRS transformations ([#2475](https://github.com/GraphiteEditor/Graphite/pull/2475)) + +- Add tests for document panning, zooming, and rotating ([#2492](https://github.com/GraphiteEditor/Graphite/pull/2492)) + + + +## Website + +- Comprehensively update user manual and contributor guide, add Adam to core team ([commit 93a60da](https://github.com/GraphiteEditor/Graphite/commit/93a60daa24e200c2b68a07815cd79dbdfa29457d)) + +- Reduce website loading times and related code cleanup ([commit 68e6bec](https://github.com/GraphiteEditor/Graphite/commit/68e6bec9b5647a267f239944a7be4cf9337615a7)) + +- More website loading speed and code improvements ([commit ae2637e](https://github.com/GraphiteEditor/Graphite/commit/ae2637e08e674d51b8bc3c383dee7f661240f337)) + +- Add Stipe donations to the website and polish other pages ([commit b7907bc](https://github.com/GraphiteEditor/Graphite/commit/b7907bc96f02f421d1514f9ea66662010512bfe5)) + +- Add the 2024 yearly report to the blog ([commit ab724d8](https://github.com/GraphiteEditor/Graphite/commit/ab724d8b007c97a16c4084029f1f30e2579a8c4e)) + +- Improve readability of the donation page ([commit b36521e](https://github.com/GraphiteEditor/Graphite/commit/b36521e5888f1b6eeb30e8ed18f335939ef04758)) + +- Update content on the website hoe page, roadmap, and donate page ([commit eada1eb](https://github.com/GraphiteEditor/Graphite/commit/eada1eba54854769dad8df3fe00ac56a3d84d53d)) + +- Update website with improved student project details ([commit 1700c3a](https://github.com/GraphiteEditor/Graphite/commit/1700c3a6505173ec2c5a60abdc81bf38277f5cfd)) + +- Declare the start of the Alpha 4 release series ([commit fb13d58](https://github.com/GraphiteEditor/Graphite/commit/fb13d58767ced5d88399cf1e96c714e792fa7e15)) + +- Update student projects page of the website ([commit 3e56113](https://github.com/GraphiteEditor/Graphite/commit/3e56113c78a6b7ba168f2dd8ec58f30a77cf7aed))