Giting.
낮의 Giting

홈 · macOS · 메뉴바 앱 · 데스크톱 꾸미기 · Core Graphics · JankyBorders 파생 · Objective-C

window-sweaters 대표 이미지 f6d169a (2026-09-15, 전체 17커밋)
분석 리포트실측 정보적용점원문 README

창에 스웨터를 입힌다

전제부터 사랑스럽다. "내 창들에게 스웨터를 입히려고 만든 작은 맥 앱." 포커스된 창의 테두리를 뜨개질한 무늬로 두르고, 그 색은 창 주인 앱에서 따온다. Safari는 Safari 색실, Cursor는 Cursor 색실. 이틀 만에 440스타가 붙었다.

두 가지 스타일이 있다. By App 은 앱마다 제 브랜드색 색실을 주고, Zigzag 는 모두에게 부드러운 통일 무늬를 준다. 지금까지 손으로 배색한 앱이 37개, 색실은 약 40개다. Finder·Safari·Notion·Slack·Figma·Cursor·Claude·Spotify까지.

이틀에 이 완성도, 어떻게

여기서 실측이 이야기를 바꾼다. 소스를 열면 낯익은 뼈대가 보인다. src/mach.c, src/misc/connection.h, src/misc/space.h, src/misc/yabai.h. 이건 yabai 생태계에서 창을 추적하고 테두리를 그리는 코드의 구조다. 라이선스는 GPL-3.0. 그리고 README 와 src/main.c 가 그 출처를 밝힌다. FelixKratz 의 JankyBorders.

즉 Window Sweaters 는 JankyBorders(창마다 색 테두리를 그려 주는 성숙한 도구)를 포크해서, 그 테두리를 뜨개 무늬로 바꾼 것이다. 창을 어떻게 따라다니고 어떻게 오버레이를 그리는가 하는 어려운 부분은 이미 풀려 있었고, 원 저자는 그 위에 자기 것을 얹었다. 이틀치고 매끈한 이유가 이것이다. 그리고 이 포크는 정직하다, 크레딧을 지웠다면 문제였겠지만, 밝혔다(archify 가 Cocoon-AI 를 밝힌 것과 같은 저작권 위생).

원 저자가 새로 짠 것

빌려 온 엔진 위에 얹은 것이 이 앱의 정체성이다. src/knit.c 를 보면 진짜 뜨개다. 스티치 종류가 stockinette·rib·garter 라는 실제 뜨개 용어로 이름 붙어 있고, 스티치 게이지(rows 6, aspect 1.35, row_overlap 0.12)로 코의 생김새를 모델링한다. 바스켓위브 무늬도 있고, 창 id 를 해시해 "양털 바구니(basket of wool)"에서 색을 고른다. 이 전부가 Core Graphics(CGContext)로 그려진다. 니트를 코드로 옮긴 손끝이 곱다.

실측: 규모와 온도

17커밋 · 저자 1명(Sara Gordić) · 이틀 · 테스트 0 · CI 0. 규모는 작다(9,825줄). 배포는 Homebrew cask(saragordic/tap)나 Releases ZIP 인데 Apple 공증이 안 돼 있어 macOS 가 처음엔 막는다(수동으로 '그래도 열기'). 포커스 창을 추적하려면 Accessibility 권한을 준다.

README 에 시대가 묻어난다 "그냥 이 repo 를 코딩 에이전트한테 보내서 설치를 시키면 된다"는 안내가 Homebrew 안내보다 먼저 온다.

가져올 것과 주의

  • 맥을 아기자기하게 꾸미는 순수 재미용이면 지금 깔아 즐길 값이 있다. 네이티브라 가볍고, 배색이 곱다
  • ⚠️ 업무에 의존하진 말라. 이틀·1인·테스트 0·미공증이고, 창 추적이 private SkyLight API 라 macOS 업데이트에 깨질 수 있다(yabai 계열 공통). Accessibility 권한으로 포커스 창을 읽는다
  • 메뉴바 오버레이·창 테두리를 만든다면, src/knit.c 의 Core Graphics 스티치 렌더와 "JankyBorders 를 포크해 테두리를 리스킨한다"는 접근이 참고감이다
  • 라이선스는 GPL-3.0(JankyBorders 상속), 코드를 가져다 쓸 땐 이 조항을 따라야 한다

실측 정보

HEAD 커밋
f6d169a (2026-09-15, 전체 17커밋)
저자 / 이력
Sara Gordić 단독 · 생성 2026-09-15 · 이틀 · 태그 4 · CI 0
규모
텍스트 9,825줄 · C 17파일(5,112줄) · Objective-C 7파일 · 헤더 21파일
계보(핵심)
FelixKratz/JankyBorders(yabai 생태계 창-테두리 엔진) 포크, README·src/main.c에 크레딧 명시, GPL-3.0 상속. 창 추적·오버레이는 private SkyLight 연결(mach.c·connection.h·space.h)
원 기여
테두리를 뜨개 스티치로 렌더, src/knit.c에 스토키넷·리브·가터 스티치 + 바스켓위브, 스티치 게이지(rows·aspect·row_overlap) 모델링, 창 id 해시로 색실 배정
스타일
By App(앱마다 브랜드색 색실) · Zigzag(부드러운 통일 무늬). 37개 앱 · 약 40개 색실 손수 배색
권한 / 동작
Accessibility 권한(포커스 창 추적) 필요. 메뉴바 실아이콘에서 스타일·패턴·테두리 폭·스티치 크기·일시정지
배포
Homebrew cask(saragordic/tap) 또는 Releases ZIP. ⚠️ Apple 공증 안 됨. macOS가 막으면 '그래도 열기' 수동 허용
이슈 관리
열린 이슈 5 · 표본 1건 응답(14.8h) · 규모상 판단 이르다
라이선스
GPL-3.0 (JankyBorders 상속)

적용점

  • 이럴 때 유용맥 데스크톱을 아기자기하게 꾸미고 싶을 때. 깔면 창마다 그 앱 색의 뜨개 테두리가 생긴다. 순수 재미용 유틸이고, 그 목적엔 지금도 충분히 예쁘다. 네이티브 C/ObjC라 Electron 앱처럼 무겁지 않다.
  • 이럴 땐 부적합업무 흐름에 '의존'할 물건이 아니다. 이틀·1인·17커밋·테스트 0·미공증이고, 창 추적을 private SkyLight API에 기대므로 macOS 업데이트에 깨질 수 있다(yabai 계열 공통 취약). Accessibility 권한이 필요해 포커스 창을 읽는다는 점도 알고 깔아야 한다.
  • 먼저 볼 것완성도의 출처를 알고 보라: 창 테두리 엔진은 JankyBorders를 포크한 것이고(정식 크레딧), 원 저자의 기여는 그 위의 '뜨개 렌더'와 배색이다. 메뉴바 오버레이나 창 테두리를 만드는 사람에겐 src/knit.c의 Core Graphics 스티치 렌더와 'JankyBorders를 포크해 테두리를 리스킨한다'는 접근이 참고감이다.
◈ 참고용

먼저 매력을 인정하자: 창마다 그 앱 색의 뜨개 테두리가 둘리는 건 실제로 아늑하고, 스토키넷·리브·가터 같은 진짜 뜨개 용어로 스티치를 모델링한 손끝이 곱다(src/knit.c). 이틀 만에 440스타가 괜히 붙은 게 아니다. 다만 실측이 그 완성도의 출처를 드러낸다. 소스 구조(mach.c·connection.h·space.h·yabai.h)와 GPL-3.0, 그리고 README·main.c의 크레딧이 한 방향을 가리킨다. 창을 추적하고 테두리를 그리는 엔진은 FelixKratz의 JankyBorders를 포크한 것이다. 표기는 정직하게 했다(archify가 Cocoon-AI를 밝혔듯, 이 저작권 위생은 통과다). 원 저자가 새로 얹은 것은 테두리의 '뜨개 렌더'와 37개 앱 색실이고, 그게 이 앱의 정체성이자 값이다. 성숙한 엔진 위에 진짜 craft를 얹었기에 이틀짜리치고 이렇게 매끈하다. 판정은 참고용이다. 순수 재미용 데스크톱 토이로 지금 깔아 즐길 값은 충분하지만, 이틀·1인·테스트 0·미공증·private API 의존이라 업무에 '도입'할 물건은 아니다. 메뉴바 오버레이를 만드는 사람에겐 뜨개 스티치 렌더와 포크-리스킨 접근이 참고 표본이다.

원문 README

아래는 saragordic/window-sweaters 저장소의 README 원문입니다(GitHub 렌더, 수집 시점 기준). 저작권은 원 프로젝트에 있으며 원 저장소의 라이선스를 따릅니다. GitHub에서 보기

README 전문 펼치기

Window Sweaters

A little Mac app I made to give my windows sweaters. 🧶 Knitted borders, colours inspired by your favourite apps, and a cosier desktop.

Four overlapping windows edged with knitted borders in green, blue and rust colourways

Get it

You can just send this repo to your coding agent and ask it to install Window Sweaters for you:

