Version 1.02
Created and developed by Mehran Ahmadi.
Window Drift is a minimal, Windows-only desktop utility that turns an idle desktop into a quiet kinetic composition. After a configurable idle delay, it gently moves eligible open windows inside each monitor's usable work area. Keyboard or mouse input stops the movement immediately.
The app runs locally in the system tray. It has no internet access, telemetry, accounts, analytics, or data collection.
- Smooth, low-speed window movement with monitor-aware bouncing
- Slow drift, bounce, and random drift modes
- Multi-monitor support that respects taskbars and work areas
- Optional restoration of original window positions on wake
- Process-name exclusions
- Configurable idle delay, speed, and edge padding
- Optional start with Windows
- No administrator privileges required
Window Drift moves windows with the Win32 SetWindowPos API. It does not resize,
activate, close, minimize, or change the Z-order of windows.
The movement engine skips:
- Invisible and minimized windows
- Maximized and fullscreen windows
- Hung, cloaked, child, tool, and non-activating windows
- Desktop, taskbar, Start, notification, shell, and related system surfaces
- Window Drift's own UI
- Any process listed in the exclusions setting
The app handles windows closing or becoming inaccessible while movement is in progress. Use the tray menu's Stop movement now item at any time.
- Windows 10 or Windows 11
- .NET 8 SDK for building
- No SDK is required when using a self-contained release
dotnet run --project src/WindowDrift/WindowDrift.csprojWindow Drift appears in the system tray. Double-click the tray icon, or right-click it and choose Settings.
From the repository root:
dotnet buildCreate a self-contained Windows x64 build:
dotnet publish -c Release -r win-x64 --self-contained trueThe published files are written below:
src/WindowDrift/bin/Release/net8.0-windows/win-x64/publish/
To package a release:
- Test the published executable on Windows 10 or 11.
- Zip the contents of the
publishfolder. - Create a GitHub Release and attach the zip file.
- Use the version tag
v1.02.
The app stores settings in:
%LOCALAPPDATA%\WindowDrift\settings.json
The Start with Windows option creates a value for the current user under
HKCU\Software\Microsoft\Windows\CurrentVersion\Run.
- Windows can reject movement for elevated applications when Window Drift is running without elevation. This is expected and does not crash the app.
- Some custom desktop shells or unusual application windows may need to be added to the process exclusion list.
- Virtual desktops and Windows snap groups are managed by Windows; restoring a position does not recreate a prior snap-group relationship.
- The app intentionally skips maximized and fullscreen windows rather than attempting to distinguish every game or media-player implementation.
- Windows that open after an idle movement session begins are picked up on the next idle session.
The project site is plain HTML, CSS, and JavaScript in docs.
- Push this repository to GitHub.
- Open Settings > Pages in the repository.
- Under Build and deployment, choose Deploy from a branch.
- Select the default branch and the
/docsfolder. - Save and wait for GitHub Pages to publish the site.
The page automatically derives repository and latest-release links when hosted
at https://OWNER.github.io/REPOSITORY/. Its fallback points to
https://github.com/mehranmarxian/Window-Drift.
- Website: www.mehran-ahmadi.com
- GitHub: github.com/mehranmarxian
The implementation uses WinForms only for the tray icon and settings window. Win32 APIs are accessed through P/Invoke for idle detection, top-level window enumeration, process lookup, monitor work areas, and movement.
Contributions should preserve the project's conservative behavior: do not move system surfaces, do not require elevation, and stop promptly when input resumes.