- Swift 93.7%
- Shell 6.3%
|
|
||
|---|---|---|
| icons | ||
| Integrations | ||
| Resources | ||
| scripts | ||
| Sources/Lexi | ||
| Tests/LexiTests | ||
| .gitignore | ||
| DICTIONARY_SELECTION.md | ||
| HANDOVER.md | ||
| Package.swift | ||
| QA_STATUS.md | ||
| README.md | ||
| summary.md | ||
Lexi
Lexi is a lightweight, offline macOS menu-bar dictionary that uses dictionaries already active on the Mac.
For the complete approved scope, design decisions, testing status, and continuation prompt, read HANDOVER.md.
Included in this first build
- Branded menu-bar lookup panel
- Cursor-adjacent Peek mode
- Detachable, resizable floating panel
- Adjustable panel background opacity
- Configurable 1–60 second close timer and Pin override
- Independent popup and floating text sizes
- Back/forward lookup history
- System-voice pronunciation
- Local spelling and word-form fallbacks
lexidict://URL integration- PopClip and Raycast integrations
- Launch at Login setting
- Configurable, persistent global shortcut that opens a blank focused lookup; default:
⌥⌘D
Build
From Terminal:
cd /path/to/Lexi
chmod +x scripts/build.sh Integrations/Raycast/lexi.sh
./scripts/build.sh
The app is created at build/Lexi.app. The local build is ad-hoc signed for testing. A public release still needs a Developer ID signature and notarization.
The build targets the current host architecture by default. Override it with
LEXI_ARCH=arm64 or LEXI_ARCH=x86_64. For a signed hardened-runtime build,
provide a Developer ID identity with LEXI_SIGNING_IDENTITY="Developer ID Application: ...".
Run the unit tests with:
swift test
This repository includes a command-line build path and has been tested with Xcode 27.0. The source can also be opened as a Swift package after selecting a matching Apple toolchain.
Signed release
The release script requires an installed Developer ID Application certificate and a notarytool keychain profile. It builds with the hardened runtime, verifies the Developer ID signature, notarizes and staples the app, creates a versioned ZIP, and writes a SHA-256 checksum.
LEXI_SIGNING_IDENTITY="Developer ID Application: Your Name (TEAMID)" \
LEXI_NOTARY_PROFILE="lexi-notary" \
./scripts/release.sh
The output is written to build/release/. The script stops before packaging if either credential is unavailable; it never presents an ad-hoc build as a public release.
Try a URL lookup
After launching Lexi:
open 'lexidict://lookup?term=serendipity&mode=peek'
Supported query parameters are term, mode (peek, menubar, or floating), ttl, and pin.
Integrations
- Raycast: add
Integrations/Raycastas a Script Command directory. - PopClip: install
Integrations/Lexi.popclipext. The package targets PopClip 2026.8.1 or later and uses its current URL-action format.
Lexi accepts URL requests only through the lexidict://lookup endpoint. Terms are bounded and sanitized, and request TTL values are finite, validated overrides rather than permanent preference changes.
Notes
Dictionary Services returns the first match from active system dictionaries as plain text. Lexi does not ship or download dictionary data. See DICTIONARY_SELECTION.md for the supported-API limits around per-dictionary choice and source attribution, and QA_STATUS.md for the current live-test record.