Skip to content

Repository files navigation

Inline Vocab

macOS menu-bar app: select text anywhere → press a hotkey → pick a tone → get a rewrite pasted back in place.

Bring your own API key. Keys stay on your machine.

Inline Vocab settings — provider, API key, and model

Download

Grab the latest macOS .dmg from GitHub Releases, or build from source (next section).

Use v0.1.2 or newer. Earlier builds had bugs with packaged automations, empty API base URLs, and HTTPS on work networks (details in Troubleshooting). v0.1.2 adds rich Markdown paste (bold, lists, quotes).

Publish a release (maintainers)

npm run tauri build
# DMG: src-tauri/target/release/bundle/dmg/*.dmg
# Rename for a stable asset name, e.g. Inline-Vocab-0.1.2-aarch64.dmg
gh release create v0.1.2 \
  --title "v0.1.2" \
  --notes "Rich Markdown paste (bold, italic, lists, quotes)." \
  "path/to/Inline-Vocab-0.1.2-aarch64.dmg"

Features

  • Works in Slack, Mail, Notes, and most other Mac apps
  • Providers: OpenAI, Grok (xAI), Claude (Anthropic), OpenRouter, or a custom OpenAI-compatible endpoint
  • Tone picker: Professional, Casual Slack, Concise, Friendly
  • Rich paste: rewrites can include bold, italic, bullets, numbered lists, and block quotes (Markdown → HTML clipboard)
  • YAML automations you can extend later

Privacy

  • Your API key is stored only in
    ~/Library/Application Support/Inline Vocab/settings.json
  • There is no Inline Vocab backend. Keys are sent only to the provider you select, when you rewrite text.
  • Never commit that settings file.

Install from source

Requirements: macOS 13+, Node.js 20+, Rust

git clone https://github.com/stephin007/inline-vocab.git
cd inline-vocab
npm install
npm run tauri build

Then open the app from:

src-tauri/target/release/bundle/macos/Inline Vocab.app

Or copy it to /Applications.

First open (Gatekeeper)

Unsigned downloads are blocked by macOS. Use one of these:

  1. Open panel: right-click Inline Vocab → Open → click Open in the dialog
  2. “Damaged and can’t be opened” (right-click does not work) — run:
xattr -cr "/Applications/Inline Vocab.app"
open "/Applications/Inline Vocab.app"

Always install to Applications first; don’t launch from the DMG volume.

Development

npm install
npm run tauri dev

Setup (first run)

  1. Open Inline Vocab (menu bar icon)
  2. System Settings → Privacy & Security → Accessibility → enable Inline Vocab
    (for tauri dev, enable your Terminal / Cursor instead)
  3. In Settings: pick a provider → paste API key → choose a model → Save
  4. Select text anywhere → press ⌘⇧E → choose a tone

Saving Settings writes both the API key and the provider base URL (for example https://api.openai.com/v1). The key alone is not enough.

Daily use

Step Action
1 Select text
2 Press ⌘⇧E
3 Pick a tone (last-used is preselected; Esc cancels)
4 Rewritten text replaces the selection

Settings location

Item Path
API key, provider, model, base URL ~/Library/Application Support/Inline Vocab/settings.json
Automations ~/Library/Application Support/Inline Vocab/automations/

In Finder: ⌘⇧G → paste ~/Library/Application Support/Inline Vocab/

Important: Settings are loaded into memory at launch. Quit the app before hand-editing settings.json, then reopen. If the app is running when you edit the file, the next tone apply can overwrite your edits from stale memory.

Example settings.json:

{
  "provider": "openai",
  "api_key": "sk-...",
  "model": "gpt-4o-mini",
  "api_base_url": "https://api.openai.com/v1",
  "last_tone_id": "professional",
  "status_message": null
}

Automations

Defaults ship in automations/ and are bundled into the .app. On first launch they are copied into Application Support so you can edit tones without rebuilding.

See automations/polish-vocab.yaml for the built-in rewrite flow.

If Settings says “No automations loaded yet”, check that folder for polish-vocab.yaml. You can copy it from the repo’s automations/ directory as a temporary workaround, then quit and reopen the app.

Troubleshooting

“No automations loaded yet”

Cause (fixed in v0.1.1): packaged builds looked for YAML under the developer’s source path, which does not exist on other machines. Seeding into Application Support failed.

Fix: upgrade to v0.1.1+, or manually copy automations/polish-vocab.yaml into
~/Library/Application Support/Inline Vocab/automations/ and relaunch.

API request failed … (chat/completions) (relative URL)

Cause (fixed in v0.1.1): api_base_url was empty, so the app called bare chat/completions instead of https://api.openai.com/v1/chat/completions. Saving only an API key (or an older settings shape) could leave the base URL blank.

Fix:

  1. Open Settings → re-select your Provider (this fills the default base URL) → Save
  2. Quit Inline Vocab fully and reopen
  3. Confirm api_base_url in settings.json starts with https://

Curl works, but the app cannot reach OpenAI

Cause (fixed in v0.1.1): HTTP used rustls with bundled roots and without macOS system proxy support. Terminal curl uses Keychain CAs and the system proxy, so it can succeed on work networks while the app fails (TLS interception / corporate proxy).

Fix: use v0.1.1+ (native cert store + macOS system proxy). If it still fails, the status message now includes the full URL and underlying error — paste that when filing an issue.

Accessibility / app not listed

Open the app once first. For tauri dev, grant Accessibility to Terminal or Cursor, not only to Inline Vocab.

Scripts

npm run tauri dev      # run from source
npm run tauri build    # package .app + .dmg

Stack

  • Tauri 2 + Rust
  • React + TypeScript
  • Provider APIs: OpenAI-compatible chat completions + Anthropic Messages

Contributing

See CONTRIBUTING.md.

License

MIT

About

No description, website, or topics provided.

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages