PHPackages                             topwire/topwire - 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. [Framework](/categories/framework)
4. /
5. topwire/topwire

ActiveTypo3-cms-extension[Framework](/categories/framework)

topwire/topwire
===============

Turbo for TYPO3

v1.1.1(11mo ago)5469.4k—4.9%15[12 issues](https://github.com/topwire/topwire/issues)[2 PRs](https://github.com/topwire/topwire/pulls)GPL-2.0-or-laterPHPPHP &gt;=8.2CI passing

Since May 30Pushed 5mo ago7 watchersCompare

[ Source](https://github.com/topwire/topwire)[ Packagist](https://packagist.org/packages/topwire/topwire)[ Docs](https://topwire.dev)[ Fund](https://www.paypal.me/helhum/19.99)[ GitHub Sponsors](https://github.com/helhum)[ RSS](/packages/topwire-topwire/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (2)Dependencies (12)Versions (5)Used By (0)

Installation
------------

[](#installation)

```
composer require topwire/topwire
```

Configuration
-------------

[](#configuration)

Add the following TypoScript to your site:

```
page.includeJSLibs.topwire = EXT:topwire/Resources/Public/JavaScript/topwire.js
page.includeJSLibs.topwire {
    type = module
    async = 1
    defer = 1
    disableCompression = 1
    excludeFromConcatenation = 1
}

```

Alternatively you can import this module in your frontend build chain.

Examples
--------

[](#examples)

### Generating links for partial rendering

[](#generating-links-for-partial-rendering)

#### `lib.typoscript`

[](#libtyposcript)

```
lib.tsExample = TEXT
lib.tsExample {
    typolink {
        parameter.data = page:uid
        topwire {
            type = plugin
            extensionName = TopwireExamples
            pluginName = Json
        }
        returnLast = url
    }
    htmlSpecialChars = 1
}

```

#### `Fluid.html`

[](#fluidhtml)

```

        Link that renders plugin action

    Show rendered TypoScript path

```

### Wrap parts of a Fluid template of an Extbase plugin in a Turbo Frame

[](#wrap-parts-of-a-fluid-template-of-an-extbase-plugin-in-a-turbo-frame)

#### `Default.html`

[](#defaulthtml)

```

    Default action
    Show my action result

```

#### `My.html`

[](#myhtml)

```

    My action
    Show default action result

```

### Render a plugin

[](#render-a-plugin)

```

```

### Render a specific (non default) action of a plugin

[](#render-a-specific-non-default-action-of-a-plugin)

```

```

### Render a specific (non default) action of a plugin and limit output to a given Fluid section

[](#render-a-specific-non-default-action-of-a-plugin-and-limit-output-to-a-given-fluid-section)

```

```

### Render a plugin, wrapped in a Turbo Frame

[](#render-a-plugin-wrapped-in-a-turbo-frame)

```

```

### Render a plugin asynchronously, wrapped in a Turbo Frame

[](#render-a-plugin-asynchronously-wrapped-in-a-turbo-frame)

```

        Loading...

```

### Render content element, wrapped in a Turbo Frame

[](#render-content-element-wrapped-in-a-turbo-frame)

```

```

### Render content element asynchronously, wrapped in a Turbo Frame

[](#render-content-element-asynchronously-wrapped-in-a-turbo-frame)

```

        Loading...

```

### Render any TypoScript, wrapped in a Turbo Frame

[](#render-any-typoscript-wrapped-in-a-turbo-frame)

```

```

### Render any TypoScript asynchronously, wrapped in a Turbo Frame

[](#render-any-typoscript-asynchronously-wrapped-in-a-turbo-frame)

```

        Loading...

```

Concepts
--------

[](#concepts)

### Topwire Context

[](#topwire-context)

The topwire context is a piece of information, that defines, which content element should be rendered standalone, without anything else that is available on the page. Most of the time it will be a content element containing an Extbase plugin.

The context requires the following technical information:

1. The record table name (e.g. `tt_content`)
2. The record uid
3. The rendering path, as defined in TypoScript (e.g. `tt_content.form_formframework.20`)
4. The page id

While the 90% use case is to define a rendering context for content elements and/ or plugins, it is also possible to define a rendering context for other tables as well. The only requirement is, that the record with the uid exists in the table and that the TypoScript defined in the path is also available.

TODO
----

[](#todo)

- Maybe optionally allow wrapping server response in turbo frame to not require changing the plugin itself
- Implement other features of frames or make it possible to use arbitrary ones
- Register content object also as service for TYPO3 12 compatibility
- Add a way to address frames with the dynamically generated ids
- Implement URI generation for addressing plugin rendering via URLs
- Re-evaluate responsibilities of Frame and TopwireContext (Frame is currently used to unserialize TopwireContext for URLs, Frame also used to represent a frame during rendering. Introduce a third entity?)
- Evaluate routing enhancers for nice URLs and a clean way to add page arguments
- Context VHs should propagate the context to their children, maybe get rid of the argument then altogether. With that it would be possible to get rid of the additional withContext VH and to easily render multiple frames within one context without duplicating the code for that.
- Evaluate more use cases for rendering a plugin inside a plugin template and adapt view helpers accordingly
- Evaluate and most likely tweak usages of the view helpers in standalone view context
- Implement turbo streams helpers
- Performance evaluations and optimisations
- Evaluate static file caching options
- Implement tagging an Extbase controller via DI to inject a view resolver, that returns the TopwireTemplateView. Allow defining the resulting view class, to be able to override the place where partials for frame rendering are located
- Triage scroll restoration issues with anchors
- Implement cleaner solution for propagating context to PageLinkBuilder and add that to all context view helpers, not only plugin. Also implement that for UriBuilder to be able to create Topwire links easily in Extbase Controller actions
- Allow updating `` tag in a frame response with `data-turbo-action="advance"`.
- Allow updating meta tags in a frame response with `data-turbo-action="advance"`, eg. `` or canonical url.
- Fix `action` argument of context view helper, when the action is uncached

###  Health Score

47

—

FairBetter than 94% of packages

Maintenance58

Moderate activity, may be stable

Popularity45

Moderate usage in the ecosystem

Community20

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 91.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 ~1 days

Total

4

Last Release

350d ago

PHP version history (2 changes)1.0.x-devPHP &gt;=8.1

v1.1.0PHP &gt;=8.2

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/904370?v=4)[Helmut Hummel](/maintainers/helhum)[@helhum](https://github.com/helhum)

---

Top Contributors

[![helhum](https://avatars.githubusercontent.com/u/904370?v=4)](https://github.com/helhum "helhum (103 commits)")[![sascha-egerer](https://avatars.githubusercontent.com/u/1651414?v=4)](https://github.com/sascha-egerer "sascha-egerer (5 commits)")[![mbrodala](https://avatars.githubusercontent.com/u/5037116?v=4)](https://github.com/mbrodala "mbrodala (2 commits)")[![ondrejgrosko](https://avatars.githubusercontent.com/u/142219522?v=4)](https://github.com/ondrejgrosko "ondrejgrosko (1 commits)")[![s2b](https://avatars.githubusercontent.com/u/458524?v=4)](https://github.com/s2b "s2b (1 commits)")[![thommyhh](https://avatars.githubusercontent.com/u/13288620?v=4)](https://github.com/thommyhh "thommyhh (1 commits)")

###  Code Quality

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

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

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

###  Alternatives

[aimeos/aimeos-typo3

Professional, full-featured and high performance TYPO3 e-commerce extension for online shops and complex B2B projects

1.5k91.2k4](/packages/aimeos-aimeos-typo3)[typo3/cms-frontend

TYPO3 CMS Frontend

2212.0M483](/packages/typo3-cms-frontend)[typo3/cms-backend

TYPO3 CMS backend

1912.0M582](/packages/typo3-cms-backend)[aimeos/aimeos_dist

Aimeos TYPO3 distribution for web shops, portals and market places

1.2k3.1k](/packages/aimeos-aimeos-dist)[typo3/cms-extbase

TYPO3 CMS Extbase - Extension framework to create TYPO3 frontend plugins and TYPO3 backend modules.

1812.2M534](/packages/typo3-cms-extbase)[typo3/cms-extensionmanager

TYPO3 CMS Extension Manager - Backend module (System &gt; Extensions) for viewing and managing extensions.

1810.2M144](/packages/typo3-cms-extensionmanager)

PHPackages © 2026

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