← All drops

Drop 008Replaces ExtraDock €9.99/yrShipped — native macOS, no permissions, no network

pier

As many macOS docks as you want, each pinned to its own display.

A Pier dock with app icons, one magnified under the pointer, running indicators, a divider and the Trash
Icons magnify under the pointer, running apps get a dot, and dividers and widgets sit in the same row. Blur is composited by the window server, so it cannot be captured offscreen — the real thing is translucent.

macOS gives you one Dock, and on two monitors it either lives on one screen or chases the pointer. Pier gives you as many as you like — each pinned to a display, each with its own contents, position and look. Native Swift, built from source, and it asks for no permissions and never touches the network.

Why it works

One struct owns the geometry

DockLayout produces tile frames, hit testing and drag-insertion points. The SwiftUI drawing and the AppKit hit-testing both ask it, so they cannot disagree about where a tile is.

Magnification is pure arithmetic

A raised-cosine falloff plus neighbour displacement that sums to zero, so the dock does not drift sideways as the swell moves under your pointer. It is the one thing everyone notices when it is wrong, and far easier to prove than to eyeball.

Zero permissions, again

Global mouse monitoring needs no Accessibility grant — only keyboard monitoring does. Auto-hide reveal is a 4pt band at the screen edge, watched by pointer position alone.

A dock whose monitor is gone, goes

Screens are identified by CGDisplayCreateUUIDFromDisplayID with a name-and-resolution fallback. Unplug a display and its dock hides rather than piling onto whatever screen is left.

A vertical Pier dock pinned to the edge of a second display
Each dock is pinned to a display by its hardware UUID, not its display ID — IDs get recycled, so a dock pinned to “display 3” would otherwise reappear on whatever became display 3 next.

Run it

shell
git clone https://github.com/openwarehq/pier
cd pier
docker compose up

Then open the app and connect a model — pick a provider, paste a free key, done. It also reads a repo-root .env if you prefer a file.

Measured

Tests green
59
Build warnings
0
Permissions requested
0
Network calls
0

What it doesn’t do

Stated up front, because scope discovered at 2am is a betrayal.

  • No notification badges. The unread count on a Dock icon is not published by macOS to anyone but the Dock, and guessing would be worse than omitting it.
  • Mirroring the macOS Dock is a snapshot taken when you toggle it, not a live feed.
  • Not notarized, no signed DMG. You build it from source; it is ad-hoc signed on your own machine.
  • macOS 13+. No iOS, no Windows, no Linux.