Open-source project
IvanHanloth/ZoneDeck avatar
IvanHanloth/ZoneDeck

ZoneDeck: a Rust workspace manager that hides windows and freezes processes on Windows

The Ultimate Workspace Manager, Switch between work and life, seamlessly生活工作无缝切换,专业的桌面工作区管理助手

574 stars27 forksRustMIT

At a glance

What is it?
ZoneDeck is a MIT-licensed Rust utility for Windows that hides bound windows and processes behind a hotkey, mutes and pauses them, and freezes what they are doing, with a Tauri configuration app on top of a small resident core. It suits someone who wants one keypress to clear the desktop, and it is Windows only, with a resident footprint the author puts at about 1 MB.
Who is it for?
ZoneDeck is worth installing if your working day is split across a work machine and a personal one on the same desktop, because the hide operation is reversible and bound to a hotkey rather than requiring a window switch, because the extra operations, muting a window, pausing playback and freezing a process, are the ones a virtual desktop cannot do at all, and because the whole resident core is a Rust binary with a release profile built for size.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 32 days ago.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Hiding, not switching: the model behind the whole tool

ZoneDeck is described as a desktop workspace manager for switching between work and life, and the feature list in the project documentation is a list of concealment mechanisms: hiding multiple windows, hiding multiple processes, custom hotkeys, hiding the active window, muting a window, pausing video playback, and freezing processes.

The core operation is the hotkey. Pressing the hide and show hotkey hides all the bound windows at once, and pressing it again brings them back. The project documentation describes the point in terms of scene switching: by binding windows you can hide several of them together, so switching scenes leaves nothing behind.

That framing is the design decision that distinguishes it from the alternatives. A virtual desktop moves your work to another screen, which is clean but slow and easy to forget. ZoneDeck covers the work set in place, which means a colleague who walks past your screen sees a desktop, not a second workspace you forgot about. The cost is that the hidden windows are still running, still consuming memory, and still in the taskbar unless you also bind the process to hide it.

The second layer is what a virtual desktop cannot do. Muting a window stops a call from ringing while you keep working in the same app. Pausing video playback stops a track without closing the player. Freezing a process suspends what it is doing, which is a different operation from hiding it and does not even require the window to be bound. The process-freezing implementation is credited in the acknowledgements to 雪藏HsFreezer for the approach.

The author also claims an extremely low memory footprint for a program that stays resident, with the background occupying about 1 MB of memory, and the topic list includes energy-efficiency, which is the framing for a tool whose purpose is to park applications rather than to run them.

The release line: an installer, a portable archive and a Windows 7 leftover

From version 3.0.0 onwards, every release provides two kinds of program, and the project documentation explains the difference in terms of how you manage the installation.

The installer is the recommended one, a complete package with one-click install, update and uninstall, described as a more efficient and safer way to manage the program. The portable version is an archive containing the ZoneDeck core program and the configuration program, which you unpack and run. Some versions also ship a package for Windows 7, and the ones with the win7 badge run on that system, which tells you the codebase still supports a very old platform alongside the Windows 10 or newer badge the current documentation shows.

Downloads come from the releases page on GitHub, and the project carries a release workflow badge next to the version and licence badges. The recent tags are ZoneDeck v3.2.0 from 2026-09-21, v3.2.0-rc.1 from 2026-08-28 and v3.1.0 from 2026-08-16, and the last push to the repository was on 2026-09-21. So the release candidate shipped in late August and the final four weeks later, and the tag date matches the last push, which is what you would expect from a project whose releases are cut straight from the main branch.

The update path is built into the program rather than left to the package manager. The tray menu carries a check for updates entry alongside the settings entry, the exit entry and the option to start the program with Windows, and the workspace depends on a crate called verhub-sdk, configured with default features off and the native-tls feature enabled, which is what the update check uses.

The architecture: a small Rust core and a Tauri configuration window

The repository layout makes the shape of the program clear, and it is the most interesting technical decision in the project.

The Cargo workspace has three members:

toml
[workspace]
resolver = "3"
members = ["crates/common", "crates/core", "apps/config/src-tauri"]

