Tags

Tags give the ability to mark specific points in history as being important
  • 1.0.0-beta4

    1.0.0-beta4 — Drupal 12 compatibility
    
    A compatibility release. No new features, no configuration or schema
    changes, no update hooks — a drop-in upgrade from 1.0.0-beta3.
    
    The module declared Drupal 12 support but had never been run against a
    Drupal 12 codebase, and was wrong in two hard ways:
    
    - The status report fataled. hook_requirements() used the REQUIREMENT_*
      constants, which Drupal 12 removed, so /admin/reports/status died with
      "Undefined constant" on any Drupal 12 site with Pagefind enabled.
    - The module could not be installed. composer.json pinned
      guzzlehttp/guzzle ^7.0 and symfony/process ^6 || ^7 while Drupal 12
      ships Guzzle 8 and Symfony 8, so "composer require drupal/pagefind"
      refused to resolve.
    
    Both are fixed. Requirements reporting now uses
    hook_runtime_requirements() with the procedural hook behind
    behind a small version-bridging service; and a set of Drupal 12 test-suite
    changes landed (mandatory #[RunTestsInSeparateProcesses], the removed
    'sequences' table, the shortcut module leaving core, and PHPUnit 12's
    mock-without-expectation notices).
    
    Drupal.org CI was also never running its next-major jobs: OPT_IN_TEST_NEXT_MAJOR
    only makes them exist, and they sat on when:manual. They now run on push,
    which is what caught the last two defects in this release.
    
    Verified: Drupal 12.0-dev / PHP 8.5 and Drupal 11.4.4 / PHP 8.4 — Kernel
    156 tests / 1740 assertions, Functional 39, PHPStan level 8 and PHPCS
    clean on both; frontend 54/54; drupal.org pipeline 941193 green across all
    14 jobs, verified per job.
    
    Still supports Drupal 10.3, 11, and 12 on PHP 8.1+.
  • 1.0.0-beta3

    Pagefind Search 1.0.0-beta3
    
    An internal-architecture release: no new features, no configuration or
    schema changes, and no visible behavior changes beyond the fixes listed
    below. Existing sites upgrade with no update hooks to run.
    
    Refactoring (why this release exists)
    - The reindex sequence (clear staging, enumerate, stage, build, clear the
      synonyms flag) now has a single owner, the pagefind.reindexer service.
      The dashboard batch, Setup Wizard, Drush commands, cron sweep and queue
      worker are thin adapters over it.
    - The React display app is split into an exported, testable component
      with an injectable search engine; 15 component regression tests now pin
      the accessibility behaviors that previously shipped regressions
      (keyboard shortcut, rapid load-more, focus restoration, live-region
      precedence).
    - The pagefind_display string grammars (filters, sorts, columns) are
      owned by one value object on the PHP side; the browser now receives
      pre-parsed filter config (with a fallback for cached pages).
    - The search page and search block build their identical payload through
      one service; the '/search' default now exists in exactly one place.
    - The module's views ship as importable config in config/optional.
    - Display path and machine-name rules are shared by the Setup Wizard and
      the display form via one validator.
    
    Fixes
    - A display can no longer be created at the configured search page path
      through the display form (the wizard already rejected this).
    - The dashboard reindex no longer stages unpublished non-translatable
      entities only to have them access-filtered and deleted again.
    - The cron synonym re-stage sweep honors the configured batch size
      instead of a hardcoded chunk of 50.
    - Multisite URL validation now sees the same normalization that saving
      applies.
    
    Verified on 18cf66e: drupal.org pipeline 923533 green across all jobs,
    checked per job (composer, composer-lint, phpcs, phpstan, stylelint,
    eslint, cspell, phpunit). Locally: Kernel 156 tests / 1739 assertions,
    Functional 39 tests / 430 assertions, PHPStan level 8 clean, PHPCS clean,
    vitest 54 tests. Bundle verified byte-identical to a fresh build from
    pagefind-react-ui 1.0.0-beta3.
    
    Known limitations (unchanged from 1.0.0-beta1)
    - Accessibility conformance remains a build target, not an audited claim;
      no runtime assistive-technology pass has been performed.
    - Promoted results and multisite collections are React-display only.
  • 1.0.0-beta2

    1.0.0-beta2
    
    Adds the Drush 13 fix: pagefind:index is invokable again. All three
    Drush commands now register through #[CLI\Command] attributes instead of
    docblock annotations, so Drush's legacy parser is out of the path.
    
    Also carried since beta1: configurable index_timeout (default 3600,
    0 = unlimited) feeding both the binary run and the lock TTL, phpcs and
    eslint compliance, and a guard against a nullable EntityTypeInterface.
  • 1.0.0-beta1

    Pagefind Search 1.0.0-beta1
    
    Feature-complete for 1.0.0. Beta because the accessibility work has not yet
    been verified at runtime and the Setup Wizard has not yet been exercised by
    a human outside the test suite.
    
    New in this release
    - Setup Wizard: a guided path from install to working search at
      /admin/config/search/pagefind/setup. The dashboard and help text now
      funnel first-run users into it.
    - Multisite collections: merge another site's remote Pagefind index into
      React search displays.
    - Synonyms: content is automatically re-staged via cron when synonyms
      change, with a dashboard call-to-action.
    - Promoted results (best bets) on React search displays, rendered as a
      pinned featured card above organic results.
    - Staging performance: synonym groups are memoized and the entity cache is
      reset per Drush chunk.
    
    Hardening
    - WCAG 2.1 AA remediation across the React displays, CSS, legacy template
      and admin forms. See ACCESSIBILITY.md for scope and limits.
    - Operational truthfulness: honest Drush exit codes, hook_requirements
      health checks, real logging on failure paths.
    - Cross-process index build lock, build timeout, and index-removal
      propagation.
    - 17 new documentation files for site builders and developers.
    
    Known limitations
    - Accessibility conformance is a build target, not an audited claim. No
      browser, screen-reader or automated axe pass has been run. Do not treat
      ACCESSIBILITY.md as a VPAT or Section 508 conformance statement.
    - The legacy web-component search surface does not support promoted
      results or multisite collections; both are React-display only.
    - The Setup Wizard is new in this release and has limited real-world use.
    
    Verified on 8b6ce38: drupal.org pipeline 904898 green across all jobs
    (composer, composer-lint, phpcs, phpstan, stylelint, eslint, cspell,
    phpunit). Locally: Kernel 128 tests / 1450 assertions, Functional 39 tests
    / 429 assertions, PHPStan clean, PHPCS clean. Bundle verified rebuilt
    byte-identical from pagefind-react-ui 1.0.0-beta1 (af317fc).
  • 1.0.0-alpha2

    Pagefind Search 1.0.0-alpha2
    
    Bugfix release: settings now save correctly on Drupal cores without
    (batch size, ranking weights, booleans) are cast to their config-schema
    primitive types on save.
    
    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
  • 1.0.0-alpha1

    Pagefind Search 1.0.0-alpha1
    
    First alpha release: client-side, WASM-powered static search for Drupal.
    Drupal 10.3/11/12, PHP 8.1+. PHPCS/PHPStan-clean, security-hardened
    binary handling, OOP #[Hook] implementation.
    
    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>