Hister
Private search engine that indexes the pages you visit and the files you keep
Alternative to: Rewind
v0.20.0
2026-09-24New Features
Browser Bookmark Imports
hister import browser bookmarks imports bookmarks from Firefox based browsers,
Chromium based browsers, and Ladybird. It supports automatic detection and
explicit --browser and --db options, applies the bookmarks label by default,
and uses persistent crawl jobs that can be interrupted and resumed.
The new hister import browser history command accepts the same named options.
The existing positional history command and older browser import jobs remain
supported.
Raindrop.io Imports
hister import raindrop imports bookmarks through the Raindrop.io API or from a
CSV export with --input. API imports preserve titles, dates, notes, highlights,
annotations, tags, favorites, and collection paths. Linked pages are downloaded
with the configured crawler, while bookmark details are retained if a page
cannot be retrieved. CSV input can also be read from standard input.
Continuous File Imports
hister import file --watch performs an initial scan and keeps remote file
snapshots updated as files change. It supports explicit files, recursive
directories, or configured directory rules, including labels and ownership.
Temporary server failures are retried while the command runs.
Watch mode handles file snapshots rather than restoring exports or archives. Removing or renaming a source file leaves its previously imported snapshot in the index.
Configuration and Diagnostics
The new hister config commands create default configuration, report its path,
show effective settings with credentials redacted, and validate configuration
and extractor options. Inspection does not create runtime files.
hister doctor checks local configuration and extractor dependencies, then
verifies server connectivity, authentication, index compatibility, and server
extractor dependencies. It supports structured output and uses the new
GET /api/diagnostics endpoint, which requires an administrator in multiple
user mode.
Allow Rules and Guided Rule Editing
The new allow rule group restricts indexing to URLs matching at least one
allowed pattern. Skip rules still take precedence, and an empty allow list
preserves the existing behavior. The Rules page can now create patterns from
domains or exact URLs, optionally include subdomains, and validate and test
patterns before saving them.
Manual indexing from the browser extension and --ignore-rules on hister index
or import commands can override allow and skip rules. This choice is saved with
the document and survives reindexing. Sensitive content checks, robots rules,
and source selection filters still apply.
Structured Command Line Output
Search, indexing summaries, crawl inspection, diagnostics, and file and service import summaries share text, JSON, JSONL, and CSV output formats. Search results stream as pages arrive and preserve selected field order in text and CSV.
Indexing reports indexed, skipped, and failed counts and continues after
individual URL failures. hister index --failed-urls PATH writes failed URLs to
a file that can be reused with --input.
Prometheus Monitoring and Unix Sockets
Setting server.metrics: true enables GET /metrics with search, indexing,
document count, storage, Go runtime, and process metrics. The endpoint follows
the configured base path and authentication settings and requires an
administrator in multiple user mode, including when public mode is enabled.
The server can listen on a Unix socket using a server.address such as
unix:/run/hister/hister.sock. An explicit public server.base_url is required
for clients connecting through a reverse proxy. The socket is removed on a
clean shutdown.
Enhancements
- Browser extension: automatic capture reduces redundant submissions and preserves final page snapshots during navigation and tab closure.
- Search interface: loading feedback is clearer, filters and sort controls remain available for empty results, and history results display index counts.
- Web interface: the Add page clarifies file import and indexing options, the profile page can copy access tokens, and the menu links to the browser’s extension store.
- OAuth: GitHub, Google, and OIDC logins use S256 PKCE by default. GitHub token exchanges now send credentials in a form POST.
- Imports and backups: import failures provide clearer explanations,
backups receive a
.jsonextension when omitted, and sensitive content matches are easier to identify. - Offline commands: operations that only read SQLite data open the database in read only mode.
- Documentation: new monitoring and Homebrew instructions accompany expanded crawler backend, import, configuration, and command line guides.
- Dependencies: Go modules, npm packages, container bases, Nix inputs, and GitHub Actions were updated.
Bug Fixes
- SQLite vector stores tolerate changed embedding dimensions at startup, and reindexing recreates the store with the configured dimensions. A failed vector store rebuild now aborts reindexing instead of silently proceeding.
- Embedding retries recognize llama.cpp physical batch size errors.
- Semantic search respects the selected result order, removes deleted results from the interface, and initially uses the server’s configured defaults.
- Languages without a registered Bleve analyzer use the default index instead of attempting to create an unsupported language index.
- Local file indexing applies configured labels, watches directory roots that are symbolic links, and handles home directory and absolute paths correctly.
- Imported HTML files follow the appropriate saved page or file snapshot path, and the index command initializes configured extractors.
- Database timestamps are stored consistently in UTC, with existing SQLite timestamps normalized while preserving their instants and precision.
- Browser import detection handles profile paths more reliably, including Ladybird profiles, and retains support for resuming older history jobs.
- Safari and other browser extensions receive valid CORS preflight responses, including when custom authentication headers are used.
- Text previews escape content when HTML is unavailable. Favicon responses use stricter headers, and oversized thumbnails are rejected.
- Lobsters extraction avoids duplicate comments, and Mastodon extraction no longer applies incorrect link resolution.
- History loading no longer blocks navigation, empty results clear stale previews, and the TUI refreshes its viewport when a WebSocket connects.
- Client errors preserve server explanations for HTTP 404 responses.
- FreeBSD builds work again, and the systemd service correctly excludes privileged system calls and uses paths compatible with user services.
Backward Compatibility Notes
The following changes require attention when upgrading from v0.19.0:
- Command line automation:
--format jsonconsistently returns an array, including single record summaries. Indexing, file imports, and service imports return status2when processing completes with item failures and status1for errors that prevent completion. Update scripts that depend on earlier output shapes or exit statuses. - Configuration creation: use
hister config createin place ofhister create-config. The old command remains as a deprecated alias and writes its notice to standard error. Configuration creation refuses to overwrite an existing file. - OAuth providers: providers that reject PKCE parameters need
disable_pkce: truein their provider configuration. Restart logins begun before the upgrade; existing authenticated sessions remain valid. Custom GitHub token endpoints and proxies must accept form POST requests. - Allow rules and reindexing: existing rules without an
allowgroup retain their behavior. Once allow rules are added, reindexing removes documents excluded by allow or skip rules unless they carry an explicit manual override. - SQLite timestamps: an automatic migration normalizes stored timestamps to UTC. Command line displays continue to use local time.