Skip to content
Grav 2.0 is officially stable. Read the announcement →
Premium / YetiSearch Pro
Premium Plugin · v2.0.1

YetiSearch Pro

YetiSearch Pro provides Grav with the fastest search engine via a powerful local search, without requiring any external services or fees. Built on the new YetiSearch PHP library, it provides lightning-fast file-backed search with fuzzy matching, chunked indexing, geospatial queries, and smart change detection.

Grav 1.7+

Everything you need. Nothing you don’t.

Over 27 distinct features and integrations, out of the box.

01
100% local file-backed search - no external services required
02
Two modal designs - Simple (lightweight typeahead) or Full (two-panel with preview)
03
Smart Indexing with fingerprint-based change detection for efficient updates
04
Built with vanilla JavaScript - no framework dependencies
05
Easy theming with CSS variables for quick customization
06
Fuzzy search with configurable typo tolerance
07
Chunked indexing for precise search results within long content
08
Multi-language support with per-language or single-index strategies
09
Real-time updates - index updates automatically on page save/delete
10
Orphan cleanup automatically removes stale documents from deleted pages
11
Keyboard shortcuts - Cmd+K / Ctrl+K to open, arrow keys to navigate, Enter to select
12
Beautiful search result highlighting with contextual snippets
13
Configurable field boosting for title, headers, content, and more
14
Faceted search support for filtering by taxonomy
15
Geospatial search for location-based queries with radius and bounding box filters
16
Analytics tracking for searches, clicks, and popular terms
17
Powerful CLI commands for indexing and querying
18
Scheduled indexing via Grav Scheduler for automated updates
19
Granular permissions - view, modify, and admin roles for team access control
20
Environment-aware configuration for dev/staging/production workflows
21
Page-level controls - exclude pages or content blocks via frontmatter or shortcode
22
Cache management CLI for monitoring, warming, and purging search cache
23
Suggestions endpoint for lightweight typeahead autocomplete
24
Extensible events for custom document shaping and non-page content indexing
25
Works with any theme - includes ready-to-use Twig partials
26
Light/Dark/System appearance modes
27
Preview panel option showing breadcrumbs, content summary, and on-page sections
Smart Indexing

Smart Indexing

YetiSearch Pro features Smart Indexing with fingerprint-based change detection. When you update content, only the changed portions are re-indexed - not the entire site. Combined with chunked indexing that splits pages into smaller segments, you get precise search results that link directly to the relevant section. This makes indexing fast and keeps your search results highly relevant.

Two Beautiful Modal Designs

Choose between two search modal designs based on your needs. Full Modal provides a two-panel design with results on the left and a live preview on the right, including pagination, filter controls, breadcrumbs, and On This Page sections - perfect for documentation sites. Simple Modal offers a lightweight typeahead design with grouped results, clean and fast, ideal for blogs and general websites.

Two Beautiful Modal Designs
Powerful CLI

Powerful CLI

Full command-line interface for development, testing, and automation. Index your entire site or specific languages with progress bars. Query with filters, sorting, fuzzy search, and pagination. Manage cache with stats, monitoring, warming, and purging. Run scheduled tasks for automated maintenance. Supports JSON output for scripting and CI/CD integration.

Powerful Admin Interface

YetiSearch Pro includes a comprehensive Admin Dashboard for managing every aspect of your search. Monitor index health with document counts, index sizes, and timestamps, then trigger a full reindex with real-time progress tracking. The built-in Search Analytics panel tracks popular queries, top clicks, zero-result searches, and average response times - helping you identify content gaps. An Index Browser lets you inspect, search, and even edit individual documents, view debug statistics, and optimize indexes directly from the admin.

Powerful Admin Interface
Smart Fuzzy Queries

Smart Fuzzy Queries

YetiSearch Pro delivers highly relevant results through a multi-layered ranking system. Configurable field boosting lets you weight titles, headers, tags, and content independently, while a re-ranking engine applies bonuses for exact matches, prefix matches, and word matches in key fields. Enable fuzzy search with tunable typo tolerance so users find what they need even with misspellings, and "Did you mean" suggestions automatically guide users toward better queries when results come up empty.

Frequently Asked Questions

The most commonly asked questions about YetiSearch Pro

