Skip to content

Introducing Dead Simple Search

February 16, 2026

There is no shortage of search software. Elasticsearch, Meilisearch, Algolia and Typesense are all capable tools built by people who know the problem well. So why another one?

Because capability was never the constraint. For a lot of sites, the constraint is that adopting any of them costs more attention than the search box is worth.

The gap

Adding search to a website usually means signing up for a service, installing its widget, configuring indexing through its dashboard, and paying monthly. For a large site with real search requirements, that is a sensible trade. For a personal blog, a small business site or an internal wiki, it is a subscription and an external dependency in exchange for a feature that a database can already provide.

Dead Simple Search is the other option: software you install on your own server, point at your website, and stop thinking about. No account, no dashboard, no invoice.

What it does

Crawl. Give it a URL. It reads your sitemaps, follows links, and discovers your pages. It honours robots.txt, skips anything marked noindex, respects rel=canonical, and waits between requests.

Index. For each page it keeps the title, headings, description, body text, language and publication dates, discarding navigation and scripts. Everything lands in MySQL behind a full-text index.

Search. Send a query, get ranked results. Stemming means a search for one inflection finds the others, which matters in Swedish and its neighbours far more than in English.

What it does not do

  • No user interface. It is an API backend. Bring your own front-end.
  • No user accounts. Write endpoints take a single shared API key; read endpoints are open. Anything more granular belongs in a reverse proxy.
  • No analytics or tracking. Nothing is collected about the people searching.
  • No machine learning. Ranking is MySQL's full-text scoring plus a title weighting, and that is the whole story.

These are boundaries rather than gaps. Each one is a thing that does not have to be maintained, secured or explained.

The stack

  • Python 3.13
  • Flask — a web framework that does the job and leaves
  • MySQL — available on essentially every host in existence
  • aiohttp — async fetching, so crawling is not a sequence of naps

Around 3,200 lines of Python across fourteen files, and no ORM. Every query is written out where you can read it.

Who it suits

Anyone who wants their content indexed on hardware they control, who would rather read a small codebase than trust a large one, and whose search requirements are ordinary. The cost is the server already being paid for.

It is a poor fit for very large corpora, for typo tolerance or faceted search, and for anyone who would rather not run a server. Those are real requirements and other tools meet them properly.

Get involved

The code is on Codeberg, a European non-profit platform for open source. Issues and pull requests are welcome, and so is forking it and going your own way — that is what the MIT license is for.

→ View the project on Codeberg