eframe - the [`egui`] framework crate
If you are planning to write an app for web or native,
and want to use [`egui`] for everything, then `eframe` is for you!
To get started, see the [examples](https://github.com/emilk/egui/tree/master/examples).
To learn how to set up `eframe` for web and native, go to
and follow the instructions there!
In short, you implement [`App`] (especially [`App::update`]) and then
call [`crate::run_native`] from your `main.rs`, and/or call `eframe::start_web` from your `lib.rs`.
## Usage, native:
``` no_run
use eframe::egui;
fn main() {
let native_options = eframe::NativeOptions::default();
eframe::run_native("My egui App", native_options, Box::new(|cc| Box::new(MyEguiApp::new(cc))));
}
#[derive(Default)]
struct MyEguiApp {}
impl MyEguiApp {
fn new(cc: &eframe::CreationContext<'_>) -> Self {
// Customize egui here with cc.egui_ctx.set_fonts and cc.egui_ctx.set_visuals.
// Restore app state using cc.storage (requires the "persistence" feature).
// Use the cc.gl (a glow::Context) to create graphics shaders and buffers that you can use
// for e.g. egui::PaintCallback.
Self::default()
}
}
impl eframe::App for MyEguiApp {
fn update(&mut self, ctx: &egui::Context, frame: &mut eframe::Frame) {
egui::CentralPanel::default().show(ctx, |ui| {
ui.heading("Hello World!");
});
}
}
```
## Usage, web:
``` no_run
#[cfg(target_arch = "wasm32")]
use wasm_bindgen::prelude::*;
/// Call this once from the HTML.
#[cfg(target_arch = "wasm32")]
#[wasm_bindgen]
pub fn start(canvas_id: &str) -> Result
{
let web_options = eframe::WebOptions::default();
eframe::start_web(canvas_id, web_options, Box::new(|cc| Box::new(MyEguiApp::new(cc))))
}
```
## Feature flags