Skip to main content

Browser Extension

The Hister browser extension is the primary way to automatically index your browsing history. It runs silently in the background, sending page content to your Hister server as you browse.

Installation

After installing, click the extension icon in your browser toolbar to open the popup and verify the server URL is correct.

The extension only communicates with your Hister server, it never contacts any third-party services or the websites you visit (except for downloading the page’s favicon while collecting page data).

qutebrowser

The qutebrowser companion submits the rendered page title, text, HTML, and favicon to Hister, then monitors changes made by single page applications. Pages served from the configured Hister base URL are ignored.

The built in hister companion qutebrowser command receives tab, navigation, and DOM update events through the local Qt WebEngine DevTools endpoint. Extraction runs in an isolated JavaScript world, then the companion submits the rendered content directly to Hister. The access token is never injected into the inspected page.

Close all qutebrowser processes, then start qutebrowser with a loopback only debugging endpoint:

QTWEBENGINE_REMOTE_DEBUGGING=127.0.0.1:9222 qutebrowser

Run the companion in a separate terminal:

hister companion qutebrowser

The command uses server.base_url and app.access_token from the normal Hister configuration. Global --server-url, --token, and --client-timeout options can override the destination settings:

hister --server-url http://127.0.0.1:4433 
  --token 'replace-with-app-access-token' 
  companion qutebrowser

The DevTools endpoint defaults to http://127.0.0.1:9222. Use --devtools-url, --label, --initial-delay, --debounce, or --max-wait after the qutebrowser subcommand to change its behavior. Run the command with --help for every option. Newly loaded pages are submitted after one second. Later content changes use a ten second quiet period, with a maximum wait of thirty seconds for continuously changing pages.

Remote debugging provides complete access to open browser pages. The companion accepts only a localhost or loopback IP DevTools endpoint. Never expose the Qt WebEngine debugging port to a network.

Features

Automatic Page Indexing

The extension captures visible pages, including the page title, full text, HTML, and favicon, then sends them to your Hister server via its API. Pages opened in a background tab are captured when you view them.

When a page provides a <link rel="canonical"> URL, the extension uses it for indexing if it is an HTTP or HTTPS URL with exactly the same hostname as the visited page. Relative canonical URLs are resolved against the document base URL. Other domains and subdomains, invalid URLs, and URLs containing credentials are ignored. URL fragments are removed. Automatic indexing checks allow and skip rules against both the visited URL and the canonical URL.

While a page remains visible, the extension checks for changes at intervals starting at 30 seconds. The interval doubles when nothing changes, up to five minutes. Navigation within a page waits for one second of quiet before a check, and automatic checks and submissions remain at least 30 seconds apart within that page. Rapid navigation can therefore capture only the latest page state.

Changes to text, title, favicon, or page metadata trigger an update. Cosmetic markup changes alone wait for a preview check, at most once every five minutes, so animations and changing HTML attributes do not continuously trigger indexing. Each submission includes the current full HTML for extraction and previews.

When you hide a tab, the extension captures one final snapshot and stops polling. If that snapshot has changed, it is submitted after any remaining submission delay. Showing the tab again resumes checks using fresh content. Closing the tab or navigating away flushes changed content immediately to the extension’s background process, bypassing the remaining delay. Unchanged content is not submitted again. Manual indexing also submits immediately and bypasses these delays.

To capture only selected websites, add allow patterns on the Hister Rules page. A URL must match at least one allow pattern when the list is nonempty, and skip rules take precedence. The extension checks both lists before uploading pages or PDFs. Patterns that JavaScript cannot evaluate are checked by the server when the page is submitted.

Pages served with an unsuccessful HTTP status (4xx or 5xx) are not indexed automatically, so error pages such as “404 Not Found” stay out of the index. The extension reads the status of every main frame response with the webRequest API, which works in both Chromium based browsers and Firefox. Manual reindex overrides this check.

Automatic indexing can be paused at any time using the toggle in the popup.

Manual Reindex

The Index this page now button in the popup immediately submits the current page or PDF, even when automatic indexing is disabled or allow or skip rules exclude it. The indexing keyboard shortcut does the same. This is useful when you exclude a domain from automatic indexing but want to save an individual page from it.

Manual indexing saves an allow and skip rule override with the document, so it survives an index rebuild. It leaves your indexing rules and automatic indexing setting intact; later automatic submissions still respect them. Sensitive content checks and normal access restrictions still apply.

