v0.9.0
This release focuses on dear-app usability improvements for real applications (GPU configuration presets, smoother startup, and clearer redraw semantics).
Breaking Changes
dear-appRunnerConfiggains a new required field:wgpu: WgpuConfig. Struct-literal initializers without..Default::default()must be updated.RunnerCallbacksgains a new field:on_gpu_init. Struct-literal initializers must be updated.RedrawMode::Waitnow truly waits (no implicit per-frame redraw). UsePollorWaitUntilfor continuous rendering.
- Core (
dear-imgui-rs)PlatformIo::viewports()/PlatformIo::viewports_mut()are no longer public APIs; usePlatformIo::viewports_iter()/PlatformIo::viewports_iter_mut()instead.
- Backends
dear-imgui-winit:multi_viewport::ViewportDatais no longer a public API (internal backend detail).dear-imgui-wgpu:multi_viewport::{ViewportWgpuData}andmulti_viewport_sdl3::{ViewportWgpuData}are no longer public APIs (internal renderer details).
- Extensions
dear-file-browser:SortBygains a new variantType(IGFD-style filter-aware "Type" sorting). Downstream exhaustivematchstatements must be updated.
*-syscrates (prebuilt downloads)- Prebuilt downloads/extraction are now gated behind the Cargo feature
prebuilt. If you set*_SYS_PREBUILT_URLto anhttp(s)://...URL or to a.tar.gzarchive, or set*_SYS_USE_PREBUILT=1, you must also enable--features prebuilt. - Default builds do not enable
prebuilt(and therefore do not pull in HTTP client dependencies likeureq). (Fixes #12)
- Prebuilt downloads/extraction are now gated behind the Cargo feature
Added
dear-appWgpuConfigandRunnerConfig::wgpu: configure instance/adapter/device selection (backends, power preference, required features/limits, memory hints, etc.).WgpuPresetandWgpuConfig::from_preset: curated presets for common scenarios (performance, low-power, downlevel compatibility, software fallback).AppBuilder::on_gpu_init: a lifecycle hook for one-time GPU resource initialization afterDevice/Queue/SurfaceConfigurationare available.pub use wgpu;re-export asdear_app::wgpufor downstream convenience.
- Core (
dear-imgui-rs)Ui::set_window_focus: focus a window by name, or clear focus viaNone(SetWindowFocus(NULL)).Context::{register_user_texture,unregister_user_texture}: safe wrappers for ImGui's experimentalRegisterUserTexture()API to include user-createdImTextureDatainDrawData::textures().Context::register_user_texture_token: RAII helper returningRegisteredUserTexturewhich unregisters on drop.- Threaded renderer support:
render::snapshotmodule withFrameSnapshot(Send + Sync) for Extract → Render architectures (e.g. Bevy). Snapshots include Rust-owned draw lists/commands and managed texture requests extracted fromDrawData::textures(). render::snapshot::TextureFeedbackandPlatformIo::apply_texture_feedback: apply renderer-thread results (TexID/status) back to ImGui-managed textures on the UI thread.Context::platform_io_mutis now available without themulti-viewportfeature (enables applying texture feedback even when viewports are disabled).dear_imgui_rs::fontsmodule path is now public (e.g.dear_imgui_rs::fonts::FontConfig).PlatformIo::{platform_create_vk_surface_raw,set_platform_create_vk_surface_raw}: access to ImGui's optionalPlatform_CreateVkSurfacecallback (used by Vulkan renderers with SDL2/SDL3/GLFW/Win32 multi-viewport).- Input capture hints:
Ui::set_next_frame_want_capture_keyboard/Ui::set_next_frame_want_capture_mouse. - Navigation:
Ui::set_nav_cursor_visible. - Drag and drop:
Ui::drag_drop_payload(GetDragDropPayload). - Focus utilities:
FocusedFlags,Ui::is_window_focused_with_flags. - Window builder:
Window::size_constraintsandWindow::scroll(SetNextWindowSizeConstraints,SetNextWindowScroll). - Window runtime control:
Ui::set_window_pos*,Ui::set_window_size*,Ui::set_window_collapsed*. - Shortcut routing:
KeyChord,KeyMods,InputFlags, plusUi::shortcut/Ui::set_next_item_shortcut/Ui::is_key_chord_pressed. - Vector sliders:
Ui::slider_float2/3/4andUi::slider_int2/3/4. Ui::checkbox_flagsis now aliased asCheckboxFlags(matches ImGui semantics, no sys call needed).- Tab helpers:
Ui::tab_item_button*andUi::set_tab_item_closed. - Color defaults:
Ui::set_color_edit_options(SetColorEditOptions). - Color packing helpers:
Ui::get_color_u32*andUi::style_colornow usesGetStyleColorVec4;Color::{to_imgui_u32,from_imgui_u32}now useColorConvert*. - State storage:
Ui::state_storage,Ui::push_state_storage,Ui::set_next_item_storage_id, plusOwnedStateStorage. - Misc queries:
Ui::window_viewport,Ui::tree_node_to_label_spacing,Ui::item_id,Ui::is_item_edited. - More queries:
Ui::calc_item_width,Ui::is_mouse_pos_valid*,Ui::is_mouse_released_with_delay,Ui::find_viewport_by_id,Ui::find_viewport_by_platform_handle. - Context helpers: clipboard (
Context::clipboard_text,Context::set_clipboard_text) and INI disk IO (Context::load_ini_settings_from_disk,Context::save_ini_settings_to_disk). - Logging helpers:
Ui::log_to_tty,Ui::log_to_file_default,Ui::log_to_file,Ui::log_to_clipboard,Ui::log_buttons,Ui::log_finish. - Popup helper:
Ui::open_popup_on_item_click/Ui::open_popup_on_item_click_with_flags.
- Backends
dear-imgui-ash: external texture helpers mirroring WGPU (register_external_texture_with_sampler,update_external_texture_view,update_external_texture_sampler,unregister_texture).dear-imgui-ash:multi-viewport-sdl3feature to render secondary viewports when using the SDL3 platform backend (creates surfaces viaPlatform_CreateVkSurface).dear-imgui-wgpu: add feature-gated support for bothwgpuv28 (default) and v27 (wgpu-27), to better match ecosystems pinned to a specific major.
- Examples
threaded_snapshot_minimal: headless multi-thread example demonstratingFrameSnapshot+TextureFeedback(no real GPU renderer).
- Extensions
dear-file-browser(ImGui backend parity with ImGuiFileDialog)- Breadcrumb path composer: end-aligned tail visibility + separator quick-select popup rendered as an IGFD-style path table.
- Footer: IGFD-like editable file field in Open modes (type a file name/path and confirm), plus improved PickFolder confirm semantics.
- Columns/sorting: add
SortBy::Typeand make the "Type" column filter-aware (multi-dot extraction matches IGFD behavior).
Changed
dear-app- Theme application now uses the safe high-level
dear-imgui-rsTheme/ThemePresetAPI (avoids directsys::igStyleColors*usage). - Acquire the swapchain texture later in the frame to reduce the time the surface image is held.
restore_previous_geometry = falsenow disables INI persistence by forcing the INI filename toNone.
- Theme application now uses the safe high-level
- Examples
ash_textures/wgpu_textures: register user-createdTextureDataviaContext::register_user_texture_token()(no manual pre-warmupdate_texture()needed).sdl3_ash_multi_viewport: SDL3 + Ash multi-viewport example, including external Vulkan texture + sampler toggle.
Fixed
dear-app- Per-frame OS cursor/IME state updates via
prepare_render_with_ui(more correct cursor shape + IME toggling). - More reliable recovery when recreating the window/GPU stack after fatal surface errors; if recreation fails,
on_exitis called with the old context for cleanup. WaitUntil { fps }control flow now usesfpsto schedule the next wake consistently.
- Per-frame OS cursor/IME state updates via
- Extensions
dear-file-browserDialogManager::open_browser*now opens dialogs by default (visible immediately), matching the IGFD-styleOpenDialog -> Displayflow.- Filters now default to the first configured filter unless the user explicitly selects "All files".