Install
- For the prebuilt app (
Lantern.dmg): a Mac with Apple Silicon (M1 or newer) and macOS 26.2 (Tahoe) or newer: the app is made for Liquid Glass, and MLX’s libraries need macOS 26.2. Python 3.12, all packages and theAVFoundationmedia helper are insideLantern.app; no Xcode, Homebrew,uvorffmpegis needed (brew install ffmpegis optional if you index.mkvor.webmvideos). - For building from source (
./install.sh) and thelanternCLI:
| What | Why | Install |
|---|---|---|
| Mac with Apple Silicon (tested: M4, 16 GB) | MLX runs on Apple Silicon only | – |
| Xcode Command Line Tools | compiler, git | xcode-select --install |
| Xcode 26 | builds the menu bar app (macOS 26 SDK) | App Store |
| Homebrew | package manager | https://brew.sh |
| uv | Python environment and dependencies | brew install uv |
| Python 3.12 | the daemon; installed by uv, not the system Python | automatic with uv sync |
| ffmpeg (optional) | MKV and WebM recordings only; everything else is decoded by macOS itself (AVFoundation) | brew install ffmpeg |
uv sync installs everything else into the project’s .venv (nothing global, no PyTorch): MLX and a pinned mlx-vlm
commit (EmbeddingGemma 2 support), transformers, tokenizers, sqlite-vec, tree-sitter-language-pack,
pathspec, charset-normalizer, mlx-whisper, pillow, soundfile, watchdog, and pyobjc-framework-Vision /
pyobjc-framework-Quartz (Python bindings for macOS’s text recognition and PDFKit; no models to download).
The python.org Python (e.g. 3.13) does not work: it cannot load SQLite extensions, which
sqlite-vecneeds. The Python that uv installs can.
Installation
Section titled “Installation”Via Homebrew (Recommended)
Section titled “Via Homebrew (Recommended)”brew install --cask misterekkk/tap/lanternDownload the app (Lantern.dmg)
Section titled “Download the app (Lantern.dmg)”- Download
Lantern.dmgfrom Releases (or the latest artifact of the Build Lantern.dmg workflow in Actions), open it and drag Lantern to Applications. - Because the build is signed ad-hoc (without a paid Apple Developer ID), macOS Gatekeeper blocks the first launch of a
downloaded copy. Allow it once:
- either try to open Lantern in
/Applications, then go to System Settings → Privacy & Security and click Open Anyway at the bottom (or right-click Lantern.app in Finder → Open), - or remove the quarantine attribute in Terminal:
Terminal window xattr -cr /Applications/Lantern.app
- either try to open Lantern in
- Click the Lantern icon in the menu bar and click Download to fetch the search model (~1.2 GB; optional checkboxes add Whisper for recordings and SigLIP 2 for photos). Models can also be downloaded later in Settings → Performance. Quick search (apps, System Settings, calculator, dictionary) works immediately while the model downloads.
From source (./install.sh)
Section titled “From source (./install.sh)”For the lantern command-line tool, manual page, and building from a checkout:
git clone https://github.com/misterekkk/lantern.git && cd lantern./install.shThe script checks the Mac (Apple Silicon, macOS 26.2+, Command Line Tools), installs uv and ffmpeg (for MKV/WebM) with Homebrew
(with Homebrew analytics off for its own calls; if Homebrew is missing it asks before running the official
installer), runs uv sync, downloads the required model and asks about the optional ones, checks that search works
offline, and builds the app into /Applications when Xcode 26 is present. It can be run again at any time: finished
steps are skipped. ./install.sh --all installs everything without questions, ./install.sh --minimal only the
command line and the required model; --no-app, --test (also run the tests). It never installs the LaunchAgent.
It also makes lantern and man lantern work in every terminal without sudo: two symlinks into this folder
(~/.local/bin/lantern, ~/.local/share/man/man1/lantern.1, so git pull updates both), and, if you agree, one
PATH line in ~/.zprofile between # >>> lantern >>> markers. ./install.sh --uninstall removes the links, that
line and (if you say so) the app; your index and the models stay until you delete them (it prints how).
Step by step
Section titled “Step by step”The same steps by hand:
# 1. System toolsxcode-select --install# Homebrew: https://brew.sh. If `brew` is not on your PATH (Apple Silicon):echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofileeval "$(/opt/homebrew/bin/brew shellenv)"brew install uv ffmpeg
# 2. Project and dependencies (uv downloads Python 3.12 into ~/.local/share/uv)cd lanternuv sync
# 3. One-time model download (needs internet; models go to ~/.cache/huggingface/hub/)# a) EmbeddingGemma 2, MLX 8-bit (~1.2 GB) — requireduv run hf download mlx-community/embeddinggemma-2-8bit --revision 7505ef2f8ddef45efef6d060865f27989b3c9cec# b) Whisper for transcripts (~1.6 GB) — skip if you do not index recordings or use --no-transcribeuv run hf download mlx-community/whisper-large-v3-turbo --revision a4aaeec0636e6fef84abdcbe3544cb2bf7e9f6fb# c) SigLIP 2 for photo search (~0.8 GB + ~0.2 GB) — optional; without it EmbeddingGemma 2 ranks photos aloneuv run hf download google/siglip2-base-patch16-224 --revision 75de2d55ec2d0b4efc50b3e9ad70dba96a7b2fa2uv run hf download mlx-community/siglip2-base-patch16-224-8bit --revision 5249fc157310584fe99dae6964707278eb6df50f
# 4. Checkuv run lantern --helpuv run pytest
# 5. Menu bar appapp/build.sh --install # dev bundle (.venv), or app/build.sh --dmg for a self-contained Lantern.dmgopen /Applications/Lantern.appLantern always loads models with HF_HUB_OFFLINE=1 TRANSFORMERS_OFFLINE=1 HF_HUB_DISABLE_TELEMETRY=1 DO_NOT_TRACK=1;
an automated test checks that loading and embedding open no network connection.
Building the app needs Xcode 26 (the script selects it with DEVELOPER_DIR, without changing xcode-select).
It signs with your “Apple Development” certificate if you have one (Xcode → Settings → Accounts → Manage
Certificates); otherwise it signs ad hoc and macOS may ask for folder permissions again after every rebuild. app/build.sh --dmg bundles Python 3.12 and the daemon inside Lantern.app and creates app/build/Lantern.dmg.