Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

iSpace

iSpace is a macOS menu bar app that creates lightweight app-based workspaces.

It does not create/delete Mission Control Spaces. Instead, it shows or hides running apps based on the selected workspace.

What It Does

  • Shows a menu bar icon with the current workspace symbol and index.
  • Lets you switch between named workspaces from the menu or keyboard shortcuts.
  • Lets you assign running apps to a workspace.
  • Hides apps assigned to other workspaces and unhides apps assigned to the selected workspace.
  • Leaves unassigned apps visible in all workspaces.
  • Saves configuration to ~/.config/ispace/config.json.

Requirements

  • macOS 13.0 or later (per app Info.plist).
  • Accessibility permission (prompted at launch).
  • Apple Events permission may be requested by macOS, depending on fallback visibility control paths.

Build

cd iSpace
swift build -c release

Binary output:

.build/release/iSpace

Run

Run directly:

.build/release/iSpace

Or package as a simple app bundle:

mkdir -p iSpace.app/Contents/MacOS iSpace.app/Contents/Resources
cp .build/release/iSpace iSpace.app/Contents/MacOS/iSpace
cp Sources/Info.plist iSpace.app/Contents/Info.plist
chmod +x iSpace.app/Contents/MacOS/iSpace
open iSpace.app

Note: the existing build.sh script still references the old SpaceCleaner name and is not aligned with the current binary target.

Default Workspaces

On first launch, iSpace creates a default config with these workspaces:

  • Main
  • Code
  • Communication
  • Browse
  • Creative
  • Productivity

Each workspace has a color, icon, and a default app-name allowlist.

Menu Actions

  • WORKSPACES: select active workspace.
  • Assign Apps: map running apps to a workspace, or unassign them.
  • New Workspace...: create a workspace.
  • Delete Workspace: remove any workspace except the first one.
  • Edit Config File...: open config.json.
  • Open Config Folder: open ~/.config/ispace/.
  • Reload Config: reload config from disk.
  • Reset to Defaults...: replace in-memory workspaces with defaults and switch to workspace 1.
  • Pause iSpace / Resume iSpace: disable/enable workspace visibility switching.
  • Quit iSpace: unhides hidden apps, then exits.

Keyboard Shortcuts

  • Ctrl+1 ... Ctrl+9: switch to workspace index 1-9.
  • Ctrl+Option+Left: previous workspace.
  • Ctrl+Option+Right: next workspace.
  • Ctrl+Option+D: pause/resume iSpace.

Configuration

Config file location:

~/.config/ispace/config.json

Template file written on first run:

~/.config/ispace/config.template.json

Current schema:

{
	"version": 1,
	"currentWorkspaceIndex": 0,
	"workspaces": [
		{
			"name": "Main",
			"appNames": [],
			"color": "blue",
			"icon": "house.fill"
		}
	]
}

Supported color values:

  • blue
  • indigo
  • purple
  • pink
  • red
  • orange
  • yellow
  • green
  • mint
  • teal
  • cyan

icon uses an SF Symbols name.

Behavior Notes

  • Switching workspaces only affects currently running regular apps.
  • iSpace itself is never hidden.
  • When paused, all hidden apps are unhidden.
  • App assignment is by localized app name string.
  • An app can only be assigned to one workspace at a time from the UI flow.

Troubleshooting

iSpace cannot control app visibility

  • Ensure Accessibility is enabled for iSpace in System Settings > Privacy & Security > Accessibility.
  • If prompted, allow automation/Apple Events access for System Events.

App assignments seem ignored

  • Confirm the app is currently running (assignment menu only lists running regular apps).
  • Check for exact app name matching in config.json.
  • Use Reload Config after manual edits.

Apps stay hidden after testing

  • Use Resume iSpace or Quit iSpace (quit explicitly unhides apps first).

License

No license is currently declared in this repository.

About

native macos window manager

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages