ScreenId. Navigation is handled through the Navigator service.
ScreenRegistry
Register screens duringonLoad() and unregister them in onUnload(). Registration uses Kotlin context receivers — you do not pass the plugin instance explicitly.
Register a screen
ScreenId is a value class wrapping a string. By convention, use reverse-DNS notation:
Unregister a screen
Set screen content
Replace an existing screen’s composable without unregistering:Get screen content
Retrieve a registered screen’s composable:Check ownership
Transient screens
setTransient registers short-lived content that shadows any previously registered screen for the same id. unregisterTransient removes it and restores the previous registration. The host auto-unregisters transient screens when their navigation entry is popped, so you normally don’t need to clean them up manually — see openScreen.
register for screens that should persist for the plugin’s lifetime, and setTransient for one-shot screens opened on demand.
Navigation
Use theNavigator service to navigate between destinations.
Navigate to a destination
Open a screen with inline content
Open a screen directly from a composable, without pre-registering it. Because the content is a closure, it can capture any data the screen needs — a file, a URI, a result object — giving custom screens the same payload support that custom editor tabs have:openScreen also returns a ScreenRegistration if you want to remove it earlier:
FileRunnerContext.
Navigate back
NavDestination
A sealed class representing destinations within the app.SpecialScreens
Pre-builtScreenId constants for core destinations:
API reference
ScreenId
Screen
ScreenRegistration
ScreenRegistry
Navigator
LocalTabs
ACompositionLocal providing access to the Tabs service for managing workspace tabs.
Example
Register multiple screens duringonLoad():