How does YetiSearch Pro compare to Algolia Pro?

Both are excellent search solutions with different approaches:

  • Algolia Pro uses Algolia's cloud infrastructure - Fast, AI-powered, but requires an Algolia account and has usage-based pricing
  • YetiSearch Pro runs entirely locally on your server - Incredible fast due to network latency, no external services, no API costs, no usage limits, and your data never leaves your infrastructure

Choose Algolia Pro for massive scale and AI features. Choose YetiSearch Pro for privacy, simplicity, and zero recurring costs.

Do I need any external services?

No! YetiSearch Pro is completely self-contained. The search index is stored as files in your user/data/yetisearch directory. There are no API keys to configure, no external services to maintain, and no usage limits to worry about.

What are the server requirements?

YetiSearch Pro has minimal server requirements:

  • PHP 7.4 or higher (PHP 8.0+ recommended)
  • SQLite 3.24.0 or higher (3.35.0+ recommended for best performance)
  • SQLite FTS5 extension enabled
  • PHP extensions: pdo, sqlite3, mbstring, json
  • Standard Grav 1.7+ hosting environment

Check your SQLite version with: php -r "echo SQLite3::version()['versionString'];"

Can I use YetiSearch Pro on multiple sites?

Per the Grav Premium License, you need to have a license for each use.

How do I trigger search updates?

YetiSearch Pro offers multiple ways to keep your index current:

  • Real-time - Automatically re-indexes pages when saved or deleted in the Admin
  • CLI - Run bin/plugin yetisearch index manually or in scripts
  • Scheduler - Configure automated indexing via Grav's built-in scheduler
What content can YetiSearch Pro index?

By default, YetiSearch Pro indexes Grav pages including title, content, excerpt, URL, taxonomy tags, and categories. Using the plugin's events, you can:

  • Add custom page header fields
  • Index FlexObjects data
  • Include any custom content sources
How does geospatial search work?

YetiSearch Pro supports location-based searching for content with geographic data. Configure geo_fields in your index to enable:

  • Radius search - Find content within a specified distance from a point
  • Bounding box - Search within rectangular geographic regions
  • Distance sorting - Order results by proximity to a location

Perfect for store locators, event listings, real estate sites, and any content with location data.

Can I extend YetiSearch Pro for custom content?

Absolutely! YetiSearch Pro fires several events for extensibility:

  • onYetisearchCollectObjects - Add non-page documents (FlexObjects, custom data) to the index
  • onYetisearchBuildDocument - Shape fields per document (add custom frontmatter, facets, geo data)
  • onYetisearchProBeforeSearch - Modify filters or options before queries execute
Does it work with the Helios theme?

Yes! YetiSearch Pro and the Helios documentation theme are designed to work together beautifully. Helios includes built-in YetiSearch Pro integration with the Cmd+K keyboard shortcut pre-configured.

$75 Buy Now

YetiSearch Pro Changelog

v2.0.1

3 months ago

    • Custom environment names are now supported when set explicitly via the Environment Mode field, which is now a free-form text input. Names like localhost, staging-eu, or abc.wydn.com are accepted and used as-is in the index database prefix. Auto mode keeps the original production / staging / development behavior so existing index databases on default installs are not renamed by the upgrade.
    • Fixed --env switch being ignored by the indexer CLI when a GRAV_ENVIRONMENT shell variable was already exported (common on MAMP and similar local setups). The plugin now prefers Grav's resolved system.environment over the raw shell variable, so bin/plugin yetisearch-pro index --env=<name> correctly picks up the per-environment config and writes to the right database.

v2.0.0

4 months ago

    • Added Grav 2.0, API, and Admin 2.0 support

v1.1.2

5 months ago

    • SQLite backward compatibility: The RETURNING clause (requires SQLite 3.35.0+) is now optional. On older SQLite versions (3.24.0+), a fallback SELECT query is used to retrieve doc_id after upsert operations. This lowers the minimum SQLite requirement from 3.35.0 to 3.24.0 while preserving optimal performance on newer versions.

v1.1.1

