Files
tauri-egui/README.md
2025-11-07 23:04:11 +01:00

4.8 KiB

tauri-egui

status License test library Chat Server website https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg support

This project is currently unmaintained!

For the time being, an unvetted community-hosted implementation is hosted here.

About tauri-egui

tauri-egui is a Tauri plugin for using the egui library in a Tauri application via glutin. egui is a pure Rust GUI library that runs natively, recommended by the Tauri team for secure contexts such as password and secret interfaces.

Dependency

Component Description Version
tauri runtime core
egui immediate mode GUI library for Rust
tao cross-platform application window creation library in Rust
glutin low-level library for OpenGL context creation, written in pure Rust.

Example

use tauri::Manager;
use tauri_egui::{eframe, egui, EguiPluginBuilder, EguiPluginHandle};

struct LoginApp {
  password: String,
  on_submit: Box<dyn Fn(&str) -> bool + Send>,
}

impl LoginApp {
  fn new<F: Fn(&str) -> bool + Send + 'static>(
    ctx: &eframe::CreationContext,
    on_submit: F,
  ) -> Self {
    Self {
      password: "".into(),
      on_submit: Box::new(on_submit),
    }
  }
}

impl eframe::App for LoginApp {
  fn update(&mut self, ctx: &egui::Context, frame: &mut eframe::Frame) {
    let LoginApp {
      password,
      on_submit,
    } = self;
    egui::CentralPanel::default().show(ctx, |ui| {
      ui.label("Enter your password");
      let textfield = ui.add_sized(
        [ui.available_width(), 24.],
        egui::TextEdit::singleline(password).password(true),
      );
      let button = ui.button("Submit");
      if (textfield.lost_focus() && ui.input().key_pressed(egui::Key::Enter)) || button.clicked() {
        if on_submit(password) {
          frame.close();
        }
      }
    });
  }
}

fn main() {
  tauri::Builder::default()
    .setup(|app| {
      app.wry_plugin(EguiPluginBuilder::new(app.handle()));
      let egui_handle = app.state::<EguiPluginHandle>();

      let native_options = eframe::NativeOptions {
        drag_and_drop_support: true,
        initial_window_size: Some([1280.0, 1024.0].into()),
        ..Default::default()
      };

      let _window = egui_handle
        .create_window(
          "native-window".to_string(),
          Box::new(|cc| Box::new(LoginApp::new(cc, |pwd| pwd == "tauriisawesome"))),
          "Login".into(),
          native_options,
        )
        .unwrap();

      Ok(())
    })
    .run(tauri::generate_context!("examples/demo/tauri.conf.json"))
    .expect("error while building tauri application");
}

Semver

tauri-egui is following Semantic Versioning 2.0.

Licenses

Code: (c) 2019 - 2022 - The Tauri Programme within The Commons Conservancy.

MIT or MIT/Apache 2.0 where applicable.