tauri-apps/tauri · error

not implemented

Error message

not implemented

What it means

In Tauri's run-event translation, RuntimeRunEvent variants are converted to RunEvent for plugins and listeners. Known variants are matched explicitly; any unknown runtime event reaches `unimplemented!()`. New runtime events added by tao/wry before tauri maps them trigger this panic.

Solutions

  1. Upgrade tauri to a version that maps the new RuntimeRunEvent variant
  2. Lock tao/wry to versions known to work with your tauri release (cargo update -p tao --precise ...)
  3. Remove custom runtime event injection if you're emitting events the translator doesn't know

Example fix

// before
tao = "0.30"
// after (align with tauri's supported tao)
tao = "=0.28.1"
Defensive patterns

Strategy: fallback

Validate before calling

// check versions: cargo tree -p tao -p wry | grep tao — must match tauri's expected range

Try / catch

std::panic::set_hook(Box::new(|info| log::error!("run-event translation panicked: {info}")));

Prevention

When it happens

Trigger: A new RuntimeRunEvent variant arrives during app.run() that the translation match (e.g. SceneRequested, ExitRequested, etc.) doesn't cover — typically after a dependency update.

Common situations: iOS/macOS lifecycle events from a newer tao version; mixing mismatched tao and tauri versions in Cargo.lock; custom runtime event types forwarded to the loop.

Related errors


AI-assisted analysis of tauri-apps/tauri@460ec35447 (2026-09-18). Data as JSON: /api/errors/d2be0e28c5779a84. Report an issue: GitHub.

Appendix: source

Thrown at crates/tauri/src/app.rs:2696

        }
      }

      #[allow(unreachable_code)]
      t.into()
    }
    #[cfg(any(target_os = "macos", target_os = "ios", target_os = "android"))]
    RuntimeRunEvent::Opened { urls } => RunEvent::Opened { urls },
    #[cfg(target_os = "macos")]
    RuntimeRunEvent::Reopen {
      has_visible_windows,
    } => RunEvent::Reopen {
      has_visible_windows,
    },
    #[cfg(target_os = "ios")]
    RuntimeRunEvent::SceneRequested { scene, options } => {
      RunEvent::SceneRequested { scene, options }
    }
    _ => unimplemented!(),
  };

  manager
    .plugins
    .lock()
    .expect("poisoned plugin store")
    .on_event(app_handle, &event);

  event
}

#[cfg(test)]
mod tests {
  #[test]
  fn is_send_sync() {
    crate::test_utils::assert_send::<super::AppHandle>();
    crate::test_utils::assert_sync::<super::AppHandle>();

View on GitHub (pinned to 460ec35447)