A fast, private, on-device launcher for German law — right from your menu bar.
Press ⌘U anywhere, search ~6,500 federal laws and thousands of court decisions,
and ask an on-device AI assistant about any of them. No accounts, no API keys,
nothing leaves your Mac.
Lexora is a macOS utility for anyone who works with German law — students, lawyers, paralegals, or the legally curious. It lives quietly in the background as an accessory app (no Dock icon) and pops up as a Spotlight/Raycast-style command panel when you hit the global hotkey.
The whole point is speed and privacy:
- Instant access — a single global shortcut (
⌘U) from any app. - Everything on-device — search and the AI assistant both run locally using Apple's built-in frameworks. There is no backend, no telemetry, and no API key anywhere in this project.
- Official sources — the catalog is built from the German federal government's own public open-data feeds.
The in-app AI assistant is named Noxtua — that's why you'll see the name in the UI and the bundle identifier, while the app/product itself is Lexora.
| 🔍 Hybrid search | Literal keyword matching plus semantic search, so "haftung nach autounfall" surfaces § 823 BGB and § 7 StVG even without an exact word match. |
| 🧠 On-device AI chat | Ask questions in natural German about any law. Powered by Apple's on-device Foundation Model (Apple Intelligence) — answers stream live, fully offline. |
| 📎 Law mentions | While chatting, type @ to attach any law or decision as context for the model. |
| 📚 Huge catalog | ~6,500 federal laws (gesetze-im-internet) and the 5,000 most recent federal court decisions (rechtsprechung-im-internet), fetched and cached locally. |
| 📖 Official full text | Open any entry to read the authoritative text, loaded from the official source in an embedded web view. |
| 🕓 Recents | Quickly jump back to laws and decisions you've recently opened. |
| 🪟 Native macOS feel | SwiftUI throughout, with the macOS “Liquid Glass” material, a floating non-activating panel, and a global Carbon hotkey. |
Lexora deliberately uses only frameworks that ship with macOS — no third-party dependencies, no network services of its own.
┌──────────────────────────────────────────────┐
⌘U ───────▶ │ LauncherPanel (floating, non-activating) │
│ └─ LauncherView ─ SearchSection / Chat │
└──────────────────────────────────────────────┘
│ │
┌─────────▼────────┐ ┌─────────▼──────────────┐
│ LawStore │ │ ChatView │
│ • seed laws │ │ • FoundationModels │
│ • RemoteCatalog │ │ (on-device LLM) │
│ • disk cache │ │ • streams answers │
└─────────┬────────┘ └────────────────────────┘
│
┌─────────▼────────────────────────┐
│ EmbeddingIndex (NaturalLanguage) │
│ German word embeddings → cosine │
│ similarity for semantic search │
└──────────────────────────────────┘
Key building blocks
FoundationModels— Apple's on-device language model powers the chat. No network, no API key, no model download.NaturalLanguage— the OS-bundled German word embeddings build a local vector index for semantic search.RemoteCatalog— parses the official open-data TOC feeds:gesetze-im-internet.de/gii-toc.xml— all federal lawsrechtsprechung-im-internet.de/rii-toc.xml— federal court decisions
HotKey— a thin wrapper around Carbon'sRegisterEventHotKeyfor the global⌘Ushortcut, sandbox-friendly.LauncherPanel— a non-activatingNSPanelso the launcher floats over other apps without stealing focus.
- macOS 26.4 (Tahoe) or later
- Xcode 26 or later
- An Apple Intelligence–capable Mac for the AI chat feature (search and browsing work on any supported Mac; the chat tab will show a friendly notice if Apple Intelligence isn't available)
# 1. Clone
git clone https://github.com/hinrichb/Lexora.git
cd Lexora
# 2. Open in Xcode
open Lexora.xcodeprojThen in Xcode:
- Select the Lexora scheme.
- In Signing & Capabilities, choose your own Team (the project ships with the team field intentionally left blank).
- Build & run (
⌘R).
The app launches into the background — there's no window and no Dock icon.
Press ⌘U to summon the launcher.
On first launch macOS may ask permission to register the global hotkey. The catalog downloads in the background on first run and is cached on disk, so subsequent launches are instant.
| Action | Shortcut |
|---|---|
| Show / hide the launcher | ⌘U |
| Move through results | ↑ / ↓ |
| Open the selected entry | Return |
| Open the AI chat | Tab |
| Attach a law in chat | type @ |
| Dismiss / go back | Esc |
Lexora/
├── LexoraApp.swift App entry point (menu-bar / accessory app)
├── AppDelegate.swift Panel lifecycle + global hotkey wiring
├── HotKey.swift Carbon global-hotkey wrapper (⌘U)
├── LauncherPanel.swift Floating non-activating NSPanel
├── LauncherView.swift Root view; routes search ↔ detail ↔ chat
├── SearchSection.swift Search field + results list
├── LawDetailView.swift Full-text reader (embedded web view)
├── ChatView.swift On-device AI chat ("Noxtua")
├── LawStore.swift Catalog: seed data, fetch, merge, cache, search
├── RemoteCatalog.swift Parses official federal open-data feeds
├── EmbeddingIndex.swift On-device semantic search (NaturalLanguage)
├── Law.swift Core model (laws + court decisions)
├── RecentsStore.swift Recently-opened tracking
├── Components.swift Shared SwiftUI components
└── WebView.swift WKWebView wrapper
Lexora is built privacy-first:
- The AI assistant runs entirely on your Mac via Apple's Foundation Models — your questions and the law text never leave the device.
- Search is local. The semantic index is built on-device from OS-bundled embeddings.
- The only network access is fetching the public law/decision catalogs and loading official full-text pages on demand — both from the German federal government's own websites.
- There is no analytics, no tracking, and no API key anywhere in this repo.
Lexora is a convenience tool for finding and reading legal texts. The AI assistant is a helpful summarizer, not a lawyer — it explicitly flags that its answers are not legal advice (keine Rechtsberatung). Always verify against the official source text, which Lexora links to directly.
© 2026 Hinrich Bomsdorf. All rights reserved.
This source is published for reference and demonstration. It is not licensed for reuse, redistribution, or modification without explicit permission. The German legal texts and court decisions are sourced from the official open-data services of the Federal Ministry of Justice (gesetze-im-internet.de / rechtsprechung-im-internet.de) and remain subject to their respective terms.