github.com/asciimoo/hister
v0.18.0
#1121 most downloaded on Go modules
asciimoo/hister
What this package is like to depend on
Last release today
23 Aug 2026
Ships fairly regularly
a new release about every 2 weeks
Some releases are documented
notes for 9 of 18 stable releases
Nothing withdrawn
no release was ever pulled
7 months old
35 releases · first in 2026
35 releases in the last 12 months
see the full history below
Release timeline
35 releases · Jan 2026 to Aug 2026Releases
latest 35-
v0.18.1-0.20260823193221-4c33928f356223 Aug 2026 pre-releaseNothing published for this version
-
v0.18.023 Aug 2026Release notes
Open source →New Features
Search Suggestions and Sorting
The web search box now suggests matching queries from search history, recent searches, aliases, fields, sort options, and facet values. Facet suggestions show result counts. The panel supports keyboard and pointer use, can be resized, and remembers its height.
A shared server schema keeps fields, facets, values, and sort options consistent across search clients. Queries can use
sort:relevance,sort:date,sort:visits, orsort:domain. Prefix the value with a minus sign to reverse the order, as insort:-date.Social and Discussion Extractors
New Twitter, Bluesky, Reddit, and Discourse extractors preserve useful post, comment, reply, author, date, and reaction data. Twitter and Bluesky can split feeds and threads into separate post documents. Twitter also expands known shortened links to their original destinations.
Documents can now include JSON LD metadata. A new extractor SDK and registry define explicit results, capabilities, and optional context support.
Terminal Result Details
The terminal interface now has responsive workspaces and a readable result details pane. Wide terminals show the list and preview together. Narrow terminals use the full workspace. Text layout accounts for terminal cell width.
Local File Format Imports
hister import filecan now import PDF, DOCX, Markdown, Org mode, valid UTF 8 text, and other supported local formats. It accepts individual files or directories. Extraction runs in the command line process and creates remote snapshots, so the server does not need access to the source files.Service and Browser Imports
Hister can now import incrementally from Linkding, Readeck, and wallabag. Stored content is used when available, with a page download fallback. Browser imports can start at
--start-date.Bulk Document Updates
The new
hister updatecommand changes the owner, label, title, or language of documents matched by a search query. It supports dry runs, asks for confirmation, reports conflicts, and keeps file ownership rules intact.Complete History Timeline
The history page now shows counts for all indexed or opened history. Recent days and older months are grouped for easier browsing, with daily details for a selected period.
Persistent Web Sessions
Web sessions are now stored in the configured SQL database. They survive server restarts, use rolling expiration, and are revoked at logout. Cookie security follows the configured server URL.
Structured MCP Results
The MCP endpoint now targets protocol version
2025-06-18and defines output schemas for every tool. Results separate trusted metadata from untrusted source content, remove invisible control characters, and include safe handling guidance. Search callers can select full document fields.Enhancements
- Search interface: search duration is visible, index statistics are clickable, empty indexes show quick start help, errors are clearer, and recent searches are easier to identify and clear.
- Query history: results promoted by query history are marked and can be forgotten for that query. Existing rules remain intact.
- Command line: help now groups commands by scope.
check-updatereports new releases, andcrawl urlscan filter or count stored crawl URLs. - URL input:
hister index --inputaccepts a file or standard input and creates a persistent job. - Files: watched directories can apply labels. Cleanup removes local documents that no longer match configured directories. File previews verify ownership and directory rules.
- Batch imports: clients split batches at the configured request limit and report documents that are too large.
- Browser extension: the extension supports access tokens and copied browser sessions. It refreshes changed cookies after authentication failures and submits pending page changes when a tab closes.
- Web interface and docs: the header is more compact, the initial color scheme is configurable, accessibility is improved, and documentation now has search and clearer navigation.
- Operations: profiling has an explicit setting. Container builds are smaller, and release images use Buildx Bake for supported architectures.
- Crawler rendering: capture delay is shared by rendered backends and is now supported by Chromedp.
- Terminal compatibility: command output and the TUI now use Charm v2, respect terminal color support, and preserve custom hotkeys.
- Dependencies: Go modules, npm packages, Nix inputs, container bases, and GitHub Actions were updated.
Bug Fixes
- Failed embedding jobs no longer starve later queued documents.
- Index metadata access is safe during concurrent indexing.
- Batch requests respect the server body limit and report oversized documents.
- Field specific alternatives work correctly, and URL wildcard matching ignores letter case.
- Browser imports count URLs correctly and handle empty history databases.
- OAuth provider scopes are combined with default scopes.
- Copied extension sessions use consistent expiry, and the background script works in browsers that require a classic script.
- Sensitive content matches are no longer exposed in debug logs.
- File indexing continues after an invalid symbolic link.
- Opened history responses are decoded correctly.
- Mastodon pages without a detected post are no longer stored.
- Optional versioning rules remain optional, and prioritizing a result keeps the full rule set intact.
- The middle pointer button still opens results while suggestions are visible.
- Database conflict clauses now qualify column names correctly.
- The configured color theme is applied before the page becomes visible.
Backward Compatibility Notes
The following changes require attention when upgrading from v0.17.0:
- Login sessions: web users and extensions that copied a browser session must sign in once after upgrading. Access tokens are unchanged.
- File preview API:
/api/filenow accepts a documentidinstead of an absolutepath. Search and history results include this identifier. - MCP output: tool results now use schema version
1.0. Untrusted source values are understructuredContent.untrusted_content. Text output contains the same JSON and a security notice. - Extractor implementations: custom extractors must use the new SDK result constructors, capability declarations, and registry.
- URL list input:
hister index --url-listremains as a hidden deprecated alias. Usehister index --input; it also accepts-for standard input.
Release notes
Open source →New Features
Search Suggestions and Sorting
The web search box now suggests matching queries from search history, recent searches, aliases, fields, sort options, and facet values. Facet suggestions show result counts. The panel supports keyboard and pointer use, can be resized, and remembers its height.
A shared server schema keeps fields, facets, values, and sort options consistent across search clients. Queries can use
sort:relevance,sort:date,sort:visits, orsort:domain. Prefix the value with a minus sign to reverse the order, as insort:-date.Social and Discussion Extractors
New Twitter, Bluesky, Reddit, and Discourse extractors preserve useful post, comment, reply, author, date, and reaction data. Twitter and Bluesky can split feeds and threads into separate post documents. Twitter also expands known shortened links to their original destinations.
Documents can now include JSON LD metadata. A new extractor SDK and registry define explicit results, capabilities, and optional context support.
Terminal Result Details
The terminal interface now has responsive workspaces and a readable result details pane. Wide terminals show the list and preview together. Narrow terminals use the full workspace. Text layout accounts for terminal cell width.
Local File Format Imports
hister import filecan now import PDF, DOCX, Markdown, Org mode, valid UTF 8 text, and other supported local formats. It accepts individual files or directories. Extraction runs in the command line process and creates remote snapshots, so the server does not need access to the source files.Service and Browser Imports
Hister can now import incrementally from Linkding, Readeck, and wallabag. Stored content is used when available, with a page download fallback. Browser imports can start at
--start-date.Bulk Document Updates
The new
hister updatecommand changes the owner, label, title, or language of documents matched by a search query. It supports dry runs, asks for confirmation, reports conflicts, and keeps file ownership rules intact.Complete History Timeline
The history page now shows counts for all indexed or opened history. Recent days and older months are grouped for easier browsing, with daily details for a selected period.
Persistent Web Sessions
Web sessions are now stored in the configured SQL database. They survive server restarts, use rolling expiration, and are revoked at logout. Cookie security follows the configured server URL.
Structured MCP Results
The MCP endpoint now targets protocol version
2025-06-18and defines output schemas for every tool. Results separate trusted metadata from untrusted source content, remove invisible control characters, and include safe handling guidance. Search callers can select full document fields.Enhancements
- Search interface: search duration is visible, index statistics are clickable, empty indexes show quick start help, errors are clearer, and recent searches are easier to identify and clear.
- Query history: results promoted by query history are marked and can be forgotten for that query. Existing rules remain intact.
- Command line: help now groups commands by scope.
check-updatereports new releases, andcrawl urlscan filter or count stored crawl URLs. - URL input:
hister index --inputaccepts a file or standard input and creates a persistent job. - Files: watched directories can apply labels. Cleanup removes local documents that no longer match configured directories. File previews verify ownership and directory rules.
- Batch imports: clients split batches at the configured request limit and report documents that are too large.
- Browser extension: the extension supports access tokens and copied browser sessions. It refreshes changed cookies after authentication failures and submits pending page changes when a tab closes.
- Web interface and docs: the header is more compact, the initial color scheme is configurable, accessibility is improved, and documentation now has search and clearer navigation.
- Operations: profiling has an explicit setting. Container builds are smaller, and release images use Buildx Bake for supported architectures.
- Crawler rendering: capture delay is shared by rendered backends and is now supported by Chromedp.
- Terminal compatibility: command output and the TUI now use Charm v2, respect terminal color support, and preserve custom hotkeys.
- Dependencies: Go modules, npm packages, Nix inputs, container bases, and GitHub Actions were updated.
Bug Fixes
- Failed embedding jobs no longer starve later queued documents.
- Index metadata access is safe during concurrent indexing.
- Batch requests respect the server body limit and report oversized documents.
- Field specific alternatives work correctly, and URL wildcard matching ignores letter case.
- Browser imports count URLs correctly and handle empty history databases.
- OAuth provider scopes are combined with default scopes.
- Copied extension sessions use consistent expiry, and the background script works in browsers that require a classic script.
- Sensitive content matches are no longer exposed in debug logs.
- File indexing continues after an invalid symbolic link.
- Opened history responses are decoded correctly.
- Mastodon pages without a detected post are no longer stored.
- Optional versioning rules remain optional, and prioritizing a result keeps the full rule set intact.
- The middle pointer button still opens results while suggestions are visible.
- Database conflict clauses now qualify column names correctly.
- The configured color theme is applied before the page becomes visible.
Backward Compatibility Notes
The following changes require attention when upgrading from v0.17.0:
- Login sessions: web users and extensions that copied a browser session must sign in once after upgrading. Access tokens are unchanged.
- File preview API:
/api/filenow accepts a documentidinstead of an absolutepath. Search and history results include this identifier. - MCP output: tool results now use schema version
1.0. Untrusted source values are understructuredContent.untrusted_content. Text output contains the same JSON and a security notice. - Extractor implementations: custom extractors must use the new SDK result constructors, capability declarations, and registry.
- URL list input:
hister index --url-listremains as a hidden deprecated alias. Usehister index --input; it also accepts-for standard input.
-
v0.17.1-0.20260729124136-e633cbf4b6c929 Jul 2026 pre-releaseNothing published for this version
-
v0.17.028 Jul 2026Release notes
Open source →New Features
Unified Imports
The import interface is now grouped under
hister import. In addition to local
files and browser history, Hister can import bookmarks and archived content from
Linkwarden, Karakeep, and Shaarli. Service imports preserve source dates and
metadata, apply source specific or overridden labels, fetch missing page content
and favicons, insert documents in batches, and continue from the latest imported
update after an interruption.Persistent Crawl Job Tooling
Persistent indexing jobs can now start from URL lists, and browser history
imports use the same resumable crawl workflow. Jobs can be resumed with only a
job ID. Newcrawl show,crawl errors, andcrawl queuecommands expose job
state, failed URLs, queue contents, and queue counts.Expanded Query Language and Search Filters
Documents now track an updated timestamp alongside their original added time.
Search queries supportaddedandupdatedfilters with relative or absolute
dates, visit count ranges, standalone wildcard expressions, and exact phrases
within specific fields. The search interface represents filters directly in the
query, making filtered searches easier to understand, edit, and share. Existing
index entries have their updated value backfilled from their added time on
startup.Durable Semantic Indexing
Embedding work now uses a persistent queue and deduplicates pending documents.
Token measurement is more precise, requests reserve capacity below provider
limits, and batch size plus request timeout are configurable. Chunk construction
also uses document structure and more useful metadata.Extensible File Types and DOCX Support
Local file handling now uses an extensible file type interface. DOCX documents
can be indexed with extracted text and metadata, and the documentation explains
the supported local formats and configuration.Chinese, Japanese, and Korean Search
Language detection and language specific indexes now support Chinese, Japanese,
and Korean documents.GitHub Issue and Pull Request Extraction
The GitHub extractor now understands issue and pull request pages. It indexes
the title, body, open date, comments, repository metadata, and useful page text.Crawler Proxy Support
HTTP and SOCKS5 proxy URLs can now be configured for every crawler backend. The
new--proxyoption also allows crawler backed index and import operations to
override the configured proxy, including robots.txt requests.RFC Dataset
A new RFC dataset and fetch command make it easier to build a searchable local
collection of Internet standards.Qutebrowser DevTools Companion
The new
hister companion qutebrowsercommand connects to the Qt WebEngine
DevTools interface and indexes rendered tabs from qutebrowser. It accesses the
final document after client rendering without requiring a page userscript.Enhancements
- Search interface: sort choice is preserved in the URL, result index
counts are visible, and the search input remains available while browsing
results. - Semantic results: returned chunks are limited per document, metadata is
richer, and index metadata is stored with the index itself. - Language aware indexing:
indexer.keep_stopwordscan retain common words
while preserving language detection, normalization, and stemming. - Crawler efficiency: already skipped URLs no longer incur the configured
crawl delay. - Import performance: imports use bulk insertion, retain useful imported
titles and processed state, apply labels, and retrieve missing favicons. - Favicon delivery: favicons are served through a dedicated endpoint rather
than being embedded in document responses. - Mastodon extraction: remote toot URLs are resolved to their canonical
locations before indexing. - Command line workflow: search supports
--sort, delete supports--yes,
list files supports--relative, and command descriptions are clearer. - History: filtering now happens on the server and the selected filter is
represented in the page URL. - Rules interface: multiple rules can be entered at once and rule lists use
descending order by default. - Browser extension: pages may be submitted as public documents, Firefox
mobile capability differences are handled, and automatic indexing accepts
only HTML, XHTML, or plain text documents. - Website and documentation: the landing page, onboarding, navigation,
accessibility, configuration reference, SEO metadata, and 404 page have been
refreshed. - Operations: debug profile endpoints are available at debug log level, a
sample systemd unit is included, and crawler failure codes are retained for
inspection. - External tools:
yt-dlpinstallation uses upstream releases and
concurrentyt-dlpextraction is limited. - Dependencies: Go modules, npm packages, Nix inputs, GitHub Actions, and
browser extension dependencies were updated.
Bug Fixes
- SQLite semantic search uses cosine scoring consistently.
- MCP search returns semantic results correctly.
- Embedding requests avoid provider token limits and reduce batch size when a
provider reports an oversized request. - Index resources are closed when initialization fails, absent documents are
not deleted again, and document insertion avoids repeated lookups. - Startup only warns about reindexing for analyzer changes when analyzer
configuration is present. - Stored previews reject meta refresh redirects.
- Document domains no longer include ports, and invalid favicon schemes are
ignored. - Public mode history is available to authenticated users and response headers
are no longer written more than once. - Field specific phrase queries and a single wildcard query produce the
expected matches. - Imports preserve existing titles when extraction finds no replacement, and
the JSON input scanner accepts larger records. - The browser extension avoids unavailable command APIs on Firefox mobile and
uses a compatible badge text color. - Search result and history titles and URLs retain usable space in narrow
layouts.
Backward Compatibility Notes
The following changes require attention when upgrading from v0.16.0:
- Import commands:
hister import-browserhas been replaced by
hister import browser. File and directory imports now require the source
subcommand, as inhister import file INPUT. Imported JSON exports retain
their processed content without running extractors again. Browser imports now
use persistent crawl jobs and can prompt to resume an unfinished job. - Date behavior: the structured
date_fromanddate_tosearch parameters,
facet date ranges, export date flags, date sorting, history ordering, and
history RSS dates now use the documentupdatedtimestamp instead of
added. The web interface no longer readsdate_fromordate_tofrom its
page URL. Putadded:orupdated:expressions in theqparameter instead.
For newly indexed local files,addedis the indexing time andupdatedis
the file modification time. - Favicon responses: search and history results return
favicon_keyinstead
of embedding stored favicon data. API clients should fetch the image from
/api/favicon?key=FAVICON_KEY. Legacy inline favicon values remain readable. - Domain normalization: newly indexed and reindexed documents store only the
hostname indomain, without the port. Queries and integrations that expect a
host and port value must be adjusted. - Semantic search: SQLite vector stores migrate from Euclidean distance to
cosine distance. Customsimilarity_thresholdvalues may need adjustment.
When omitted from configuration, the default context length changes from
4096 to 512, chunk overlap from 128 to 64, and embedding concurrency from 10
to 2. - Browser extension submissions: the extension no longer submits images,
videos, or other unsupported document types. This content type restriction
also applies to manual submission.
Release notes
Open source →New Features
Unified Imports
The import interface is now grouped under
hister import. In addition to local files and browser history, Hister can import bookmarks and archived content from Linkwarden, Karakeep, and Shaarli. Service imports preserve source dates and metadata, apply source specific or overridden labels, fetch missing page content and favicons, insert documents in batches, and continue from the latest imported update after an interruption.Persistent Crawl Job Tooling
Persistent indexing jobs can now start from URL lists, and browser history imports use the same resumable crawl workflow. Jobs can be resumed with only a job ID. New
crawl show,crawl errors, andcrawl queuecommands expose job state, failed URLs, queue contents, and queue counts.Expanded Query Language and Search Filters
Documents now track an updated timestamp alongside their original added time. Search queries support
addedandupdatedfilters with relative or absolute dates, visit count ranges, standalone wildcard expressions, and exact phrases within specific fields. The search interface represents filters directly in the query, making filtered searches easier to understand, edit, and share. Existing index entries have their updated value backfilled from their added time on startup.Durable Semantic Indexing
Embedding work now uses a persistent queue and deduplicates pending documents. Token measurement is more precise, requests reserve capacity below provider limits, and batch size plus request timeout are configurable. Chunk construction also uses document structure and more useful metadata.
Extensible File Types and DOCX Support
Local file handling now uses an extensible file type interface. DOCX documents can be indexed with extracted text and metadata, and the documentation explains the supported local formats and configuration.
Chinese, Japanese, and Korean Search
Language detection and language specific indexes now support Chinese, Japanese, and Korean documents.
GitHub Issue and Pull Request Extraction
The GitHub extractor now understands issue and pull request pages. It indexes the title, body, open date, comments, repository metadata, and useful page text.
Crawler Proxy Support
HTTP and SOCKS5 proxy URLs can now be configured for every crawler backend. The new
--proxyoption also allows crawler backed index and import operations to override the configured proxy, including robots.txt requests.RFC Dataset
A new RFC dataset and fetch command make it easier to build a searchable local collection of Internet standards.
Qutebrowser DevTools Companion
The new
hister companion qutebrowsercommand connects to the Qt WebEngine DevTools interface and indexes rendered tabs from qutebrowser. It accesses the final document after client rendering without requiring a page userscript.Enhancements
- Search interface: sort choice is preserved in the URL, result index counts are visible, and the search input remains available while browsing results.
- Semantic results: returned chunks are limited per document, metadata is richer, and index metadata is stored with the index itself.
- Language aware indexing:
indexer.keep_stopwordscan retain common words while preserving language detection, normalization, and stemming. - Crawler efficiency: already skipped URLs no longer incur the configured crawl delay.
- Import performance: imports use bulk insertion, retain useful imported titles and processed state, apply labels, and retrieve missing favicons.
- Favicon delivery: favicons are served through a dedicated endpoint rather than being embedded in document responses.
- Mastodon extraction: remote toot URLs are resolved to their canonical locations before indexing.
- Command line workflow: search supports
--sort, delete supports--yes, list files supports--relative, and command descriptions are clearer. - History: filtering now happens on the server and the selected filter is represented in the page URL.
- Rules interface: multiple rules can be entered at once and rule lists use descending order by default.
- Browser extension: pages may be submitted as public documents, Firefox mobile capability differences are handled, and automatic indexing accepts only HTML, XHTML, or plain text documents.
- Website and documentation: the landing page, onboarding, navigation, accessibility, configuration reference, SEO metadata, and 404 page have been refreshed.
- Operations: debug profile endpoints are available at debug log level, a sample systemd unit is included, and crawler failure codes are retained for inspection.
- External tools:
yt-dlpinstallation uses upstream releases and concurrentyt-dlpextraction is limited. - Dependencies: Go modules, npm packages, Nix inputs, GitHub Actions, and browser extension dependencies were updated.
Bug Fixes
- SQLite semantic search uses cosine scoring consistently.
- MCP search returns semantic results correctly.
- Embedding requests avoid provider token limits and reduce batch size when a provider reports an oversized request.
- Index resources are closed when initialization fails, absent documents are not deleted again, and document insertion avoids repeated lookups.
- Startup only warns about reindexing for analyzer changes when analyzer configuration is present.
- Stored previews reject meta refresh redirects.
- Document domains no longer include ports, and invalid favicon schemes are ignored.
- Public mode history is available to authenticated users and response headers are no longer written more than once.
- Field specific phrase queries and a single wildcard query produce the expected matches.
- Imports preserve existing titles when extraction finds no replacement, and the JSON input scanner accepts larger records.
- The browser extension avoids unavailable command APIs on Firefox mobile and uses a compatible badge text color.
- Search result and history titles and URLs retain usable space in narrow layouts.
Backward Compatibility Notes
The following changes require attention when upgrading from v0.16.0:
- Import commands:
hister import-browserhas been replaced byhister import browser. File and directory imports now require the source subcommand, as inhister import file INPUT. Imported JSON exports retain their processed content without running extractors again. Browser imports now use persistent crawl jobs and can prompt to resume an unfinished job. - Date behavior: the structured
date_fromanddate_tosearch parameters, facet date ranges, export date flags, date sorting, history ordering, and history RSS dates now use the documentupdatedtimestamp instead ofadded. The web interface no longer readsdate_fromordate_tofrom its page URL. Putadded:orupdated:expressions in theqparameter instead. For newly indexed local files,addedis the indexing time andupdatedis the file modification time. - Favicon responses: search and history results return
favicon_keyinstead of embedding stored favicon data. API clients should fetch the image from/api/favicon?key=FAVICON_KEY. Legacy inline favicon values remain readable. - Domain normalization: newly indexed and reindexed documents store only the
hostname in
domain, without the port. Queries and integrations that expect a host and port value must be adjusted. - Semantic search: SQLite vector stores migrate from Euclidean distance to
cosine distance. Custom
similarity_thresholdvalues may need adjustment. When omitted from configuration, the default context length changes from 4096 to 512, chunk overlap from 128 to 64, and embedding concurrency from 10 to 2. - Browser extension submissions: the extension no longer submits images, videos, or other unsupported document types. This content type restriction also applies to manual submission.
- Search interface: sort choice is preserved in the URL, result index
-
v0.16.1-0.20260716154444-2ecee277b03f16 Jul 2026 pre-releaseNothing published for this version
-
v0.16.001 Jul 2026Release notes
Open source →New Features
Public Search Mode
Hister can now run in public mode, allowing unauthenticated read-only access to
global search results and previews while keeping write operations protected.
This makes it possible to publish a shared or community search instance without
exposing private user data. Public mode is documented across configuration,
server setup, user handling, and the new public search blog post.Documentation Datasets
Hister now ships dataset metadata and tooling for importing common reference
documentation. New datasets cover Go standard library, PowerShell, Python, Rust,
Node.js, and refreshed MDN datasets. Compressed dataset imports are supported, so
pre-built documentation archives can be imported directly.StackExchange Extractor
The StackOverflow extractor has been replaced by a generic StackExchange
extractor. It supports StackExchange-style question pages more broadly and
indexes answers with useful metadata.Markdown and Org Mode Extractors
Local Markdown and Org files now render as HTML previews. Markdown titles are
extracted automatically, Markdown syntax is stripped from indexed text, and Org
files are rendered through go-org for cleaner previews.MCP History and Capability Reporting
The MCP endpoint now exposes a
get_historytool for recently indexed pages and
opened search result history. MCP search supports date filters, and MCP clients
can discover whether semantic search is enabled on the current Hister instance.
The MCP documentation and examples have been expanded accordingly.Browser Extension Hotkeys and Indexing Indicators
The browser extension now includes configurable commands to manually index the
current page, disable indexing for the current page, and disable indexing for
the current domain. Badge feedback indicates success or failure. The extension
can also show whether the current page has already been indexed, with a popup
setting to control the indicator.Import and Export Improvements
Imports now support HTML files, multiple input files in a single command,
compressed JSON archives, directory imports for supported local file types, and
optional user IDs. Import and export commands can be limited by date range.
Browser history import gained a redesigned interactive flow and a--backend
flag for selecting the scraping backend.Search JSON Output
The
/searchendpoint now supportsformat=json, making it easier to integrate
Hister search results with scripts and external tools.Search Sorting
Search results can now be sorted by newest date, domain, and most visited pages.
Documents track anadd_countfield that records how many times a URL has been
indexed, and the web UI exposes this as the "Most visited" sort mode.History RSS Feed
The history endpoint and history UI now expose an RSS feed for recently indexed
documents.Enhancements
- File indexing startup: initial file indexing now runs in the background so
server startup is not blocked by watched directory indexing (closes #499) - Directory indexing queue: watched directory indexing uses a proper queue,
logs queue errors, and avoids duplicating file indexing logic - Sensitive content override: CLI indexing can explicitly allow sensitive
content when requested - Semantic search: embedding generation has a concurrency limit, semantic
result counts are more accurate, and shared plus user-specific vector results
are merged - History view: the history timeline has been redesigned, supports loading
more items, shows when a day has unloaded items, and displays indexed version
counts - Search UI: the results layout, home layout, dark theme, add entry form,
search input, and shared chrome have been refined - Facets: type facets were added, inactive facet categories are hidden when
they only have one candidate, and facet rendering was refactored - Preview and history integration: history supports diff previews for
versioned documents, preview links are proper anchors, and previously opened
results stay visible after unpinning - Configurable branding: the web UI title and subtitle can now be configured
- Logging: log output format and log file path are configurable, and panic
stack traces are available in debug logs - Environment variables: environment variable overrides now preserve typed
values instead of treating everything as a string - Terminal UI: the TUI package now lives under
cmd/tui, includes updated
command documentation, and supports result sorting - CLI structure: the command line implementation was split into a dedicated
cmdpackage for easier maintenance - Docker image:
yt-dlpis now installed in the Docker image - Dependencies: Go, npm, GitHub Actions, Nix, GORM, SQLite, and PDF related
dependencies were updated
Bug Fixes
- Lobsters extraction works with the updated Lobsters HTML structure
- Document labels are added and preserved correctly
- Opened history filtering and history list layout no longer squeeze content
- Result text wraps correctly in the web UI
- Description lines no longer force table scrolling
- Base URL handling is more consistent for app URLs, CSRF checks, and invalid
base URL values - The preview panel is cleared when a search returns no results
- Reindexing no longer stops when an extractor aborts one document
- Lazy loading works when the previous page returned fewer than the configured
page size - Database migrations no longer unintentionally update
UpdatedAt - PDF parsing panics are recovered, and PDF dependency updates address memory
issues - Versioned document diffs use the newly stored document when calculating
changes - Batch operations handle user IDs correctly
- Extra documents no longer increment the parent document add count
- Subtitle rendering is centered correctly
- Python dataset generation fetches only standard library documentation
- Nix paths and hashes were updated after Go and npm dependency changes
Release notes
Open source →New Features
Public Search Mode
Hister can now run in public mode, allowing unauthenticated read-only access to global search results and previews while keeping write operations protected. This makes it possible to publish a shared or community search instance without exposing private user data. Public mode is documented across configuration, server setup, user handling, and the new public search blog post.
Documentation Datasets
Hister now ships dataset metadata and tooling for importing common reference documentation. New datasets cover Go standard library, PowerShell, Python, Rust, Node.js, and refreshed MDN datasets. Compressed dataset imports are supported, so pre-built documentation archives can be imported directly.
StackExchange Extractor
The StackOverflow extractor has been replaced by a generic StackExchange extractor. It supports StackExchange-style question pages more broadly and indexes answers with useful metadata.
Markdown and Org Mode Extractors
Local Markdown and Org files now render as HTML previews. Markdown titles are extracted automatically, Markdown syntax is stripped from indexed text, and Org files are rendered through go-org for cleaner previews.
MCP History and Capability Reporting
The MCP endpoint now exposes a
get_historytool for recently indexed pages and opened search result history. MCP search supports date filters, and MCP clients can discover whether semantic search is enabled on the current Hister instance. The MCP documentation and examples have been expanded accordingly.Browser Extension Hotkeys and Indexing Indicators
The browser extension now includes configurable commands to manually index the current page, disable indexing for the current page, and disable indexing for the current domain. Badge feedback indicates success or failure. The extension can also show whether the current page has already been indexed, with a popup setting to control the indicator.
Import and Export Improvements
Imports now support HTML files, multiple input files in a single command, compressed JSON archives, directory imports for supported local file types, and optional user IDs. Import and export commands can be limited by date range. Browser history import gained a redesigned interactive flow and a
--backendflag for selecting the scraping backend.Search JSON Output
The
/searchendpoint now supportsformat=json, making it easier to integrate Hister search results with scripts and external tools.Search Sorting
Search results can now be sorted by newest date, domain, and most visited pages. Documents track an
add_countfield that records how many times a URL has been indexed, and the web UI exposes this as the "Most visited" sort mode.History RSS Feed
The history endpoint and history UI now expose an RSS feed for recently indexed documents.
Enhancements
- File indexing startup: initial file indexing now runs in the background so server startup is not blocked by watched directory indexing (closes #499)
- Directory indexing queue: watched directory indexing uses a proper queue, logs queue errors, and avoids duplicating file indexing logic
- Sensitive content override: CLI indexing can explicitly allow sensitive content when requested
- Semantic search: embedding generation has a concurrency limit, semantic result counts are more accurate, and shared plus user-specific vector results are merged
- History view: the history timeline has been redesigned, supports loading more items, shows when a day has unloaded items, and displays indexed version counts
- Search UI: the results layout, home layout, dark theme, add entry form, search input, and shared chrome have been refined
- Facets: type facets were added, inactive facet categories are hidden when they only have one candidate, and facet rendering was refactored
- Preview and history integration: history supports diff previews for versioned documents, preview links are proper anchors, and previously opened results stay visible after unpinning
- Configurable branding: the web UI title and subtitle can now be configured
- Logging: log output format and log file path are configurable, and panic stack traces are available in debug logs
- Environment variables: environment variable overrides now preserve typed values instead of treating everything as a string
- Terminal UI: the TUI package now lives under
cmd/tui, includes updated command documentation, and supports result sorting - CLI structure: the command line implementation was split into a dedicated
cmdpackage for easier maintenance - Docker image:
yt-dlpis now installed in the Docker image - Dependencies: Go, npm, GitHub Actions, Nix, GORM, SQLite, and PDF related dependencies were updated
Bug Fixes
- Lobsters extraction works with the updated Lobsters HTML structure
- Document labels are added and preserved correctly
- Opened history filtering and history list layout no longer squeeze content
- Result text wraps correctly in the web UI
- Description lines no longer force table scrolling
- Base URL handling is more consistent for app URLs, CSRF checks, and invalid base URL values
- The preview panel is cleared when a search returns no results
- Reindexing no longer stops when an extractor aborts one document
- Lazy loading works when the previous page returned fewer than the configured page size
- Database migrations no longer unintentionally update
UpdatedAt - PDF parsing panics are recovered, and PDF dependency updates address memory issues
- Versioned document diffs use the newly stored document when calculating changes
- Batch operations handle user IDs correctly
- Extra documents no longer increment the parent document add count
- Subtitle rendering is centered correctly
- Python dataset generation fetches only standard library documentation
- Nix paths and hashes were updated after Go and npm dependency changes
- File indexing startup: initial file indexing now runs in the background so
-
v0.15.1-0.20260604105352-0291befe50c704 Jun 2026 pre-releaseNothing published for this version
-
v0.15.003 Jun 2026Release notes
Open source →New Features
Document Versioning
A new
versioningrule type instructs Hister to track changes to a document each
time it is re-indexed. A diff-style changelog appears inside the preview panel so
you can see what changed between versions, and the preview endpoint returns the
full version history. Combine with a priority or skip rule to version only the
pages that matter to you.Priority Rules
Priority rules have been reintroduced (closes #222). Documents whose URLs match a
priority rule are pinned to the top of search results regardless of their relevance
score. Rules can be created, edited, and sorted directly in the web UI.PDF Indexing
Local PDF files can now be indexed with full text extraction. The browser extension
gains a new endpoint for sending PDFs directly to the server (closes #55). Indexed
PDFs are stored as a distinct document type and can be filtered with
metadata.type:pdfin search queries.Faceted Filtering
Search results can now be filtered through facets that group documents by common
fields such as language, and domain. Facet counts update live as you refine your
query. Date-range filters have been moved into the same filters dropdown for a
unified experience, and a "load more" control expands facets with many values.Embedded Video Extractor
A new extractor detects embedded videos (YouTube, Vimeo, and similar platforms)
on indexed pages and stores the embedding metadata as a dedicated document type.
Embedded videos are rendered directly inside the result preview panel, so you can
watch them without leaving Hister (closes #446).Notion Extractor
A dedicated extractor for Notion pages extracts article content cleanly from
public Notion URLs, removing navigation chrome and other non-content elements.Compressed HTML and Favicon Storage
HTML content and favicons are now stored gzip-compressed in separate files on
disk rather than inline inside the Bleve index. This significantly reduces index
size on disk and lowers memory pressure during search (closes #384).Disable HTML Storage
A new config option lets you turn off full HTML storage and preview generation
entirely. Disabling storage trades preview functionality for a smaller footprint,
useful for bulk or headless indexing workflows (closes #440).User-Specific Directory Indexing
The
indexer.directoriesconfig now accepts auserfield per directory entry.
Files under that path are indexed only for the specified user, making it easy to
share a single Hister instance while keeping personal file indexes private.Label Editing from Results
Document labels can be edited inline directly from search result cards without
navigating away. The browser extension can also apply a one-off label to a
document at index time (closes #407). Updating a document no longer clears
previously assigned labels.File Deletion Tracking
When a locally-watched file is deleted from the filesystem, Hister now
automatically removes it from the index (closes #230). Batch and single-document
deletions also clean up the associated HTML and favicon files from disk.MCP Document Preview Endpoint
A new MCP endpoint exposes document previews to LLM agents and MCP-compatible
tools, complementing the existing MCP search endpoint.Browser Import: Ladybird Support
The
import-browsercommand now supports importing history from the
Ladybird browser.Browser Import: Auto-Detect Database
The
import-browsercommand now automatically detects the browser database file
path, so passing an explicit path is no longer required for supported browsers.Enhancements
- Copy URL button: a copy-to-clipboard icon appears next to each result URL
- Preview extractor selector: switch between available extractors when viewing
a document preview without re-indexing - Rules table: columns are sortable; values are filterable; filter toggle
buttons are visually distinct from column headers; regexp validation runs before
saving a rule - CLI index flags:
--delay,--timeout, and--user-agentare now
available directly onhister indexwithout needing a config file - Configurable client timeout: the HTTP client timeout used during indexing
is configurable (fixes #429) - Standardized config file lookup: config file discovery follows a consistent
search order across all platforms (closes #424) - History autoscroll: the history view scrolls to keep the selected entry
visible (#427) - Admin profile version: the admin profile page now shows the running Hister
version (closes #409) - Log level aliases: common short aliases are accepted for log level values
(fixes #411) - Random tips: a rotating set of usage tips is shown on the front page when
navigating back from search results - yt-dlp diagnostics: clearer error messages and debug logging help diagnose
yt-dlp configuration problems - Batch crawl insertion: URLs discovered during a recursive crawl are
inserted in batches for better throughput - Extension popup header: the popup header is now a link to the configured
Hister server - Per-sub-index paging: each language sub-index is iterated independently to
prevent paging gaps in multi-language setups - Improved embedding handling: fallow and embedding request processing
is more robust
Bug Fixes
- Docker
BASE_URLenvironment variable can now be correctly overridden by a
config file (closes #442) - Search results now contain all queried terms rather than any of them
- HTML is no longer re-written to the indexer during a reindex run
- yt-dlp subtitle download no longer skipped when the sub language differs from
the original language (#429) - History page stops loading more entries when the last page has been reached
- "Show all" in history now scrolls back to the top
- Rule type filter no longer incorrectly excludes rules
- Debug-level init messages are correctly suppressed at higher log levels
- Result paging uses a valid sort key, fixing out-of-order pages
- Times are displayed in the browser's configured timezone
WARNING
If you are using Hister with a custom config file under Docker, make sure you have the listen address set to
0.0.0.0:4433in your config file.Release notes
Open source →New Features
Document Versioning
A new
versioningrule type instructs Hister to track changes to a document each time it is re-indexed. A diff-style changelog appears inside the preview panel so you can see what changed between versions, and the preview endpoint returns the full version history. Combine with a priority or skip rule to version only the pages that matter to you.Priority Rules
Priority rules have been reintroduced (closes #222). Documents whose URLs match a priority rule are pinned to the top of search results regardless of their relevance score. Rules can be created, edited, and sorted directly in the web UI.
PDF Indexing
Local PDF files can now be indexed with full text extraction. The browser extension gains a new endpoint for sending PDFs directly to the server (closes #55). Indexed PDFs are stored as a distinct document type and can be filtered with
metadata.type:pdfin search queries.Faceted Filtering
Search results can now be filtered through facets that group documents by common fields such as language, and domain. Facet counts update live as you refine your query. Date-range filters have been moved into the same filters dropdown for a unified experience, and a "load more" control expands facets with many values.
Embedded Video Extractor
A new extractor detects embedded videos (YouTube, Vimeo, and similar platforms) on indexed pages and stores the embedding metadata as a dedicated document type. Embedded videos are rendered directly inside the result preview panel, so you can watch them without leaving Hister (closes #446).
Notion Extractor
A dedicated extractor for Notion pages extracts article content cleanly from public Notion URLs, removing navigation chrome and other non-content elements.
Compressed HTML and Favicon Storage
HTML content and favicons are now stored gzip-compressed in separate files on disk rather than inline inside the Bleve index. This significantly reduces index size on disk and lowers memory pressure during search (closes #384).
Disable HTML Storage
A new config option lets you turn off full HTML storage and preview generation entirely. Disabling storage trades preview functionality for a smaller footprint, useful for bulk or headless indexing workflows (closes #440).
User-Specific Directory Indexing
The
indexer.directoriesconfig now accepts auserfield per directory entry. Files under that path are indexed only for the specified user, making it easy to share a single Hister instance while keeping personal file indexes private.Label Editing from Results
Document labels can be edited inline directly from search result cards without navigating away. The browser extension can also apply a one-off label to a document at index time (closes #407). Updating a document no longer clears previously assigned labels.
File Deletion Tracking
When a locally-watched file is deleted from the filesystem, Hister now automatically removes it from the index (closes #230). Batch and single-document deletions also clean up the associated HTML and favicon files from disk.
MCP Document Preview Endpoint
A new MCP endpoint exposes document previews to LLM agents and MCP-compatible tools, complementing the existing MCP search endpoint.
Browser Import: Ladybird Support
The
import-browsercommand now supports importing history from the Ladybird browser.Browser Import: Auto-Detect Database
The
import-browsercommand now automatically detects the browser database file path, so passing an explicit path is no longer required for supported browsers.Enhancements
- Copy URL button: a copy-to-clipboard icon appears next to each result URL
- Preview extractor selector: switch between available extractors when viewing a document preview without re-indexing
- Rules table: columns are sortable; values are filterable; filter toggle buttons are visually distinct from column headers; regexp validation runs before saving a rule
- CLI index flags:
--delay,--timeout, and--user-agentare now available directly onhister indexwithout needing a config file - Configurable client timeout: the HTTP client timeout used during indexing is configurable (fixes #429)
- Standardized config file lookup: config file discovery follows a consistent search order across all platforms (closes #424)
- History autoscroll: the history view scrolls to keep the selected entry visible (#427)
- Admin profile version: the admin profile page now shows the running Hister version (closes #409)
- Log level aliases: common short aliases are accepted for log level values (fixes #411)
- Random tips: a rotating set of usage tips is shown on the front page when navigating back from search results
- yt-dlp diagnostics: clearer error messages and debug logging help diagnose yt-dlp configuration problems
- Batch crawl insertion: URLs discovered during a recursive crawl are inserted in batches for better throughput
- Extension popup header: the popup header is now a link to the configured Hister server
- Per-sub-index paging: each language sub-index is iterated independently to prevent paging gaps in multi-language setups
- Improved embedding handling: fallow and embedding request processing is more robust
Bug Fixes
- Docker
BASE_URLenvironment variable can now be correctly overridden by a config file (closes #442) - Search results now contain all queried terms rather than any of them
- HTML is no longer re-written to the indexer during a reindex run
- yt-dlp subtitle download no longer skipped when the sub language differs from the original language (#429)
- History page stops loading more entries when the last page has been reached
- "Show all" in history now scrolls back to the top
- Rule type filter no longer incorrectly excludes rules
- Debug-level init messages are correctly suppressed at higher log levels
- Result paging uses a valid sort key, fixing out-of-order pages
- Times are displayed in the browser's configured timezone
-
v0.14.1-0.20260512090212-bb6e678c3c0c12 May 2026 pre-releaseNothing published for this version
-
v0.14.011 May 2026Release notes
Open source →New Features
Mastodon Extractor
A dedicated extractor for Mastodon detects Mastodon pages and indexes each
toot as its own separate document rather than one big blob of text. Works
with any Mastodon instance without configuration. Every toot gets a
metadata.type:tootfield so you can filter toots in search queries.
Combined with a search alias (!toot → metadata.type:toot) this makes
finding past toots fast and convenient.Metadata Query Filtering
Documents can now be filtered by arbitrary metadata fields using the
metadata.key:valuequery syntax. Extractors (including the newMastodon
extractor) populate these fields at index time.Full Screen Preview
The split-screen preview can now be toggled into a full-screen mode that
occupies the entire content area (closes #401). The URL changes to
/preview/[id]so the view survives a page reload. Pressing the "view
result content" hotkey switches between split and full-screen. Full-screen
preview is also available on the history page.Preview Panel on History Page
The history page now shows the same interactive preview panel as the search
page (closes #395). Hotkey navigation between history entries works the same
way as on the search page.Infinite Scroll
Search results now load more pages automatically as you scroll to the bottom
of the list, removing the need to manually page through results (closes #1).Image Lightbox
Images displayed inside the preview panel can be clicked to open a full-size
lightbox view.Delete All Results
A new "delete all" action removes every document that matches the current
search query at once, without having to delete results one by one.Keyboard Shortcut for Result Deletion
A dedicated hotkey deletes the currently focused search result directly from
the keyboard.Quick Skip Rule
A skip-rule component lets you add a URL to your skip list directly from a
search result, available in both the web app and the browser extension
(closes #380).robots.txt Support
The crawler and
hister indexnow respectrobots.txtby default (closes
#386). A newignore_robots_txtconfig option disables this check when
needed.Document Labeling
Documents can be tagged with custom labels when indexing from the CLI
(--label) or from the browser extension. Labels are stored as metadata
and can be used in search queries (closes #156, #373).Editable Rules and Aliases
Existing skip/priority rules and search aliases can now be edited in the
web UI instead of having to delete and recreate them (closes #270).Exact Phrase Matching
Multi-word queries now also attempt an exact phrase match across title and
text, so searching foropen sourcesurfaces pages that contain that exact
phrase more prominently (closes #394).Extractor Templates and Extra Document Creation
Extractors can now supply a custom preview template, giving each content
type its own presentation in the preview panel. Extractors can also produce
additional sub-documents from a single page (used by the Mastodon extractor
to create one document per toot). A template scaffold is included to make
writing new extractors easier.WebDriver BiDi Crawler Backend
A new
bidicrawler backend uses the W3C WebDriver BiDi
protocol to drive an already-running browser over a WebSocket connection.
Unlike thechromedpbackend, it does not launch a browser process: you start
the browser yourself (headless or not) and point Hister at it:# Firefox firefox --remote-debugging-port 9222 # Chrome / Chromium chromium --remote-debugging-port=9222
crawler: backend: bidi backend_options: host: '127.0.0.1' port: '9222' capture_delay: 1.5 # extra seconds to wait after load for JS rendering
Supported by Firefox (≥ 102), Chrome/Chromium (≥ 106), and Edge. Options:
socket(full WebSocket URL),host,port,capture_delay. The crawler
reuses a single BiDi session for all URLs in onehister indexrun, making
multi-URL indexing significantly more efficient than opening a new browser
session per URL (closes #284).Enhancements
- Resizable preview panel: drag the divider in split-screen view to
adjust the panel width; the chosen width persists across sessions - History hotkey navigation: keyboard navigation between history entries
on the history page - Secondary date sorting: when search scores are equal, results are
sorted by indexed date - yt-dlp multi-language subtitles: configure which subtitle languages
the yt-dlp extractor indexes - MCP date filtering: MCP search requests can now be filtered by date
- Semantic search chunking: punctuation-based boundaries used for
chunk splitting, improving relevance for sentence-level queries - OIDC enhancements: userinfo endpoint is now configurable for
providers without auto-discovery (#279); password login can be disabled
when OAuth is the only configured auth method - Clearer CLI error messages: client-side HTTP errors now explain the
problem in plain words and suggest which flag to use (#400) - Duplicate rule prevention: the server and UI both reject duplicate
skip/priority rules and aliases (#399) - Deletion error feedback: errors during document deletion are now
surfaced in the UI - Rules/aliases UX: input fields moved above their respective lists
- Version string in server log: the server start message now includes
the version number (#372) - Silent WebSocket disconnect: closing the browser tab no longer shows
a connection-error message
Bug Fixes
- Search terms are now properly escaped before query execution
- Focused result index computed correctly when priority results are present
- Phrase queries are only applied when no field-specific terms exist in the
query /api/deleterequests from the browser extension are now acceptedtextandhtmlfields always included in search results (#374)- Language field included in document search results
- OIDC scopes correctly forwarded to the provider (#371)
- Auth page is scrollable on small screens (#370)
- TUI client now passes the access token to the server (#368)
- Optional peer dependencies no longer excluded on non-Linux platforms (#299)
Release notes
Open source →New Features
Mastodon Extractor
A dedicated extractor for Mastodon detects Mastodon pages and indexes each toot as its own separate document rather than one big blob of text. Works with any Mastodon instance without configuration. Every toot gets a
metadata.type:tootfield so you can filter toots in search queries. Combined with a search alias (!toot → metadata.type:toot) this makes finding past toots fast and convenient.Metadata Query Filtering
Documents can now be filtered by arbitrary metadata fields using the
metadata.key:valuequery syntax. Extractors (including the new Mastodon extractor) populate these fields at index time.Full Screen Preview
The split-screen preview can now be toggled into a full-screen mode that occupies the entire content area (closes #401). The URL changes to
/preview/[id]so the view survives a page reload. Pressing the "view result content" hotkey switches between split and full-screen. Full-screen preview is also available on the history page.Preview Panel on History Page
The history page now shows the same interactive preview panel as the search page (closes #395). Hotkey navigation between history entries works the same way as on the search page.
Infinite Scroll
Search results now load more pages automatically as you scroll to the bottom of the list, removing the need to manually page through results (closes #1).
Image Lightbox
Images displayed inside the preview panel can be clicked to open a full-size lightbox view.
Delete All Results
A new "delete all" action removes every document that matches the current search query at once, without having to delete results one by one.
Keyboard Shortcut for Result Deletion
A dedicated hotkey deletes the currently focused search result directly from the keyboard.
Quick Skip Rule
A skip-rule component lets you add a URL to your skip list directly from a search result, available in both the web app and the browser extension (closes #380).
robots.txt Support
The crawler and
hister indexnow respectrobots.txtby default (closes #386). A newignore_robots_txtconfig option disables this check when needed.Document Labeling
Documents can be tagged with custom labels when indexing from the CLI (
--label) or from the browser extension. Labels are stored as metadata and can be used in search queries (closes #156, #373).Editable Rules and Aliases
Existing skip/priority rules and search aliases can now be edited in the web UI instead of having to delete and recreate them (closes #270).
Exact Phrase Matching
Multi-word queries now also attempt an exact phrase match across title and text, so searching for
open sourcesurfaces pages that contain that exact phrase more prominently (closes #394).Extractor Templates and Extra Document Creation
Extractors can now supply a custom preview template, giving each content type its own presentation in the preview panel. Extractors can also produce additional sub-documents from a single page (used by the Mastodon extractor to create one document per toot). A template scaffold is included to make writing new extractors easier.
WebDriver BiDi Crawler Backend
A new
bidicrawler backend uses the W3C WebDriver BiDi protocol to drive an already-running browser over a WebSocket connection. Unlike thechromedpbackend, it does not launch a browser process: you start the browser yourself (headless or not) and point Hister at it:# Firefox firefox --remote-debugging-port 9222 # Chrome / Chromium chromium --remote-debugging-port=9222crawler: backend: bidi backend_options: host: '127.0.0.1' port: '9222' capture_delay: 1.5 # extra seconds to wait after load for JS renderingSupported by Firefox (≥ 102), Chrome/Chromium (≥ 106), and Edge. Options:
socket(full WebSocket URL),host,port,capture_delay. The crawler reuses a single BiDi session for all URLs in onehister indexrun, making multi-URL indexing significantly more efficient than opening a new browser session per URL (closes #284).Enhancements
- Resizable preview panel: drag the divider in split-screen view to adjust the panel width; the chosen width persists across sessions
- History hotkey navigation: keyboard navigation between history entries on the history page
- Secondary date sorting: when search scores are equal, results are sorted by indexed date
- yt-dlp multi-language subtitles: configure which subtitle languages the yt-dlp extractor indexes
- MCP date filtering: MCP search requests can now be filtered by date
- Semantic search chunking: punctuation-based boundaries used for chunk splitting, improving relevance for sentence-level queries
- OIDC enhancements: userinfo endpoint is now configurable for providers without auto-discovery (#279); password login can be disabled when OAuth is the only configured auth method
- Clearer CLI error messages: client-side HTTP errors now explain the problem in plain words and suggest which flag to use (#400)
- Duplicate rule prevention: the server and UI both reject duplicate skip/priority rules and aliases (#399)
- Deletion error feedback: errors during document deletion are now surfaced in the UI
- Rules/aliases UX: input fields moved above their respective lists
- Version string in server log: the server start message now includes the version number (#372)
- Silent WebSocket disconnect: closing the browser tab no longer shows a connection-error message
Bug Fixes
- Search terms are now properly escaped before query execution
- Focused result index computed correctly when priority results are present
- Phrase queries are only applied when no field-specific terms exist in the query
/api/deleterequests from the browser extension are now acceptedtextandhtmlfields always included in search results (#374)- Language field included in document search results
- OIDC scopes correctly forwarded to the provider (#371)
- Auth page is scrollable on small screens (#370)
- TUI client now passes the access token to the server (#368)
- Optional peer dependencies no longer excluded on non-Linux platforms (#299)
- Resizable preview panel: drag the divider in split-screen view to
-
v0.13.023 Apr 2026Release notes
Open source →New Features
Semantic Search
Full vector search support via sentence-embedding models. Documents are chunked
and embedded at index time; search queries are embedded at query time and ranked
by cosine similarity. Two storage backends are supported:- SQLite (default, via bundled
sqlite-vec) zero extra infrastructure required - PostgreSQL with
pgvectorauto-selected when the database is Postgres
Configure the embedding API endpoint, model, dimensions, and chunking parameters
in the newsemanticconfig section. Semantic search is opt-in and off by default.
Relevance scores are shown alongside results when semantic search is active.OAuth / SSO Authentication
OAuth 2.0 and OpenID Connect (OIDC) providers can now be configured as login
methods. Add one or more entries to the newserver.oauthconfig section with
client_id,client_secret,configuration_url(for OIDC auto-discovery), or
manualauth_url/token_url, and optionalscopes. Multiple providers can be
active at the same time alongside the built-in username/password login.MCP Server
Hister now exposes a Model Context Protocol
endpoint at/api/mcp, enabling LLM agents and MCP-compatible tools to search
the index directly.Persistent Crawler State Management
Recursive crawl jobs (
hister index -r) are now stored in the database and
survive interruptions. Each job gets a unique ID (auto-generated or set via
--job-id). Pass--job-id <id>without--recursiveto resume an
interrupted crawl from exactly where it left off, including original validator
rules and visited-URL counts.New Extractors
- Wikipedia extracts the article body and infobox, rewrites relative links, and sanitizes the output
- GitHub project extracts repository descriptions and README content from GitHub project pages
- Lobste.rs dedicated extractor for Lobste.rs story and comment pages
- yt-dlp extracts video metadata (title, description, channel) from video pages via yt-dlp
- JSON-LD surfaces structured metadata (
@type,headline, description) from pages that embed JSON-LD
All extractors now expose a
Description()method, and an extractor information
page is available at/extractorsin the web UI.OpenSearch Suggestions
The server now serves an OpenSearch suggestions endpoint (
/api/suggest),
allowing browsers to display search-as-you-type completions when Hister is
configured as a search engine.Enhancements
Crawler Backend for All Index Operations
The
--backendflag (and--backend-option) is now available on both
hister index(plain and--recursive) andhister import-browser, allowing
a headless Chrome/Chromium backend for JavaScript-heavy pages without running a
full recursive crawl:hister index --backend chromedp https://example.com hister import-browser --backend chromedp --backend-option exec_path=/usr/bin/chromium
Headers and cookies can also be injected per-invocation:
hister index --header "Accept-Language=en" --cookie "session=abc; Domain=example.com" https://example.com
Cookies use standard
Set-Cookieformat with a requiredDomainattribute.CLI Search Improvements
--limit Nflag caps the number of results returned--fieldsflag selects which document fields to include in output--htmlflag includes raw HTML content in the output- Paging support added to both CLI search and
list-urls list-urlsnow fetches results from the server by default;--offlineconnects directly to the index without a running server
Quoted Field Queries
Field-qualified queries now support quoted values, enabling correct deletion and
lookup of URLs that contain spaces (common on Windows file paths):url:"file:///C:/Users/My Documents/notes.txt"Preview Panel Polish
- Preview title is now clickable (opens the result URL)
- Preview panel maximises available content width
- JSON-LD metadata surfaced inside the preview panel
- Dark theme font colors fixed in preview popup
NixOS / Nix Module
systemdandlaunchdhardening applied to the Hister service units- New
services.hister.environmentFileoption for secrets injection openFirewallnow requires explicit opt-inservices.hister.configrenamed toservices.hister.settings
Other
- Executable size reduced ~70 MB by switching to a trimmed
lingua-gofork - Sensitive content rejection errors surfaced in the browser extension
--verboseflag onhister deletelists matched URLs before deleting- Priority result deduplication now copies body text from the original result
/suggestendpoint protected by auth middleware andSec-Fetch-Siteheader check- Version information included in the MCP endpoint response
- Timezone data bundled into the binary for environments without a system
tzdata
Bug Fixes
- File URLs (
file://) now handled correctly in the UI for both opening and deletion (#362) - Browser extension authentication documentation corrected (#366)
- URLs no longer lowercased during query building, preventing mismatches on case-sensitive paths
- History view correctly filtered per-user in multi-user mode (#314)
- Token authentication middleware now respects
NoAuthflag (#348) - Documents with no HTML content no longer attempt HTML extraction (#351)
- Extension no longer resubmits documents after a
406 Not Acceptableresponse - Priority results correctly deduplicated against standard results
- File indexing fixed on Windows
- Wide tables no longer overflow the preview panel
- Score field populated correctly in search responses
aws_access_keysensitive content pattern tightened to reduce false positives- Home-manager service units correctly gated on host platform in Nix module
Release notes
Open source →New Features
Semantic Search
Full vector search support via sentence-embedding models. Documents are chunked and embedded at index time; search queries are embedded at query time and ranked by cosine similarity. Two storage backends are supported:
- SQLite (default, via bundled
sqlite-vec) zero extra infrastructure required - PostgreSQL with
pgvectorauto-selected when the database is Postgres
Configure the embedding API endpoint, model, dimensions, and chunking parameters in the new
semanticconfig section. Semantic search is opt-in and off by default. Relevance scores are shown alongside results when semantic search is active.OAuth / SSO Authentication
OAuth 2.0 and OpenID Connect (OIDC) providers can now be configured as login methods. Add one or more entries to the new
server.oauthconfig section withclient_id,client_secret,configuration_url(for OIDC auto-discovery), or manualauth_url/token_url, and optionalscopes. Multiple providers can be active at the same time alongside the built-in username/password login.MCP Server
Hister now exposes a Model Context Protocol endpoint at
/api/mcp, enabling LLM agents and MCP-compatible tools to search the index directly.Persistent Crawler State Management
Recursive crawl jobs (
hister index -r) are now stored in the database and survive interruptions. Each job gets a unique ID (auto-generated or set via--job-id). Pass--job-id <id>without--recursiveto resume an interrupted crawl from exactly where it left off, including original validator rules and visited-URL counts.New Extractors
- Wikipedia extracts the article body and infobox, rewrites relative links, and sanitizes the output
- GitHub project extracts repository descriptions and README content from GitHub project pages
- Lobste.rs dedicated extractor for Lobste.rs story and comment pages
- yt-dlp extracts video metadata (title, description, channel) from video pages via yt-dlp
- JSON-LD surfaces structured metadata (
@type,headline, description) from pages that embed JSON-LD
All extractors now expose a
Description()method, and an extractor information page is available at/extractorsin the web UI.OpenSearch Suggestions
The server now serves an OpenSearch suggestions endpoint (
/api/suggest), allowing browsers to display search-as-you-type completions when Hister is configured as a search engine.Enhancements
Crawler Backend for All Index Operations
The
--backendflag (and--backend-option) is now available on bothhister index(plain and--recursive) andhister import-browser, allowing a headless Chrome/Chromium backend for JavaScript-heavy pages without running a full recursive crawl:hister index --backend chromedp https://example.com hister import-browser --backend chromedp --backend-option exec_path=/usr/bin/chromiumHeaders and cookies can also be injected per-invocation:
hister index --header "Accept-Language=en" --cookie "session=abc; Domain=example.com" https://example.comCookies use standard
Set-Cookieformat with a requiredDomainattribute.CLI Search Improvements
--limit Nflag caps the number of results returned--fieldsflag selects which document fields to include in output--htmlflag includes raw HTML content in the output- Paging support added to both CLI search and
list-urls list-urlsnow fetches results from the server by default;--offlineconnects directly to the index without a running server
Quoted Field Queries
Field-qualified queries now support quoted values, enabling correct deletion and lookup of URLs that contain spaces (common on Windows file paths):
url:"file:///C:/Users/My Documents/notes.txt"Preview Panel Polish
- Preview title is now clickable (opens the result URL)
- Preview panel maximises available content width
- JSON-LD metadata surfaced inside the preview panel
- Dark theme font colors fixed in preview popup
NixOS / Nix Module
systemdandlaunchdhardening applied to the Hister service units- New
services.hister.environmentFileoption for secrets injection openFirewallnow requires explicit opt-inservices.hister.configrenamed toservices.hister.settings
Other
- Executable size reduced ~70 MB by switching to a trimmed
lingua-gofork - Sensitive content rejection errors surfaced in the browser extension
--verboseflag onhister deletelists matched URLs before deleting- Priority result deduplication now copies body text from the original result
/suggestendpoint protected by auth middleware andSec-Fetch-Siteheader check- Version information included in the MCP endpoint response
- Timezone data bundled into the binary for environments without a system
tzdata
Bug Fixes
- File URLs (
file://) now handled correctly in the UI for both opening and deletion (#362) - Browser extension authentication documentation corrected (#366)
- URLs no longer lowercased during query building, preventing mismatches on case-sensitive paths
- History view correctly filtered per-user in multi-user mode (#314)
- Token authentication middleware now respects
NoAuthflag (#348) - Documents with no HTML content no longer attempt HTML extraction (#351)
- Extension no longer resubmits documents after a
406 Not Acceptableresponse - Priority results correctly deduplicated against standard results
- File indexing fixed on Windows
- Wide tables no longer overflow the preview panel
- Score field populated correctly in search responses
aws_access_keysensitive content pattern tightened to reduce false positives- Home-manager service units correctly gated on host platform in Nix module
- SQLite (default, via bundled
-
v0.12.1-0.20260409144639-b224f43ae32c09 Apr 2026 pre-releaseNothing published for this version
-
v0.12.009 Apr 2026Release notes
Open source →New Features
Web Crawler
New
hister index -r <url>command crawls sites recursively.
Supports the standard Go HTTP backend and a headless Chrome backend (chromedp).
Configurable depth, link count, allowed/excluded domains, and URL patterns.PostgreSQL Backend
Full PostgreSQL support as an alternative to SQLite.
Configure via apostgres://connection string inserver.database.Extractor Pipeline Overhaul
Extractors are now configurable, have explicit states (continue/done), and expose
aPreview()method used by the preview panel. New extractors included:- Custom
pkg.go.devextractor for Go documentation pages - Basic Stack Overflow extractor
Desktop Readability Panel
Focused search results load automatically in a split-pane reader on the right side
on screens wider than 1280 px. The panel is togglable and its open/closed state persists.Enhancements
- HTML sanitizer (bluemonday) applied to all extracted content
metadatafield added to documents for arbitrary key/value datasearchinput type attribute on search fields for better mobile UX- Build commit ID shown in the version string
- Admin users can create global indexes or indexes on behalf of other users
hister indexskips already-indexed URLs by default; pass--forceto reindex them- URL and domain wildcard matching automatically anchors to start and end
- Table of contents added to the API docs page
- Document indexed date shown in the preview panel
- Search query reflected in the browser tab title
- WebSocket communication optimised to reduce redundant round-trips
- Automatic redirect on zero results is now optional (configurable)
importcommand renamed toimport-browserto freeimportfor index import/export
Bug Fixes
- Browser history database opened read-only to avoid lock conflicts (#304)
- History entries now deleted when their associated document is deleted (#303)
- Crawler user-agent correctly applied after redirect handling (#302)
- Fixed field-specific alternation parts in query parser (#274)
- Negated query terms no longer trimmed twice
- HTML field no longer leaks into search results (#268)
- Expanded query hint only shown when the expansion is longer than the original query
- URL changes after HTTP redirects now resolved correctly
- Crawler no longer stops on HTTP errors
- Crawler timeout now applied during browser history import (#278)
- Pinned result titles no longer truncated on narrow screens
- Dark mode handled correctly in the preview panel
- Mobile layout no longer introduces unwanted line breaks
Release notes
Open source →New Features
Web Crawler
New
hister index -r <url>command crawls sites recursively using BFS traversal. Supports an HTTP backend and a headless Chrome backend (chromedp). Configurable depth, link count, allowed/excluded domains, and URL patterns.PostgreSQL Backend
Full PostgreSQL support as an alternative to SQLite, including pgvector for semantic search. Configure via a
postgres://connection string inserver.database.Extractor Pipeline Overhaul
Extractors are now configurable, have explicit states (continue/done), and expose a
Preview()method used by the readability panel. New extractors included:- Custom
pkg.go.devextractor for Go documentation pages - Basic Stack Overflow extractor
Desktop Readability Panel
Focused search results load automatically in a split-pane reader on the right side on screens wider than 1280 px. The panel is togglable and its open/closed state persists.
Enhancements
- HTML sanitizer (bluemonday) applied to all extracted content
metadatafield added to documents for arbitrary key/value datasearchinput type attribute on search fields for better mobile UX- Build commit ID shown in the version string
- Admin users can create global indexes or indexes on behalf of other users
hister indexskips already-indexed URLs by default; pass--forceto reindex them- URL and domain wildcard matching automatically anchors to start and end
- Table of contents added to the API docs page
- Document indexed date shown in the preview panel
- Search query reflected in the browser tab title
- WebSocket communication optimised to reduce redundant round-trips
- Automatic redirect on zero results is now optional (configurable)
importcommand renamed toimport-browserto freeimportfor index import/export
Bug Fixes
- Browser history database opened read-only to avoid lock conflicts (#304)
- History entries now deleted when their associated document is deleted (#303)
- Crawler user-agent correctly applied after redirect handling (#302)
- Fixed field-specific alternation parts in query parser (#274)
- Negated query terms no longer trimmed twice
- HTML field no longer leaks into search results (#268)
- Expanded query hint only shown when the expansion is longer than the original query
- URL changes after HTTP redirects now resolved correctly
- Crawler no longer stops on HTTP errors
- Crawler timeout now applied during browser history import (#278)
- Pinned result titles no longer truncated on narrow screens
- Dark mode handled correctly in the preview panel
- Mobile layout no longer introduces unwanted line breaks
- Custom
-
v0.11.1-0.20260330200608-eec2761bc2aa30 Mar 2026 pre-releaseNothing published for this version
-
v0.11.030 Mar 2026Release notes
Open source →What's Changed
- Multi-user support.
- Better authentication method for the extension.
- Enhanced delete. Queries can be used to delete multiple items.
--dryflag. - Reindex does not require server stop anymore.
- Enhanced history view.
- Extension feedback if the active tab has a matching skip rule.
- Add pages/domains to skip rules directly from the extension popup.
- Plenty of bugfixes.
-
v0.10.1-0.20260322172732-8283549b1eab22 Mar 2026 pre-releaseNothing published for this version
-
v0.10.1-0.20260321065938-9660936bf86b21 Mar 2026 pre-releaseNothing published for this version
-
v0.10.020 Mar 2026Release notes
Open source →New contributions
- Bump softprops/action-gh-release from 2.5.3 to 2.6.1 in the gha-deps group by @dependabot[bot] in #228
- [fix] include parent directory in local file titles by @FlameFlag in #234
- [feat] add POST
/api/batchendpoint for bulk add/delete/get operations by @FlameFlag in #233 - [feat] add custom headers support to browser extension by @FlameFlag in #238
- [feat] add light mode & theme switcher to browser extension by @FlameFlag in #239
- [feat] switch to
mode-watcherfor theme management by @FlameFlag in #240 - [fix] prevent Svelte 5 proxy from being stored in Chrome storage for
customHeadersby @FlameFlag in #241 - [enh] strip debug symbols from release binary by @FlameFlag in #242
- [fix] include full end date in date range search by @mvanhorn in #244
New Contributors
Full Changelog: v0.9.0...v0.10.0
-
v0.9.1-0.20260316144940-bece25c3c05816 Mar 2026 pre-releaseNothing published for this version
-
v0.9.016 Mar 2026Nothing published for this version
-
v0.8.1-0.20260309213004-67c7870d268409 Mar 2026 pre-releaseNothing published for this version
-
v0.8.009 Mar 2026Nothing published for this version
-
v0.7.1-0.20260305193712-8eb236b0143b05 Mar 2026 pre-releaseNothing published for this version
-
v0.7.005 Mar 2026Nothing published for this version
-
v0.6.005 Mar 2026Nothing published for this version
-
v0.5.024 Feb 2026Nothing published for this version
-
v0.4.1-0.20260221174637-dcef0e2a783421 Feb 2026 pre-releaseNothing published for this version
-
v0.4.1-0.20260220195012-6885f478b34b20 Feb 2026 pre-releaseNothing published for this version
-
v0.4.020 Feb 2026Nothing published for this version
-
v0.3.1-0.20260204215406-081676d500fb04 Feb 2026 pre-releaseNothing published for this version
-
v0.3.004 Feb 2026Nothing published for this version
-
v0.2.1-0.20260125191125-9f6156205b1025 Jan 2026 pre-releaseNothing published for this version
-
v0.2.1-0.20260121072942-8297a67c127b21 Jan 2026 pre-releaseNothing published for this version
-
v0.2.019 Jan 2026Nothing published for this version
-
v0.1.015 Jan 2026Nothing published for this version