Two are Rust crates for the program itself, crates/common and crates/core, and the third is a Tauri application under apps/config/src-tauri, which is the configuration window. The workspace is on edition 2024, version 3.2.0, MIT licensed, and the dependency list is small and specific: serde with derive, serde_json, thiserror, regex, the windows crate at 0.62.2 for the platform calls, tempfile, and the update SDK.

The configuration interface is a web view hosted in a native shell, and that is a deliberate choice. A settings panel with lists of windows on one side and bound windows on the other, plus a hotkey recorder that captures a combination, is exactly the kind of interface that is tedious in a native toolkit and quick in a web view. The cost is that it brings a browser component with it, and the project documentation has to explain, later on, that the configuration window has its own data directory that uninstalling the program does not necessarily remove.

The release profile is the other thing worth looking at:

toml
[profile.release]
opt-level = "z"
lto = true
codegen-units = 1
strip = true
panic = "abort"

Optimising for size, enabling link-time optimisation, compiling as a single codegen unit, stripping symbols and aborting on panic rather than unwinding is a profile for a small binary that starts fast and sits in memory. For a resident background utility that is exactly the right set of trade-offs, and it matches the memory claim in the project description.

The rest of the tree shows a mixed-language repository: the Rust workspace, plus a package.json with pnpm 10.33.4 as the package manager and a VitePress documentation site, with scripts for docs:dev, docs:build and docs:preview, and vue plus vitepress as dependencies. The documentation is published at zonedeck.ivan-hanloth.cn with separate pages for the guide, the developer documentation and the changelog.

Where the settings live, and how to remove them

This is the part of the documentation that shows a project has thought about what happens after you uninstall, and it is unusual enough to describe in detail.

The portable edition keeps its configuration, logs, recovery files and cache inside the program folder, so copying the whole folder takes all your settings with it. If that folder is not writable, because it sits somewhere like C:\Program Files or on read-only media, the program falls back to %APPDATA%\ZoneDeck and says so in the interface.

The installer edition always stores in %APPDATA%\ZoneDeck, because the installation directory may be under C:\Program Files where a normal user cannot write. The program tells the two cases apart with an installed.marker file that the installer package places.

In both cases, the browser component used by the configuration window keeps a separate copy of its data in %LOCALAPPDATA%\cn.hanloth.zonedeck.config, and deleting the program folder does not clear that. The package ships a cleanup.ps1 for it, and the command to run it is:

powershell
powershell -ExecutionPolicy Bypass -File cleanup.ps1

Open PowerShell in the program directory and run that. The script lists what it is about to delete and waits for confirmation, then removes %LOCALAPPDATA%\cn.hanloth.zonedeck.config, the %APPDATA%\ZoneDeck directory if it exists, and the two things the autostart feature leaves behind: a scheduled task named ZoneDeckAutostart and the registry entry HKCU\Software\Microsoft\Windows\CurrentVersion\Run\ZoneDeck Application. It does not delete the program folder itself, which you remove yourself afterwards.

The installer does not need that step, because the uninstaller already does the same work and asks whether to keep the configuration files. That is the cleaner path, and it is a reminder that the portable edition and the installed edition are not the same thing with a different download.

Hotkeys, mouse buttons and the corner trick

The interaction design is where a small utility either feels good or does not, and the project documentation covers it in enough detail to judge.

The hotkey system has two ways to set a binding. You can type into the text field directly, or you can press the record hotkey button, which opens a recorder window, captures the combination you press, shows it back to you for confirmation, and then fills it into the field automatically. Recording a combination is faster and less error-prone than typing a key name, and the confirm step exists because a mistyped hotkey is easy to create and awkward to discover.

The core hotkeys are two. One hides and shows the bound windows, and one closes ZoneDeck itself. On first launch after an install or an update, the settings page opens automatically, so you can set hotkeys and bind windows before you need them, and in normal use the tray icon is the entry point: right-click it for the menu, which carries settings, exit, check for updates, and the autostart option.

Mouse support arrived in version 2.1.0, and it covers a real gap. You can bind the middle mouse button, side button 1 or side button 2 to toggle the hide state, so the switch does not need the keyboard at all. There is also a checkbox for quickly moving the mouse to a corner of the screen to hide the windows, with an option to allow restoring by moving the mouse back, so a corner acts as a toggle without a key press at all.

