Contents
Where the configuration actually lives
Three distinct places, and confusing them is the source of most reports in this category.
| Location | Purpose | Notes |
|---|---|---|
| <code>com.knollsoft.Rectangle</code> preference domain | The live settings store | Read at launch, written as you change things in the UI |
| <code>~/Library/Preferences/com.knollsoft.Rectangle.plist</code> | The file backing that domain | Do not edit by hand while the app is running — the cache will overwrite you |
| <code>~/Library/Application Support/Rectangle/RectangleConfig.json</code> | An import file | If present at launch it is applied, then renamed with a timestamp so it is not read again |
macOS caches preference domains in memory. Editing the plist file directly while the app is running means your changes are overwritten the moment anything writes back. Always quit the app first, or use <code>defaults write</code>, which goes through the cache correctly.
Terminal commands appear to do nothing
Almost always one of three things. Values are read at application startup, so a change made while the app is running has no effect until it is relaunched — this is by design and catches nearly everyone the first time.
# write, then actually restart the app
defaults write com.knollsoft.Rectangle gapSize -float 8
killall Rectangle && open -a Rectangle
# verify what is stored
defaults read com.knollsoft.Rectangle gapSize
# dump everything, to see what is really set
defaults read com.knollsoft.Rectangle
The second cause is the wrong bundle identifier. Rectangle Pro stores its preferences under <code>com.knollsoft.Hookshot</code>; commands aimed at the free app's domain on a Pro install succeed, write a value nothing reads, and produce no error.
The third is a type mismatch. A key expecting a float given an integer, or a boolean given a string, may be ignored. Match the type shown in the reference: <code>-int</code>, <code>-float</code>, <code>-bool</code> and <code>-string</code> are not interchangeable.
Everything resets after each restart
If custom shortcuts survive within a session but revert on relaunch, the preference domain is not being written, or something is restoring an older copy over it.
The best-known cause is a Homebrew installation with leftovers from a previous version. The documented fix is to uninstall with the zap flag, which removes the associated preference files that a plain uninstall leaves behind, then reinstall clean:
brew uninstall --zap rectangle
brew install --cask rectangle
Other causes worth checking, in order of likelihood:
- A stray <code>RectangleConfig.json</code> in the Application Support folder. It is applied at every launch until the app renames it — if something (a sync tool, a dotfiles setup, a management profile) keeps putting it back, your settings are overwritten every single launch.
- A file sync service with the preferences folder in scope, restoring an older revision.
- Managed device policy. On a corporate Mac a configuration profile can enforce a preference domain, in which case local changes are reverted by design.
- Disk permissions. Rare, but a preferences folder the user cannot write to produces exactly this symptom.
# is there an import file waiting to be applied?
ls -la ~/Library/Application\ Support/Rectangle/
# is the preferences file writable by you?
ls -la ~/Library/Preferences/com.knollsoft.Rectangle.plist
Using the JSON import deliberately
The behaviour that surprises people is intentional and useful once understood. Drop a config file at the documented path, launch the app, and it is applied; the file is then renamed with a timestamp so a subsequent launch does not reapply it. That makes it an import mechanism rather than a live configuration file — the right primitive for provisioning a new machine or pushing a standard layout to a team.
# provision a machine from a known-good config
mkdir -p ~/Library/Application\ Support/Rectangle
cp ~/dotfiles/RectangleConfig.json ~/Library/Application\ Support/Rectangle/
open -a Rectangle
# after launch the file is renamed, e.g.:
# RectangleConfig-2026-07-14-101532.json
If you want a config that genuinely reapplies at every login, do not fight the rename — copy the file into place from a login script before the app starts. Trying to make the app treat it as a live file will only produce the reset symptom described above.
The settings pane has import and export buttons. Export once, keep the file in your dotfiles, and every destructive step in every troubleshooting guide becomes reversible in ten seconds. The configuration sync guide covers doing this across several Macs.
Version compatibility of stored shortcuts
Shortcut storage changed format in v0.41. A preferences file written by a newer version will not load correctly in an older one, which matters if you are downgrading to work around a regression. Downgrading is a legitimate diagnostic step, but keep a JSON export from before the downgrade rather than expecting the plist to travel backwards.
When testing whether a problem is configuration or code, the cleanest experiment is to move the preference file aside entirely and launch with defaults:
killall Rectangle
mv ~/Library/Preferences/com.knollsoft.Rectangle.plist ~/Desktop/rect-backup.plist
defaults delete com.knollsoft.Rectangle 2>/dev/null
open -a Rectangle # now running on stock defaults
If the problem disappears with stock defaults, it is something in your configuration, and reintroducing settings a few at a time will find it. If it persists, the configuration was never the issue and the issue tracker is the next stop.
Get the current build
Rectangle is free and open source. Everything documented here works in the standard build.
Download from rectangleapp.comQuestions
Why do terminal settings need an app restart?
Values are read at startup. This is documented behaviour, not a bug, and it is the most common reason a correct command appears to do nothing.
Where are my custom shortcuts stored?
In the preference domain, backed by the plist in ~/Library/Preferences. Export them to JSON from the settings pane for anything you care about keeping.
What does brew zap actually remove?
The preference and support files a plain uninstall leaves behind. It is the documented answer to settings not persisting on Homebrew installs.
Can I keep one configuration across several Macs?
Yes, via the JSON export. See the configuration backup and sync guide.