Install Window Sweaters on my Mac: https://github.com/saragordic/window-sweaters

Or install it yourself with Homebrew:

brew trust saragordic/tap
brew install --cask saragordic/tap/window-sweaters

Then open Window Sweaters from your Applications folder.

You can also grab the latest ZIP from Releases, unzip it, and drag Window Sweaters.app into Applications.

If macOS blocks it, open System Settings → Privacy & Security → Open Anyway after trying to launch it. The app isn't notarized by Apple yet. Apple's instructions explain this step.

Make yourself cosy

Click the yarn icon in your menu bar to change the style, pattern, border width, and stitch size. You can also pause the sweaters or quit from there.

By App gives each app its own sweater. Zigzag gives them all a softer, matching pattern in their own colours. Try both and see what you like.

If macOS asks for Accessibility access, enable Window Sweaters in System Settings → Privacy & Security → Accessibility so it can follow which window is focused.

The sweaters

Custom sweaters for 37 apps, and counting! Almost 40 little colourways, with colours picked by hand. These are just a few of my favourites:

Eight apps shown in By App and Zigzag styles, with enlarged yarn details

Shown above in By App and Zigzag. Here’s everyone we’ve knitted for so far:

  • Apple: Finder, Safari, Mail, Messages, Notes, Calendar, Reminders, Apple Music, Photos, Preview, Terminal.
  • Work and notes: Notion, Paper, Granola, Microsoft Teams, Slack, Zoom.
  • Coding and AI: Cursor, VS Code, Claude, ChatGPT, Codex, Grok Bot, Ghostty.
  • Design: Figma, Adobe Photoshop, Adobe Illustrator.
  • Microsoft Office: Word, Excel, PowerPoint, Outlook.
  • More favourites: Spotify, WhatsApp, Google Chrome, Firefox, Telegram, Discord.

See every sweater and its close-up stitches in the catalogue, or download the By App PDF and Zigzag PDF.

The app colours are picked by hand, not read from your app icons. Apps without their own sweater still get a border in a colour chosen from their name, so it stays the same every time.

A little work in progress

I built this on my Mac and use it myself, but there are still rough edges. Borders hide while you resize a window and return when you're done.

The app is built for macOS 13 or later, on Apple Silicon and Intel. I've tested it on Apple Silicon with macOS 26; older macOS versions and Intel Macs haven't had the same hands-on testing. It uses private macOS window APIs, so system updates may affect how it works.

If something looks wrong, open an issue and tell me your macOS version, Mac model, and whether you're using another screen. Reproduction steps help a lot.

Build it yourself

You'll need Apple's Command Line Tools (xcode-select --install) and Python 3.

git clone https://github.com/saragordic/window-sweaters.git
cd window-sweaters
./scripts/build-app.sh
python3 scripts/install-local.py

This builds outputs/Window Sweaters.app, installs it in ~/Applications, and opens it. The installer backs up any previous local installation before replacing it.

Your own colourways

If you'd like to experiment, edit these files and restart the app:

~/Library/Application Support/Knit Borders/apps.conf
~/Library/Application Support/Knit Borders/charts/

The folder still uses the app's original name so existing settings keep working. For example, an app rule looks like this:

Claude = #D58561 atelier-claude

Names match app-name prefixes, ignoring capitalisation; the longest match wins. You can also put your own PNG charts in the charts folder to replace built-in patterns.

If you like setting things up from the command line, Window Sweaters also runs an optional shell script at startup, if you have one at ~/.config/window-sweaters/sweatersrc or ~/.sweatersrc.

Taking it off

Quit Window Sweaters from the yarn icon first. Then, if you installed it with Homebrew:

brew uninstall --zap --cask window-sweaters

--zap also removes your saved colourways. Leave it off to keep them for later.

If you installed it by hand, drag Window Sweaters.app to the Trash, then delete these if you want everything gone:

~/Library/Application Support/Knit Borders
~/Library/Preferences/local.knitborders.app.plist

macOS remembers the Accessibility permission separately, so remove Window Sweaters from System Settings → Privacy & Security → Accessibility too.

Contributing

make test       # run the tests
make catalogue  # render the sweater collection
make bench     # benchmark the renderer

See CONTRIBUTING.md for more details.

Credits and license

Built on JankyBorders by Felix Kratz, with thanks. Released under GPL-3.0. See NOTICE.md for attribution.

의견

판정에 대한 반론, 도입 경험, 정정 제보를 환영합니다. GitHub 계정으로 참여합니다.

이것도 재봤습니다

전체 리포트 →