Keyboard Shortcuts

The extension defines browser level shortcuts for common indexing actions.

ActionWindows and LinuxmacOSNotes
Index current pageCtrl+ICommand+IRuns even when automatic indexing is disabled.
Disable indexing for current pageCtrl+BCommand+BAdds a skip rule for the exact current URL.
Disable indexing for current domainCtrl+YCommand+YAdds a skip rule for the current origin, including scheme and domain.

Successful shortcut actions show a ✓ badge on the extension icon for a few seconds. Failed actions show a ! badge.

Browser shortcuts can be changed in the browser extension shortcut settings. In Chrome, Chromium, and Edge, open chrome://extensions/shortcuts. In Firefox, open about:addons, choose the extension shortcut settings, then edit the Hister shortcuts.

Search Engine Result Tracking

The extension detects when you click on a search result in Google or DuckDuckGo and records the query alongside the result’s title and URL to provide that result for the same query in the future.

Clicking the extension icon opens the popup, which provides quick access to the most common controls.

ControlDescription
Automatic indexing toggleEnable or disable automatic page indexing. The setting is saved immediately.
Reindex Page buttonForce a re-submission of the current page to the server.
Authenticate with Browser Session buttonCopy session cookies from the logged in Hister web UI to authenticate the extension when no access token is used.
Settings icon (⚙)Expand an inline form to view and update the Server URL and Access Token without opening the full options page.
Show indicator for indexed pages settingShow a ✓ badge on pages that are already indexed. This is available after opening the settings view from the popup.
Submit as public documents settingStore newly indexed pages as public documents with user id 0. This appears after the extension is authenticated.

A status banner appears at the bottom of the popup after any action, showing success or error feedback. If the server rejected the last submission, a ! badge is shown on the extension icon; saving valid settings clears it.

The indexed page indicator is off by default. To enable it, click the extension icon, open the settings view with the settings icon, then turn on Show indicator for indexed pages. When enabled, the extension checks the active page against your Hister server and keeps a ✓ badge visible on pages already present in the index.

Options Page

The full options page is accessible via your browser’s extension manager (right-click the icon → Options, or navigate to the extensions settings page). It provides all configuration in one place.

To open it directly, right click on the extension icon and select “Options”, or with:

  • Chrome: chrome://extensions → find Hister → click Details → Extension options
  • Firefox: about:addons → find Hister → click the … menu → Preferences

Connection Settings

Server URL
Config option

Full URL of the Hister server, including its scheme and port.

Type string
Default http://127.0.0.1:4433/
Custom Headers
Config option

Additional HTTP headers included with every request. Use them for reverse proxy authentication or other server requirements.

Type map[string]string
Default (none)
Access Token
Config option

Optional global or personal access token used to authenticate extension requests.

Type string
Default (none)
Submit as public documents
Config option

Stores newly indexed pages as public documents with user ID zero. This setting appears after authentication.

Type bool
Default Off

Click Save Settings to apply. The extension validates the connection by calling GET /api/config before saving; an invalid URL will show an error instead.

Authentication

The extension supports access token and browser session authentication. To use a token, enter a global access token or a personal access token in the popup settings or options page, then save the settings.

When user handling is enabled, you can instead share the session cookies from the Hister web interface:

  1. Log in to the Hister web interface in the same browser.
  2. Click the Authenticate with Browser Session button in the popup or options page.

The extension copies the active session cookie, so it submits pages under your user account. You don’t need to repeat this step if you log out in the web interface.

After authentication, the popup settings and options page show Submit as public documents. Turn this on when pages indexed from the extension should be visible as public documents instead of being stored only under your user account. The extension sends this preference with document submissions, and the server stores those documents with user id 0.

Troubleshooting

The extension icon shows a ! badge

The last attempt to send page data to the server failed. Open the popup to see the error. Common causes:

  • The Hister server is not running: start it with hister listen.
  • The Server URL is wrong: confirm it matches the address printed when the server starts (default http://127.0.0.1:4433/).
  • User handling is enabled but the extension is not authenticated: configure an access token, or click Authenticate with Browser Session after logging in to the web interface.

Pages are not being indexed

  • Make sure Automatic indexing is enabled in the popup.
  • Check that the server is reachable and the URL is correct (see above).
  • If user handling is enabled, make sure you have authenticated the extension (see above).
  • Some pages (browser-internal pages like chrome://…, about:…) cannot be accessed by extensions and are silently skipped.