Vibeleaderboard
Index / tool
Visit github.com
Category
Productivity
Rank
Pricing
Open Source
Type
TOOL
Use case
Data, Retrieval & Knowledge
Interfaces
Web · CLI
Latest release
rolling
Date

About

Hister is a self-hosted, private search engine that indexes the full content of the web pages you visit and the files you keep, so that information can be found again later from a web interface, the terminal, or an agent. Running it locally keeps browsing and file history under the user's own control instead of passing through a third-party index.

What it does

Hister is a single Go program that runs a small server on your machine, plus a Firefox or Chrome extension that ships each page you open to that server. The server stores the text and builds a searchable index, so you can later type a remembered phrase and get the page back. It can also crawl whole sites, watch folders for document changes, and pull in old browser history or bookmarks from several read-later services. You query it from a browser page, a terminal screen, plain command output, or an AI assistant over MCP (Model Context Protocol).

Why it's ranked here

The case is breadth with privacy defaults that hold up in the code. The README states no telemetry and no cloud sync, and the extension sends page content only to the server you configure. Imports cover Firefox, Chrome, Ladybird and Safari history plus Linkding, Linkwarden, Karakeep, Raindrop, Readeck, Shaarli and Wallabag. Crawls are persistent jobs you can resume, list and inspect. Multi-user separation, OAuth and proxy-header login are built in. The cost is an AGPL license and a native build that needs a C compiler.

What's good

Crawl jobs survive interruption: a job keeps its queue, its rules and its label, and rerunning with the job ID picks up where it stopped. Batch indexing keeps going past individual failures and can write the failed URLs to a report file. The crawler honors site crawl exclusion rules by default and can drive a real browser instead of plain HTTP. Search from the command line can print JSON or CSV with only the fields you ask for. The bundled container setup runs read-only, drops all Linux capabilities and blocks privilege escalation.

Tradeoffs

It is AGPL version 3 or later, which matters if you plan to host a modified copy for others. Building from source needs Go, npm and a C compiler. Semantic search is optional and sends document text to whatever embeddings endpoint you set, so the privacy story weakens if that endpoint is remote. With no access token, the server treats every request as authenticated, and it warns when you enable logins over plain HTTP. The extension still fetches page favicons from the open web.

How to use it well

Fits someone who keeps rediscovering pages they already read and wants that memory on their own disk. Start with the binary and the extension, then import existing browser history so search is useful on day one. Point the indexer at a notes or documents folder if you want local files in the same index. Set an access token or enable user handling before exposing the server beyond your own machine, and put it behind HTTPS. It does not replace a general web search engine: it only finds what you have visited, crawled or imported.

Technical notes+

Entry point hister.go calls cmd.Execute; commands are Cobra-based in cmd/root.go, where listenCmd starts server.Listen and, when indexer directories are configured, a file index queue plus files.WatchDirectories. go.mod pulls in bleve for full-text indexing, gorm with both sqlite and postgres drivers, chromedp for browser-driven crawling, and bubbletea for the TUI. cmd/index.go implements persistent crawl jobs (model.CreateCrawlJob, resume by --job-id, validator rules for depth, link count, domains and regexp patterns) and checks a robots cache before fetching. server/server.go handles auth in createHandler: user sessions, X-Access-Token or Bearer tokens, an optional proxy auth header that auto-creates users, and a CSRF check that exempts same-origin, hister:// and browser-extension origins. config/config.go defaults the listen address to 127.0.0.1:4433, supports unix sockets, OAuth/OIDC providers and a SemanticSearch block whose EmbeddingFingerprint hashes settings that force re-embedding. compose.yml sets read_only, cap_drop ALL and no-new-privileges.

Observed

License
AGPL-3.0-or-later (LICENSE, SPDX headers in source)
Language
Go, with CGO dependencies requiring a C compiler (README.md, go.mod)
Install surface
Prebuilt binaries, Homebrew, Docker, Nix; Docker Compose file in repo (README.md, compose.yml)
Interfaces
Web UI, terminal UI, CLI, MCP, Firefox and Chrome extensions (README.md, cmd/search.go)
Storage
SQLite or PostgreSQL via gorm; bleve full-text index (go.mod, config/config.go)
Default listen address
127.0.0.1:4433, Unix sockets supported (config/config.go)
Authentication options
Access token, multi-user sessions, OAuth/OIDC, reverse-proxy auth header (server/server.go, config/config.go)
Telemetry
README states no telemetry and no cloud sync by default (README.md)
Crawler backends
http, chromedp, bidi; site robots exclusion rules respected unless disabled (cmd/root.go, cmd/index.go, config/config.go)

Read from README.md, go.mod, LICENSE, hister.go, server/server.go, cmd/root.go, cmd/index.go, cmd/search.go, cmd/crawl.go, config/config.go, client/search.go, cmd/browser_history.go, SECURITY.md, compose.yml.

Tags

search-engineself-hostedprivacybrowsing-historyfile-search

Tech Stack

Node.jsGoDocker

Comments (0)

No comments yet

Editorially curated, with community endorsements as a secondary signal. Corrections welcome.