Skip to main content
This setup gives you semantic search with no external embedding API and no extra database. Ollama computes embeddings on your own machine, and KiwiFS stores the vectors in SQLite next to its other indexes. On a small CPU-only VPS, Ollama is slower than a hosted API, so you lower the indexing concurrency and raise the request timeout.

Prerequisites

  • An Ollama server that the KiwiFS process can reach. KiwiFS calls its /api/embed endpoint.
  • An embedding model pulled into Ollama:
    Terminal

Configure KiwiFS

1

Edit the config

.kiwi/config.toml
2

Start the server

Terminal
When the vector store is empty, the server embeds every existing page in the background on startup. After that, new and edited pages are embedded as they’re written.
3

Rebuild on demand (optional)

To embed everything ahead of time, or to start over, stop the server and run:
Terminal
--vector makes the command fail fast if vector search isn’t configured.

Settings

The SQLite store needs no API key and no separate service. Like every index in .kiwi/state/, it’s derivative data that kiwifs reindex rebuilds from your markdown files.

Choose the Ollama URL

base_url depends on where KiwiFS and Ollama run.
.kiwi/config.toml
On Linux, map host.docker.internal to the host gateway.
docker-compose.yml
.kiwi/config.toml
Ollama listens on 127.0.0.1 by default. Start it with OLLAMA_HOST=0.0.0.0 so the container can reach it.
Use the Ollama service name as the host name.
docker-compose.yml
.kiwi/config.toml
Pull the model inside the Ollama container: docker compose exec ollama ollama pull nomic-embed-text.

Tune for your machine

Keep worker_count = 1 for the first reindex of a large knowledge base, and raise it later only if CPU, memory, and Ollama latency stay stable.
Terminal
See Search for semantic and hybrid query options.

Troubleshooting

Check the URL from the machine or container that runs KiwiFS. The KiwiFS image has BusyBox wget but not curl.
Terminal
Terminal
Keep the same config, raise timeout, and run kiwifs reindex --root ./knowledge again. Vectors are rebuilt from the markdown files, so nothing is lost.A full vector rebuild, from kiwifs reindex or the server’s startup backfill, stops after 10 minutes. If a large knowledge base can’t finish in that time, raise worker_count as far as your machine allows or use a smaller embedding model.
Vectors from different models aren’t comparable. After changing model, run kiwifs reindex, which clears the vector store before embedding every page again.

Search

Full-text, semantic, and hybrid search.

Docker

Run KiwiFS in a container.
Last modified on October 19, 2026