nowo-tech / wiki-bundle
Symfony bundle for versionable team wiki pages (Outline/Notion-style) with Tiptap rich text
Requires
- php: >=8.2 <8.6
- ext-iconv: *
- ext-zip: *
- doctrine/doctrine-bundle: ^2.10 || ^3.0
- doctrine/orm: ^3.7
- league/commonmark: ^2.7
- league/html-to-markdown: ^5.1
- nowo-tech/form-kit-bundle: ^2.0
- nowo-tech/tiptap-editor-bundle: ^1.6
- nowo-tech/ui-kit-bundle: ^2.26
- psr/log: ^1.1 || ^2.0 || ^3.0
- symfony/config: ^7.4 || ^8.0
- symfony/console: ^7.4 || ^8.0
- symfony/dependency-injection: ^7.4 || ^8.0
- symfony/form: ^7.4 || ^8.0
- symfony/framework-bundle: ^7.4 || ^8.0
- symfony/html-sanitizer: ^7.4 || ^8.0
- symfony/http-kernel: ^7.4 || ^8.0
- symfony/routing: ^7.4 || ^8.0
- symfony/security-bundle: ^7.4 || ^8.0
- symfony/security-csrf: ^7.4 || ^8.0
- symfony/translation: ^7.4 || ^8.0
- symfony/twig-bundle: ^7.4 || ^8.0
- symfony/validator: ^7.4 || ^8.0
- symfony/yaml: ^7.4 || ^8.0
- twig/extra-bundle: ^3.12
- twig/string-extra: ^3.12
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- igor-php/igor-php: ^0.10.0
- nowo-tech/milkdown-editor-bundle: ^1.6
- nowo-tech/phpstan-frankenphp: ^1.0
- phpstan/extension-installer: ^1.0
- phpstan/phpstan: ^2.0
- phpstan/phpstan-phpunit: ^2.0
- phpstan/phpstan-symfony: ^2.0
- phpunit/phpunit: ^10.0
- rector/rector: ^2.0
- symfony/ai-agent: ^0.1
- symfony/ai-bundle: ^0.1
- symfony/asset: ^7.4 || ^8.0
- symfony/browser-kit: ^7.4 || ^8.0
- symfony/dom-crawler: ^7.4 || ^8.0
- symfony/mercure-bundle: ^0.6.1
- symfony/rate-limiter: ^7.4 || ^8.0
- symfony/var-exporter: ^7.4 || ^8.0
- vincentlanglet/twig-cs-fixer: ^4.0
Suggests
- nowo-tech/html-to-word-bundle: Export wiki pages to DOCX/PDF (phase 2).
- nowo-tech/milkdown-editor-bundle: Milkdown editor for wiki pages (nowo_wiki.editor.type: milkdown, ^1.2): page links, mentions, icons, math and Mermaid.
- nowo-tech/translation-yaml-tools-bundle: Translate wiki content across locales.
- symfony/ai-bundle: Ask questions about wiki pages with configurable AI agents and RAG tools.
- symfony/mercure-bundle: Co-editing of Milkdown pages (nowo_wiki.collaboration): private Mercure updates and the subscriber cookie.
- symfony/rate-limiter: Rate limits of the co-editing endpoints (nowo_wiki.collaboration.rate_limiter).
Provides
None
Conflicts
- nowo-tech/milkdown-editor-bundle: <1.2.0
Replaces
None
- dev-main
- v1.16.2
- v1.16.1
- v1.16.0
- v1.15.1
- v1.15.0
- v1.14.1
- v1.14.0
- v1.13.2
- v1.13.1
- v1.13.0
- v1.12.0
- v1.11.1
- v1.11.0
- v1.10.0
- v1.9.0
- v1.8.1
- v1.8.0
- v1.7.2
- v1.7.1
- v1.7.0
- v1.6.4
- v1.6.3
- v1.6.2
- v1.6.1
- v1.6.0
- v1.5.0
- v1.4.1
- v1.4.0
- v1.3.5
- v1.3.4
- v1.3.3
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.0
- v1.1.1
- v1.1.0
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- dev-fix/1.16.2-read-view
- dev-fix/1.16.1-comments
- dev-feat/1.16-comments-avatars-search
- dev-fix/empty-export
- dev-feat/copy-markdown
- dev-feat/history-timeline
- dev-docs/wiki-1.16-comments
- dev-feat/wiki-1.14
- dev-feat/wiki-trash
- dev-fix/ancestor-visibility
- dev-fix/audit-residuals-1.13.1
- dev-docs/roadmap
- dev-feat/milkdown-collab
- dev-feat/milkdown-bridge
- dev-fix/req-twig-005
This package is auto-updated.
Last update: 2026-11-04 19:13:10 UTC
README
⭐ Found this useful? Give it a star on GitHub so more developers can find it.
Symfony bundle for a versionable team wiki: spaces, page trees, immutable revisions, diff, search, and Tiptap rich-text editing (Notion-like variant).
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.
| Page view | Space home | Version history |
|---|---|---|
![]() |
![]() |
![]() |
Features
- Wiki spaces scoped per team or user
- Pages with slug, parent/child tree, archive (revisions kept)
- Immutable revisions on every save
- Revision diff between any two versions
- Full-text search in title and current revision body (per space or all accessible spaces), with contextual excerpts
- Import / export — Outline and Notion Markdown trees (UI +
wiki:import/wiki:exportcommands) - Symfony AI (optional) — ask questions about wiki content with RAG context (
symfony/ai-bundle) WikiAccessCheckerInterface+WikiTeamMembershipResolverInterfacefor app ACL- Pages on the UiKitBundle page contract (list / show / form scaffolds, value-free view models,
<dialog>confirm for Archive / Restore): the host themes them once withnowo_ui_kit— see Templates - CSRF on every POST action (the container refuses to compile without form CSRF protection)
- Integrates TiptapEditorBundle (
variant: notionby default) - Markdown pages (optional) —
editor.type: markdownstores the Markdown source with a sanitized HTML cache, an extensible league/commonmark + GFM renderer andwiki:convert-markdownfor existing pages (Usage) - Milkdown editor (optional) —
editor.type: milkdownwith MilkdownEditorBundle: page links, mentions, Tabler icons, callouts, math and Mermaid rendered per viewer under Milkdown's limits, andwiki:convert-markdown --reportwith a per-page fidelity report (Usage) - Co-editing (optional) — several people edit one Milkdown page at once over Mercure (
nowo_wiki.collaboration): edit permission and a rate limiter on every request, a bounded Yjs log, reset only when needed (Usage) - Comments (optional, 1.16) — inline and page comments in a right-side panel toggled from the page tabs (UiKit side panel, Milkdown 1.6 thread component), default-deny rights, live updates with co-editing,
nowo_wiki.comment.*events (Usage) - Avatars (1.16) — authors' pictures from a host resolver, only beside real names (Configuration)
- Plain-text search (1.16) — the
content_textcolumn, so Markdown punctuation and directive attributes are never hits (Configuration) - Web UI options under
nowo_wiki.web_ui(enabled,path_prefix,layout_template,templates.<page>) and roles per action undernowo_wiki.security.roles
Installation
composer require nowo-tech/wiki-bundle nowo-tech/tiptap-editor-bundle
# config/packages/nowo_wiki.yaml nowo_wiki: user_class: App\Entity\User
See Installation.
Demo
make -C demo/symfony8 up
# Demo started at: http://localhost:8025 → /tools/wiki
make demo-smoke
The screenshots at the top of this README come from this demo; refresh them with make -C demo/symfony8 demo-screenshots (make -C demo/symfony8 test-e2e runs the Playwright happy path).
Documentation
- Installation
- Configuration
- Usage
- Templates (UiKit page contract)
- Contributing
- Code of Conduct
- Changelog
- Upgrading
- Release
- Security
- Roadmap
- Engram
- Spec-driven development
- GitHub Spec Kit
Additional documentation
- PSR evaluation (REQ-CS-007)
- GitHub Actions CI requirements
- Demo with FrankenPHP
- Coverage gates and exclusions (REQ-TEST-003)
Tests and coverage
| Language | Coverage |
|---|---|
| PHP | 100% — make test-coverage |
| TypeScript | 100% — make test-ts (wiki assets) |
PHPUnit: 337 tests. PHP coverage is enforced at 100% via make test-coverage-100 / composer test-coverage-100; TypeScript coverage is enforced by the vitest.config.ts thresholds (100%). The few defensive @codeCoverageIgnore blocks are listed in docs/COVERAGE.md.
License
MIT — see LICENSE.



