Skip to content
RipcuPublic

About

Open-source macOS Dock replacement with live widgets and switchable profiles. Native Swift, no dependencies, no telemetry.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

OpenDock icon

OpenDock

The macOS Dock, reimagined. Live widgets, switchable profiles, zero dependencies.

Release Downloads macOS 14+ Swift License: MIT

Download · Features · Widgets · Build from source · FAQ


OpenDock showing the Today profile over a misty mountain landscape

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.

Features

A real Dock replacement
Your pinned and running apps, with launch indicators, drag to reorder and a Trash. The system Dock is hidden while OpenDock runs and comes back when you quit.

Profiles
Keep apps, today's schedule, files and tools on separate profiles. Hover over the dock to switch between them.

Never in your way
Smart hide moves the dock out of the way when a window reaches it, so it never covers a web page. Touch the bottom edge of the screen to bring it back.

Focus stays where it is
The dock is a non-activating panel, so clicking a widget never takes focus from the app you are typing in.

Private by design
No account, no analytics and no network calls beyond the widgets you add. Secrets live in the macOS Keychain.

Native and light
SwiftUI with Liquid Glass on macOS 26. Universal binary for Apple silicon and Intel.

Every display, any position
Keep the dock on the main display or let it follow the pointer across displays. Place it at the left, center or right of the screen.

Make it yours
Glass, dark or tinted surfaces, adjustable corner radius, size and distance from the edge, and profile tabs that can stay visible.

Screenshots

Apps profile over a mountain lake Focus profile under the northern lights
Apps: pinned and running apps, just like the Dock Focus: neon clock, system stats, month progress and quick toggles
Files profile over desert dunes Studio profile at sunset
Files: shelf, Spotlight search, Blip, clipboard history and converter Studio: photo frame, quick note, world clocks, battery and a Shortcut

Every screenshot is a real capture of OpenDock, with real Liquid Glass, over landscapes generated by scripts/make-landscape.swift.

Install

  1. Download OpenDock.zip from the GitLab release.

  2. Unzip it and move OpenDock.app to /Applications.

  3. 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.

Widgets

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 mi or 70 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.

Send with Blip

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.

Usage

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.

Data sources

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

Privacy and permissions

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.

Build from source

Requirements

  • 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

FAQ

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 Dock
Can 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.

Accurate AI quota widgets

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.

Verification and release signing

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.sh

The 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.

Repositories and download statistics

GitLab · GitHub mirror

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.

Contributing

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.

Acknowledgements

Inspired by CoolDock. Weather data from Open-Meteo.

License

OpenDock is released under the MIT License.


If OpenDock improves your Mac, consider giving it a star.

About

Open-source macOS Dock replacement with live widgets and switchable profiles. Native Swift, no dependencies, no telemetry.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages