PHPackages                             lochmueller/index - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Search &amp; Filtering](/categories/search)
4. /
5. lochmueller/index

ActiveTypo3-cms-extension[Search &amp; Filtering](/categories/search)

lochmueller/index
=================

Smart and flexible async indexing of pages and documents for search engines, AI providers, and other external systems.

2.2.0(2mo ago)111.3k↑635.7%31GPL-2.0-or-laterPHPPHP ^8.3CI passing

Since Aug 13Pushed 1mo agoCompare

[ Source](https://github.com/lochmueller/index)[ Packagist](https://packagist.org/packages/lochmueller/index)[ Fund](https://paypal.me/lochmueller)[ GitHub Sponsors](https://github.com/lochmueller)[ RSS](/packages/lochmueller-index/feed)WikiDiscussions main Synced 2d ago

READMEChangelog (1)Dependencies (48)Versions (19)Used By (1)

EXT:index
=========

[](#extindex)

EXT:index is a TYPO3 indexing framework to handle the content generation of a TYPO3 website related to different index configurations. This could be used for search engine fill-up processes or other content engines that need the generated content of TYPO3 pages and files (AI provider). To speed up the indexing, the TYPO3 internal message bus is used.

You can use the PSR-14 events to get the index information or the webhook functions of the core to move the indexed information to external services. Please do not use the internal messages, because they are handled internally in the extension.

This extension was funded by the [TYPO3 Association](https://typo3.org): [community ideas I](https://typo3.org/article/members-have-selected-five-ideas-to-be-funded-in-quarter-3-2025) / [community idea II](https://talk.typo3.org/t/ext-seal-ecosystem-expansion-advanced-search-ai-vector-integration-tim-lochmuller/6594) &amp; [first blogpost](https://typo3.org/article/typo3-meets-seal-a-breath-of-fresh-air-for-search) / [second blogpost](https://news.typo3.com/article/extseal-takes-the-next-step-advanced-search-geo-features-ai-vector-integration)

Installation &amp; Configuration
--------------------------------

[](#installation--configuration)

1. Run `composer require lochmueller/index`
2. Create at least two scheduler tasks and take care that the scheduler is executed:
    - `index:queue` (example: every two days at midnight) fills up the message queue with the indexed pages via full index
    - `messenger:consume index` (based on the [documentation](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/MessageBus/Index.html#message-bus-consume-command)) to handle the index processes of the queue
3. Create index configurations on pages (example: on the root page of your site or subpages)
4. Use the extension that is based on EXT:index and have fun

Feel free to create an [issue](https://github.com/lochmueller/index/issues) if you have some more ideas or found a bug.

### Configuration

[](#configuration)

The traversing configuration of the database and frontend indexing is configured via JSON. This is an example configuration for content indexing on the pages (database indexing online) and the URL build process for news. Only the first valid (`limitToPages`) extender is executed for every page.

Possible types are:

- news (Lochmueller\\Index\\Traversing\\Extender\\News)
- address (Lochmueller\\Index\\Traversing\\Extender\\Address)
- calendarize (Lochmueller\\Index\\Traversing\\Extender\\Calendarize)

```
{
  "extender": [
    {
      "type": "news",
      "limitToPages": [
        13,
        392
      ],
      "recordStorages": [
        12,
        24
      ],
      "dropOriginalUri": true
    }
  ]
}
```

### Content processing

[](#content-processing)

Before the generated HTML is handed over to the indexing process, it can be piped through a chain of content processors. In each index configuration record you can activate the desired processors via checkboxes; the list is built dynamically from all services that implement `Lochmueller\Index\ContentProcessing\ContentProcessorInterface`(tag `index.content_processor`).

Shipped processors:

- *TYPO3SEARCH markers* (`Typo3SearchMakerContentProcessor`) - Respects the classic `` / `` markers to include/exclude parts of the HTML.
- *Event-based* (`EventContentProcessor`) - Dispatches the `Lochmueller\Index\Event\ModifyContentEvent` so that listeners can freely modify the content (e.g. strip navigation, inject metadata).

To provide your own processor, implement the interface and register a `getLabel()` method - autoconfiguration and the TCA `itemsProcFunc` pick it up automatically.

### Index mechanisms

[](#index-mechanisms)

Here are some information about the different index mechanisms and the advantages or disadvantages. You can use different index mechanism on different sub pages.

- *Cache*
    - Easy in the configuration.
    - No active full index process.
    - Indexing is done in the regular cache fill process.
    - No hard impact on the page performance.
- *Database*
    - Regular full indexing.
    - Very fast build process of the page content with separate PHP integrations.
    - Custom content elements need separate class integrations.
    - Creates only a light version of the HTML markup.
    - Support EXT:bootstrap\_package, EXT:calendarize, EXT:tt\_address, EXT:container, EXT:content\_blocks
- *External*
    - Not directly selectable in the backend.
    - Used for content that is sent via webhook to the EXT:reactions endpoint.
    - This content uses the same path in the index workflow (internal message + event).
- *File*
    - Not directly selectable in the backend.
    - Is used in the regular index process to select additional files.
- *Frontend*
    - Uses an internal subrequest and executes the regular frontend middleware stack.
    - The TYPO3 system and all extensions have to use the middleware in the right way.
    - Faster than "real frontend requests".
    - Creates the real HTML markup of pages.
- *Http*
    - If there are problems with "Frontend", you can select Http.
    - This creates real frontend requests that are sent via network.
    - Please keep password protection in mind.
    - Very slow and significantly higher load on the server.
    - Creates the real HTML markup of pages.
- *None*
    - Use it to exclude the current page &amp; subpages in the traversing process of the parent configuration.

Developer information
---------------------

[](#developer-information)

The extension provides a framework for easy indexing pages and files. Use this documentation to get the right information for your extension.

### Events

[](#events)

There are four public main events that you can use in your extension. EXT:index takes care of the index processing and the async handling of the queue. So you can directly consume the event, add your business logic and run more or less complex processes in the event listener. Please *DO NOT* use the internal messages that are part of the internal process.

- **StartIndexProcessEvent** - Start event incl. meta information like technology, type
- **IndexPageEvent** - Index event for pages incl. title, content and meta information of one page
- **IndexFileEvent** - Index event for files incl. title, content and meta information of one file
- **FinishIndexProcessEvent** - End event incl. meta information like technology, type

*Please keep in mind, that the messages are pushed directly, one after another, into the message bus. If there are any reasons that the FIFO (first in, first out) is not consistent, we cannot guarantee that the events (especially Start and Finish) are in the right order*

There are additional events to customize the index process:

- **ContentType\\HandleContentTypeEvent** - Customize or add the rendering of content for database indexing.
- **Extractor\\CustomFileExtraction** - Event based file extraction (if not flexible enough, use the DI tag)
- **ModifyContentEvent** - Dispatched by the `EventContentProcessor` to modify the HTML content before indexing.

### Symfony DI Tags

[](#symfony-di-tags)

There are several Symfony DI tags, that create iterables for internal functions. You can use this to add your own integrations. These are very "internal" options to extend the index process:

- **index.content\_type** - Rendering definitions for database indexing.
- **index.file\_extractor** - Extract content from files in the index process.
- **index.extender** - Extend the URI queue in the Page traversing.
- **index.content\_processor** - Modify the HTML content before indexing (selectable per index configuration).

### Webhooks / Reactions

[](#webhooks--reactions)

All four events are available as webhooks. You can use the webhook functions of the core to move the indexed information to external services. It is also possible to add external resources to the internal index process. There are two reactions that create indexed pages and files. Feel free to connect instances ;)

### File extraction

[](#file-extraction)

The file extraction is based on different third party packages. Please take care to install the packages, so that the process to fetch content out of files is working. Check out the composer.json `suggest` section.

Extension based on EXT:index
----------------------------

[](#extension-based-on-extindex)

- [EXT:seal](https://github.com/lochmueller/seal) - Search Engine Abstraction Layer
- (more to come - please create a PR to extend this list)

###  Health Score

52

—

FairBetter than 96% of packages

Maintenance89

Actively maintained with recent releases

Popularity29

Limited adoption so far

Community17

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 96.2% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~14 days

Recently: every ~20 days

Total

18

Last Release

74d ago

Major Versions

0.4.1 → 1.0.02025-11-13

1.1.1 → 2.0.02026-01-29

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/3907126?v=4)[Tim](/maintainers/lochmueller)[@lochmueller](https://github.com/lochmueller)

---

Top Contributors

[![lochmueller](https://avatars.githubusercontent.com/u/3907126?v=4)](https://github.com/lochmueller "lochmueller (100 commits)")[![DavidBruchmann](https://avatars.githubusercontent.com/u/999146?v=4)](https://github.com/DavidBruchmann "DavidBruchmann (2 commits)")[![danilovq](https://avatars.githubusercontent.com/u/7607026?v=4)](https://github.com/danilovq "danilovq (1 commits)")[![ischmittis](https://avatars.githubusercontent.com/u/904789?v=4)](https://github.com/ischmittis "ischmittis (1 commits)")

---

Tags

indextypo3typo3-extensionsearchindextypo3indexingtraversing

###  Code Quality

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/lochmueller-index/health.svg)

```
[![Health](https://phpackages.com/badges/lochmueller-index/health.svg)](https://phpackages.com/packages/lochmueller-index)
```

###  Alternatives

[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

103519.9k53](/packages/friendsoftypo3-content-blocks)[pagemachine/typo3-formlog

Form log for TYPO3

23238.6k8](/packages/pagemachine-typo3-formlog)[netresearch/rte-ckeditor-image

Image support in CKEditor for the TYPO3 ecosystem - by Netresearch

611.1M8](/packages/netresearch-rte-ckeditor-image)[apache-solr-for-typo3/solr

Apache Solr for TYPO3 - Apache Solr for TYPO3 is the enterprise search server you were looking for with special features such as Faceted Search or Synonym Support and incredibly fast response times of results within milliseconds.

1493.2M48](/packages/apache-solr-for-typo3-solr)[wazum/sluggi

TYPO3 extension for URL slug management with inline editing, auto-sync, locking, access control, and redirects

40529.5k](/packages/wazum-sluggi)[typo3/cms-adminpanel

TYPO3 CMS Admin Panel - The Admin Panel displays information about your site in the frontend and contains a range of metrics including debug and caching information.

115.7M66](/packages/typo3-cms-adminpanel)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
