Skip to main content
Workspaces allows you to save snapshots of your running applications and their window arrangements, then restore them later with a single action. Perfect for managing different workflows or project contexts.

Overview

Workspaces saves:
  • Running applications
  • Window positions and sizes
  • Window states (maximized, minimized, snapped)
  • Multi-monitor arrangements
  • Application arguments and parameters

Activation

1

Open Workspaces Editor

Launch Workspaces from the PowerToys system tray menu or from Start Menu.
2

Create Workspace

Click “Create New Workspace” or “Capture Current Layout.”
3

Add Applications

Select which running applications to include in the workspace.
4

Save Workspace

Name your workspace and save it.
5

Launch Workspace

Select a saved workspace and click “Launch” to restore the layout.

Creating Workspaces

Capture Current Layout

The easiest way to create a workspace is from your current setup:
1

Arrange Windows

Open and position all applications for your workflow.
2

Capture

Open Workspaces and click “Capture Current Layout.”
3

Select Apps

Choose which running applications to include.
4

Configure

Adjust window positions if needed.
5

Save

Name and save the workspace.

Manual Workspace Creation

Build workspace from scratch:
  1. Create new workspace
  2. Click “Add Application”
  3. Browse for executable or select from list
  4. Configure window position and size
  5. Repeat for all apps in workflow
  6. Save workspace

Workspace Components

From source /src/modules/Workspaces/WorkspacesLauncher/Launcher.h:11-37:
class Launcher
{
public:
    Launcher(const WorkspacesData::WorkspacesProject& project, 
             std::vector<WorkspacesData::WorkspacesProject>& workspaces, 
             InvokePoint invokePoint);

private:
    WorkspacesData::WorkspacesProject m_project;
    std::vector<WorkspacesData::WorkspacesProject>& m_workspaces;
    
    LaunchingStatus m_launchingStatus;
    std::unique_ptr<LauncherUIHelper> m_uiHelper;
    std::unique_ptr<WindowArrangerHelper> m_windowArrangerHelper;
    
    std::vector<std::pair<std::wstring, std::wstring>> m_launchErrors{};
};
Key components:
  • WorkspacesProject: Container for workspace data
  • LauncherUIHelper: Handles UI during launch
  • WindowArrangerHelper: Positions windows after launch
  • LaunchingStatus: Tracks launch progress

Launching Workspaces

Launch Process

1

Select Workspace

Choose workspace from Workspaces manager.
2

Launch Applications

Workspaces launches all configured applications.
3

Arrange Windows

Windows are automatically positioned according to saved layout.
4

Verify

Check all applications launched and positioned correctly.
When launching a workspace:
  • Applications start in parallel for faster launch
  • Window positioning waits for applications to initialize
  • Errors are tracked and reported
  • Progress indicator shows launch status
  • Timeout handling for unresponsive applications
Implementation: /src/modules/Workspaces/WorkspacesLauncher/Launcher.cpp

Invoke Points

Workspaces can be launched from multiple locations: From source /src/modules/Workspaces/WorkspacesLauncher/Launcher.h:20:
const InvokePoint m_invokePoint;
  • Workspaces UI: Manual launch from editor
  • Command line: Launch via CLI arguments
  • Shortcuts: Keyboard shortcuts or desktop shortcuts
  • Startup: Auto-launch on Windows login

Features

Multi-Monitor Support

Workspaces handles multiple monitors intelligently:
  • Save window positions relative to specific monitors
  • Restore layouts across different monitor configurations
  • Adapt to missing monitors (fallback to primary)
  • Handle monitor resolution changes
  • Support mixed DPI setups

Application Launch Configuration

Configure how applications start:
  • Executable path: Full path to application
  • Command-line arguments: Startup parameters
  • Working directory: Starting folder
  • Run as administrator: Elevated privileges (if needed)
  • Window state: Normal, maximized, minimized
Window positions are saved with:
  • X, Y coordinates
  • Width and height
  • Monitor identifier
  • Snap state (if snapped)
  • Maximized/minimized state
Implementation: /src/modules/Workspaces/WindowProperties/WorkspacesWindowPropertyUtils.h

Window Arrangement

From source /src/modules/Workspaces/WorkspacesLauncher/WindowArrangerHelper.h:
The Window Arranger component:
  • Waits for applications to finish initializing
  • Detects when windows are ready to be positioned
  • Applies saved positions and sizes
  • Handles window snap states
  • Manages Z-order (window stacking)
  • Sends messages to coordinator
std::unique_ptr<WindowArrangerHelper> m_windowArrangerHelper;
void handleWindowArrangerMessage(const std::wstring& msg);

Registry Integration

For persistent application data: Implementation: /src/modules/Workspaces/WorkspacesLauncher/RegistryUtils.h, RegistryUtils.cpp
  • Store workspace configurations
  • Persist application associations
  • Remember last used workspaces
  • Track launch statistics

Use Cases

Development Environments

Project Contexts:
  • Code editor + terminal + browser + debugger
  • Different layouts for frontend/backend work
  • Switch between multiple projects instantly
  • Documentation + IDE + testing tools

Content Creation

Creative Workflows:
  • Video editing + audio tools + file browser
  • Design tools + reference images + color palettes
  • Writing + research + notes
  • 3D modeling + rendering + asset management

Communication

Meeting Setups:
  • Video conferencing + notes + calendar + chat
  • Presentation + speaker notes + timer
  • Screen share preparation
  • Team collaboration tools

Research & Analysis

Data Workflows:
  • Spreadsheet + database + visualization
  • Multiple document viewers
  • Research papers + note-taking + citation manager
  • Financial analysis tools
Morning Startup:
  • Email client + calendar + task manager + news
  • Positioned for productivity
  • Launch with Windows startup
  • Save time every day
Example: “Morning” workspace opens Outlook, Teams, To-Do, and Edge on appropriate monitors.
Multiple Projects:
  • Quickly switch between client projects
  • Different toolsets for different work
  • Separate workspaces for work/personal
  • Meeting vs. focus time layouts
Example: Switch from “Client A” workspace (Slack + Project Files + Browser) to “Client B” workspace (Teams + Different Files + Different Browser Profile).
Training Sessions:
  • Demo applications + slides + notes
  • Screen recording setup
  • Virtual classroom layout
  • Workshop preparation
Example: “Training” workspace opens PowerPoint on projector, notes on laptop, and Zoom in present mode.

Advanced Features

Launch Status Tracking

From source /src/modules/Workspaces/WorkspacesLauncher/Launcher.h:23:
LaunchingStatus m_launchingStatus;
std::atomic<bool> m_launchedSuccessfully{};
Tracks:
  • Which applications have launched
  • Which windows have been positioned
  • Launch errors and failures
  • Overall workspace launch success

Error Handling

From source /src/modules/Workspaces/WorkspacesLauncher/Launcher.h:31-32:
std::vector<std::pair<std::wstring, std::wstring>> m_launchErrors{};
std::mutex m_launchErrorsMutex;
Workspaces handles:
  • Application not found errors
  • Insufficient permissions
  • Timeout during launch
  • Window positioning failures
  • Monitor not available
Errors are collected and presented to user after launch.

Application Launcher

From source /src/modules/Workspaces/WorkspacesLauncher/AppLauncher.h:
The AppLauncher component:
  • Resolves application paths
  • Handles command-line arguments
  • Manages working directories
  • Supports elevation when needed
  • Detects launch failures
  • Returns process information

UI Helper

From source /src/modules/Workspaces/WorkspacesLauncher/LauncherUIHelper.h:
std::unique_ptr<LauncherUIHelper> m_uiHelper;
void handleUIMessage(const std::wstring& msg);
Provides:
  • Launch progress indication
  • Error message display
  • Status updates during launch
  • User feedback during window arrangement

Configuration

Workspace Settings

1

Open Workspaces

Launch Workspaces from PowerToys settings or system tray.
2

Configure Options

Set global workspace preferences:
  • Launch behavior
  • Window arrangement timing
  • Error handling
3

Per-Workspace Settings

Configure individual workspace options:
  • Auto-launch on startup
  • Delay before window positioning
  • Override monitor on missing displays

Keyboard Shortcuts

Set up shortcuts to launch workspaces:
  • Assign hotkeys to specific workspaces
  • Quick switch between workspaces
  • Launch most recent workspace

Troubleshooting

Common Issues:
  • Application path changed or invalid
  • Insufficient permissions (try “Run as administrator”)
  • Application requires user interaction on startup
  • Antivirus blocking automated launch
Solutions:
  • Verify application paths in workspace configuration
  • Update workspace with current application locations
  • Check Windows Event Viewer for errors
  • Whitelist PowerToys in security software
Possible Causes:
  • Monitor configuration changed
  • Application takes long to initialize
  • DPI scaling differences
  • Application overrides window position on startup
Fixes:
  • Update workspace with current monitor setup
  • Increase window arrangement delay
  • Manually adjust positions after launch
  • Check application startup settings
When a saved monitor is unavailable:
  • Windows default to primary monitor
  • Size/position may need adjustment
  • Update workspace for current setup
Recommendation: Create separate workspaces for different monitor configurations (e.g., “Office-3-Monitors” vs. “Home-Laptop”).
Checklist:
  • Verify Workspaces is enabled in PowerToys
  • Check workspace file isn’t corrupted
  • Ensure no applications are already running (if configured to avoid duplicates)
  • Review launch errors in Workspaces UI
  • Try launching applications individually

Best Practices

Naming Conventions:
  • Use descriptive names: “Web Development” not “Workspace 1”
  • Include context: “Client-ABC-Design” or “Morning-Routine”
  • Add tags or prefixes: “[Work]” vs “[Personal]”
Folder Organization:
  • Group related workspaces
  • Separate by project, time of day, or task type
  • Archive old/unused workspaces
Regular Updates:
  • Update paths when applications move
  • Refresh positions after monitor changes
  • Remove deprecated applications
  • Test workspaces periodically
Version Control:
  • Export important workspaces as backup
  • Document workspace purposes
  • Keep notes on special configurations
Optimize Launch Times:
  • Limit number of applications (< 10 per workspace)
  • Avoid heavy applications that take long to start
  • Use SSD for application installations
  • Close resource-intensive apps before launching workspace
Window Arrangement:
  • Allow sufficient delay for app initialization
  • Test different timing settings
  • Consider manual positioning for problematic apps

Source Code

Location: /src/modules/Workspaces/
  • Launcher: WorkspacesLauncher/Launcher.h, Launcher.cpp
  • Application launching: WorkspacesLauncher/AppLauncher.h, AppLauncher.cpp
  • Window arrangement: WorkspacesLauncher/WindowArrangerHelper.h, WindowArrangerHelper.cpp
  • UI helper: WorkspacesLauncher/LauncherUIHelper.h, LauncherUIHelper.cpp
  • Registry utilities: WorkspacesLauncher/RegistryUtils.h, RegistryUtils.cpp
  • Window properties: WindowProperties/WorkspacesWindowPropertyUtils.h

Build docs developers (and LLMs) love