Keavon Chambers
e445e4b965
Replace O(N^2) is_acyclic() with O(V+E) using in-degree queue
2026-03-22 21:17:44 -07:00
Keavon Chambers
45e3626579
Skip HashMap construction in topological sort when node IDs are already sequential
2026-03-22 21:17:44 -07:00
Keavon Chambers
b8b92cb822
Eliminate redundant graph edge computation in the compilation pipeline
2026-03-22 21:17:44 -07:00
Keavon Chambers
f8d5dc1a21
Optimize remove_redundant_id_nodes from O(N×M) to O(N+M)
2026-03-22 21:17:44 -07:00
Keavon Chambers
b7a1b3e665
Fix CI failing on PRs reaching master via the merge queue
2026-03-22 00:10:55 -07:00
Keavon Chambers
342160b803
Remove unused frontend npm dependencies ( #3935 )
...
* Remove unused frontend npm dependencies
* Add a guard on database open
2026-03-21 21:19:24 -07:00
Keavon Chambers
06f27f1d3a
Simplify TS configuration
2026-03-21 19:45:57 -07:00
Keavon Chambers
96418e8f5d
Update dependencies to resolve advisories ( #3933 )
...
* Update Rust dependencies to resolve cargo-deny advisories
* Update minor/patch npm dependencies, too
2026-03-21 18:25:05 -07:00
Keavon Chambers
17da9ec099
New nodes: 'Decimate' and 'Simplify' ( #3851 )
...
* New node: Decimate
* Use preallocated stack to reduce number of allocations and fix double endpoints on closed paths
* Use Kurbo implementation of path-to-polyline sampling
* Add the 'Simplify' node
2026-03-21 17:08:18 -07:00
Keavon Chambers
d5d10fe548
Rename /frontend/wasm -> /frontend/wrapper ( #3927 )
2026-03-21 03:46:47 -07:00
Keavon Chambers
4a0c2016e6
Rename editor_api.rs -> editor_wrapper.rs ( #3926 )
2026-03-21 03:34:08 -07:00
Keavon Chambers
087b4cd71f
Rename EditorHandle -> EditorWrapper and organize editor_api.rs ( #3925 )
...
* Rename EditorHandle -> EditorWrapper and organize editor_api.rs
* pub -> pub(crate)
2026-03-21 03:27:57 -07:00
Keavon Chambers
9bcac1af2d
Remove JS module import prefixes and use absolute paths to the frontend directory ( #3924 )
...
* Remove JS module import prefixes
* Fix code review mistakes
2026-03-21 00:08:32 -07:00
Keavon Chambers
ed7987c881
Split apart the frontend Editor type into SubscriptionsRouter and EditorHandle ( #3923 )
...
* Remove the unused Editor.raw/wasmMemory/wasmImport
* Split out Editor.subscriptions
* Replace editor.handle.* with editor.* (1 of 2)
* Replace editor.handle.* with editor.* (2 of 2)
* Replace Editor typedef with EditorHandle import
* Pluralize subscription-router and rename subscriptionsRef->subscriptionsRouter and editorRef->editorHandle
* Remove editor.ts
* Update the readme
* Fix demo art loading bug
2026-03-20 23:34:13 -07:00
Keavon Chambers
64fd12a1a0
Break out helper functions from the frontend's managers and stores ( #3920 )
...
* Move destructor call to each manager/store constructor for safety
* Break out utility functions
2026-03-20 14:22:46 -07:00
Keavon Chambers
2e2c4fe180
Restructure frontend TS files so managers/stores export destructors instead of returning them from their constructors ( #3919 )
...
* Replace parameter passing with getContext and extract destroy functions to module-level exports
* Resend layouts from Rust when editor is re-mounted on HMR
* Code review
2026-03-19 18:25:34 -07:00
Keavon Chambers
124b17f609
Fix frontend HMR so the page doesn't break upon saving TS files and restructure frontend architecture ( #3871 )
...
* Clean up component setup/tear-down side effects
* Clean up more component setup/tear-down side effects
* Remove nonfunctional debouncer
* Clean up even more component setup/tear-down side effects
* Reuse backend state
* Fix HMR for IO Managers and for State Providers
* Rename IO Managers -> Managers and State Providers -> Stores
* Restructure and partially flatten managers/stores
* Code review fixes
* Review fixes
2026-03-19 13:38:41 -07:00
Keavon Chambers
eb562146ce
Consolidate CI web builds into the build workflow and restore deployments to GitHub environments ( #3916 )
...
* Restore the CI "View deployment" button in PRs after building
* Consolidate release.yml functionality into build.yml
* Move build from ci.yml to a delegated run in build.yml
* Rename CI to Check
* Code review fixes
* Review 2
2026-03-19 04:53:05 -07:00
Keavon Chambers
7f6571ee52
Fix regression from #3834 causing sub-menu lists to close if outside their hover stray distance
2026-03-18 15:53:48 -07:00
Keavon Chambers
187b4c38b4
Port website dev docs generated content scripts from JS to Rust to avoid intermediate parsing ( #3909 )
...
* Remove the crate dependency graph website generation intermediate generation step
* Remove the message system tree website generation intermediate generation step
* Code cleanup
* Remove cache system
* Fix Windows comment URL error
* Fix incorrect artifact download URLs
* Add Flatpak to comment
* Make Flatpak use debug/release mode choice instead of always release mode
2026-03-17 15:02:15 -07:00
Keavon Chambers
d9214c7292
Add the crate dependency graph visualization to the contributor guide ( #3907 )
...
* Add the crate dependency graph visualization to the contributor guide
* Code review fixes
* And more
2026-03-17 01:35:56 -07:00
Keavon Chambers
df8001fca8
Consolidate separate platform CI build workflows and improve !build comment commands
2026-03-16 17:10:00 -07:00
Keavon Chambers
efd142f030
Update, tidy up, and standardize GitHub Actions workflows
2026-03-16 02:49:42 -07:00
Keavon Chambers
f7815d0cd0
Add the build link bisect tool to the website ( #3902 )
...
* Add the bisect tool
* Add `cargo run explore` to open bisect tool
* Website cleanup
* Bug fixes
* Fix again
2026-03-16 02:46:21 -07:00
Keavon Chambers
a3f88b0f96
Prep for the RC4 release of the desktop app
2026-03-11 14:53:47 -07:00
Keavon Chambers
6d0357bbcf
Fix Vello rendering blurry images with a half-pixel offset
2026-03-11 04:48:08 -07:00
Keavon Chambers
81d0b8b8d4
Fix the Eyedropper tool on web with Vello and on desktop with SVG ( #3886 )
2026-03-11 03:26:02 -07:00
Keavon Chambers
2ac82a10b5
Add a workaround for flickering vector mesh rendering produced by the Boolean Operation node ( #3884 )
...
* Add a workaround for flickering vector mesh rendering produced by the Boolean Operation node
* Code review feedback
2026-03-11 08:55:15 +01:00
Keavon Chambers
2910e50b2f
Improve Shape tool arrow mode interactive drawing with angle modifier keys and endpoint gizmos ( #3874 )
...
* Make the order of Shape tool shape types consistent
* Add Arrow shape modifier keys and snapping support
* Add endpoint dragging to arrows
* Show the default cursor when hovering line/arrow endpoints
* Reduce duplicated function
* Fix incorrect coordinate spaces
* Improve endpoint dragging clarity
2026-03-10 03:41:35 -07:00
Keavon Chambers
9f9dd71e91
Fix vector drawing tool transform space handling ( #3872 )
...
* Fix vector drawing tool transform space handling
* Review fixes
* Fix test
2026-03-10 00:58:51 -07:00
Keavon Chambers
52d2b38a82
Refactor the TypeScript data flow for full type safety and auto-generation of Rust types ( #3865 )
...
* Migrate Specta to Tsify to auto-generate messages.ts, working except colors and widgets
* Adopt the generated FillColor/Color/GradientStops
* Fix widget typing
* Separate WidgetGroup enum variants into wrapper structs
* Small rename
* Simplify widgets further
* Clean up message type references
* Switch type imports to the auto-generated file
* Remove lowercase serde rename
* Fix FillChoice deserialization
* Fix small regression from #3837
* Improve type safety
* Make WidgetSpan type-safe
* More cleanup and type safety
* More type safety
* More type safety
* Get the rest to type-check without errors; improve widget builder macro to have optional icons; improve Svelte 5 configs
* Cargo fmt
* Fix imports
* Update outdated readme info
* Fix lint command rename references
* Fix typos
* One more typos fix
* Remove unnecessary dep: prefix from the edited Cargo.toml files
* Remove excess parts from Cargo.toml
* Fix compiling on desktop
* Revert "Remove excess parts from Cargo.toml"
This reverts commit 6b711117b3a5d5d8a3ee20f36a43bc74930b7c82.
* Update dev docs with simpler, more accurate instructions
2026-03-09 16:35:04 -07:00
Keavon Chambers
ead914ec2b
Fix regression where Vello doesn't render new document opened after closing all documents ( #3849 )
...
* Fix regression where Vello doesn't render new document opened after closing all documents
* Remove last_svg_canvas and do this logic in the frontend
2026-03-05 09:54:31 +00:00
Keavon Chambers
8a1dfb9d8f
Refactor messages.ts by removing class-transformer and JS classes ( #3858 )
...
* Fix gamma correction with HTML-based editable Text tool text
* Migrate simple, undecorated classes to types
* Remove TupleToVec2 transformation
* Remove @Transform from tooltips
* Cleanup: replace value.toString() with String(value) everywhere
* Convert documentId from string to bigint
* Migrate the rest of the easy @Transform/@Type decorations
* Migrate FillChoice
* Migrate WidgetDiffUpdate
* Migrate WidgetInstance
* Migrate away from classes that extend WidgetProps
* Remove class-transformer and all classes in messages.ts
* Migrate UI layout passing
* Remove dead code
* Remove unnecessary export and readonly prefixes
* Remove HSVA type
* Break out Color, Gradient, and FillChoice functions into a utility-functions file
* Move widget helper functions from messages.ts into a new utility-functions file; restructure type imports
* Reduce internal type defs
* Rename JsMessage to FrontendMessage
* Code review fixes
* Fix other usages
* Tidying up
2026-03-05 01:43:21 -08:00
Keavon Chambers
f00a15a4c9
Clean up Gradient and Color classes in TS by removing their methods ( #3857 )
2026-03-04 02:39:07 -08:00
Keavon Chambers
5834ee9ce4
Clean up generic widget handling code in the frontend ( #3856 )
...
* Clean up WidgetSpan component code to avoid the giant if-chain for choosing a widget
* Improve typing support
2026-03-04 01:00:09 -08:00
Keavon Chambers
8a75c0c1e1
Add layer locked toggle icon and context menu entry to node graph ( #3855 )
...
* Add layer locked toggle icon and context menu entry to node graph
* Simplify logic
2026-03-04 06:30:04 +00:00
Keavon Chambers
7cc3097acd
Make the Outline render mode draw with consistent stroke thickness at any viewport zoom ( #3848 )
...
* Remove dead code for now-retired SVG implementation
* Implement viewport zoom compensation for thickness
2026-03-02 20:13:05 -08:00
Keavon Chambers
a8b5203d6c
Clean up code for drawing overlays to accept sRGB hex codes instead of Color structs ( #3839 )
...
* Clean up code for drawing overlays to accept sRGB hex codes instead of Color structs
* Consolidate hex code parsing functions
2026-02-27 14:08:58 -08:00
Keavon Chambers
9ecbfb7110
New nodes: RGBA to Color, HSVA to Color, Hex to Color, and Read Gradient ( #3838 )
...
* New nodes: RGBA to Color, HSVA to Color, Hex to Color, and Read Gradient
* Simplify
2026-02-26 18:22:04 -08:00
Keavon Chambers and gemini-code-assist[bot]
f1cbc4b396
Make the node graph use Table<GradientStops> instead of GradientStops ( #3837 )
...
* Switch from GradientStops to Table<GradientStops> in all nodes
* Remove TaggedValue::ColorNotInTable
* Fix bug
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Add migrations
* Fix default gradient on empty table
* Update demo artwork
---------
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-26 14:07:31 -08:00
Keavon Chambers
81c73d11ff
Clean up duplicated code used for recursively flattening graphic types ( #3836 )
...
* Reduce recusive flattening algorithm duplication
* Generalize further
* Avoid code duplication in the 'Flatten Path' node
* Avoid cloning
* Include intermediate levels of alpha blending composition
2026-02-26 05:36:23 -08:00
Keavon Chambers
cde7d5f951
New nodes: Colors to Gradient, Flatten Color, and Flatten Gradient ( #3835 )
...
* New nodes: Colors to Gradient, Flatten Color, and Flatten Gradient
* Fix Data panel not showing GradientStops
* Fix wrong category
2026-02-26 03:44:12 -08:00
Keavon Chambers
4090f6c980
Tweak short-term roadmap details
2026-02-25 21:40:36 -08:00
Keavon Chambers
e62771845f
Add an in-viewport color picker to the Gradient tool when double-clicking a color stop ( #3834 )
...
* Hide batched blocked debug print messages
* Implement the color picker on double-clicking stops
* Code review
2026-02-25 21:03:12 -08:00
Keavon Chambers and Timon
82cf8eb369
Upgrade Linebender and related dependencies ( #3819 )
...
Co-authored-by: Timon <me@timon.zip >
2026-02-25 19:10:57 +00:00
Keavon Chambers
8117ddcdb3
Add Gradient tool control bar buttons, Reverse Stops and Reverse Direction ( #3830 )
...
* Add Gradient tool control bar buttons, Reverse Stops and Reverse Direction
* Consolidate reused gradient line updating code
2026-02-25 00:48:21 -08:00
Keavon Chambers
b4679b0675
Improve Gradient tool dragging behavior and make hints reactive to current interaction state ( #3828 )
...
* Improve Gradient tool dragging behavior and make hints reactive to current interaction state
* Reduce code duplication for drawing stops
* Fix coordinate system issue when PTZ'ing document during drag or autopan
2026-02-24 22:17:29 -08:00
Keavon Chambers
4a6cdffd84
Add draggable diamond midpoint gizmos to the Gradient tool ( #3826 )
2026-02-24 20:25:15 -08:00
Keavon Chambers
691d965bcf
Add support for gradients with midpoints and add draggable diamonds to the color picker dialog ( #3813 )
...
* Refactor GradientStops to use struct-of-arrays and include midpoint
* Implement interaction and rendering
* Make color picker saturation-value color picking snap to original position and show both axis lines
Make color picker saturation-value color picking snap to original position and show both axis lines
* Add graphite:midpoint attribute to SVG exports
* Add graphite:midpoint parsing to SVG importer
2026-02-23 19:21:51 -08:00
Keavon Chambers
71b4c98de7
Fix logarithmic spiral not drawing if Inner Radius is 0
2026-02-22 13:48:19 -08:00
Keavon Chambers and Dennis Kobert
9f2c8713ff
Add the SVG Preview render mode in place of the Vello option in the preferences ( #3797 )
...
* Remove Vello from preferences
* Add the Render Mode: SVG Preview radio button
* Remove SVG outline renderer
* Add a tooltip explaination when disabled in unsupported browsers
* Fix Eyedropper tool to support Outline render mode
* Use #[allow(clippy::too_many_arguments)] instead of tuple
* Rerun nodegraph when max render area is changed
---------
Co-authored-by: Dennis Kobert <dennis@kobert.dev >
2026-02-22 20:27:26 +00:00
Keavon Chambers
5aca75dcbd
Simplify breadcrumb trail buttons widget styling
2026-02-20 22:50:05 -08:00
Keavon Chambers
7ca6470656
Rename the repeat nodes to replace "Instance" terminology with "Repeat" ( #3794 )
...
* WIP
* Move the Mirror node from the module 'vector' to 'graphic'
* Update demo art
* Fix failing tests
Fix tests
2026-02-20 22:10:59 -08:00
Keavon Chambers
5a1503fc98
New node: Flatten Raster
2026-02-20 13:35:12 -08:00
Keavon Chambers
bd1c54907d
Rename nodes from "Instance ___" -> "Read ___" and "Instance Map" -> "Map Vector" ( #3792 )
...
* Rename nodes from "Instance ___" -> "Read ___" and "Instance Map" -> "Map Vector"
* Update leftover references and demo artwork
* Simplify logic
* Fix test
2026-02-20 08:52:36 +00:00
Keavon Chambers
da278e0264
New node: Map Points
...
Also resolves #3217
2026-02-19 14:37:35 -08:00
Keavon Chambers
258748ec51
Swap the default placement order of Fill and Stroke nodes in layers ( #3789 )
2026-02-19 13:15:11 -08:00
Keavon Chambers
6824f55929
Add hover style to checkboxes when their corresponding labels are hovered
2026-02-18 17:37:34 -08:00
Keavon Chambers
5d5993bcca
Fix opacity not being included in alpha of Fill type when converted from Table<Color> ( #3785 )
...
* Fix opacity not being included in alpha of Fill type when converted from Table<Color>
* Avoid unwrap, I guess
2026-02-18 09:21:02 +00:00
Keavon Chambers
df0c9dcba2
Fix Breadcrumb Trail widget pixel misalignment at non-integer UI scaling
2026-02-15 00:18:10 -08:00
Keavon Chambers
c574f58ecd
Fix debug assert failure from selecting zero-sized objects
2026-02-15 00:01:09 -08:00
Keavon Chambers
8738e59c21
Improve the QR Code node ( #3765 )
2026-02-14 20:53:29 +00:00
Keavon Chambers
1ec75ab213
Add application privacy policy to the website
2026-02-11 19:54:41 -08:00
Keavon Chambers
4cda1ddd29
Update student projects list on the website
2026-02-11 01:35:08 -08:00
Keavon Chambers
390004897b
Add "Loop Level" to the Position context reader node ( #3679 )
...
* Add "Loop Level" to the Position context reader node
* Remove InjectPosition
2026-01-28 10:52:39 +00:00
Keavon Chambers
ea293575e0
Fix inability to click node in catalog, a Svelte 5 regression
...
Closes #3693
2026-01-27 15:25:56 -08:00
Keavon Chambers
84e9d8c192
Prep for the RC3 release of the desktop app
2026-01-26 17:32:58 -08:00
Keavon Chambers
19e9af3d43
Fix 'Apply Transform' node applying only to anchors but not also handles ( #3687 )
2026-01-26 12:32:17 -08:00
Keavon Chambers
3488d5b8e7
Fix color picker's broken gradient stop selection due to Svelte 5 not treating components as classes
2026-01-26 11:50:01 -08:00
Keavon Chambers
a88342b8da
Add the "Rate" multiplier parameter to the Animation Time node ( #3685 )
2026-01-26 00:37:15 -08:00
Keavon Chambers
568831bd2f
Fix regression breaking Into/Convert node type coercion ( #3681 )
2026-01-25 16:26:05 -08:00
Keavon Chambers
781fa7ae95
Move contributor docs editor message structure tree generator from test to tools directory ( #3663 )
2026-01-20 23:53:15 -08:00
Keavon Chambers
7af60e02a3
Add the auto-generated node catalog to the website's user manual ( #3662 )
...
* Generate the MVP node catalog in the manual (with some placeholders)
* Implement nearly the rest of everything
* Move to the tools directory and make it generate nicer default values
* Add category descriptions
* Organize file structure and improve type naming
* Improve book table of contents code
* Add collapsing chapter navigation to the book template
* Add to build workflow
* Clean up site structure
2026-01-20 22:52:03 -08:00
Keavon Chambers
5543afd44b
Clean up old website code and files ( #3658 )
2026-01-19 22:09:51 -08:00
Keavon Chambers
fd0addf61c
Update website to use Zola 0.22 with new code block syntax highlighting
2026-01-18 00:11:12 -08:00
Keavon Chambers
2ffb87c9d2
Bump website npm tooling dependencies ( #3649 )
2026-01-17 16:26:16 +00:00
Keavon Chambers
915a344a05
Bump frontend dependencies to Svelte 5 ( #3648 )
...
* Add more recommended VS Code default configs
* Upgrade frontend dependencies including Svelte 5
* Fix derived_references_self runtime error
* Fix lint warnings
2026-01-17 14:31:50 +00:00
Keavon Chambers
3b55064f44
Add tooltip documentation to the Text node and tidy up node catalog categorization ( #3645 )
...
* Add more node doc comments
* Tidy up node categories
2026-01-16 01:27:56 -08:00
Keavon Chambers
39849c9c02
Simplify Svelte component structure in the window subfolder
2026-01-14 19:06:22 -08:00
Keavon Chambers
20a595db39
Fix a bug where Transform nodes would cause a reversal of the 'Instance Index' node's 'Loop Level' counting direction
2026-01-13 23:15:42 -08:00
Keavon Chambers
1b91198b28
Fix 'Regular Polygon' and 'Star' shapes incorrectly having cubic handles, not linear ( #3606 )
...
Fix shape nodes creating cubic-curved polylines
2026-01-06 20:58:08 -08:00
Keavon Chambers
bd847034f3
Bump year references to 2026
2026-01-06 15:12:55 -08:00
Keavon Chambers
02e3293e72
Prep for the RC2 release of the desktop app
2026-01-06 04:38:52 +01:00
Keavon Chambers
4f4ec7ffff
Add the new AI contribution policy
2026-01-05 17:03:42 -08:00
Keavon Chambers
2fa958aa79
Remove generics from the user-facing name for the Vector data type
2026-01-01 21:26:02 -08:00
Keavon Chambers
fa45efa9e2
New node: Pointer Position ( #3535 )
...
* New node: Pointer Position
* Fix test
2025-12-27 16:02:23 -08:00
Keavon Chambers
4ab75c9c1c
Update the website with end-of-year details
2025-12-25 05:45:56 -08:00
Keavon Chambers
9f25c50ca1
Prep for the RC1 release of the desktop app
2025-12-24 22:45:08 -08:00
Keavon Chambers
63217feac6
Organize the categories of widget component props
2025-12-23 21:23:13 -08:00
Keavon Chambers
6dea184b03
Update the color of scrollbars to match the latest design
2025-12-23 15:13:12 -08:00
Keavon Chambers
2f880fa035
Fix missing artboard layer icon
2025-12-23 14:43:13 -08:00
Keavon Chambers
415d4b578a
Fix markdown tooltips treating Rust type labels as HTML tags
...
Closes #3520 , a regression introduced in #3488 .
2025-12-22 15:23:40 -08:00
Keavon Chambers
9d26c040e9
Box the widget: Widget field of WidgetInstance ( #3506 )
...
Box the `pub widget: Box<Widget>` field of `WidgetInstance`
2025-12-22 04:18:33 -08:00
Keavon Chambers
64ed21f694
Clean up code with better naming
2025-12-21 23:35:00 -08:00
Keavon Chambers
123108c813
Promote vector meshes from experimental by removing it from preferences
2025-12-21 19:33:42 -08:00
Keavon Chambers
d441a02e72
Upgrade Rawkit library Rust dependencies ( #3124 )
...
* Upgrade Rawkit library Rust dependencies
* Continue on sccache failures
* Update again
2025-12-20 17:36:02 -08:00
Keavon Chambers
0a5e65bc9d
Fix the Brush tool being accessible while disabled in preferences
2025-12-20 03:48:41 -08:00
Keavon Chambers
3000519a10
New nodes: 'Reciprocal', 'Angle Between', and 'Angle To'
2025-12-20 02:36:43 -08:00
Keavon Chambers
f1e8ebefc5
Improve tooltip docs with Markdown styling and refined math node explanations ( #3488 )
2025-12-20 01:05:15 -08:00
Keavon Chambers
2c21e1a90b
Desktop: Clean up the UI scale setting in the Preferences dialog
2025-12-20 00:20:50 -08:00