Mara is a reusable egui editor UI kit with a framework-agnostic core and thin host adapters for Bevy, native egui/eframe, and the web.
The main crates are:
mara_core— panes, ribbons, shelves, widgets, themes, views, modules, and host-neutral window chromemara— unified UI/window facadebevy_mara— Bevy plugin integration undermara/plugin/bevymara_graph— standalone node graph widgetmara_code— standalone code editor widgetmara_image/mara_canvas— proof View + Module surfaces
- glass-themed editor UI primitives
- persistent top app shell and ribbon slots
- docked shelves with tabbed containers
- floating/anchored panes
- reusable widgets and pods
- view routing and nested workspace/module support
- graph, code editor, image, and canvas examples
- native borderless window chrome on hosts that support it
- web-safe behavior where browser window chrome is left to the browser
crates/
core/ mara_core
modules/graph/ mara_graph
modules/code/ mara_code
modules/image/ mara_image
modules/canvas/ mara_canvas
mara/
plugin/bevy/ bevy_mara
example/ root native/web example
See ARCHITECTURE.md for the design boundaries.
Use the Makefile targets from the repo root:
make run # native Mara example
make serve # web demo at http://localhost:8080The Makefile defaults to the root example package:
make build
make check
make testUse the repo Nix shell when running the gates; the ambient Rust toolchain may be too old for the current dependency set:
nix develop --impure -c make check
nix develop --impure -c make test-allSee TOOLCHAIN.md for details.
Full workspace gates:
make fmt
make check
make test-allThe web host is built with trunk:
make serve
make build TARGET=webOn web, native resize corners and native top-bar window dragging are disabled by default because the browser owns the outer window.
- Put reusable behavior in
mara_core. - Keep host/plugin crates as adapters.
- Use
maketargets rather than ad-hoc cargo commands when working in this repo. - Do not add Bevy-only logic for behavior that should also work in egui/eframe or web.