Window Sweaters: knitted borders for macOS windows, built on JankyBorders
A macOS menu-bar app that dresses your windows in knitted borders.
At a glance
- What is it?
- Window Sweaters is a macOS menu-bar app that draws knitted borders around your windows, with hand-picked colourways for 37 apps. It installs through a Homebrew cask, runs on macOS 13 or later, and relies on private window APIs.
- Who is it for?
- Adopt Window Sweaters if you want a decorative border layer on macOS 13 or later and accept that it is built on private APIs, so a system update can change how it behaves. Skip it on older macOS versions or Intel Macs that the author says have not had the same hands-on testing, and skip it if you need a notarized app.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 3 days ago.
- What is it written in?
- Mainly C, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 16, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Window Sweaters does that a window manager does not
Window Sweaters is a macOS menu-bar app that draws knitted borders around the edges of your windows. The README describes it as "a little Mac app I made to give my windows sweaters" with "knitted borders, colours inspired by your favourite apps, and a cosier desktop". It is not a tiling window manager and does not move, resize or arrange anything. The only thing it changes is the frame drawn around a window.
The audience is narrow and clear: people who already like how macOS arranges windows and want the desktop to look warmer. The colourways are picked by hand, not sampled from app icons, which the README states directly. Apps without a sweater still get a border whose colour is derived from the app name, so the same app keeps the same colour across launches.
The repository is C plus a small Objective-C file, built with clang against AppKit, Cocoa, CoreVideo and the private SkyLight framework. It is GPL-3.0 and credits JankyBorders by Felix Kratz as its base.
How the border renderer and app rules fit together
The Makefile lists the source files, and they describe the pipeline: main.c, parse.c, mach.c, hashtable.c, events.c, reconcile.c, windows.c, border.c, animation.c, knit.c, chart.c, apps.c, plus menubar.m compiled separately with -fobjc-arc. Window tracking comes from events.c and reconcile.c, drawing from border.c and knit.c, and pattern loading from chart.c.
App rules come from a plain text file. The README shows the format:
Claude = #D58561 atelier-claudeNames match app-name prefixes, ignoring capitalisation, and the README says the longest match wins. The second token is a chart name, which points at a PNG in the charts directory. You can drop your own PNG charts there to replace the built-in patterns, so the border texture is data, not compiled in.
There is also a startup hook. If a file exists at ~/.config/window-sweaters/sweatersrc or ~/.sweatersrc, Window Sweaters runs it as a shell script at launch. That is the extension point for people who prefer configuring from the command line.
The README notes the app uses private macOS window APIs, which is why the border can follow the focused window at all. It is also why the author warns that system updates may affect how it works.
Installing Window Sweaters with Homebrew and picking a style
The README offers three routes: hand the repository URL to a coding agent, use the Homebrew cask, or download the ZIP from Releases. The Homebrew route is the one with documented commands.
brew trust saragordic/tap
brew install --cask saragordic/tap/window-sweatersThe first line trusts the third-party tap; the second installs the cask. After that, the README says to open Window Sweaters from your Applications folder. If macOS blocks the launch, it points to System Settings, Privacy & Security, Open Anyway, because the app is not notarized by Apple yet.
Once it runs, a yarn icon appears in the menu bar. Clicking it opens controls for style, pattern, border width and stitch size, plus pause and quit. The README describes two styles: By App gives each application its own sweater, and Zigzag gives them all a softer matching pattern in their own colours.
If macOS asks for Accessibility access, enable Window Sweaters under System Settings, Privacy & Security, Accessibility. The README says this is what lets the app follow which window is focused. Expect the border to disappear while you resize a window and come back when you finish; the README lists that as a known rough edge.
For a local build instead of the cask, the README gives this sequence, which needs Apple's Command Line Tools and Python 3:
git clone https://github.com/saragordic/window-sweaters.git
cd window-sweaters
./scripts/build-app.sh
python3 scripts/install-local.pyThat produces outputs/Window Sweaters.app, installs it in ~/Applications, and opens it. The README states the installer backs up any previous local installation before replacing it.
Where Window Sweaters breaks or is the wrong tool
The app is not notarized. Every first launch on a new machine goes through the Open Anyway step, and there is no documented way around it. For a personal desktop toy that is tolerable; for a managed fleet it is a blocker.
The README is explicit that the app is built for macOS 13 or later on Apple Silicon and Intel, and that it has been tested on Apple Silicon with macOS 26. Older macOS versions and Intel Macs, in the author's words, have not had the same hands-on testing. The Makefile shows the intent to support both: released builds use -arch arm64 -arch x86_64, and -mmacosx-version-min=13.0 is set so the binary does not silently refuse to launch below the stated minimum. But a universal build is not the same as testing on Intel.
Private APIs are the structural risk. Because the border depends on SkyLight and undocumented window behaviour, a macOS update can change what the app sees. The README says so plainly. There is no fallback path documented.
It is also the wrong tool if what you actually want is window arrangement. Window Sweaters does not tile, snap or manage layouts. If your problem is that windows overlap badly, a tiling window manager solves it and this does not.
Finally, the configuration directory is named for the app's original name: ~/Library/Application Support/Knit Borders. The README explains the folder keeps that name so existing settings keep working. It is a reasonable compatibility choice, but it means the on-disk layout does not match the product name, which surprises people editing config by hand.
JankyBorders as the upstream, and what the fork changes
Window Sweaters is built on JankyBorders, a macOS border utility by Felix Kratz, and the README credits it directly. The difference in approach is in what gets drawn. JankyBorders renders a plain coloured border around windows; Window Sweaters renders a knitted texture, with charts loaded from PNG files and a per-app rule table mapping application names to a colour and a chart.
That means the two projects share the hard part, which is tracking windows through private APIs, and diverge on the presentation layer. If you only want a solid highlight around the focused window, JankyBorders is the smaller dependency and does not carry a catalogue of app colourways. If you want the texture, the per-app palette and the Zigzag style, those exist only in Window Sweaters.
There is a practical consequence for upgrades. Because the fork tracks upstream behaviour through the same private frameworks, an upstream fix and a Window Sweaters fix are not the same thing. The repository's release history shows this is an actively pushed project: v1.4.31, v1.4.30 and v1.4.29 all landed on 2026-09-15, and the last push to main was on 2026-09-15. Frequent patch releases on a single day suggest small fixes rather than a stable cadence, which is worth knowing before you pin a version.
Removing it, and what the licence means for reuse
The README is specific about uninstalling, and the order matters: quit Window Sweaters from the yarn icon first, then remove it.
brew uninstall --zap --cask window-sweatersThe --zap flag also removes your saved colourways; leaving it off keeps them for a later reinstall. If you installed by hand, drag Window Sweaters.app to the Trash, then delete ~/Library/Application Support/Knit Borders and ~/Library/Preferences/local.knitborders.app.plist if you want everything gone. The README notes macOS stores the Accessibility permission separately, so you also remove Window Sweaters from System Settings, Privacy & Security, Accessibility.
On licensing: the project is GPL-3.0, and NOTICE.md carries attribution for the JankyBorders base. GPL-3.0 is a copyleft licence, so if you plan to ship a modified build or embed the code in another product, the terms of that licence apply to your distribution. That is a factual consequence of the licence identifier, not legal advice; read LICENSE and NOTICE.md and take your own counsel if you intend to redistribute.
Upgrade cost is low for the cask path, since brew handles it, and the app stores settings in a directory the README says is kept stable for compatibility. The maintenance risk sits with the private APIs, not with the config format.
Editorial conclusion
Adopt Window Sweaters if you want a decorative border layer on macOS 13 or later and accept that it is built on private APIs, so a system update can change how it behaves. Skip it on older macOS versions or Intel Macs that the author says have not had the same hands-on testing, and skip it if you need a notarized app. Before installing, check the Accessibility permission path in System Settings and read docs/COLLECTION.md to confirm your apps are among the 37 colourways.
Frequently asked questions
How do I install Window Sweaters on macOS?
The README gives a Homebrew cask route: run brew trust saragordic/tap, then brew install --cask saragordic/tap/window-sweaters, and open Window Sweaters from your Applications folder. You can also download the latest ZIP from Releases and drag the app into Applications, or build it locally with ./scripts/build-app.sh and python3 scripts/install-local.py.
Which macOS versions and Macs does Window Sweaters support?
The README states the app is built for macOS 13 or later on Apple Silicon and Intel. It also says the author has tested it on Apple Silicon with macOS 26, and that older macOS versions and Intel Macs have not had the same hands-on testing.
Why does macOS block Window Sweaters when I open it?
The README says the app is not notarized by Apple yet. It directs you to try launching it, then open System Settings, Privacy & Security, and choose Open Anyway.
Why does Window Sweaters need Accessibility access?
According to the README, Accessibility access is what lets the app follow which window is focused. If macOS asks, you enable Window Sweaters under System Settings, Privacy & Security, Accessibility.
How do I uninstall Window Sweaters completely?
Quit the app from the yarn icon first. If you installed with Homebrew, run brew uninstall --zap --cask window-sweaters; the README says --zap also removes your saved colourways, and leaving it off keeps them. Manual installs require dragging the app to the Trash and deleting the Knit Borders support folder and the local.knitborders.app.plist preference file, plus removing the Accessibility entry.
Community notes