NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules · #495 by repository stars
Last release 13 days ago
25 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Some releases are documented
notes for 11 of 20 stable releases
Nothing withdrawn
no release was ever pulled
8 months old
44 releases · first in 2026
One column per month.
Nothing published for this version
Nothing published for this version
Configuration creation : use hister config create in place of hister create-config . The old command remains as a deprecated alias and writes its noti…
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.
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.
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.
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.
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.
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.
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.
.json extension when omitted, and sensitive contentThe following changes require attention when upgrading from v0.19.0:
--format json consistently returns an array,2 when processing completes with item failures and1 for errors that prevent completion. Update scripts that depend onhister config create in place ofhister create-config. The old command remains as a deprecated alias anddisable_pkce: true in their provider configuration. Restart logins begunallow group retainNothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
ChatGPT and Hacker News Extractors
New ChatGPT and Hacker News extractors preserve complete conversations and
discussion threads. ChatGPT extraction keeps visible user and assistant turns,
including headings, lists, tables, code blocks, and safe links. It supports
authenticated conversations, public shares, and custom GPT conversation URLs.
Hacker News extraction records submission metadata, optional post text, and the
complete nested comment tree. Shared discussion utilities also improve how
Reddit and Discourse comments are represented.
Queries can now use url_re: to match normalized document URLs with Go regular
expressions. Matching supports anchors, case folding, negation, and grouped
alternatives. Invalid or excessively long expressions return a clear error.
The delete API supports a dry_run mode that counts matches without changing
the index. The Rules page and result actions can use this preview to delete
documents that match a new or edited skip rule. Hister shows the match count
and asks for confirmation while keeping the saved rule if deletion is canceled.
hister import browser can now import Safari history on macOS, including visit
counts and start date filtering. Browser databases are detected from their
schema instead of their filename, which also resolves ambiguous Safari and
Ladybird database names. Permission errors explain the Full Disk Access setting
required by macOS.
The terminal interface now separates search input from result navigation.
Keyboard, pointer, and scroll actions move focus predictably, while contextual
shortcuts and feedback reflect the active area. Dialogs, tabs, rules, previews,
and narrow layouts have more consistent navigation and pointer behavior.
The new default terminal appearance inherits the terminal foreground,
background, and ANSI palette. The Settings overlay can switch among terminal,
automatic, dark, and light modes, while the theme picker remains available for
choosing complete Hister themes.
OpenSearch suggestions now include pinned and history results before index
matches, together with descriptions and direct target URLs. Local and remote
file suggestions open the appropriate file or readable preview.
Readable previews display document type, language, label, visit count,
ownership, and extractor metadata. They also provide links to the source and a
standalone preview. Exact document identifiers keep previews and version
history on the correct document when users index the same URL separately.
hister update-user --password can assign or change/health is available outside any configured base path.ytdlp extractor accepts an extra_domains listnix-update.GET /mcp returns method not allowed instead of the web application.The following changes require attention when upgrading from v0.18.0:
x86_64-darwin is no longer exported because Nix 26.11 doesservices.hister module supplied by nixpkgs.Nothing published for this version
URL list input : hister index --url-list remains as a hidden deprecated alias. Use hister index --input ; it also accepts - for standard input.
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, or sort:domain. Prefix the value with a minus sign to reverse the order, as in sort:-date.
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.
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.
hister import file can 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.
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.
The new hister update command 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.
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.
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.
The MCP endpoint now targets protocol version 2025-06-18 and 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.
check-update reports new releases, and crawl urls can filter or count stored crawl URLs.hister index --input accepts a file or standard input and creates a persistent job.The following changes require attention when upgrading from v0.17.0:
/api/file now accepts a document id instead of an absolute path. Search and history results include this identifier.1.0. Untrusted source values are under structuredContent.untrusted_content. Text output contains the same JSON and a security notice.hister index --url-list remains as a hidden deprecated alias. Use hister index --input; it also accepts - for standard input.Nothing published for this version
The import interface is now grouped under hister import . In addition to local files and browser history, Hister can import bookmarks and archived con
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 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, and crawl queue commands expose job
state, failed URLs, queue contents, and queue counts.
Documents now track an updated timestamp alongside their original added time.
Search queries support added and updated filters 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.
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.
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.
Language detection and language specific indexes now support Chinese, Japanese,
and Korean documents.
The GitHub extractor now understands issue and pull request pages. It indexes
the title, body, open date, comments, repository metadata, and useful page text.
HTTP and SOCKS5 proxy URLs can now be configured for every crawler backend. The
new --proxy option also allows crawler backed index and import operations to
override the configured proxy, including robots.txt requests.
A new RFC dataset and fetch command make it easier to build a searchable local
collection of Internet standards.
The new hister companion qutebrowser command 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.
indexer.keep_stopwords can retain common words--sort, delete supports --yes,--relative, and command descriptions are clearer.yt-dlp installation uses upstream releases andyt-dlp extraction is limited.The following changes require attention when upgrading from v0.16.0:
hister import-browser has been replaced byhister import browser. File and directory imports now require the sourcehister import file INPUT. Imported JSON exports retaindate_from and date_to search parameters,updated timestamp instead ofadded. The web interface no longer reads date_from or date_to from itsadded: or updated: expressions in the q parameter instead.added is the indexing time and updated isfavicon_key instead/api/favicon?key=FAVICON_KEY. Legacy inline favicon values remain readable.domain, without the port. Queries and integrations that expect asimilarity_threshold values may need adjustment.Nothing published for this version
Hister can now run in public mode, allowing unauthenticated read-only access to global search results and previews while keeping write operations prot
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.
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.
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.
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.
The MCP endpoint now exposes a get_history tool 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.
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.
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.
The /search endpoint now supports format=json, making it easier to integrate
Hister search results with scripts and external tools.
Search results can now be sorted by newest date, domain, and most visited pages.
Documents track an add_count field that records how many times a URL has been
indexed, and the web UI exposes this as the "Most visited" sort mode.
The history endpoint and history UI now expose an RSS feed for recently indexed
documents.
cmd/tui, includes updatedcmd package for easier maintenanceyt-dlp is now installed in the Docker imageUpdatedAtNothing published for this version
A new versioning rule type instructs Hister to track changes to a document each time it is re-indexed. A diff-style changelog appears inside the previ
A new versioning rule 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 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.
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:pdf in search queries.
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.
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).
A dedicated extractor for Notion pages extracts article content cleanly from
public Notion URLs, removing navigation chrome and other non-content elements.
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).
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).
The indexer.directories config now accepts a user field 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.
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.
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.
A new MCP endpoint exposes document previews to LLM agents and MCP-compatible
tools, complementing the existing MCP search endpoint.
The import-browser command now supports importing history from the
Ladybird browser.
The import-browser command now automatically detects the browser database file
path, so passing an explicit path is no longer required for supported browsers.
--delay, --timeout, and --user-agent are nowhister index without needing a config fileBASE_URL environment variable can now be correctly overridden by aIf you are using Hister with a custom config file under Docker, make sure you have the listen address set to 0.0.0.0:4433 in your config file.
Nothing published for this version
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 w
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:toot field 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.
Documents can now be filtered by arbitrary metadata fields using the
metadata.key:value query syntax. Extractors (including the newMastodon
extractor) populate these fields at index time.
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.
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.
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).
Images displayed inside the preview panel can be clicked to open a full-size
lightbox view.
A new "delete all" action removes every document that matches the current
search query at once, without having to delete results one by one.
A dedicated hotkey deletes the currently focused search result directly from
the keyboard.
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).
The crawler and hister index now respect robots.txt by default (closes
#386). A new ignore_robots_txt config option disables this check when
needed.
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).
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).
Multi-word queries now also attempt an exact phrase match across title and
text, so searching for open source surfaces pages that contain that exact
phrase more prominently (closes #394).
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.
A new bidi crawler backend uses the W3C WebDriver BiDi
protocol to drive an already-running browser over a WebSocket connection.
Unlike the chromedp backend, 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 one hister index run, making
multi-URL indexing significantly more efficient than opening a new browser
session per URL (closes #284).
/api/delete requests from the browser extension are now acceptedtext and html fields always included in search results (#374)Full vector search support via sentence-embedding models. Documents are chunked and embedded at index time; search queries are embedded at query time
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-vec) zero extra infrastructure requiredpgvector auto-selected when the database is PostgresConfigure the embedding API endpoint, model, dimensions, and chunking parameters
in the new semantic config section. Semantic search is opt-in and off by default.
Relevance scores are shown alongside results when semantic search is active.
OAuth 2.0 and OpenID Connect (OIDC) providers can now be configured as login
methods. Add one or more entries to the new server.oauth config section with
client_id, client_secret, configuration_url (for OIDC auto-discovery), or
manual auth_url / token_url, and optional scopes. Multiple providers can be
active at the same time alongside the built-in username/password login.
Hister now exposes a Model Context Protocol
endpoint at /api/mcp, enabling LLM agents and MCP-compatible tools to search
the index directly.
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 --recursive to resume an
interrupted crawl from exactly where it left off, including original validator
rules and visited-URL counts.
@type, headline, description) from pages that embed JSON-LDAll extractors now expose a Description() method, and an extractor information
page is available at /extractors in the web UI.
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.
The --backend flag (and --backend-option) is now available on both
hister index (plain and --recursive) and hister 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-Cookie format with a required Domain attribute.
--limit N flag caps the number of results returned--fields flag selects which document fields to include in output--html flag includes raw HTML content in the outputlist-urlslist-urls now fetches results from the server by default; --offline connects directly to the index without a running serverField-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"
systemd and launchd hardening applied to the Hister service unitsservices.hister.environmentFile option for secrets injectionopenFirewall now requires explicit opt-inservices.hister.config renamed to services.hister.settingslingua-go fork--verbose flag on hister delete lists matched URLs before deleting/suggest endpoint protected by auth middleware and Sec-Fetch-Site header checktzdatafile://) now handled correctly in the UI for both opening and deletion (#362)NoAuth flag (#348)406 Not Acceptable responseaws_access_key sensitive content pattern tightened to reduce false positivesNothing published for this version
Nothing published for this version
New hister index -r <url> command crawls sites recursively. Supports the standard Go HTTP backend and a headless Chrome backend (chromedp). Configurab
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.
Full PostgreSQL support as an alternative to SQLite.
Configure via a postgres:// connection string in server.database.
Extractors are now configurable, have explicit states (continue/done), and expose
a Preview() method used by the preview panel. New extractors included:
pkg.go.dev extractor for Go documentation pagesFocused 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.
metadata field added to documents for arbitrary key/value datasearch input type attribute on search fields for better mobile UXhister index skips already-indexed URLs by default; pass --force to reindex themimport command renamed to import-browser to free import for index import/exportNothing published for this version
Better authentication method for the extension.
--dry flag.Nothing published for this version
Nothing published for this version
Bump softprops/action-gh-release from 2.5.3 to 2.6.1 in the gha-deps group by @dependabot [bot] in #228
/api/batch endpoint for bulk add/delete/get operations by @FlameFlag in #233mode-watcher for theme management by @FlameFlag in #240customHeaders by @FlameFlag in #241Full Changelog: v0.9.0...v0.10.0
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →