Development
Run it locally
You need the .NET 11 SDK and Qdrant:
docker run -p 6334:6334 qdrant/qdrant
cd Lantrn
dotnet runData goes to Lantrn/lantrn.db and Lantrn/data/. appsettings.Development.json points the models at LM Studio on localhost:1234.
To run your changes in Docker, use docker compose up -d --build from Lantrn/.
Stack
Blazor Server, SQLite with EF Core, Qdrant for dense and keyword vectors, Xberg for text extraction and chunking, and the OpenAI SDK for model endpoints.
Project layout
Lantrn/
├── Startup/ # DI and auth setup
├── Api/ # REST API and MCP tools
├── Components/
│ ├── Public/ # Search and document view
│ ├── Pages/ # Collections, ingest and crawl
│ ├── Admin/ # Dashboard, users, settings, API keys
│ ├── Account/ # Login and register
│ ├── Search/ # Search UI parts
│ └── Shared/ # Reusable components
├── Services/ # The logic
└── Infra/ # EF entities, DbContext, migrationsAccess is set per folder in _Imports.razor. Which collections someone can read or edit is decided in CollectionAccess.
New link types for the Crawl page (like GitHubExtractor) implement ILinkExtractor and are registered in CoreServices.
Migrations
Don't write migrations by hand:
cd Lantrn
dotnet ef migrations add <Name>They run automatically on startup.
Releases
Publishing a GitHub release tagged v1.2.3 builds the image for amd64 and arm64 and pushes 1.2.3, 1.2 and latest to ghcr.io/viedin/lantrn. Prereleases only get their exact tag.
Docs
cd Lantrn-docs
npm install
npm run docs:devPushes to main redeploy them to GitHub Pages.