{"id":27014030,"url":"https://github.com/kimgoetzke/randolf","last_synced_at":"2026-01-22T07:18:53.565Z","repository":{"id":285810875,"uuid":"950816461","full_name":"kimgoetzke/randolf","owner":"kimgoetzke","description":"A window management utility for Windows 11.","archived":false,"fork":false,"pushed_at":"2025-07-19T12:38:48.000Z","size":16780,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-20T12:41:06.838Z","etag":null,"topics":["rust","window-management","window-manager","windows"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kimgoetzke.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-03-18T18:18:06.000Z","updated_at":"2025-07-19T12:37:43.000Z","dependencies_parsed_at":"2025-04-02T20:24:04.004Z","dependency_job_id":"1ef0bd22-13f6-4e0d-9561-baba83d409b8","html_url":"https://github.com/kimgoetzke/randolf","commit_stats":null,"previous_names":["kimgoetzke/randolf"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/kimgoetzke/randolf","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kimgoetzke%2Frandolf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kimgoetzke%2Frandolf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kimgoetzke%2Frandolf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kimgoetzke%2Frandolf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kimgoetzke","download_url":"https://codeload.github.com/kimgoetzke/randolf/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kimgoetzke%2Frandolf/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28658101,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["rust","window-management","window-manager","windows"],"created_at":"2025-04-04T13:19:49.783Z","updated_at":"2026-01-22T07:18:53.525Z","avatar_url":"https://github.com/kimgoetzke.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./assets/randolf.png\" width=\"160\" height=\"160\" alt=\"Randolf\"/\u003e\n\u003c/p\u003e\n\n# Meet Randolf\n\nRandolf is a window management utility for Windows 11 that allows you to:\n\n- `Win` + `\\` - near-maximise the foreground window (maximise minus margin).\n- `Win` + `Shift` + `Left`/`Top`/`Right`/`Down` or `h`/`j`/`k`/`l` - near-snap (snap minus margin) the foreground window\n  to the left, top, right, or bottom of the screen.\n- `Win` + `Left`/`Top`/`Right`/`Down` - move the cursor to the closest window in the direction of the arrow key (and\n  activate the window) or to the center of the window-free monitor, if it exists.\n- `Win` + `Shift` + `q` - close the foreground window.\n- `Win` + `1`/`2`/... - switch between workspaces.\n- `Win` + `Shift` + `1`/`2`/... - move the foreground window to respective workspace.\n- Hold `Win` + `Left click` - select a window anywhere (i.e. without having to select the title bar) and move it.\n- Hold `Win` + `Right click` - select a window anywhere (i.e. without having to select the edges or corners) and resize\n  it.\n- Configure an arbitrary number of hotkeys for launching applications (e.g. `Win` + `f` to launch Firefox) via the\n  configuration file.\n\nMy goal for this project was to implement some key window navigation concepts\nfrom [my Linux configuration](https://github.com/kimgoetzke/nixos-config) for Windows, offering an experience, somewhat\ncloser to that of Linux window managers/compositors such as [Hyprland](https://hyprland.org/) without\n_enforcing_ window tiling. The application was created to meet my own needs and started as migration of\n[Randy](https://github.com/kimgoetzke/randy) from C#/.NET to Rust, however contributions and suggestions (via issues)\nare welcome.\n\n#### Additional features\n\n- Reset the window to its previous size and position (i.e. undo the near-maximisation) by pressing `Win` + `\\` on a\n  near-maximised window will\n- Minimise the foreground window by pressing `Win` + `Shift` + `\\`\n- Store and load configuration from `randolf.toml` in `%APPDATA%\\kimgoetzke\\randolf\\`\n- Write application logs to `randolf.log` in `%LOCALAPPDATA%\\kimgoetzke\\randolf\\logs\\`\n- Display a tray icon that also functions as a workspace indicator and has a context menu that allows you to...\n    - Print a visual representation of the perceived monitor layout to the log file\n    - Customise the window margin\n    - Open the folder containing the Randolf executable in File Explorer\n    - Restart the application (which will reload `randolf.toml` prior to restarting) with or without admin privileges\n    - Close the application which restores all hidden windows\n\n## Demo\n\nSelecting and moving windows using hotkeys only:\n![Demo GIF 1](assets/demo_1.gif)\n\nOpening and closing applications using hotkeys only:\n![Demo GIF 2](assets/demo_2.gif)\n_Note that the newly opened application is focussed upon opening and, after closing a window, the closest window  (if\nany) is selected._\n\nSwitching between workspaces and moving windows between them using hotkeys only:\n![Demo GIF 3](assets/demo_3.gif)\n\nMoving and resizing windows using the mouse while holding the `Win` key:\n![Demo GIF 4](assets/demo_4.gif)\n\n## How to configure\n\n\u003e [!NOTE]\n\u003e The application will automatically create a configuration file with sensible defaults on the first run. The location\n\u003e of the configuration file is `%APPDATA%\\kimgoetzke\\randolf\\config\\randolf.toml`.\n\nThe default configuration file looks like this:\n\n```toml\n[general]\nwindow_margin = 20\nallow_selecting_same_center_windows = true\nforce_using_admin_privileges = false\nadditional_workspace_count = 2\nenable_features_using_mouse = true\ndelay_in_ms_before_dragging_is_allowed = 750\nallow_moving_cursor_after_open_close_or_minimise = true\n\n[exclusion_settings]\nwindow_titles = [\n    \"Program Manager\",\n    \"Windows Input Experience\",\n    # And more...\n]\nwindow_class_names = [\n    \"Progman\",\n    \"WorkerW\",\n    \"Shell_TrayWnd\",\n    \"Shell_SecondaryTrayWnd\",\n    # And more...\n]\n```\n\n### General settings\n\nThe `[general]` section contains the general settings for the application.\n\n| Key                                                | Default value | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |\n|----------------------------------------------------|---------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `window_margin`                                    | `20`          | The margin in pixels that is used when near-maximising or near-snapping a window. The margin is subtracted from the size of the screen (the monitors work area) when calculating the size and position of the window. Can be configured via the tray icon context menu.                                                                                                                                                                                                                                                                                                                                 |\n| `allow_selecting_same_center_windows`              | `true`        | Whether to allow selecting windows, the center of which is the same as the center of the active window. Enabling this effectively means that the cursor cannot be moved away from two windows of the same size (as their centers are the same) until at least one of them is moved/resized. Disabling this, however, means that you will no longer be able to select the non-foreground window of the windows with the same center using this application. Can be configured via the tray icon context menu.                                                                                            |\n| `force_using_admin_privileges`                     | `false`       | Whether to force the application to run with admin privileges. This will restart the application with admin privileges if it is not already running with them. Without admin privileges, the application will not be able to interact at all with other applications that are running with admin privileges. If you (semi-)regularly use applications that require admin privileges, you should set this to `true` or, even better, simply start Randolf with admin privileges directly.                                                                                                                |\n| `additional_workspace_count`                       | `2`           | The number of virtual workspaces that are created on the primary monitor by Randolf. Workspaces are similar to Windows desktops but only apply to a single monitor and are much faster to switch.                                                                                                                                                                                                                                                                                                                                                                                                       |\n| `enable_features_using_mouse`                      | `true`        | Whether to enable the features that allow moving and resizing windows using the mouse. The advantage of this feature over the native Windows approach is that you don't have to select the title bar to move or the edges of a window to resize - you can simply do it anywhere while holding the `Win` key. If you do not want to use these features, you can set this to `false`.                                                                                                                                                                                                                     |\n| `delay_in_ms_before_dragging_is_allowed`           | `750`         | Only used when `enable_features_using_mouse` is `true`. Defines the time in milliseconds for which you have to hold `Win` before the application allows you to move or resize a window. The idea here is to prevent enabling these modes when you press the `Win` key quickly for any other reason i.e. setting this to a non-zero value can prevent you from accidental dragging or resizing of windows. Lower this delay if you want mouse-based features to be more responsive, esp. if you use them frequently.                                                                                     |\n| `allow_moving_cursor_after_open_close_or_minimise` | `true`        | Whether to move the cursor automatically to after using an application launcher hotkey or the closest window after closing or minimising a window. If set to `true`, the cursor will be moved to the foreground window after using a custom application launcher hotkey or to the closest visible window after you use a Randolf hotkey to close or minimise a window. Randolf does not use Windows API callbacks (yet) which can, for example, cause the cursor to move when the window to be closed did not close immediately but opened a separate confirmation pop-up before executing the command. |\n\n### Exclusion settings\n\nThe `[exclusion_settings]` section contains the settings for excluding certain windows from being interactable (e.g.\nselectable/movable) via the application. A small number of windows are excluded by default in order for the application\nto function properly.\n\nYou can add additional windows to the exclusion list by adding their title or class name to the `[exclusion_settings]`\nsection. Randolf currently does not provide any features to identify the title or class name of a window other than\nlogging the _title_ of a window when it is being interacted with via the application.\n\n### Application launcher hotkeys\n\nHotkeys are not present in the default configuration file and must be added manually with a `[[hotkey]]` section. With\nthis, you can configure custom application launcher hotkeys via the configuration file like so:\n\n```toml\n[[hotkey]]\nname = \"Browser\"\npath = \"C:\\\\Program Files\\\\Mozilla Firefox\\\\firefox.exe\"\nhotkey = \"F\"\nexecute_as_admin = false\n\n[[hotkey]]\nname = \"File Explorer\"\npath = \"explorer.exe\"\nhotkey = \"M\"\nexecute_as_admin = false\n```\n\n- `name`: The name of the hotkey. This is used to identify the hotkey in logs but has no other value.\n- `path`: The path to the executable of the application to be started. Use double backslashes (`\\\\`) as path\n  separators when declaring the path using `\"`. If the executable is in the system path, you can use just the name of\n  the executable (e.g. `wt.exe`).\n- `hotkey`: The key name (\n  see [list of options](https://github.com/iholston/win-hotkeys/blob/f5f903a725ce309f86608bba6d8a76fb6efb97b8/src/keys.rs#L506))\n  to be used to start the application. Modifier key is always `Win` (feel free to raise an GitHub issue to change this).\n  Must be a single key.\n- `execute_as_admin`: Whether to execute the application with administrator privileges. If unsure, set this to `false`.\n- You can define an arbitrary number of hotkeys.\n- Using the same key for multiple hotkeys is not supported.\n\n## FAQ\n\n### How can I get this application to launch when Windows starts?\n\nYou can create a shortcut to the executable and place it in the startup folder (\n`$HOME\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup`). To do this:\n\n1. Create a shortcut to the executable and cut it\n2. Press `Win` + `r`, type `shell:startup`, and press `Enter`\n3. Paste the shortcut into the startup folder\n\n### Why does this application even exist? What is its purpose?\n\nWhile [Komorebi](https://github.com/LGUG2Z/komorebi/) is the most feature-rich window tiling manager for Windows I know,\nit requires a commercial license (particularly problematic for me since I only use Windows for work), depends on a\nseparate hotkey daemon, and enforces tiling for all windows unless explicitly excepted.\n\nRandolf was created as a simpler alternative that:\n\n- Does not require a paid commercial license\n- Runs as a standalone application\n- Only includes a handful of essential window management features\n- Provides hotkeys to facilitate a clean desktop without forcing automatic tiling\n- Served as a fun, little personal learning project\n\nIf you are looking for a feature-rich window manager, I strongly recommend checking\nout [Komorebi](https://github.com/LGUG2Z/komorebi/).\n\n## How to develop\n\n### Prerequisites\n\nYou'll need the C++ tools from the Build Tools for Visual Studio installed.\n\nUseful links:\n\n- [Download Build Tools for Visual Studio](https://visualstudio.microsoft.com/downloads/#build-tools)\n- [Programming reference for the Win32 API](https://learn.microsoft.com/en-us/windows/win32/api/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkimgoetzke%2Frandolf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkimgoetzke%2Frandolf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkimgoetzke%2Frandolf/lists"}