The macOS Dock, reimagined. Live widgets, switchable profiles, zero dependencies.
Download · Features · Widgets · Build from source · FAQ
OpenDock replaces the macOS Dock with one that does more than launch apps. It shows your next meeting, what is playing, your clipboard, your downloads, your system load and your pull requests, and it puts each set of widgets on its own profile, one click away.
It is a single native app written in Swift and SwiftUI. It weighs about 5 MB, has no third-party packages, needs no account and collects no telemetry.
|
A real Dock replacement |
Profiles |
|
Never in your way |
Focus stays where it is |
|
Private by design |
Native and light |
|
Every display, any position |
Make it yours |
Every screenshot is a real capture of OpenDock, with real Liquid Glass, over landscapes generated by scripts/make-landscape.swift.
-
Download
OpenDock.zipfrom the GitLab release. -
Unzip it and move
OpenDock.appto/Applications. -
OpenDock is not notarized by Apple, so the first launch is blocked. Open System Settings → Privacy & Security and click Open Anyway. You can instead run this once:
xattr -dr com.apple.quarantine /Applications/OpenDock.app
OpenDock starts at login by default. You can change that in Settings.
50 widgets in seven groups. Add them by right-clicking the dock and choosing Añadir widget.
| Group | Widgets |
|---|---|
| Apps and files | Apps (pinned and running) · App switcher · App or folder · Recent downloads · Bookmarks with link previews · File shelf · File search (Spotlight) · Send with Blip · Web search · Trash |
| Productivity | Next class or event · Week · Reminders · Tasks · Quick note · Mail unread count · Countdown · Pomodoro · Drink water · Habit · Month progress |
| Time and weather | Weather · Weather (large) · Date and weather · LED clock · Neon clock · Tick clock · World clocks |
| Audio | Now playing (Music, Spotify, media keys) · Ambient sounds · Audio output · Voice memo |
| Tools | Clipboard history · Unit and currency converter · Photo frame · Run a Shortcut · Emoji · Color picker · Calculator · Screenshots · Battery · Wallpapers · System stats · Quick toggles |
| Development | GitHub (PRs awaiting your review, notifications) · Linear (assigned issues) · Claude Code usage · Codex usage |
| Business | Stripe revenue (last 30 days) · Web analytics (Plausible) |
Widget notes
- Clipboard history keeps the last 30 text items in memory only, with search, up to 10 favorites and a capture pause. It never writes them to disk and skips items that password managers mark as concealed.
- Converter understands
100 usd eur,5 km to mior70 f c. It handles length, mass, temperature, volume, speed and data units, plus currencies through the free Frankfurter API. - Photo frame rotates images from a folder (default
~/Pictures), so it needs no Photos library permission. - Run a Shortcut runs any shortcut from the Shortcuts app by name.
- Mail shows the unread count only while Mail is running, so the widget never launches it.
- GitHub, Linear and Stripe need a token or API key, set in Configurar… and stored in the Keychain. For Stripe, use a restricted read-only key.
The Blip widget sends files to your devices and contacts through Blip. Drop files on it, or click it to pick files. Enviar con Blip also appears in the right-click menu of file search results and shelf items, and the shelf can send everything it holds at once.
OpenDock uses the macOS Service that Blip registers, so Blip must be installed. If you have never opened Blip, the service is not registered yet, so OpenDock opens Blip instead.
| Switch profiles | Hover over the dock and click a tab |
| Manage profiles | Click + to add one. Right-click a tab to rename, duplicate or delete it |
| Edit the dock | Right-click the dock and choose Editar Dock. Drag to reorder, − removes and + adds |
| Configure a widget | Right-click the widget and choose Configurar… |
| Settings | Menu bar icon, then Ajustes…: size, position, display, style, corners, auto-hide, weather city, search engine |
Note
The interface is currently in Spanish. Translations are welcome. See Contributing.
| Widget | Source |
|---|---|
| Calendar, Tasks, Reminders | macOS Calendar and Reminders through EventKit. For Google Calendar, add your account in System Settings → Internet Accounts, or paste a secret iCal address in Configurar… |
| Weather | Open-Meteo, with no API key. Uses the city in Settings, or the city of your time zone if none is set. Location Services are never used |
| Now playing | Music and Spotify through AppleScript. Other players are controlled with the media keys |
| Claude usage | Official rate_limits fields from Claude Code status line; only quota fields are saved locally |
| ChatGPT / Codex usage | Official Codex app-server account/rateLimits/read, using the existing authenticated CLI session |
| Converter | Frankfurter (European Central Bank reference rates) for currencies; units are converted locally |
| GitHub, Linear, Stripe | Their official APIs, with your own token or key |
| Wallpapers | ~/Pictures/Wallpapers (sub-folders become categories) plus the built-in macOS wallpapers |
Widget permissions are requested when a widget needs them. Notifications are enabled explicitly in Settings, so the first launch does not request notification permission.
| Permission | Why |
|---|---|
| Calendars, Reminders | Calendar and task widgets |
| Automation | Reading the current track in Music or Spotify, the Mail unread count, and the dark mode toggle |
| Accessibility | Pasting emoji into the active app, and sending media keys |
| Microphone | Voice memo, only while recording |
| Notifications | Event, Pomodoro and water reminders |
Settings are stored in ~/Library/Application Support/OpenDock. The last valid configuration is backed up automatically; damaged files are preserved. Settings offers profile import/export and local diagnostic messages. Exports do not contain Keychain secrets. Secrets such as iCal links and API keys are stored in the Keychain.
Clipboard text never goes to disk, including favorites. Entries over 100 KB are skipped, original whitespace is preserved, and capture stops when the last clipboard widget is removed. Downloads, weather, system stats and media polling stop when their widgets leave the visible profile; Pomodoro and reminder timers continue intentionally.
Use Añadir widgets… in the menu bar to search the catalog by name or category.
- macOS 14 Sonoma or later
- Xcode Command Line Tools (
xcode-select --install)
git clone https://github.com/Ripcu/OpenDock.git
cd OpenDock
./build.sh install./build.sh install builds a universal build/OpenDock.app, copies it to /Applications and launches it. Running ./build.sh without arguments only builds the app.
The first build creates a self-signed signing identity in a dedicated keychain. Every build then has the same signature, so macOS keeps the permissions you have already granted and signing never shows a keychain dialog.
Project structure
Sources/OpenDock/
App.swift App delegate, menu bar item
DockPanel.swift Floating panel, layout, auto-hide and smart hide
DockView.swift Dock, profile tabs, edit mode, widget configuration
Store.swift Widget catalog, profiles, settings, Keychain
Style.swift Shared styling
SettingsView.swift Settings window
Widgets/ One file per widget group
scripts/
make-cert.sh Local signing identity
make-icon.swift App icon generator
make-landscape.swift Procedural landscapes for the screenshots
backdrop.swift Shows a landscape behind the dock while capturing
build.sh Build, sign and install
The system Dock stayed hidden after a crash
Quitting OpenDock normally restores the Dock. An independent recovery process restores the previous macOS Dock settings after an unexpected exit, including a forced termination. Startup also recovers saved settings. You can restore the Dock from Settings. If recovery fails, run:
defaults delete com.apple.dock autohide-delay; defaults write com.apple.dock autohide -bool false; killall DockCan I keep the macOS Dock and use OpenDock on top of it?
Yes. Turn off Sustituir el Dock de macOS in Settings and OpenDock sits just above the system Dock. You can also move it to the left or right so both docks are visible side by side.
macOS asks for permissions again after I rebuild
Build with ./build.sh so the app is signed with the local identity. An ad-hoc signed build looks like a new app to macOS every time it changes.
Does it work with multiple displays?
Yes. In Settings, set Pantalla to La del ratón and the dock follows the pointer to whichever display you are using.
Does it work on Intel Macs?
Yes. Release builds are universal binaries for Apple silicon and Intel.
ChatGPT/Codex queries the official app-server every 60 seconds, and also accepts server quota update events. Click the widget for each reported window, exact reset times, remaining percentage and a manual refresh. Missing quota is never shown as zero; old readings and expired windows are labeled. The widget monitors Codex-backed account limits, not separate chatgpt.com conversation limits. Configure a Codex CLI executable path if automatic detection fails.
In Settings choose Conectar límites de Claude Code. OpenDock installs a status line bridge while preserving any existing command and making a settings backup. Claude Code supplies official 5-hour and 7-day percentages after account activity; OpenDock reads the small local file every 5 seconds. The status line requests a 60-second refresh interval. These reads do not force a new server quota query, and old snapshots are visibly marked after three minutes. Accounts or clients without the quota fields show unavailable data. OpenDock never reads Claude authentication tokens or derives quota from transcript token counts.
The bridge saves only quota fields, source and capture time, with owner-only file permissions. To remove the connection, restore the statusLine entry from the backup next to ~/.claude/settings.json.
Official sources: Codex app-server and Claude Code status line.
Run swift test for configuration recovery, import validation, clipboard bounds and polling lifecycle checks.
For distribution with an Apple Developer account:
OPENDOCK_SIGNING_IDENTITY="Developer ID Application: Your Name (TEAMID)" ./build.sh
OPENDOCK_NOTARY_PROFILE="your-notarytool-profile" ./scripts/notarize.shThe default build still uses the local identity and is not notarized. The notarization script verifies Developer ID signing before submission and staples Apple's ticket after acceptance.
Run python3 scripts/downloads.py with an authenticated GitHub CLI to see release asset download events. These counts are not unique users or active installs. GitLab download events are not included because its generic package API does not expose a verified download count. No analytics are added to the app.
Issues and pull requests are welcome. Please:
- keep the project free of third-party dependencies,
- match the style of the surrounding code,
- open an issue first for large changes.
Translations, new widgets and bug reports are especially appreciated.
Inspired by CoolDock. Weather data from Open-Meteo.
OpenDock is released under the MIT License.
If OpenDock improves your Mac, consider giving it a star.