The interface language is one of the three: Simplified Chinese, English and Traditional Chinese, defaulting to the system language and settable manually under other options, then language. The tray menu and the notifications are translated along with the configuration window, which matters for a program whose whole surface is a tray menu and a few hotkey confirmations.

Where ZoneDeck is the wrong tool

The first limit is the platform, and it is not a limitation the project can engineer around. The badge says Windows 10 or newer, the implementation is built on the windows crate, and the shell is a Tauri application. There is no macOS or Linux build, and the process-freezing behaviour in particular is tied to what the operating system offers for suspending a process.

The second is that hidden is not isolated. The windows are covered, not contained, and they keep running. A tool that suspends a process is different from a tool that stops a workload, and if the goal is to stop a heavy job from consuming CPU, hiding a window does not achieve that. The freezing feature is the answer, and it is opt-in per process rather than automatic.

The third is the residual state. The configuration window's own data in %LOCALAPPDATA%\cn.hanloth.zonedeck.config survives a manual folder deletion, and the autostart feature leaves both a scheduled task and a registry run entry, so a machine that was set up and then abandoned carries three separate traces. cleanup.ps1 exists for exactly this, and it is a script you have to run deliberately, in PowerShell, with an execution policy bypass, on each machine.

The fourth is the comparison with what the system already does. Windows has built-in virtual desktops, which separate rather than conceal, and that separation survives a screenshot, a screen share and a colleague leaning over. ZoneDeck's approach is faster to toggle and closer to the current workspace, and that is a genuine trade rather than a deficiency, but a person who needs to prove that the work screen is not on the display wants the desktop, not the cover.

And the fifth is the polish of a single-author desktop utility with a Chinese-first documentation set, an English translation and a Traditional Chinese one. The screenshots in the repository are all of the settings window, the mouse hotkey pages and the other options page, and there is no screenshot of the hidden desktop state, which is the state the product is about.

Editorial conclusion

ZoneDeck is worth installing if your working day is split across a work machine and a personal one on the same desktop, because the hide operation is reversible and bound to a hotkey rather than requiring a window switch, because the extra operations, muting a window, pausing playback and freezing a process, are the ones a virtual desktop cannot do at all, and because the whole resident core is a Rust binary with a release profile built for size. It is the wrong tool if you are not on Windows, and it is the wrong tool if you want the projects themselves to be separated rather than merely covered up. Before you install it, check three things: that the current release is v3.2.0 from 2026-09-21, published the same day as the last push, and that the project ships both an installer and a portable archive so you can choose how it stores its configuration; that the portable edition keeps its configuration, logs, recovery files and cache inside the program folder and falls back to %APPDATA%\ZoneDeck when that folder is read only, so a copy of the folder is a backup of your settings; and that the browser component in the configuration window keeps its own data in %LOCALAPPDATA%\cn.hanloth.zonedeck.config, which cleanup.ps1 removes and the uninstaller offers to keep.

Frequently asked questions

How do I install ZoneDeck on Windows?

Download from the releases page, and choose either the installer, which handles install, update and uninstall in one package, or the portable archive, which you unpack and run. Some releases also include a package marked for Windows 7. After the first launch the settings page opens automatically, and later you reach it from the tray icon menu.

Where does ZoneDeck store its configuration and how do I remove it?

The portable edition stores configuration, logs, recovery files and cache in the program folder, falling back to %APPDATA%\ZoneDeck when that folder cannot be written, while the installer edition always uses %APPDATA%\ZoneDeck. The configuration window keeps a separate copy in %LOCALAPPDATA%\cn.hanloth.zonedeck.config, which cleanup.ps1 removes along with the autostart scheduled task ZoneDeckAutostart and the ZoneDeck Application registry run entry.

What can ZoneDeck do with a bound window besides hiding it?

A bound window can be muted, its video playback can be paused, and a bound process can be frozen. The hide and show hotkey hides and restores all bound windows together, mouse buttons including the middle and side buttons can be bound to toggle the hide state, and moving the mouse quickly to a screen corner can trigger the hide with an option to restore it that way.

Official sources

  1. IvanHanloth/ZoneDeck on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/ivanhanloth-zonedeck.svg)](https://hysenlabs.com/projects/ivanhanloth-zonedeck)

Was this useful?