No description
  • Swift 93.7%
  • Shell 6.3%
Find a file
bogac 308b331e89 Add project summary
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 21:15:30 +11:00
icons Harden Lexi for reliable release 2026-09-28 20:49:40 +10:00
Integrations Fix opacity and empty lookup launches 2026-09-29 18:07:42 +10:00
Resources Use standard menu bar menu for quit 2026-09-28 22:20:33 +10:00
scripts Fix opacity and empty lookup launches 2026-09-29 18:07:42 +10:00
Sources/Lexi Fix opacity and empty lookup launches 2026-09-29 18:07:42 +10:00
Tests/LexiTests Fix opacity and empty lookup launches 2026-09-29 18:07:42 +10:00
.gitignore Harden Lexi for reliable release 2026-09-28 20:49:40 +10:00
DICTIONARY_SELECTION.md Fix opacity and empty lookup launches 2026-09-29 18:07:42 +10:00
HANDOVER.md Fix opacity and empty lookup launches 2026-09-29 18:07:42 +10:00
Package.swift Add login and shortcut settings 2026-09-29 16:37:59 +10:00
QA_STATUS.md Fix opacity and empty lookup launches 2026-09-29 18:07:42 +10:00
README.md Fix opacity and empty lookup launches 2026-09-29 18:07:42 +10:00
summary.md Add project summary 2026-10-24 21:15:30 +11:00

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/Raycast as 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.