Files
Graphite/website/content/blog/2023-12-31-graphite-development-progress-2021-2023.md

54 KiB

+++ title = "Graphite development progress: 2021-2023" date = 2023-12-31

[extra] banner = "https://static.graphite.rs/content/blog/2022-03-12-graphite-a-vision-for-the-future-of-2d-content-creation.avif" banner_png = "https://static.graphite.rs/content/blog/2022-03-12-graphite-a-vision-for-the-future-of-2d-content-creation.png" author = "Keavon Chambers" summary = "An archive of Graphite development history with progress updates from 2021 to 2023."

js = ["/js/youtube-embed.js"] css = ["/component/youtube-embed.css"] +++

TODO

2021

February 2021

Watch the project announcement presentation and first month project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #19:

After this month's Rust Gamedev Meetup announcement presentation where the Graphite vision has attracted tremendous interest, advice of the community has resulted in shifting the development strategy to focus on an MVP release as soon as possible, which has begun:

  • The past year's in-development custom GUI has been shelved in lieu of an interim web GUI. Graphite intends to natively support Windows, Mac, Linux, and web. This change unblocks core application development but means Graphite is web-only until the Rust GUI ecosystem matures. Good progress this month has been made building a Vue web GUI.
  • Graphite's MVP will now support only vector editing. This defers the large complexity of the graph render engine required for node-based raster editing. It should be less difficult to first focus on building a vector editor that improves upon the UX of other similar apps.

This image shows the current GUI implementation state of progress:

Progress on the GUI

March 2021

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #20:

Major progress was made building out the core architectural Rust code. A large accomplishment was designing a first draft software architecture diagram:

Draft architecture diagram (click to expand)

Graphite architecture diagram

The current editor now has functional Select, Rectangle, and Ellipse tools thanks to the newly-added tool state machine and SVG viewport drawing. The UI now also implements tool-related icons and buttons, bringing it closer to parity with the design mockup. The team also set up a Web/Rust-WASM build system, GitHub CI to confirm PRs compile, and put together starter documentation for the codebase, UX design, and manual.

This image shows the latest editor UI and "Graphite" drawn crudely with its new shape tools:

"Graphite" drawn using the circles and rectangles of the new tool drawing system

April 2021

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #21:

The team size has doubled in the past month — thank you to the new contributors! Since then, systems related to editor tools and data flow were added. The editor now has proper input behavior on the existing Rectangle and Ellipse tools plus the new Shape and Line tools while holding modifier keys. Pen tool implementation has begun, supporting polylines. Shapes are now drawn with live previews.

Additional work has gone into improving render performance, building the color system in the Rust backend, and adding initial support for displaying shapes in the Layers panel.

May 2021

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #22:

In the past month, new frontend features have mostly closed the gap for a visually complete UI while a major Rust backend refactor took place.

A new frontend system for floating menus was added to draw menus over the UI, like dropdown menu input widgets and popovers to display the new color picker. Also, the application menu bar was built with working buttons for the new Undo and Export SVG actions.

A large refactor in the Rust backend created a simpler communication strategy between all components in the software stack and a standard method of handling user inputs.

This image shows a famous art piece by Piet Mondrian replicated in Graphite with its latest UI:

Piet Mondrian's artwork replicated in Graphite using the new color picker

June 2021

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #23:

Since last newsletter, the editor has received the ability to select layers via the Layers panel and by clicking or dragging a box selection in the viewport. Selected layers can be deleted, duplicated, and copy/pasted.

It is now possible to create, edit, and close multiple documents in their own editor tabs. Additional frontend cleanup and polish has also improved many parts of the editor experience.

Lastly, support for transforms was added to the layers and document, paving the way for moving/scaling/rotating layers and the whole document within the viewport.

This artwork, created by Graphite community member BillyDM, won our first art contest:

Geometric cherry tree artwork

July 2021

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #24:

In the past month, the editor has gained numerous vector editing features, including moving layers with the keyboard or mouse, filling and copying colors, flipping and aligning selected layers, and setting blend modes and layer opacity.

