Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
319 commits
Select commit Hold shift + click to select a range
f22a7cd
wip on eventstream
jonmmease Dec 12, 2024
9d3067a
Use event stream manager in iris example
jonmmease Dec 12, 2024
056e85d
separate key press and release
jonmmease Dec 13, 2024
b7e93b0
Add modifiers to all scene events
jonmmease Dec 13, 2024
3cc15b8
simplify to just use throttle
jonmmease Dec 13, 2024
260adda
split manager out into separate file
jonmmease Dec 13, 2024
68960f0
Split out avenger-app and avenger-winit-wgpu crates
jonmmease Dec 13, 2024
f2b7b92
pan and zoom iris scatter
jonmmease Dec 14, 2024
b7af84e
whew, fix double rendering
jonmmease Dec 14, 2024
3514cac
hover when holding meta
jonmmease Dec 14, 2024
7c7d130
Add cached fingerprint to ScalarOrValue
jonmmease Dec 14, 2024
1d85e3b
Add linear scale adjustment calculation
jonmmease Dec 14, 2024
ee4d160
Optimize pan/zoom with uniform shader adjustment and caching
jonmmease Dec 15, 2024
4135423
clean up some logging
jonmmease Dec 15, 2024
e74a682
Use associated type for numeric scale domain, now object safe
jonmmease Dec 17, 2024
3a02497
avenger chart crate
jonmmease Dec 17, 2024
90517fc
fix group traversal
jonmmease Dec 17, 2024
f902e28
Make numeric scale object safe
jonmmease Dec 17, 2024
fb6a357
un needed
jonmmease Dec 17, 2024
cdf4edf
date scale
jonmmease Dec 17, 2024
f2bca5c
Remove Tz generic from timestamtz scale
jonmmease Dec 17, 2024
b4c72dc
wip avenger chart
jonmmease Dec 18, 2024
fbb484b
wip scales2 crate
jonmmease Dec 19, 2024
51ae4e7
scales3, another try
jonmmease Dec 20, 2024
13564f5
port numeric scales and tests to scales3 crate
jonmmease Dec 20, 2024
b36cdd7
Add ordinal scale
jonmmease Dec 20, 2024
9b83bda
point scale
jonmmease Dec 21, 2024
4291e50
threshold scale
jonmmease Dec 21, 2024
ac7c1dd
quantile scale
jonmmease Dec 21, 2024
1a2dc85
start fixing wgpu-scales example
jonmmease Dec 21, 2024
44e104f
ConfiguredScale, toward axis again
jonmmease Dec 22, 2024
eee6659
get scale examples working again
jonmmease Dec 23, 2024
88dc154
Remove scales/scales2 rename scales3
jonmmease Dec 23, 2024
5654982
fix avenger-chart
jonmmease Dec 23, 2024
bfc39c5
Add coerce scale
jonmmease Dec 23, 2024
6fafd4b
Update avenger-chart to use ConfiguredScale
jonmmease Dec 24, 2024
e2a22da
pass DataFrames not context
jonmmease Dec 24, 2024
bb5e82c
Add override params
jonmmease Dec 24, 2024
7696a4e
Fix encoding
jonmmease Dec 24, 2024
9120b97
more chart improvements
jonmmease Dec 24, 2024
0050f28
another scale experiment
jonmmease Dec 25, 2024
6cff076
tomls
jonmmease Dec 25, 2024
8cb33ea
wip scales2
jonmmease Dec 25, 2024
757bfc3
avenger-chart2 experiment
jonmmease Dec 26, 2024
ed5d5c8
promote scales2, finish porting scales
jonmmease Dec 26, 2024
71c9d3c
fix avenger-chart2
jonmmease Dec 27, 2024
61d4e10
get examples working again
jonmmease Dec 27, 2024
a1c10bc
rename chart2 to chart
jonmmease Dec 27, 2024
a0aa7eb
more toward pan/zoom in chart framework
jonmmease Dec 28, 2024
dd86b4a
Move app build to avenger-chart, asyncify
jonmmease Dec 29, 2024
43f4815
more controller work
jonmmease Dec 30, 2024
2bc59c2
proof of concept tooltip controller
jonmmease Dec 31, 2024
6919243
Add additional symbol options
jonmmease Jan 2, 2025
53d0b1f
rule dash
jonmmease Jan 2, 2025
5189093
fix tests
jonmmease Jan 2, 2025
d5660fa
rename rule x0/x1 -> x/x2
jonmmease Jan 2, 2025
e7c8606
Support stroke dash
jonmmease Jan 3, 2025
d871ca3
Add remaining text options
jonmmease Jan 3, 2025
9dcd206
Pull out avenger-image crate
jonmmease Jan 3, 2025
52957e2
finish image mark in avenger-chart
jonmmease Jan 3, 2025
bc0a67b
Add line and path marks
jonmmease Jan 3, 2025
3fdd5d9
add trail mark
jonmmease Jan 3, 2025
a7923d8
lift marks up a level
jonmmease Jan 3, 2025
4b85aed
Add initial guides/axes to avenger-chart
jonmmease Jan 3, 2025
7f93d80
nice
jonmmease Jan 4, 2025
4bdd617
work towards legends
jonmmease Jan 4, 2025
e38384d
fix multi-thread runtime
jonmmease Jan 14, 2025
4ec037d
toward testing image baselins
jonmmease Feb 1, 2025
a70cc31
Extract utility functions
jonmmease Feb 1, 2025
43b7bc0
Make it possible to set param values during png export
jonmmease Feb 1, 2025
57b4647
scatter baseline
jonmmease Feb 23, 2025
3847322
Remove avenger-chart experiment
jonmmease Apr 5, 2025
e62d50e
Remove stale crates
jonmmease Apr 5, 2025
961ac0d
fix format
jonmmease Apr 5, 2025
6227307
clippy fix / fmt
jonmmease Apr 5, 2025
4486fa5
wip parser
jonmmease Apr 6, 2025
e571ebc
parse sql
jonmmease Apr 6, 2025
95f41e6
Check sql error
jonmmease Apr 6, 2025
345539e
Use expressions inside if/match
jonmmease Apr 6, 2025
a182438
add dataset to grammar
jonmmease Apr 6, 2025
cbf91aa
datasets with in qualifier should have no query
jonmmease Apr 7, 2025
2c0ae16
in params don't have default values
jonmmease Apr 7, 2025
d6e6f74
Add expr construct
jonmmease Apr 7, 2025
18041a6
types optional
jonmmease Apr 7, 2025
23cd7e6
Add parsing of functions
jonmmease Apr 7, 2025
f5a50d1
Support functions inside components
jonmmease Apr 7, 2025
5f577d0
almost there
jonmmease Apr 8, 2025
db00ca4
fix bound component parsing
jonmmease Apr 8, 2025
9928ff4
support multiple component functions
jonmmease Apr 8, 2025
c7ef077
Fix sql_expr matching
jonmmease Apr 8, 2025
3369cb9
final function semicolon is optional
jonmmease Apr 8, 2025
d7e907c
fix top-level functions
jonmmease Apr 8, 2025
240d1ed
Allow in params and exprs to have default value
jonmmease Apr 8, 2025
90ca45f
update stacked bar chart example
jonmmease Apr 8, 2025
0b0165e
dataset reference
jonmmease Apr 8, 2025
b2eff14
parse properties values as sql expr or statements
jonmmease Apr 8, 2025
2335edb
support parsing callback declaration
jonmmease Apr 8, 2025
34181ff
Initial callback definition
jonmmease Apr 9, 2025
86214b2
Support if/match in callback definitions
jonmmease Apr 9, 2025
b149369
Add support for private param/expr/datasets inside callback definitions
jonmmease Apr 9, 2025
fc9702b
support assigning to self, parent, root
jonmmease Apr 9, 2025
c930ede
Use regular colon syntax for component properties.
jonmmease Apr 9, 2025
d054045
Support in/out/private component variables
jonmmease Apr 9, 2025
9c6625d
Support component reference in component item
jonmmease Apr 9, 2025
cbbf54b
Initial parser wrapping sqlparser-rs.
jonmmease Apr 12, 2025
7dae72b
wip compilers/evaluation
jonmmease Apr 12, 2025
5289d1b
wip tasks
jonmmease Apr 12, 2025
9ded4a6
initial task graph
jonmmease Apr 13, 2025
db78a2b
Add support for output variables and fingerprints
jonmmease Apr 13, 2025
a6d5c24
simplify and remove output variable support
jonmmease Apr 13, 2025
c1a1a92
Add a cache and task graph runtime
jonmmease Apr 13, 2025
07cced8
Add spawn policy on tasks
jonmmease Apr 13, 2025
e12f031
use past task runtime to decide on spawning
jonmmease Apr 13, 2025
fc4b336
use segmented LRU cache
jonmmease Apr 13, 2025
49971cb
Refactor with task_graph module
jonmmease Apr 13, 2025
cfb37c5
move variables
jonmmease Apr 13, 2025
b7d122a
Add memory limit for cache
jonmmease Apr 13, 2025
519923e
deconflate variable and dependency
jonmmease Apr 15, 2025
ad5df95
Add TaskValueContext and TaskDataset
jonmmease Apr 15, 2025
9477073
table reference in query
jonmmease Apr 15, 2025
0af4014
parse component props
jonmmease Apr 16, 2025
909a394
Support references to nested datasets
jonmmease Apr 16, 2025
cccccc0
Add initial scope utilities
jonmmease Apr 16, 2025
2c34be4
Add scope implementation. support parent/self/root
jonmmease Apr 17, 2025
7be2fe7
Example like a mark
jonmmease Apr 17, 2025
9fdb7dc
fix fingerprinting
jonmmease Apr 17, 2025
dcd0c3d
Track registered components, support property binding with initial va…
jonmmease Apr 17, 2025
6dae898
propagate errors through visitor
jonmmease Apr 17, 2025
ee1d44c
Add _encoded_data and _config datasets to mark components automatically.
jonmmease Apr 17, 2025
f2a714a
Add function to build rect mark from ArrowTable
jonmmease Apr 17, 2025
b17edb4
implement PartialEq for SceneMark
jonmmease Apr 17, 2025
1d31406
Make marsk Hash
jonmmease Apr 18, 2025
da3e1bc
Remove old parser experiment
jonmmease Apr 18, 2025
f36e725
Eval file to scenegraph
jonmmease Apr 19, 2025
fd5c89a
Add outline of lang-preview crate
jonmmease Apr 19, 2025
475dca7
Add file changed event to eventstream crate
jonmmease Apr 19, 2025
e7558ed
Add avenger-lang-preview crate for hot reload watching rendered aveng…
jonmmease Apr 19, 2025
07fd279
Don't panic on invalid file
jonmmease Apr 20, 2025
de85cad
More build mark functions
jonmmease Apr 20, 2025
ff58092
Add remaining marks
jonmmease Apr 21, 2025
34b52e9
Add initial snapshot tests
jonmmease Apr 21, 2025
ac12577
save image from preview
jonmmease Apr 21, 2025
0d936d6
store baselines avgr files
jonmmease Apr 21, 2025
94efb1b
use clap and add preview/save subcommands
jonmmease Apr 21, 2025
7c47f20
rename crate to avenger-cli
jonmmease Apr 21, 2025
8d2da0c
Add tree sitter grammar hello world
jonmmease Apr 22, 2025
b2bc7ee
zed task to launch preview
jonmmease Apr 22, 2025
897bf14
remove tree-sitter experiment
jonmmease Apr 23, 2025
990d873
rework AST to include top-level component and imports
jonmmease Apr 24, 2025
660ef0a
fix evaluation
jonmmease Apr 24, 2025
8a64b3f
name no longer required for component props
jonmmease Apr 24, 2025
16dee7d
Add function parsing
jonmmease Apr 24, 2025
19fabfd
parse method
jonmmease Apr 24, 2025
727622e
Add component if/match
jonmmease Apr 24, 2025
5adb4ab
Pass task graph runtime to tasks so they can use it
jonmmease Apr 24, 2025
3ed546b
wip, not working
jonmmease Apr 25, 2025
b89b672
embed generationi code
jonmmease Apr 26, 2025
a10768e
move into parse module
jonmmease Apr 26, 2025
6f4c476
reorg
jonmmease Apr 27, 2025
94efdf9
Pretty printing
jonmmease Apr 27, 2025
e9b9642
use color for label
jonmmease Apr 27, 2025
3adcc47
remove component def
jonmmease Apr 28, 2025
9e7666f
Initial parser
jonmmease Apr 29, 2025
de6244a
parse binding
jonmmease Apr 29, 2025
8f56adb
Add function parsing
jonmmease Apr 29, 2025
76cd415
Add name methods for props
jonmmease Apr 29, 2025
a3542d3
visitor trait for avenger ast
jonmmease Apr 29, 2025
2f6c7dc
Add visitor context
jonmmease Apr 29, 2025
f1929d6
Add project parsing AST
jonmmease Apr 29, 2025
a412b77
support visitor over projects
jonmmease Apr 29, 2025
c122efd
wip runtime
jonmmease Apr 29, 2025
2396e7b
wip fill out avenger runtime
jonmmease Apr 30, 2025
45a9d21
wip build task graph
jonmmease Apr 30, 2025
caacc72
task to generate scene graph
jonmmease May 1, 2025
4734323
tests
jonmmease May 1, 2025
bae9f8a
Move visitors into corresponding moduels
jonmmease May 1, 2025
6838e2d
Remove Project container AST
jonmmease May 1, 2025
e7d5866
Add file system loder
jonmmease May 1, 2025
151799a
Initial import support
jonmmease May 1, 2025
f42482c
cli updates
jonmmease May 2, 2025
e4b6cbe
runtime updates
jonmmease May 2, 2025
703d683
In preview, watch files in directory recursively
jonmmease May 2, 2025
312e7e9
Rename avanger-lang2 to avenger-lang
jonmmease May 2, 2025
b1bed19
Avoid double update when file changes
jonmmease May 2, 2025
8a4c3bf
pretty-print lexing errors
jonmmease May 2, 2025
db8e791
sip
jonmmease May 3, 2025
06e403d
wip expand function sytax
jonmmease May 3, 2025
ce692d8
first function call working
jonmmease May 3, 2025
cca02db
fixes and nice support
jonmmease May 3, 2025
edab310
CREATE FUNCTION experiments
jonmmease May 4, 2025
c606f9e
Initial `create function` support
jonmmease May 4, 2025
bba1a0e
Support create function!
jonmmease May 5, 2025
b0bf774
Don't need domain_expr any more
jonmmease May 5, 2025
b6e4d45
Componentize pars of iris chart
jonmmease May 5, 2025
5e00a43
simplify format logic
jonmmease May 9, 2025
d9bfac2
add component references
jonmmease May 9, 2025
5a4800b
Add component registration type
jonmmease May 9, 2025
f06cb1e
update baseline
jonmmease May 9, 2025
5e38f80
Simpler ticks calculation
jonmmease May 10, 2025
2d1a105
Add initial interpreter experiment
jonmmease May 17, 2025
a3cad94
Add if and while control flow structures
jonmmease May 17, 2025
71f8636
cargo check fixes
jonmmease May 28, 2025
0d2d731
Remove round of warnings
jonmmease May 29, 2025
9060771
fmt
jonmmease May 29, 2025
3780151
fix some tests
jonmmease May 29, 2025
2e36789
fix some tests
jonmmease May 29, 2025
72461c9
Add corece and color interpolation tests
jonmmease May 29, 2025
bc5388a
update number formatting and test
jonmmease May 29, 2025
e22fed3
Fork format_num crate
jonmmease May 29, 2025
4025b39
Add log color test
jonmmease May 29, 2025
130e9dc
Add avenger-scales examples
jonmmease May 29, 2025
a6d6068
fix color_range_as_gradient_stops for non-linear scales
jonmmease May 29, 2025
de78bce
Add avenger-scales readme
jonmmease May 29, 2025
27b9f1a
Move avenger-vega-test-data crate out of workspace, to standalone crate.
jonmmease May 29, 2025
906fb0c
update vega image baselines
jonmmease May 29, 2025
31aadcd
Add readme for avenger-image crate
jonmmease May 29, 2025
bde34f9
Add a readme for avenger-text
jonmmease May 29, 2025
b329c55
remove old runtime crate
jonmmease May 30, 2025
3abff76
Add remaining READMEs for crates
jonmmease May 30, 2025
270dba1
update examples
jonmmease May 30, 2025
c3c827f
wasm example fixes
jonmmease May 30, 2025
9c08dcd
Fix import
jonmmease May 30, 2025
96fc41e
Remove datafusion-common dependency from avenger-scales
jonmmease May 30, 2025
6781f21
Remove datafusion-common dependency everywhere
jonmmease May 30, 2025
8e58091
toward wasm compat
jonmmease May 30, 2025
e7d35e5
Remove some unneeded time usage
jonmmease May 30, 2025
eaa0002
Fix wasm support in avenger-winit-wgpu and iris-pan-zoom example
jonmmease May 30, 2025
7ce1f48
update README
jonmmease May 31, 2025
fe8262e
fmt everything
jonmmease May 31, 2025
f51149a
clippy fix
jonmmease May 31, 2025
aaa5aa9
clippy fixes
jonmmease May 31, 2025
78c27e5
Update wgpu dependency from 23.0.1 to 25.0.2
jonmmease Jun 14, 2025
41aab3d
Update crate dependencies to latest patch and minor versions
jonmmease Jun 14, 2025
49f82a1
Update cosmic-text from 0.12.1 to 0.14.2
jonmmease Jun 14, 2025
c5a0f7d
Document geo 0.30 update status in tasks
jonmmease Jun 14, 2025
01b036a
Update ordered-float from 4.5.0 to 5.0.0
jonmmease Jun 14, 2025
d851d60
Update strum from 0.26 to 0.27
jonmmease Jun 14, 2025
c7edac1
Update resvg/usvg from 0.44.0 to 0.45.1
jonmmease Jun 14, 2025
4aa4264
Update PyO3 and pythonize from 0.23 to 0.25
jonmmease Jun 14, 2025
f50dc83
format
jonmmease Jun 19, 2025
febd95a
fix fmt, clippy
jonmmease Jun 19, 2025
e49d06b
Add cargo test to GitHub Actions workflow
jonmmease Jun 19, 2025
4420de6
Fix CI: Exclude GPU-dependent tests from GitHub Actions
jonmmease Jun 19, 2025
af37ea2
Fix formatting issues in avenger-winit-wgpu
jonmmease Jun 19, 2025
7d46128
Fix clippy await_holding_refcell_ref warnings
jonmmease Jun 19, 2025
393f35e
Suppress clippy::new_ret_no_self warnings in scale implementations
jonmmease Jun 19, 2025
a05f1d0
Suppress clippy warnings for CI
jonmmease Jun 20, 2025
fc75a12
remove old zed config
jonmmease Jun 20, 2025
253bf0c
Remove accidental git repo in examples/iris-pan-zoom/anything
jonmmease Jun 28, 2025
35276cb
Review cleanup
jonmmease Jun 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
39 changes: 0 additions & 39 deletions .github/workflows/javascript.yml

