Search by

nowo-tech / wiki-bundle

HecFranco

Symfony bundle for versionable team wiki pages (Outline/Notion-style) with Tiptap rich text

Package info

github.com/nowo-tech/WikiBundle

Type:symfony-bundle

pkg:composer/nowo-tech/wiki-bundle

Statistics

Installs: 185

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

v1.16.2 2026-11-04 19:11 UTC

README

CI Packagist Version Packagist Downloads License PHP Symfony GitHub stars Coverage

⭐ 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.

FrankenPHP Friendly Worker Mode

This bundle is FrankenPHP worker mode friendly.

Page view Space home Version history
Wiki page view: UiKit page header with Edit, History and Archive, the nested page tree of the space next to the rendered page Space home: New page and exports in the header, page tree, in-space search and the archived pages with Restore Version history: revisions with Compare and Restore, the restore confirmation open as a native dialog

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:export commands)
  • Symfony AI (optional) — ask questions about wiki content with RAG context (symfony/ai-bundle)
  • WikiAccessCheckerInterface + WikiTeamMembershipResolverInterface for 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 with nowo_ui_kit — see Templates
  • CSRF on every POST action (the container refuses to compile without form CSRF protection)
  • Integrates TiptapEditorBundle (variant: notion by default)
  • Markdown pages (optional) — editor.type: markdown stores the Markdown source with a sanitized HTML cache, an extensible league/commonmark + GFM renderer and wiki:convert-markdown for existing pages (Usage)
  • Milkdown editor (optional) — editor.type: milkdown with MilkdownEditorBundle: page links, mentions, Tabler icons, callouts, math and Mermaid rendered per viewer under Milkdown's limits, and wiki:convert-markdown --report with 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_text column, 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 under nowo_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

Additional documentation

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.