Palimpsest — an Obsidian side channel to your past
Palimpsest is an Obsidian plugin that quietly watches from the right side of your workspace and brings older notes back into view while you write.
| Ordinary search | Palimpsest | |
|---|---|---|
| Who starts it | You | It does |
| When | When you remember to search | While you are writing |
| What it searches | Keywords you enter | The semantics of the current note |
| Results | A list of file names | Relevant source passages, rendered for reading |
Your past writing is not waiting to be searched. It is waiting to be rediscovered. Palimpsest makes that happen naturally.
Palimpsest works in three stages:
- Build an index: On first use, it splits each note in your vault into knowledge passages by headings and paragraphs, generates an embedding for each passage, and stores the vectors in a local index.
- Search while you write: After you stop typing for about 800 ms, the plugin uses the complete current note as an embedding query and searches for the semantically closest older passages.
- Show the results: Matching passages are sorted by similarity and shown in the right sidebar. Click a result to open the source note, or drag it to insert a link or quotation.
Everything runs locally and does not pass through a cloud service.
The initial indexing time depends on the size of your vault. A larger vault may take several minutes to index. This is a one-time cost: new and changed notes are updated incrementally afterward, without a manual rebuild. Moving a file or folder reuses existing vectors; changing a file name, heading, or body updates the affected vectors. Changing the query scope does not affect the index and does not require a rebuild.
Palimpsest only runs automatic queries and automatic incremental indexing while at least one sidebar panel is actually visible. When the right sidebar is collapsed, you switch to another sidebar tab, or you close the panel, Palimpsest keeps the existing results and pauses this automatic work. Vault changes during that time are coalesced into a queue. When the panel becomes visible again, Palimpsest first catches up on incremental indexing and then searches using the current query scope.
Plugin settings and vector indexes are stored separately. Settings remain small plugin data, while the index is stored in IndexedDB in Obsidian's local application data. The index therefore does not travel with a copied vault folder. If Obsidian's application data is cleared, the index must be rebuilt. You can view document and passage counts under Settings → Palimpsest → Index, and clear the local index for the current vault. Clearing it does not delete Markdown notes, plugin settings, or the vault identity.
A palimpsest was a medieval writing surface on which old writing was scraped away and overwritten. Over time, the underlying text could still be made out.
Your knowledge base is similar. New notes cover old notes, and old ideas are buried beneath newer ones. They are still there; they are simply harder to see. Palimpsest brings those old traces back into view.
Before the first index build, install and start Ollama, then download the default model:
ollama pull qwen3-embedding:0.6bThe default endpoint http://127.0.0.1:11434/api/embed and model
qwen3-embedding:0.6b are prefilled, so you normally do not need to change
anything. Only change the endpoint and model under Settings → Palimpsest →
Embedding when using a custom Ollama service or another model; when changing
models, also set dimensions to the model's output size and rebuild the index.
Palimpsest is currently a desktop-only beta and is not yet listed in Obsidian's official Community Plugins directory.
BRAT is an Obsidian plugin for installing and updating beta plugins from GitHub Releases.
- In Obsidian, install and enable BRAT from Settings → Community plugins.
- Open BRAT settings and add
https://github.com/RunMintOn/Palimpsest. - Enable Palimpsest after BRAT installs it.
BRAT requires a published GitHub Release.
It downloads main.js, manifest.json, and styles.css from that release and
can update the plugin when a newer release is published.
Download main.js, manifest.json, and styles.css from a GitHub Release and
copy them into your vault's plugin directory, then enable the plugin in
Obsidian.
your-vault/.obsidian/plugins/palimpsest/
If installation or use causes problems, share the Palimpsest repository together with the exact error or symptoms with an AI assistant so it can inspect the project code and help diagnose the issue; you can also open a GitHub Issue.
- Open the Palimpsest panel in the right sidebar.
- Click Build index.
- Start writing; relevant material will appear automatically.
See MAINTENANCE.md for development, testing, build artifact synchronization, and recovery procedures.
- Full-note queries: After about 800 ms of inactivity, the complete current Markdown editor buffer is used as a semantic query.
- Selection queries: The selection button immediately runs a one-shot query for a valid selection of at least 8 non-whitespace characters. With no selection, it enters follow-selection mode; click again to exit and return to full-note queries.
- Passage retrieval: Shows relevant passages instead of entire notes.
- Markdown rendering: Bold text, lists, blockquotes, code blocks, and internal links render correctly in source passages.
- Open the source: Click a result title to jump to the corresponding line in the source file.
- Drag to insert links or quotations: Drag a title to insert an Obsidian link, or drag the quotation icon to insert a quote block.
- Expansion policy: The first three results are expanded by default. You can configure the number of expanded results and the similarity threshold; manual actions take priority.
- Local operation: Everything runs locally; no cloud API is called.
- Local IndexedDB index: Settings changes do not rewrite vectors. The existing index remains usable until a full rebuild completes.
- Visibility-aware sleep: Automatic queries and incremental embeddings pause while the sidebar is hidden and catch up incrementally when it becomes visible again.
| Setting | Default | Description |
|---|---|---|
| Ollama endpoint | http://127.0.0.1:11434/api/embed |
|
| Model | qwen3-embedding:0.6b |
|
| Vector dimensions | 1024 | Changing this requires a rebuild |
| Query debounce | 800 ms | Delay after typing stops |
| Default expanded results | First 3 | Options include all collapsed, first 1/3/5, or all expanded |
| Minimum similarity for auto-expansion | Off | When enabled, results below the threshold are not expanded automatically |
| Target passage length | 650 characters | |
| Excluded directories | .obsidian |
Comma-separated |
- Editor: TypeScript + Obsidian API
- Embedding model: Qwen3-Embedding-0.6B (GGUF Q8_0, 1024 dimensions)
- Retrieval backend: Local Ollama service
- Index: Markdown heading and paragraph splitting + cosine similarity
| Resource | Measured value |
|---|---|
| GPU memory (model only) | ~2.2 GiB |
System memory (private llama-server) |
~3 GiB |
| First cold-start query | ~2.7 s |
| Warm query | ~150 ms |
Jina Embeddings v2 Base - Chinese is a bilingual Chinese-English embedding model with 768 dimensions. The original model on Hugging Face cannot be entered directly as an Ollama model name: you must first prepare an Ollama-compatible GGUF file. You can refer to this third-party Q4_K_M conversion (about 109 MB) and Ollama's import instructions:
# Modelfile
FROM /path/to/jina-embeddings-v2-base-zh-q4_k_m.gguf
ollama create palimpsest-jina-zh -f ModelfileThen enter the following in Palimpsest settings:
- Model name:
palimpsest-jina-zh(the name used withollama create) - Vector dimensions:
768 - Rebuild the index after changing the model or dimensions
The plugin's default query instruction format is tailored to Qwen3. Jina's
official usage does not use the Instruct: / Query: prefix, so Jina should
currently be treated as an alternative that requires validation rather than
as a guaranteed equivalent model that works after changing settings alone.
This project is licensed under the MIT License.