Scrollbars, rulers, and thumbnails are now functional. Full screen support has been added, along with a hotkey to center the artwork. An options bar with tool-specific settings and actions has been implemented, currently allowing the number of sides of a polygon to be selected. The order of layers can now be changed using hotkeys.

This image by Graphite community member Norgate shows a recreation of Edvard Munch's "The Scream" using the new drawing tools:

A recreation of "The Scream" in Graphite by Norgate

August 2021

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #25:

Work has progressed on features for the app and designs for the project website. Crucial user-facing features have been added: saving/opening documents; a bug report dialog for panics; an auto-generated list of dependency license notices; and a new undo/redo system.

The new Path tool shows Bézier anchors/handles (soon to be draggable). Render performance is much better. Scrollbars now work with the infinite canvas. There's a new transform cage around selected shapes, which may be transformed with Blender-inspired G/R/S keys.

September & October 2021

Watch the project update presentation at the Rust Gamedev Meetup.

Exploratory research has been ongoing for GPU-driven graphics in Rust and its place in the Graphite pipeline.

Several development tooling upgrades have been made, from TypeScript type checking and cutting down unnecessary dependencies to speeding up build time on license notice generation. An internal refactor made multi-document support now utilize unique document IDs.

The editor's ruler measurements now move and scale with the document. Users of incompatible browsers are now visibly told to upgrade. And meanwhile, further progress has been made on the project website design.

November 2021

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #28:

Development continues to pick up speed. Design of the project website has continued for its launch soon, alongside the forthcoming alpha release.

The project upgraded to the Rust 2021 edition and made big improvements to the frontend TypeScript and web infrastructure. The editor UI is now fully responsive at small window sizes. Unsaved document tabs display an * and warn before closing the window. And the new snapping system helps draw/move shapes aligned with others.

December 2021

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #29:

This wraps up a productive month of features and stability improvements. Documents persist page reloads via IndexedDB browser storage. The Layers panel got some love. Vector anchor points can be dragged (beginnings of the Path/Pen tools). Per-tool footer bar hints teach possible user input actions. And a big code cleanup/refactor took place behind the scenes.

Additional new features and QoL improvements: artboards, panel resizing, the Navigate tool, outline view mode, support for touch input and non-Latin keyboards, an About Graphite dialog with version info, plus dozens of bugs and crashes were resolved.

2022

January 2022

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #30:

As January winds to a close and the project anniversary nears, the team is proud and excited to announce Graphite alpha 1, the minimum viable product release for a web-based vector graphics editor.

After one year in pre-alpha development by Graphite community members, this first milestone of alpha is nearly here.

Graphite alpha 1 launches Saturday, February 12 together with the project's website.

Work now begins on alpha 2, focused on building the node graph engine and vector renderer.

February 2022

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #31:

After officially launching the alpha version early this month, work has progressed in designing the node graph system. Also, the team has spent this month adding polish to the application and continuing work on more website content.

A new editor feature is the Gradient tool which makes it possible to add some colorful pizzazz. This means that finally all vector editing tools are implemented, but some can still use improvement. Additional work has gone into visual changes to help aid in clarity and discoverability for new users.

March 2022

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #32:

With the completion of the initial node graph UX design, work has begun building the frontend and backend systems for the big leap to node-driven vector editing. This works by composing groups of Rust functions together at runtime and/or compile time. Watch the (brief) talk about how the backend implementation works around challenges imposed by Rust.

New editor features this month include importing bitmap image layers and customizing stroke styling with dashed lines and rounded or beveled corners. The project website is also now mostly content-complete, including new node graph mockups.

This image shows the first full illustration drawn in Graphite, together with its latest UI:

Vector artwork of Yosemite Valley illustrated in Graphite

April 2022

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #33:

