Found this useful? Install from Packagist · Star the repo on GitHub.
Symfony form type for rich text using Tiptap (ProseMirror). Stores HTML in the underlying textarea — comparable to embedding CKEditor-style WYSIWYG fields. Assets are built with Vite (IIFE bundle in Resources/public/).
FrankenPHP demos: runtime is selected with FRANKENPHP_MODE (worker default, or classic for per-request PHP / hot-reload). See docs/DEMO-FRANKENPHP.md.
This bundle is FrankenPHP worker mode friendly.
TiptapEditorTypeextendingTextareaType— value is HTML string.- Optional formatting toolbar (bold, italic, bullet/ordered lists, undo/redo);
notionvariant adds bubble/floating menus (link, image, embed iframe). - Twig themes aligned with common Symfony layouts (Bootstrap 3–5, Foundation, Tailwind 2, table layout).
nowo_tiptap_editor_asset_path()/nowo_tiptap_editor_asset_package()Twig helpers for the Symfony asset packagenowo_tiptap_editor.- pnpm + Vite frontend; Vitest on the bundle logger and the widget lifecycle (custom element).
- Form submit: before POST, the bundle syncs ProseMirror HTML into each hidden Symfony textarea (capture-phase
submit); see Usage. - Dockerfile + Makefile workflow matching other Nowo bundles.
- Demos: Symfony 7 & 8 under
demo/(FrankenPHP).
composer require nowo-tech/tiptap-editor-bundle:^1.0
php bin/console assets:install publicIn Twig layout:
<script src="{{ asset(nowo_tiptap_editor_asset_path('tiptap-editor.js'), nowo_tiptap_editor_asset_package()) }}"></script>use Nowo\TiptapEditorBundle\Form\TiptapEditorType;
$builder->add('article', TiptapEditorType::class, ['label' => 'Article']);Editor variants in the Symfony demo app (profiles from config/packages/nowo_tiptap_editor.yaml: full reference, simple, notion, agent, headless). Start a demo with make -C demo up-symfony8 or make -C demo up-symfony7, then open the Variants route in the browser.
Requirements: Docker (recommended), or PHP 8.2+ with Composer + pnpm locally.
make up # composer + pnpm install in container
make assets # vite build → src/Resources/public/tiptap-editor.js
make test # PHPUnit
make test-ts # Vitest + coverage (logger)
make qa # cs-check + phpunit
make demo-smoke # REQ-TEST-011: FrankenPHP demo HTTP 200Demos:
make -C demo up-symfony8
# http://localhost:8011- Installation
- Configuration
- Usage
- Contributing
- Code of Conduct
- Changelog
- Upgrading
- Release
- Security
- Engram
- Spec-driven development
- GitHub Spec Kit
| Layer | Target / notes |
|---|---|
| PHP | 100% line coverage on bundle src/ (PHPUnit); confirm with composer test-coverage or make test-coverage. |
| TypeScript | Vitest thresholds on shared utilities (see vitest.config.ts); confirm with pnpm run test:coverage or make test-ts. |
CI runs PHPUnit (matrix), PHPStan, PHP-CS-Fixer, and Vitest coverage on pushes and pull requests.
MIT — see LICENSE.

