AI-powered note assistant and hybrid search engine for Obsidian. Features local indexing, semantic search, contextual slash commands, and privacy-first AI analysis.
User Manual | Commands Guide | Changelog
Lina helps you find, connect, and enrich Markdown notes in Obsidian without taking control away from you.
/ask (AI note query), /tags (smart tag suggestions), and /yaml (frontmatter generation) directly from the sidebar input..lina/index/. Zero network requests by default. Remote AI providers are contacted only when explicitly configured and triggered.manifest.json, main.js, and styles.css from the latest release.<Vault>/<configDir>/plugins/lina/ (where <configDir> is your vault's Obsidian config directory, default .obsidian).Search for Lina in Obsidian Community Plugins once officially listed.
First-Time Indexing Note:
When installed for the first time, Lina does not auto-build the full index. Open the Lina side panel and click Rebuild Index (or run the rebuild index command). Once a valid index exists, Lina keeps it updated automatically in the background.
The Lina panel lives in Obsidian's right sidebar. It serves as your search interface and AI assistant hub.
0.7) and semantic similarity (default weight 0.3)./ask, /tags, /yaml)Type a slash command in the sidebar input to interact with your notes using AI:
/ask <prompt>: Queries the configured AI provider about the active note context. Insert responses below selection, replace selection, or append to note after confirmation./tags: Asks AI to suggest tags for the context. Displays checkboxes to apply non-duplicate tags with confirmation./yaml: Asks AI to suggest frontmatter fields. Displays checkboxes to safely apply new fields without overwriting existing data.Context Selection Order:
[!NOTE] All slash commands recheck context against configured path and term exclusions before contacting an AI provider.
Lina allows separate provider and model configurations for Analysis AI (Chat/LLM) and Embeddings.
| Provider | Type | Embeddings | Chat / Analysis | Recommended / Default Models |
|---|---|---|---|---|
| Ollama | Local | ✅ | ✅ | Embeddings: nomic-embed-text-v2-moeChat: gemma4:e2b |
| Mistral | Remote (API) | ✅ | ✅ | Embeddings: mistral-embedChat: mistral-small-latest |
| OpenRouter | Remote (API) | ❌ | ✅ | Chat: Configurable model |
http://localhost:11434), Mistral (https://api.mistral.ai/v1), and OpenRouter (https://openrouter.ai/api/v1), customizable./api/embed). Legacy Ollama endpoint fallback processes 1 item per request.isDesktopOnly: false. Manually validated on Desktop (Windows) and Android (Samsung Galaxy S23 Ultra, One UI 8.5, 8 GB RAM).no-safe-source and falls back to text search.embeddings.jsonl on desktop. Optionally maintain the experimental binary shadow copy (embeddings.vectors.f32)..lina/index/ directory to your mobile device via Syncthing.For full .stignore rules and step-by-step instructions, see the Syncthing Guide in the User Manual.
An opt-in derived shadow copy (embeddings.binary.manifest.json, embeddings.meta.jsonl, embeddings.vectors.f32) is available for advanced users:
.lina/index/embeddings.jsonl remains the source of truth.maintainBinaryEmbeddingCopy (default off) and embeddingStorageReadPreference (prefer-binary).publicationId. Falls back safely to JSONL or text search..lina/index/.localStorage or sessionStorage. Settings use Obsidian's loadData/saveData APIs.# Install dependencies
npm ci
# Build plugin bundle
npm run build
# Run official Obsidian linters
npm run lint:obsidian
npm run lint:obsidian:strict
Key build artifacts: manifest.json, main.js, styles.css.