This file was deleted.

143 changes: 0 additions & 143 deletions .github/workflows/python.yml

This file was deleted.

22 changes: 8 additions & 14 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,9 @@ jobs:
- name: Check cargo fmt compliance
run: cargo fmt --all -- --check
- name: Check no rustc warnings
run: |
cd avenger-scenegraph && cargo check --tests && cd ..
cd avenger-vega && cargo check --tests && cd ..
cd avenger-wgpu && cargo check --tests && cd ..
cd avenger-vega-test-data && cargo check --tests && cd ..
run: cargo check --tests
- name: Check for clippy warnings
run: |
cd avenger-scenegraph && cargo clippy && cd ..
cd avenger-vega && cargo clippy && cd ..
cd avenger-wgpu && cargo clippy && cd ..
cd avenger-vega-test-data && cargo clippy && cd ..
run: cargo clippy
- name: Build
run: |
cd avenger-scenegraph && cargo build && cd ..
Expand All @@ -45,10 +37,12 @@ jobs:
cd avenger-vega-test-data && cargo build && cd ..
pushd examples/scatter-panning && cargo build && popd
pushd examples/wgpu-winit && cargo build && popd

# # Tests currently fail with `MakeWgpuAdapterError`
# - name: Run tests
# run: cargo test --verbose
- name: Run tests (excluding GPU tests)
run: |
cargo test --workspace --verbose \
--exclude avenger-wgpu
- name: Run doc tests
run: cargo test --workspace --doc --verbose

