agentlytics
Comprehensive analytics dashboard for AI coding agents — Cursor, Windsurf, Claude Code, VS Code Copilot, Zed, Antigravi…
FlashSpace is a blazingly fast virtual workspace manager for macOS ⚡
git clone https://github.com/wojciech-kulik/FlashSpace.gitwojciech-kulik/FlashSpaceFlashSpace is a blazingly-fast virtual workspace manager for macOS, designed to enhance and replace native macOS Spaces. No more waiting for macOS animations.
Requirements:
brew install flashspace
See: Releases Page.
See: Build From Source.
The video shows a sample configuration where I use 3 workspaces and switch between them using hotkeys.
If you want to keep the same app in multiple workspaces, you can use the "Floating Apps" feature from the app settings or you can add the app to multiple workspaces from the main app window.
FlashSpace allows to define virtual workspaces and assign apps to them. Each workspace is also assigned to a specific display. When you switch to a workspace, the assigned apps are automatically presented and all other apps from the assigned display are hidden.
The app allows workspaces to be switched independently on each display.
Option + TabSpace Control allows you to preview all workspaces on a grid and switch between them.
Use 0-9 and arrow keys to switch between workspaces.
Workspace Switcher allows you to quickly switch between workspaces using
Option + Tab (by default).
It shows a list of workspaces and allows you to switch them in a similar way
to macOS app switcher (CMD + Tab).
FlashSpace enables fast switching of focus between windows. Use hotkeys to shift focus in any desired direction. It also allows you to jump between displays.
FlashSpace supports Picture-In-Picture mode. This is an experimental feature and can be disabled in the App Settings -> Workspaces.
macOS does not offer a public API to hide a specific window, and hiding the app also hides the PiP window. To work around this issue, FlashSpace identifies if the app supports PiP and hides in a screen corner all windows except the PiP window.
If the PiP window is not visible, the standard behavior is applied.
Supported browsers: Safari, Zen Browser, Chrome, Firefox, Brave, Vivaldi, Arc, Dia, Opera, Microsoft Edge, Comet.
Please note that this feature may not work if your browser language is not set to English.
FlashSpace supports two modes of display assignment:
Static (default) - Each workspace is assigned to a specific display. This is perfect for users who want to have a dedicated workspace for each display, similar to how macOS Spaces work. This mode can be challenging if you use multiple displays and change their arrangement frequently.
Dynamic - Each workspace is automatically assigned to the displays where its apps are located. In this mode, one workspace can be shown on multiple displays at the same time. This is useful for users who want to rearrange workspaces by moving apps between displays without changing the configuration. You can't show empty workspaces with this mode.
The display assignment mode can be changed in the App Settings -> Workspaces.
FlashSpace can be integrated with SketchyBar and other tools. The app runs a configurable script when the workspace is changed.
You can enable the integration in the app settings.
sketchybarrcsketchybar --add item flashspace left \ --set flashspace \ background.color=0x22ffffff \ background.corner_radius=5 \ label.padding_left=5 \ label.padding_right=5 \ script="$CONFIG_DIR/plugins/flashspace.sh" \ --add event flashspace_workspace_change \ --subscribe flashspace flashspace_workspace_change
plugins/flashspace.sh#!/bin/bash sketchybar --set $NAME label="$WORKSPACE - $DISPLAY"
sketchybarrcsketchybar --add event flashspace_workspace_change
SID=1
WORKSPACES=$(/Applications/FlashSpace.app/Contents/Resources/flashspace list-workspaces)
for workspace in $WORKSPACES; do
sketchybar --add item flashspace.$SID left \
--subscribe flashspace.$SID flashspace_workspace_change \
--set flashspace.$SID \
background.color=0x22ffffff \
background.corner_radius=5 \
background.padding_left=5 \
label.padding_left=5 \
label.padding_right=5 \
label="$workspace" \
script="$CONFIG_DIR/plugins/flashspace.sh $workspace"
SID=$((SID + 1))
done
plugins/flashspace.sh#!/bin/bash if [ "$1" = "$WORKSPACE" ]; then sketchybar --set $NAME label.color=0xffff0000 else sketchybar --set $NAME label.color=0xffffffff fi
FlashSpace provides a command-line interface to interact with the app. You can use it to manage workspaces, apps, and profiles.
First, install the CLI in the App Settings -> CLI. Then, use the flashspace
command to interact with the app. Run the following command to see all
available commands:
flashspace --help
FlashSpace doesn't actively manage windows, so if you switch to a workspace and call another app that is not assigned to the workspace, it will be shown on top of the workspace apps.
It is considered to be a desired behavior as it allows quickly accessing other apps without glitches or switching between workspaces.
Glitches are common in tiling window managers, often caused by not configured pop-ups or dialog windows. FlashSpace prevents these issues by not managing windows & apps that are unassigned allowing you to interact with the system in a non-disruptive way.
FlashSpace doesn't support the concept of individual app windows per workspace. This is a conscious decision to keep the app simple and fast.
This way, FlashSpace can rely on native show & hide functionality ensuring the most efficient way of managing and switching between workspaces. Additionally, this hack-free approach is battery-friendly and doesn't break other features in the system like Mission Control.
Supporting individual windows per workspace would introduce significant complexity and could negatively impact the app's performance. This limitation results from the lack of a public API in macOS to hide specific windows. Currently, the only options are to move a window to a screen corner or minimize it - neither of which provides an ideal user experience.
FlashSpace doesn't support moving windows, resizing, or changing their layout. This is a conscious decision to keep the app simple and fast.
This feature would introduce significant complexity and could negatively impact the app's performance. Additionally, it would require a lot of work to support all edge cases and glitches. The app is designed to manage workspaces and it follows the UNIX philosophy of doing one thing and doing it well.
There are many great and free window management apps available that can be used in conjunction with FlashSpace, so there is no need to duplicate this functionality. Examples of such apps are Magnet, Rectangle, Raycast, and many others.
FlashSpace uses XcodeGen to generate the Xcode project from the project.yml
file.
brew bundle to install dependencies.xcodegen generate.FlashSpace.xcodeproj in Xcode.FlashSpace target, click on the Signing & Capabilities tab,
and select your team.Remember to run xcodegen generate every time you change branch or pull changes.
If you want to generate the project with configured signing, you can run:
XCODE_DEVELOPMENT_TEAM=YOUR_TEAM_ID xcodegen generate
You can also set this variable globally in your shell.
macOS has a bug that causes apps to appear on the wrong display after sleep. This happens if the app is hidden while the Mac is in sleep mode.
There is one workaround that can help with this issue. When you wake up your Mac, make sure to turn on all displays before logging in. This way, all apps should be shown on the correct display.
macOS 15 introduced new features that allow you to move & resize windows without 3rd party apps. To see all available options, select "Window" from the menu bar and go to "Move & Resize" submenu.
Adjusting shortcuts is quite limited, but it's possible: see here. However, the most flexible approach would be to use Raycast, Magnet, or other window management apps.
macOS allows you to switch focus between windows of the same app using the Cmd + ` shortcut.
There is a great command-line tool called SKHD that allows you to define custom global shortcuts. You can use it also with FlashSpace through the CLI.
You could even define some shortcuts that are not available in FlashSpace, like switching between specific profiles.
If you are a Raycast user, you can use the Raycast extension to manage FlashSpace without leaving your keyboard.
Big thanks to krmbzds for creating this extension!
Big thanks to all the sponsors who support this project 🍻!
more like this
Comprehensive analytics dashboard for AI coding agents — Cursor, Windsurf, Claude Code, VS Code Copilot, Zed, Antigravi…
Free open-source Cloudflare R2 desktop client and S3 GUI for macOS, Windows, and Linux. Manage Cloudflare R2, AWS S3, M…
search projects, people, and tags