5 months ago

    • Fixed admin reindex failing when other plugins access $grav['admin']: The admin reindex handler removed the admin service from the DI container to avoid interference, but this caused plugins like revisions-pro to crash with "Identifier 'admin' is not defined" when Pages::enablePages() fired onPageProcessed events during page tree rebuilds, resulting in 0 documents indexed.

v1.1.0

5 months ago

    • Added "Flush & Reindex" button to admin dashboard: New action button between "Reindex All" and "Clear Index" that deletes all existing indexes and rebuilds them from scratch, with a confirmation dialog to prevent accidental use.
    • Fixed single-strategy index flushing in multilang sites: When using strategy: single with multiple languages, each language iteration was dropping and recreating the same physical index, causing only the last language's content to survive a --flush reindex. Flush now runs only once per physical index.
    • Fixed orphan detection deleting cross-language documents: With strategy: single, orphan detection ran per-language iteration, incorrectly treating documents from other languages as orphans and deleting them. Orphan detection now accumulates across all language iterations and runs once at the end.
    • Fixed smart indexing snapshot for single-strategy multilang: The snapshot used for fingerprint comparison was being overwritten by each language iteration, breaking skip-unchanged detection for all but the last language. The snapshot is now loaded once and shared across iterations.
    • Fixed admin dashboard showing inflated index count: With strategy: single and 12 languages, the dashboard reported "12 TOTAL INDEXES" and "12 ACTIVE INDEXES" even though there was only 1 physical index. Index counting now deduplicates by resolved index name.
    • Fixed language filter not working in admin Index & Search: The language dropdown in the admin browser/search had no effect for strategy: single indexes because the selected language was discarded during index resolution. The language is now preserved and passed as a query filter.
    • Fixed admin browser catalog fetching duplicate data: The getBrowserCatalog endpoint fetched index info, breakdown, and stats 12 times for the same physical index in a multilang single-strategy setup. It now fetches once per physical index.
    • Fixed hyphenated language codes breaking per_language strategy: Language codes containing hyphens (e.g. ca-valencia, zh-cn, pt-br) failed SQLite table name validation when used in index names. Hyphens are now sanitized to underscores in resolved index names.
    • Fixed Index & Search table layout: Columns were squished to the right when document IDs or routes were long. Table now uses fixed column widths so all columns remain visible.

v1.0.5

5 months ago

    • More safety checks on the branding toggle

v1.0.4

6 months ago

    • Index optimizations for even better performance
    • Added minimum requirements for PHP to 7.4 and SQlite to 3.35.0
    • Fixed an issue when the environment (prod/dev) was being pulled from json config instead of Grav config
    • Fix for redirects breaking indexed pages

v1.0.3

6 months ago

    • Updated to YetiSearch v2.3.0 which brings solid performance improvements and several minor bug and security fixes.

v1.0.2

6 months ago

    • Fixed CSRF check blocking all admin POST requests: The CSRF nonce validation added for security hardening was not scoped to yetisearch-pro routes, causing admin login and other admin POST actions to fail with "Invalid security token" errors.
    • Fixed php://input stream consumed by CSRF check: The CSRF validation read the raw request body to find the nonce, but php://input can only be read once in PHP. This caused all subsequent JSON POST handlers (browser query, reindex, config save, etc.) to receive empty payloads and fail.
    • Fixed hyphenated search terms causing SQL errors: Search terms containing hyphens (e.g. doc-button) were passed unquoted to FTS5 where the hyphen was interpreted as the NOT operator, causing "no such column" SQL errors. Hyphenated tokens are now quoted to be treated as literal text.

v1.0.1

7 months ago

    • Real-time index updates now properly remove old content: Fixed critical bug where editing a page in admin would update the index for new text but old/removed text remained searchable. The FTS vocabulary was not being properly synchronized for external content tables.
    • Orphaned chunks now cleaned up on page update: When a page is edited and results in fewer chunks than before (e.g., headings removed), the old chunks are now properly deleted from the index before adding new ones.
    • Search results now correctly match only relevant chunks: Fixed bug where searching for a unique term would return all chunks from a page instead of just the chunk containing the term. Chunks were incorrectly inheriting the parent page's full content during indexing.
    • FTS rebuild after real-time updates: Added automatic FTS rebuild after upsertPage() to ensure the search vocabulary stays in sync with document content for external content FTS tables.