Reframe strips the title bar and border off a window and snaps it to a position you define — but the position isn't a fixed pixel rectangle. It's a reusable layout, stored as ratios and resolved against whichever monitor the window currently lives on, so one layout re-fits itself across displays of different sizes.
- 🕹️ Stretch old games to fill the screen. Many retro titles only run at 4:3 or a fixed small resolution and sit in a tiny box in the middle. Drop the border and size them up to fill the space they should.
- 🖥️ Split an ultrawide. Carve one big display into zones — a game in a left zone, browser and chat on the right. One layout, every game.
- 📡 Stream without reconfiguring. Because zones are stored as ratios, the same layout recomputes itself when you stream to a different-resolution device (or a virtual display) — no separate setup just for streaming.
Most borderless tools store a fixed pixel position per game. Reframe is built around a different idea — layouts are first-class, and positions are relative:
- Reusable layouts. A layout is a named set of zones; a profile just references a
layout + zone. Edit the layout once and every game that uses it follows — no per-game rework. - Resolution-independent zones. Zones are stored as
0..1ratios and resolved against whichever monitor the window is currently on. ⅔ of a 7680-wide screen is 5120 px; move the window to a smaller display — or a streamed virtual one — and it recomputes itself, no manual editing. - Per-monitor rules. Each profile carries an ordered rule list, first matching monitor wins:
7680×2160 → snap to the game zone,any other screen → fullscreen. The same game can behave differently on your desktop and on a stream. - Live, not restart-bound. UI edits apply immediately, and external edits to
config.jsonare watched and hot-reloaded. - Event-driven. WinEvent hooks react the moment a window appears, renames itself, or a game moves itself back — with a low-frequency poll as a safety net.
- Always reversible. A window's original style and position are snapshotted before any change and restored when you disable a profile or stop the engine.
- Window panel (two columns): the left column lists running windows live — with icons, search, and a "show filtered" toggle — while the right column is your profile list. Create a profile from any window in one click.
- Ignore list: right-click a window to ignore its process (reversible, per-user); shell/system windows are filtered out automatically.
- FancyZones-style layout editor: carve zones on a canvas, with preset templates (split halves, thirds, left-⅔ + right-⅓, 16:9 centered, 21:9 left) and both pixel and ratio readouts.
- Drag-snap: hold Shift while dragging any window — zones highlight, release to snap into place.
- Screenshot-style region picker: drag out a rectangle on a full-screen overlay with edge/ratio snapping.
- Launch command + Unity resolution presets: a profile can carry a launch command (a launcher URI such as
hoyoplay://, or an executable path). For Unity games whose render resolution is pinned in the registry, Reframe writes the resolution preset before launch, then positions the window without resizing it. - Icon system with an optional SteamGridDB fallback for games whose icon can't be read locally (anti-cheat-protected processes).
- Configurable global hotkeys: toggle borderless on the foreground window, or send it into layout zones 1/2/3. All rebindable.
- Tray-resident, single-instance, optional start-on-login (via a scheduled task, so it runs elevated without a UAC prompt; the logon launch starts minimized to the tray, while a manual launch opens the window).
- Mica / Mica Alt / Acrylic backdrops and a system / light / dark theme switch.
- Config import / export (validated on import) and a crash log written to
%LOCALAPPDATA%\Reframe\crash.log.
Recommended — installer
- Download the latest
Reframe-Setup-v<version>-win-x64.exefrom Releases. - Run it and follow the wizard. If the .NET 9 Desktop Runtime is missing, the installer downloads and installs it for you.
Portable (green) — zip
- Download the latest
Reframe-v<version>-win-x64.zipfrom Releases. - Unzip anywhere and run
Reframe.exe. (You'll need the .NET 9 Desktop Runtime yourself.)
Requirements
- Windows 10 1809+ / Windows 11, x64.
- .NET 9 Desktop Runtime — the release is framework-dependent for .NET. The Windows App SDK is bundled, so you do not need to install it separately.
- Administrator — Reframe self-elevates via its manifest.
Why administrator?
Anti-cheat games run their windows under elevated/protected integrity. Windows' UIPI blocks a lower-integrity process from manipulating a higher-integrity window, so Reframe has to run elevated to reposition those windows at all.
To be explicit about what that elevation is used for: Reframe does not inject code and does not read or write game memory. It only calls the standard Win32 window APIs — SetWindowLongPtr to drop the caption/frame styles and SetWindowPos to move and size the window. Nothing more. (See the FAQ for more.)
- Create a profile — open the Profiles page, find your game in the left column (run it once so it shows up), and click to create a profile. Or use New and fill in the process name.
- Draw a layout — on the Layouts page, pick a preset or carve your own zones on the canvas, then save it as a named layout.
- Hand it over — in the profile, add a rule: pick a monitor (by resolution, or "any") and point it at a layout zone (or fullscreen). The top rule that matches the window's current monitor wins. Make sure the engine is on (toggle on the Dashboard).
Default hotkeys
| Action | Default |
|---|---|
| Toggle borderless on the foreground window | Ctrl + Alt + B |
| Send foreground window to zone 1 / 2 / 3 | Ctrl + Alt + 1 / 2 / 3 |
All hotkeys are rebindable on the Settings page. Zone hotkeys use the zones of your first layout, resolved against the foreground window's current monitor.
Requires the .NET 9 SDK and the Windows App SDK workload.
# Debug build
dotnet build -p:Platform=x64
# Run the test suite (independent project, links Core source files)
dotnet test Tests\Reframe.Core.Tests.csproj
# Produce a Release zip -> dist\Reframe-v<version>-win-x64.zip
powershell -ExecutionPolicy Bypass -File tools\publish.ps1publish.ps1 produces a build that is framework-dependent for .NET (target machine needs the .NET 9 Desktop Runtime) but self-contained for the Windows App SDK (target machine does not). It publishes into a dedicated publish_out\ folder so it never disturbs bin\Debug or a running instance.
Reframe is split into a UI-free Core and a WinUI 3 shell on top of it:
Core/— the engine. Detection (WinEventHook+ a safety-net poll), matching (process name / title / regex), resolution (PlacementResolver, a pure function: monitor rect → rule → pixel rect, fully unit-tested), application (WindowOps: style/position changes with snapshot-and-restore), and a thrash policy so the engine doesn't fight a game that keeps moving its own window. Zero UI dependencies, so the placement math is unit-testable in isolation.Services/— config (System.Text.Jsonsource-generated, hot-reloaded), monitors, hotkeys, tray, icon cache, game launcher, start-on-login.UI/— the WinUI 3 pages (Dashboard, Profiles, Layouts, Settings) and custom canvas controls. Hand-writtenINotifyPropertyChanged, no MVVM framework.
The full design — data model, engine pipeline, and per-feature status — is in DESIGN.md.
%LOCALAPPDATA%\Reframe\config.json
Written on first run if it doesn't exist. JSON is read/written via System.Text.Json source generation and carries a Version field for future migration. You can edit the file by hand — the app watches it and hot-reloads (atomic writes and partial-write tolerance mean a half-written file won't clobber your running config). The Settings page also has import / export.
Is this safe to use with anti-cheat games?
Reframe only changes window styles and position through documented Win32 APIs (SetWindowLongPtr, SetWindowPos). It never injects code, never reads or writes another process's memory, and never touches game files. That said, no third-party tool can offer a guarantee about how a given anti-cheat will react — use your judgment.
Why is it unpackaged (not an MSIX from the Store)?
The app needs a requireAdministrator manifest to manipulate elevated game windows (see Why administrator?). MSIX packaging is incompatible with requireAdministrator, so Reframe ships as a plain unpackaged executable instead.
Known limitations
- Games in exclusive fullscreen have no manipulable bordered window — launch them in windowed / borderless mode. (The miHoYo titles in the default config are already borderless/windowed.) Reframe now detects this and prompts you to switch the game's display mode; borderless fullscreen, by contrast, is taken over normally.
- UWP and protected-process windows can't be modified; Reframe reports a lack of permission rather than failing silently.
- Some advanced options aren't implemented yet (preserve client area, span-all-monitors, hide taskbar, remove menu, etc.). See the status column in DESIGN.md §4.
Issues and pull requests are welcome — bug reports, feature ideas, and questions all help.
Translations especially. The UI is fully localized through .resw resources (English and Simplified Chinese today). Adding a language is mostly translating one folder of resource files — see docs/dev/I18N.md for the steps. If you'd like to help, open an issue.
When sending a PR, please keep the Core layer UI-free (the placement math lives there and is unit-tested) and run dotnet test Tests\Reframe.Core.Tests.csproj before you push.
- PowerToys FancyZones — inspiration for the zone-based layout editor and drag-snap interaction.
MIT © 2026 shuiandy

