AI-powered content assistant for TYPO3 CKEditor - write better content with help from AI.
- CKEditor Integration: Seamless toolbar button in TYPO3's rich text editor
- Multi-Provider Support: Works with all LLM providers supported by nr-llm (OpenAI, Claude, Gemini, etc.)
- Secure Backend Proxy: API keys never exposed to frontend - all requests proxied through TYPO3 backend
- Model Override: Use
#cw:model-nameprefix to request specific models - XSS Protection: All LLM output is HTML-escaped for defense in depth
- PHP 8.2+
- TYPO3 v13 or v14
- netresearch/nr-llm extension (LLM provider abstraction)
Install via Composer:
composer require netresearch/t3-cowriterFirst, set up at least one LLM provider in the nr-llm extension:
- Navigate to Admin Tools → LLM Management
- Add a provider (e.g., OpenAI with your API key)
- Create a model configuration
- Create an LLM configuration and set it as default
Add the cowriter preset to your Page TSconfig:
RTE.default.preset = cowriter
Add to your RTE configuration YAML:
editor:
config:
importModules:
- { module: '@netresearch/t3_cowriter/cowriter', exports: ['Cowriter'] }
toolbar:
items:
- cowriter- Select text in the CKEditor
- Click the Cowriter button in the toolbar
- The selected text is sent to the LLM with a system prompt to improve it
- The improved text replaces your selection
Prefix your prompt with #cw:model-name to use a specific model:
#cw:gpt-5.2-thinking Improve this text
#cw:claude-opus-4-5 Make this more professional
[CKEditor Button] → [AIService.js] → [TYPO3 AJAX]
↓
[AjaxController]
↓
[LlmServiceManagerInterface]
↓
[nr-llm Provider]
↓
[External LLM API]
All LLM requests are proxied through the TYPO3 backend. API keys are stored encrypted and never exposed to the browser.
- DDEV for local development
- PHP 8.2+ with required extensions
ddev start
ddev composer install
ddev install-v14# Run all quality checks (lint, phpstan, rector, code style)
make ci
# Run all tests (unit, functional, integration, e2e)
make test
# Individual test suites
make test-unit # Unit tests
make test-functional # Functional tests
make test-integration # Integration tests
make test-e2e # End-to-end tests
# Code quality
make lint # PHP-CS-Fixer
make phpstan # PHPStan level 10Target: >80% code coverage
make test-coverage
open var/coverage/unit/index.html- API keys stored in nr-llm with sodium encryption
- All backend AJAX endpoints require TYPO3 authentication
- LLM output HTML-escaped to prevent XSS
- TYPO3 backend route authentication with nonce-based URL tokens
- Content Security Policy (CSP) compatible
Version 4.0 requires TYPO3 v13.4+ and PHP 8.2+. It removes the frontend-only architecture and uses the nr-llm extension for provider-agnostic LLM access. API keys are no longer stored in extension settings.
See CHANGELOG.md for migration details.
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
See CONTRIBUTING.md for contribution guidelines.
Netresearch DTT GmbH - Your TYPO3 and eCommerce experts.
