Skip to content
This repository was archived by the owner on Nov 7, 2025. It is now read-only.

tauri-apps/tauri-egui

Repository files navigation

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.

About

No description, website, or topics provided.

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE_APACHE-2.0
MIT
LICENSE_MIT

Stars

Watchers

Forks

Packages

No packages published

Languages