Achieving Tiling Window Manager on Windows with komorebi

Published Oct 16, 2024
Updated Nov 15, 2025
3 minutes read
Note

This old post is translated by AI.

##What is komorebi? What is a Tiling Window Manager?

When you have lots of windows, splitting the screen and such becomes troublesome. Recently, behavior like the old BetterSnapTool is standard even on Windows, but a tiling window manager automatically splits the screen when a window opens. If you drag a window, windows can be swapped with each other, and if you move to an empty multi-display, it becomes fullscreen.

When I looked into it, there seem to be many such window managers for Linux, but still few for Windows. I happened to find a tool called komorebi that's lightweight and works reasonably well, so I'll note down how to use it.

By the way, komorebi is written in Rust.

##Installation

###PowerShell Settings

It's recommended to enable Long path support, so let's do it. Open PowerShell with administrator privileges and execute the following command.

Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -Value 1

###Install

I installed with Winget. https://lgug2z.github.io/komorebi/installation.html#winget

###Keymap Settings

komorebi can be operated by combining the Alt key with various keys. You can set keymaps with either AutoHotKey or whkd, but I think whkd is easier.

I was using AutoHotKey to set IME off with Ctrl+C or Esc, so I thought about using AutoHotKey, but whkd can be started together with komorebi itself, so this is easier. If you start with komorebic --whkd, the key mapping is automatically applied.

I think whkd is probably an abbreviation for window-hotkey-daemon.

###Config Settings

By default, the margins are ridiculously large, narrowing the work area considerably, so it's best to tweak the settings first.

mkdir -p ~/.config/komorebi
nvim $PROFILE

Add the following.

$Env:KOMOREBI_CONFIG_HOME = 'C:\Users\dakes\.config\komorebi'

Reload $PROFILE and confirm the path works.

. $PROFILE
$Env:KOMOREBI_CONFIG_HOME

Now write the config contents. There's not much explanation of what corresponds to what, so I ended up with the following after trying various things.

Save as komorebi.json at C:\Users\username.config\komorebi\komorebi.json.

{
  "$schema": "https://raw.githubusercontent.com/LGUG2Z/komorebi/v0.1.29/schema.json",
  "animation": {
          "duration": 100,
          "fps": 90,
          "enabled": true,
          "style": "EaseInOutSine"
  },
  "app_specific_configuration_path": "$Env:KOMOREBI_CONFIG_HOME/applications.yaml",
  "window_hiding_behaviour": "Cloak",
  "cross_monitor_move_behaviour": "Insert",
  "default_workspace_padding": 2, // Overall frame padding
  "default_container_padding": 2,
  "border": true, // Border for active window
  "border_width": 1,
  "border_offset": -1,
  "theme": {
    "palette": "Base16",
    "name": "Helios", // Many types available but not very meaningful here
    "unfocused_border": "Base03",
    "bar_accent": "Base0D"
  },
  "stackbar": { // When using stack feature (Alt+←→), a tab with program name appears. Honestly it's quite ugly so I don't use it.
    "height": 10,
    "mode": "OnStack",
    "tabs": {
      "width": 300
    }
  },
  "focus_follows_mouse": "Komorebi",
  "transparency": true,
  "transparency_alpha": 250,
  "global_work_area_offset": { // Adjust mysterious gaps at top and bottom
            "left": 0,
            "top": 50,
            "right": 0,
            "bottom": 50
  },
  "monitors": [
    {
		"work_area_offset": {
				"left": 0,
				"top": 400,
				"right": 0,
				"bottom": 0
		},
		"workspaces": [ // Name and layout for virtual desktops
        {
          "name": "CODING",
          "layout": "Columns"
        },
        {
          "name": "WATCH",
          "layout": "Columns"
        },
        {
          "name": "COMMUNICATION",
          "layout": "Columns"
        }
      ]
    }
  ]
}

###Bar Settings

You can create a cool status bar. Honestly, for me it's just cool and I haven't really utilized it, but I tried setting up various things.

The default font doesn't support Japanese, so change it to an appropriate font.

There are many themes available, so customize to your liking.

By setting the Komorebi class, you can display which virtual desktop number you're on while also being able to click to navigate, but unfortunately when you navigate via keybind (Alt+1/2/3/4/...) it's not reflected. Hoping for future updates.

{
  "$schema": "https://raw.githubusercontent.com/LGUG2Z/komorebi/v0.1.29/schema.bar.json",
  "monitor": {
    "index": 0,
    "work_area_offset": {
      "left": 0,
      "top": 40,
      "right": 0,
      "bottom": 40
    }
  },
  "font_family": "Noto Sans JP",
  "theme": {
    "palette": "Base16",
    "name": "AyuDark",
    "accent": "Base0D"
  },
  "left_widgets": [
    {
      "Komorebi": {
        "workspaces": {
          "enable": true,
          "hide_empty_workspaces": false
        },
        "layout": {
          "enable": true
        },
        "focused_window": {
          "enable": true,
          "show_icon": true
        }
      }
    }
  ],
  "right_widgets": [
    {
      "Media": {
        "enable": true
      }
    },
    {
      "Storage": {
        "enable": true
      }
    },
    {
      "Memory": {
        "enable": true
      }
    },
    {
      "Network": {
        "enable": true,
        "show_total_data_transmitted": false,
        "show_network_activity": true
      }
    },
    {
      "Date": {
        "enable": true,
        "format": "DayDateMonthYear"
      }
    },
    {
      "Time": {
        "enable": true,
        "format": "TwelveHour"
      }
    },
    {
      "Battery": {
        "enable": true
      }
    }
  ]
}

##Starting and Stopping

Start with the following. This will display hotkey settings and a cool status bar.

komorebic start --whkd --bar

To stop, use the following. Sometimes it bugs out and a blank window occupies part of the screen and can't be closed, requiring a restart.

komorebic stop --bar

##Keybindings to Remember

  • alt+q Quit Window
  • alt+m Minimize Window
  • Move focus (vim movement)
    • alt+h
    • alt+j
    • alt+k
    • alt+l
  • Move window
    • alt+x flip window
    • alt+shift+h
    • alt+shift+j
    • alt+shift+k
    • alt+shift+l
  • Resize
    • alt++ larger
    • alt+- smaller
  • alt+p Pause komorebi (use when broken or picture in picture appears)
  • alt+1/2/3/4/... Move to Workspace
  • alt+shift+1/2/3/4... Move current window to another workspace

##Setting Startup Launch

Write the startup command in a .ps1 file and place it somewhere, set it to launch from a shortcut, and put it in the startup folder.

komorebic start --whkd --bar

##Conclusion

There are quite a few moments where I feel bugs, and the bar only displays on one window, so there are complaints, but it's actively maintained and runs extremely lightweight, so I think it might be the de facto for Windows.

I've installed it on both my work PC and home PC for about 3 days now, and window switching has become very easy, and once the keybindings become second nature it feels really good. It doesn't work well with dual displays, but interestingly when you start using komorebi, you can fully utilize a single display instead.

Looking forward to future development!

    Footnotes
  1. It's listed first even on ranking sites.

  2. Remember that you can open the startup folder with Win+R, shell:startup.