April's development has focused on further editor features and UX improvements:

  • It's your type: The Text tool now provides over 1400 fonts with bold/italic styles from the Google Fonts library.

  • Oh snap!: A refactor and polish pass on the snapping system provides better clarity and consistency. And shapes now have outlines on hover and selection for easier targeting.

  • Have a dialog: Supported by a refactor that moved dialog layouts into the Rust backend, users can now create new documents of specified sizes and export artwork as PNG/JPG with new File menu dialogs.

  • Pack it up: The web component of the stack was finally upgraded to Webpack 5 which cleans up a mess of outdated dependencies.


May 2022

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #34:

May's development has focused on project cleanup:

  • Spring cleaning: The past month's work has focused mostly on technical debt cleanup, documentation, and bug fixes around the frontend. That continues with the Rust backend next month.

  • A radiant gradient: The Gradient tool now supports radial styles in addition to linear.

  • New blog post: Learn about plans for distributed computing across many CPUs and GPUs with Graphene, the Rust-based node graph engine and renderer that will power Graphite.


June 2022

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #35:

June's development focused mainly on bug fixes and big under-the-hood changes:

  • Ahead of the curve: A long-awaited refactor replaces the underlying Bézier curve data structure in alignment with requirements for Pen tool improvements and the upcoming node system.
  • Sending mixed messages: The internal messaging system was upgraded to sequence the message processing in a more predictable stack-based order. A new subscription-based event broadcaster was integrated as well.
  • Back on the menu: The application menu bar content definitions were moved from the JS frontend to a permanent home in the Rust backend.

July 2022

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #36:

July's development focused on editor-centric refactors upgrading stopgap measures to more robust systems:

  • Making a splash: The default document is replaced by a welcome splash screen following a refactor allowing for zero open documents.
  • Modifying for Macs: Input handling supports the nonstandard modifier keys on Mac keyboards, including labels in the UI.
  • Setting a high bar: The menu bar cleans up actions and supports new ones like File > Import. Displayed hotkeys are based on the actual key mapping source, varying by OS.
  • Keeping organized: The editor codebase is restructured to cut away technical debt and create consistency for new contributors and better docs going forward.

August 2022

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #37:

August's development focused on Bézier shape editing and easier layer transformation:

  • The pen is mightier than before: Bézier shapes gain support for curve extension and shape closing using the Pen tool and inserting points along curves with the Path tool.
  • Front and center: Layer origins may be set to control the center of rotation and scale using the Transform tool.

Meanwhile, design and architecture work on the Graphene node-based programming language has been well underway. Graphene is the data graph engine that will replace Graphite's tree-based layer system in the next few months and evolve into a raster-and-vector render engine over time.

September & October 2022

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #39:

September and October's development focused on major new features and improvements to make Graphite more useful and usable:

  • Like magic: Stable Diffusion, the open source AI image generator, is integrated into Graphite as the experimental Imaginate tool. It provides an innovative non-destructive workflow to interactively co-create art with AI.
  • Right on the nodes: Graphite's node graph engine prototype is finally up and running, now integrated with a node-powered tool that desaturates the underlying artwork. A graph panel will be ready shortly.
  • With flying colors: The color picker menu gains hex/RGB/HSV controls. Gradients get unlimited color transitions. The Eyedropper tool is rewritten to sample pixels from the viewport. The editor UI gets a color scheme design refresh for improved clarity, plus helpful new input widgets.

November 2022

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #40:

  • Filling in the blanks: The experimental Imaginate tool gains Inpaint/Outpaint, letting users replace content in masked areas and even un-crop images, powered by Stable Diffusion.
  • Connecting the dots: The node graph compositor now supports interactive editing, so users can drag nodes and chain together effects. Nodes can be set in the Properties panel or exposed as inputs in the graph.

December 2022

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #41:

  • Chain reaction: The experimental Imaginate feature, an AI image generation workflow powered by Stable Diffusion, becomes a node. Chain together a sequence of fine-tuned generation steps. And explore ideas by branching the graph into new creative directions.
  • Node nurturing: New features provide polish to the node graph. Nodes can be copy/pasted, hidden, previewed, and linked more easily.
  • Bugs, begone!: A major effort to improve editor usability fixes dozens of bugs and paper cuts. Boolean shape operations now crash less frequently, the UI no longer slows down badly over time, and undo history is finally fixed.

