Fast, open-source macOS floating text actions. Transform text, run scripts, and integrate AI seamlessly.
321
stars
629
commits
Swift
primary language
Sep 10, 2026
updated
Instant actions for selected text on macOS.
Features • Installation • Getting started • Extending • Building from source • Documentation • License
https://github.com/user-attachments/assets/0dc0d328-5e50-4190-8f6f-23020072f059
Select any text in any app, and OpenClip appears with contextual actions — copy, transform, calculate, AI writing, or custom extensions. Press ⌥⌘C to open a fuzzy search palette over your entire action library.
| Action Search Palette (⌥⌘C) | Inline AI Writing & Tools |
|---|---|
![]() | ![]() |
| Reach any action across your catalog instantly | Summarize, translate, or rewrite natively inline |
| Instant Math Evaluation | In-App Extension Store |
![]() | ![]() |
| Calculate math expressions on highlighted text | One-click install custom JS/Shell/AppleScript tools |
.openclipext packages (JavaScript, AppleScript, shell, URL templates, key presses, Shortcuts, Services) from the built-in store, a file, or by dropping a folder into ~/.openclip/extensions. No compile step — a manifest plus a script is a complete extension.Core domain module, and a hover model that never re-evaluates the whole view per mouse move.brew install --cask ganeshmshetty/tap/openclip
Download the latest release (.dmg or .zip) from the releases page.
Drag OpenClip.app into your /Applications folder.
Launch OpenClip and grant Accessibility permission when prompted:
System Settings → Privacy & Security → Accessibility → enable OpenClip
[!IMPORTANT] Accessibility permission is required: it's how OpenClip detects selections and reads the selected text without relying on the clipboard. You can grant or revoke it any time from Preferences.
First launch walks you through a 4-step onboarding — permissions, essential extensions, and an interactive playground — before text-selection monitoring starts.
1. Select some text in any app. The popup bar appears next to your selection:
2. Use the hotkeys:
| Shortcut | Action |
|---|---|
| ⌥⌘C | Toggle the popup (or the action-search palette if the bar is up) |
| Esc | Dismiss the popup / drop back from a scoped palette |
| Cmd ⌘, | Open Preferences while the popup is focused |
3. Search everything. With the bar up, press ⌥⌘C (or start typing) to filter the full action catalog — including disabled actions — by title. Type a fragment of any action name to jump straight to it.
[!TIP] No text selected? The popup still appears and acts on the current clipboard contents — Copy/Cut just drop out because there's no live selection to copy from.
OpenClip is designed to be extended without touching Swift. Anything in ~/.openclip/extensions/
is scanned at launch and turned into actions:
~/.openclip/extensions/
├── my-extension.openclipext/
│ ├── openclip.json # manifest
│ ├── main.js # script
│ └── icon.png
├── wikipedia.openclipext/ # single URL-template action
└── format-sql.sh # standalone snippet with header metadata
A minimal extension is a folder with one openclip.json:
{
"identifier": "com.example.wikipedia",
"name": "Wikipedia",
"actions": [
{ "title": "Look up", "icon": "symbol(book)", "type": "url",
"url": "https://en.wikipedia.org/wiki/Special:Search?search={query}" }
]
}
Actions can also expose options (strings, booleans, dropdowns, SecretStore-backed secrets), gate
visibility with app/regex rules, and render rich results — status, notifications,
or chained effects — from JSON emitted by a shell script.
url, javascript (JavaScriptCore with an openclip.* bridge + async/fetch), applescript, shell, textsnippet, keypress, shortcut, service, and group sub-menus../scripts/install_extension.sh path/to/extension.openclipextopenclip.* bridge: docs/developer-guide/AGENTS.md.Prerequisites: macOS 14+, Xcode 16+, and XcodeGen (brew install xcodegen).
git clone https://github.com/ganeshmshetty/openclip.git
cd openclip
# Populate the extension catalog submodule
git submodule update --init
# Generate the Xcode project (re-run after adding/removing .swift files)
xcodegen generate
# Build and run
./scripts/dev_run.sh
# Run the test suite
./scripts/test.sh
# Build a Release app + build/OpenClip.zip
./scripts/package_app.sh
[!NOTE] The repo is split into a pure-domain Core framework and the OpenClip app target (AppKit + SwiftUI), with XCTest suites for both. The
Extensions/folder is a git submodule hosting the official & community extension catalog (openclip-extensions).
The full technical documentation lives in the docs/ hub:
Log surface and per-subsystem categories.OpenClip is released under the MIT License. Copyright (c) 2026 Ganesh M and OpenClip Contributors.
Swift
97.4%
Shell
1.6%
Fast, open-source macOS floating text actions. Transform text, run scripts, and integrate AI seamlessly.
321
stars
629
commits
Swift
primary language
Sep 10, 2026
updated
Instant actions for selected text on macOS.
Features • Installation • Getting started • Extending • Building from source • Documentation • License
https://github.com/user-attachments/assets/0dc0d328-5e50-4190-8f6f-23020072f059
Select any text in any app, and OpenClip appears with contextual actions — copy, transform, calculate, AI writing, or custom extensions. Press ⌥⌘C to open a fuzzy search palette over your entire action library.
| Action Search Palette (⌥⌘C) | Inline AI Writing & Tools |
|---|---|
![]() | ![]() |
| Reach any action across your catalog instantly | Summarize, translate, or rewrite natively inline |
| Instant Math Evaluation | In-App Extension Store |
![]() | ![]() |
| Calculate math expressions on highlighted text | One-click install custom JS/Shell/AppleScript tools |
.openclipext packages (JavaScript, AppleScript, shell, URL templates, key presses, Shortcuts, Services) from the built-in store, a file, or by dropping a folder into ~/.openclip/extensions. No compile step — a manifest plus a script is a complete extension.Core domain module, and a hover model that never re-evaluates the whole view per mouse move.brew install --cask ganeshmshetty/tap/openclip
Download the latest release (.dmg or .zip) from the releases page.
Drag OpenClip.app into your /Applications folder.
Launch OpenClip and grant Accessibility permission when prompted:
System Settings → Privacy & Security → Accessibility → enable OpenClip
[!IMPORTANT] Accessibility permission is required: it's how OpenClip detects selections and reads the selected text without relying on the clipboard. You can grant or revoke it any time from Preferences.
First launch walks you through a 4-step onboarding — permissions, essential extensions, and an interactive playground — before text-selection monitoring starts.
1. Select some text in any app. The popup bar appears next to your selection:
2. Use the hotkeys:
| Shortcut | Action |
|---|---|
| ⌥⌘C | Toggle the popup (or the action-search palette if the bar is up) |
| Esc | Dismiss the popup / drop back from a scoped palette |
| Cmd ⌘, | Open Preferences while the popup is focused |
3. Search everything. With the bar up, press ⌥⌘C (or start typing) to filter the full action catalog — including disabled actions — by title. Type a fragment of any action name to jump straight to it.
[!TIP] No text selected? The popup still appears and acts on the current clipboard contents — Copy/Cut just drop out because there's no live selection to copy from.
OpenClip is designed to be extended without touching Swift. Anything in ~/.openclip/extensions/
is scanned at launch and turned into actions:
~/.openclip/extensions/
├── my-extension.openclipext/
│ ├── openclip.json # manifest
│ ├── main.js # script
│ └── icon.png
├── wikipedia.openclipext/ # single URL-template action
└── format-sql.sh # standalone snippet with header metadata
A minimal extension is a folder with one openclip.json:
{
"identifier": "com.example.wikipedia",
"name": "Wikipedia",
"actions": [
{ "title": "Look up", "icon": "symbol(book)", "type": "url",
"url": "https://en.wikipedia.org/wiki/Special:Search?search={query}" }
]
}
Actions can also expose options (strings, booleans, dropdowns, SecretStore-backed secrets), gate
visibility with app/regex rules, and render rich results — status, notifications,
or chained effects — from JSON emitted by a shell script.
url, javascript (JavaScriptCore with an openclip.* bridge + async/fetch), applescript, shell, textsnippet, keypress, shortcut, service, and group sub-menus../scripts/install_extension.sh path/to/extension.openclipextopenclip.* bridge: docs/developer-guide/AGENTS.md.Prerequisites: macOS 14+, Xcode 16+, and XcodeGen (brew install xcodegen).
git clone https://github.com/ganeshmshetty/openclip.git
cd openclip
# Populate the extension catalog submodule
git submodule update --init
# Generate the Xcode project (re-run after adding/removing .swift files)
xcodegen generate
# Build and run
./scripts/dev_run.sh
# Run the test suite
./scripts/test.sh
# Build a Release app + build/OpenClip.zip
./scripts/package_app.sh
[!NOTE] The repo is split into a pure-domain Core framework and the OpenClip app target (AppKit + SwiftUI), with XCTest suites for both. The
Extensions/folder is a git submodule hosting the official & community extension catalog (openclip-extensions).
The full technical documentation lives in the docs/ hub:
Log surface and per-subsystem categories.OpenClip is released under the MIT License. Copyright (c) 2026 Ganesh M and OpenClip Contributors.
Swift
97.4%
Shell
1.6%