Rust library and CLI tool for rendering GDSII layouts with OpenGL / WebGL or converting them to SVG format.
Includes a web app that allows users to drop a GDSII file for local viewing. All work is performed in the browser and no data is sent to the server. In fact there is no server, it's just a static site hosted with GitHub Pages.
core
contains the data model and core logic.- Defines a set of ECS components.
graphics
is a simple WebGL rendering library.- Provides abstractions similar to libraries like THREE and Filament.
- Knows nothing about circuits or app behavior.
- All objects except Renderer can be constructed without a WebGL context.
webui
defines a set of Yew components.- The UI for the web application lives here.
- Components with the Page suffix are navigation targets.
cli
provides a command-line interface and simple native window target.rsutils
are utilities that you could imagine being a part of std.- Nothing here should know about circuits or the app.
# Open a GL window with the Intel 4004 chip:
cargo run --quiet --bin layout-viewer -- --gl assets/gds/intel-4004.gds
# Open a much larger GDS file using a release build:
cargo run --release --quiet --bin layout-viewer -- --gl assets/gds/caravel.gds
# Generate a SVG file:
cargo run --quiet --bin layout-viewer -- --gl assets/gds/mos-6502.gds mos-6502.svg
# Deploy a local web server:
trunk serve --open
- Arefs are ignored (but we might fix this)
- Magnification of elements is ignored.
- The "absolute" flag is ignored for magnitudes and angles.
- Text, Nodes, and Boxes are ignored.
- bevy_ecs: Entity-component-system
- gds21: GDSII parser
- svg: SVG generation
- wasm-bindgen: WebAssembly bindings
- anyhow: Error handling