# # Cleanup fails with: [__NSCFString bytes]: unrecognized selector sent to instance 0x600002fc62c0
# test-rs-macos:
Expand Down
12 changes: 8 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@
/.idea
/avenger-wgpu/tests/output/
.DS_Store
examples/wgpu-winit/pkg/
examples/wgpu-winit/target/
examples/scatter-panning/pkg/
examples/scatter-panning/target/
examples/*/pkg/
examples/*/target/
scratch/

# pixi environments
Expand All @@ -19,3 +17,9 @@ __pycache__/
/avenger-vega-renderer/lib/
/avenger-vega-renderer/packed/*
/avenger-vega-renderer/dist-deno/
examples/wgpu-scales/geometry.svg
examples/iris-pan-zoom/geometry.svg
.vscode/launch.json

avenger-lang-preview/preview.avgr
/avenger-vega-test-data/target/
109 changes: 109 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

Avenger is a Rust-based visualization engine and renderer designed for information visualization (InfoVis) systems. It provides GPU-accelerated rendering via WebGPU/WebGL2, supports WebAssembly for browser deployment, and aims to become a foundational rendering library for data visualization.

## Key Architecture

### Layered Design
1. **Scene Graph Layer** (`avenger-scenegraph`): Abstract representation of visual elements
2. **Rendering Layer** (`avenger-wgpu`): GPU-accelerated rendering implementation
3. **Event Handling** (`avenger-eventstream`): Reactive event processing
4. **Application Framework** (`avenger-app`): High-level application orchestration

### Core Concepts
- **Scene Graph**: Hierarchical representation with 11 mark types (Arc, Area, Path, Symbol, etc.)
- **Trait-Based Extensibility**: `SceneGraphBuilder<State>`, `EventStreamHandler<State>`, `Canvas`
- **Scales System**: Data transformations with pan/zoom support
- **Event Streams**: Sophisticated event handling with filtering, throttling, and consumption

## Build Commands

```bash
# Build entire workspace
cargo build
cargo build --release

# Build specific crate
cd avenger-scenegraph && cargo build

# Build WASM example
cd examples/iris-pan-zoom
wasm-pack build --target web --release
```

## Development Commands

```bash
# Format code
cargo fmt --all

# Lint with clippy
cargo clippy --all-targets

# Check code (strict mode)
RUSTFLAGS="-D warnings" cargo check --tests

# Run tests
cargo test
cargo test -- --nocapture # with output

# Run native example
cd examples/iris-pan-zoom && cargo run --release

# Python development (via Pixi)
pixi run dev-py # Develop Python bindings
pixi run build-py # Build Python package

# Version management
pixi run bump-version # Bump version numbers
```

## Testing

Tests include unit tests and image baseline comparisons. Note: CI tests are currently disabled due to `MakeWgpuAdapterError` on Linux.

```bash
# Run all tests
cargo test

# Run specific crate tests
cd avenger-wgpu && cargo test
```

## Project Structure

The repository is organized as a Rust workspace with these key crates:
- `avenger-scenegraph`: Core scene graph representation
- `avenger-wgpu`: GPU rendering implementation
- `avenger-scales`: Visualization scales (linear, log, ordinal, etc.)
- `avenger-vega-scenegraph`: Vega compatibility layer
- `avenger-eventstream`: Event handling system
- `avenger-app`: Application framework

## Important Patterns

1. **State Management**: Use `SceneGraphBuilder<State>` pattern for reactive visualizations
2. **Event Handling**: Implement `EventStreamHandler<State>` for interactivity
3. **Resource Management**: Canvas holds GPU resources; proper initialization required
4. **Coordinate Systems**: Scene coordinates with configurable viewports
5. **Performance**: Use instanced rendering for marks with many instances

## Dependencies

- **GPU Rendering**: wgpu (cross-platform WebGPU implementation)
- **Geometry**: Lyon (tessellation), rstar (spatial indexing)
- **Text**: cosmic-text (cross-platform text rendering)
- **Images**: image crate with PNG/JPEG support
- **Data**: Apache Arrow for efficient data handling

## Common Development Tasks

When implementing new features:
1. For new mark types: Add to `SceneMark` enum and implement rendering in `avenger-wgpu`
2. For new scales: Implement `ScaleImpl` trait in `avenger-scales`
3. For interactivity: Use `EventStreamHandler` pattern in `avenger-app`
4. For GPU optimizations: Modify shaders in `avenger-wgpu/src/shaders/`
Loading
Loading