This video shows a timelapse of creating mixed vector-and-raster art using the latest features:

Graphite - Vector Editing: "Commander Basstronaut" Artwork (25x Timelapse)

2023

Full-year summary blog post: Looking back on 2023 and what's next

January 2023

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #42:

  • Picture this: Imported images are now part of the node graph. The new Image Frame node converts bitmap data into a vector rectangle holding the image. This paves the way for other vector data like shapes and text to soon be converted into nodes and composited alongside images.
  • Instant iterations: Incremental graph compilation avoids recompiling the whole graph each time an edit is made or a value changes. This makes iteration faster and enables caching of intermediate computations for faster rendering.

February 2023

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #43:

  • Shaping up: Editing shapes is now easier thanks to point selection and manipulation improvements.
  • Deep dive: The user experience of nested layer selection is improved by introducing "Deepest" and "Shallowest" modes.
  • Scroll settings: Scroll up-and-down, or zoom in-and-out, at your preference using the new configuration for scroll wheel behavior.
  • Graph growth: Additional node graph engineering introduces graceful type checking and brings GPU-accelerated compositing closer to realization.

March 2023

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #44:

  • Vector nodes: A major refactor moves vector shape layers into the node graph. Now the shape, transform, fill, and stroke are all set via nodes in the graph. Text is the final remaining holdout and will be node-ified next, letting the node graph act as the universal layer type.

This image shows the latest vector artwork created in Graphite, with a glimpse at the new node graph shown beneath for the selected layer:

Valley of Spires - Vector art made in Graphite

April 2023

Watch the project update presentation at the Rust Gamedev Meetup.

The following update originates from the Rust Gamedev Newsletter #45:

  • Brushing up: The new Brush tool makes it possible to paint raster-based art.
  • Writing down: A refactor of the Text tool integrates typographic content in the node graph. Finally, all artwork types are node-based.
  • Showing true colors: Node graph compositing now uses linear, not gamma, color. Key new color adjustment nodes are added.
  • Laying the groundwork: Further engineering work prepares the node graph language for GPU execution. And development continues toward in-graph layer stack compositing.

May 2023

Watch the project update presentation at the Rust Gamedev Meetup.

  • GPU goodness: The node graph engine now offers experimental GPU-powered execution using WGPU and WebGPU in Chromium browsers. Computation is now decoupled from the editor for asynchronous, high-performance workflows. Early rust-gpu shader compilation is also supported.
  • A better brush: The brush tool is now smoother and more responsive, with real-time performance and new eraser and blend modes for versatile raster editing.

June 2023

Watch the project update presentation at the Rust Gamedev Meetup.

  • Menu makeover: The menu for inserting nodes into the graph has been revamped.
  • Engine engineering: Further work has gone into the infrastructure of the Graphene node engine.

July 2023

Watch the project update presentation at the Rust Gamedev Meetup.

  • Reach for the stars: Vector editing is now more pleasant and comes with new support for box selection of points and drawing star shapes.

August 2023

September & October 2023

November 2023

December 2023

2024 (addendum)

Full-year summary blog post: Year in review: 2024 highlights and a peek at 2025

For completeness, the following is compiled as an addendum to the 2021-2023 development summaries presented above. For the year 2024, we explored breaking down the progress updates into detailed quarterly reports filled with visual feature demonstrations, each published as individual blog posts. They are linked below for further reading.

Q1 (January - March 2024)

Blog post: Graphite progress report (Q1 2024)

Further details by month:

Q2 (April - June 2024)

Blog post: Graphite progress report (Q2 2024)

Further details by month:

Q3 (July - September 2024)

Blog post: Graphite progress report (Q3 2024)

Further details by month:

Q4 (October - December 2024)

Blog post: Graphite progress report (Q4 2024)

Further details by month: