quick start

start here!

Installing

Download the installer or the zip file from the Releases page and install/unzip it anywhere you like.

Alternatively, workspacer is available via these package managers:

WinGet

winget install workspacer

Chocolatey

choco install workspacer

Scoop

scoop bucket add extras
scoop install workspacer

Workspacer automatically checks for updates. However, if you are using a package manager, you should uncomment/add this line in your workspacer configuration file to disable automatic updates:

context.Branch = Branch.None;

Configuring

Workspacer loads a default configuration with almost everything you’d need, but you will likely want to modify things like key bindings, widgets on the bar, workspaces, layouts, plugins or otherwise the default behavior of workspacer.

A configuration file can be generated by right clicking the workspacer system tray icon, and selecting the option to create an example configuration in:

The file gets created in one of the two following places

C:\Users\<username>\.config\workspacer\workspacer.config.csx
C:\Users\<username>\.workspacer\workspacer.config.csx

Workspacer is configured in the C# language, using types and interfaces provided by workspacer itself. This means that while workspacer requires knowledge of programming to use, its configuration is extremely powerful, and allows you to modify or even replace most functionality that drives workspacer. For example, a common use case is to implement a custom layout engine (just define a class that satisfies the interface ILayoutEngine) entirely inside the config file, and then use it to define the desired custom layout behavior, without needing to modify workspacer itself.

Workspacer’s configuration file allows for type checking and intellisense! Currently, only Visual Studio Code with the C# extension is supported. Opening the .workspacer folder in your home directory inside Visual Studio Code with the C# extension installed will provide syntax highlighting, type checking, and autocompletion automatically because of the #r directives at the top of the config file (so don’t remove those, or else this won’t work!).

The config page lists a few examples and tips & tricks on how to customize workspacer to your liking.

Configuring in F#

Workspacer can also be configured in F#, either by extending an existing C# configuration or replacing C# configuration entirely. F# script files (.fsx) are supported with autocompletion in Visual Studio and Rider, as well as Visual Studio Code (using the iodine plugin). All configuration options available in C# configuration are also available for F# configuration.

To get started with F# configuration, replace the C# configuration file with the following:

#r "C:\Program Files\workspacer\workspacer.Shared.dll"
#r C:\Program Files\workspacer\plugins\workspacer.FSharpConfig\workspacer.FSharpConfig.dll"

using System;
using workspacer;
using workspacer.FSharpConfig;

return FSharpConfig.Use();
C:\Users\<username>\.config\workspacer\workspacer.config.csx

With this configuration, workspacer is configured in the setupContext function in the F# configuration script:

C:\Users\<username>\.config\workspacer\Workspacer.Config.fsx

An example configuration, equivalent to the default C# configuration is available on github. In the F# configuration, it is important to use #r @".." directives instead of #r "..". Furthermore, a function setupContext is used instead of the returned action in the C# configuration. These differences are due to the F# configuration being compiled to a dll library, rather than running as a script directly.

The config page contains a reference of the available configuration options, as well as C# examples.

Learning

Workspacer’s default configuration makes it behave like other tiling window managers, but deviates where not possible due to limitations of the Win32 API which prevents from freely controlling windows in the same way as an X11 tiling window manager.

The keybindings page shows the default set of keybindings.

Submit feedback!

If you run into any bugs, or want to suggest a feature, please feel free to open an issue!