diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for keid-dearimgui
 
+## 0.1.3.1
+
+- Update for dear-imgui-2.3.0.
+
 ## 0.1.3.0
 
 - Update for dear-imgui-2.2.1.
diff --git a/keid-ui-dearimgui.cabal b/keid-ui-dearimgui.cabal
--- a/keid-ui-dearimgui.cabal
+++ b/keid-ui-dearimgui.cabal
@@ -1,11 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.36.0.
+-- This file has been generated from package.yaml by hpack version 0.37.0.
 --
 -- see: https://github.com/sol/hpack
 
 name:           keid-ui-dearimgui
-version:        0.1.3.0
+version:        0.1.3.1
 synopsis:       DearImGui elements for Keid engine.
 category:       Game Engine
 author:         IC Rainbow
@@ -62,7 +62,7 @@
     , base >=4.7 && <5
     , binary
     , bytestring
-    , dear-imgui >=2.2.1
+    , dear-imgui >=2.3.0 && <2.4
     , keid-core >=0.1.8.0
     , resourcet
     , rio >=0.1.12.0
diff --git a/src/Render/ImGui.hs b/src/Render/ImGui.hs
--- a/src/Render/ImGui.hs
+++ b/src/Render/ImGui.hs
@@ -19,7 +19,7 @@
 
 import RIO
 
-import Control.Monad.Trans.Resource (ReleaseKey, ResourceT, register, release)
+import Control.Monad.Trans.Resource (ReleaseKey, ResourceT, register)
 import DearImGui qualified as ImGui
 import DearImGui.FontAtlas qualified as FontAtlas
 import DearImGui.GLFW (glfwNewFrame, glfwShutdown)
@@ -29,7 +29,6 @@
 import Engine.Stage.Component qualified as Stage
 import Engine.Types (GlobalHandles(..), StageRIO)
 import Engine.Vulkan.Types (HasRenderPass(..), HasSwapchain(..), Queues(..), getDevice, getMultisample)
-import Resource.CommandBuffer qualified as CommandBuffer
 import Resource.Region qualified as Region
 import Resource.Vulkan.DescriptorPool qualified as DescriptorPool
 import RIO.App (appEnv)
@@ -84,7 +83,7 @@
   ctx <- ImGui.createContext
   Region.register_ $ ImGui.destroyContext ctx
 
-  context@GlobalHandles{..} <- asks appEnv
+  GlobalHandles{..} <- asks appEnv
 
   let (QueueFamilyIndex queueFamily, queue) = qGraphics ghQueues
 
@@ -99,14 +98,12 @@
       , queueFamily    = queueFamily
       , queue          = queue
 
-      , minImageCount         = getMinImageCount swapchain
-      , imageCount            = getImageCount swapchain
-      , msaaSamples           = getMultisample swapchain
-      , colorAttachmentFormat = Just $ getSurfaceFormat swapchain
-
-      , useDynamicRendering = False
-      , subpass             = subpassIx
-      , pipelineCache       = Vk.NULL_HANDLE
+      , rendering     = Left (getRenderPass renderpass)
+      , minImageCount = getMinImageCount swapchain
+      , imageCount    = getImageCount swapchain
+      , msaaSamples   = getMultisample swapchain
+      , subpass       = subpassIx
+      , pipelineCache = Vk.NULL_HANDLE
 
       , descriptorPool = pool
 
@@ -114,7 +111,7 @@
       , checkResult    = \case { Vk.SUCCESS -> pure (); e -> throwM $ VulkanException e }
       }
 
-  res@(_cb, initOk) <- ImGui.vulkanInit initInfo (getRenderPass renderpass)
+  res@(_cb, initOk) <- ImGui.vulkanInit initInfo
   unless initOk do
     logError "DearImGui vulkan initialization failed"
     exitFailure
@@ -122,15 +119,10 @@
 
   actionRes <- action
 
-  -- TODO: oneshots
-  (oneshotPoolKey, oneshotPool) <- CommandBuffer.allocatePools context
-  CommandBuffer.oneshot_ context oneshotPool qGraphics \cb -> do
-    fontsOk <- ImGui.vulkanCreateFontsTexture cb
-    unless fontsOk do
-      logError "ImGui.vulkanCreateFontsTexture failed"
-      exitFailure
-  release oneshotPoolKey
-  ImGui.vulkanDestroyFontUploadObjects
+  fontsOk <- ImGui.vulkanCreateFontsTexture
+  unless fontsOk do
+    logError "ImGui.vulkanCreateFontsTexture failed"
+    exitFailure
 
   debugReleaseStart <- toIO (logDebug "Releasing DearImGui")
   void $! register debugReleaseStart
