PHPackages                             php-collective/symfony-djot - 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. [Templating &amp; Views](/categories/templating)
4. /
5. php-collective/symfony-djot

ActiveSymfony-bundle[Templating &amp; Views](/categories/templating)

php-collective/symfony-djot
===========================

Symfony bundle integration for php-collective/djot

0.2.0(2mo ago)07↓90%MITPHPPHP ^8.2CI passing

Since Mar 27Pushed 1mo agoCompare

[ Source](https://github.com/php-collective/symfony-djot)[ Packagist](https://packagist.org/packages/php-collective/symfony-djot)[ Docs](https://github.com/php-collective/symfony-djot)[ RSS](/packages/php-collective-symfony-djot/feed)WikiDiscussions master Synced 3w ago

READMEChangelog (3)Dependencies (18)Versions (4)Used By (0)

Symfony Djot Bundle
===================

[](#symfony-djot-bundle)

[![CI](https://github.com/php-collective/symfony-djot/actions/workflows/ci.yml/badge.svg)](https://github.com/php-collective/symfony-djot/actions/workflows/ci.yml)[![PHP](https://camo.githubusercontent.com/7e813998e7bd3997a3df6be43e290a88119af8b4059c7a4c2735cf1e4edd8887/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f7068702d636f6c6c6563746976652f73796d666f6e792d646a6f74)](https://packagist.org/packages/php-collective/symfony-djot)[![License](https://camo.githubusercontent.com/f6d9f2ef800cd9a73419fe7a6d67b32c3f4113e1918362332047bbe5fe52312b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f7068702d636f6c6c6563746976652f73796d666f6e792d646a6f74)](LICENSE)

[Djot](https://github.com/php-collective/djot-php) markup language integration for Symfony — Twig filters, services, forms, and validation.

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

[](#installation)

```
composer require php-collective/symfony-djot
```

Usage
-----

[](#usage)

### Twig Filter

[](#twig-filter)

```
{# Safe by default - XSS protection enabled #}
{{ article.body|djot }}

{# For trusted content only - no XSS protection #}
{{ trustedContent|djot_raw }}

{# Plain text output #}
{{ article.body|djot_text }}
```

### Service

[](#service)

```
use PhpCollective\SymfonyDjot\Service\DjotConverterInterface;

class ArticleController
{
    public function show(DjotConverterInterface $djot): Response
    {
        $html = $djot->toHtml($article->body);
        $text = $djot->toText($article->body);
    }
}
```

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

[](#configuration)

```
# config/packages/symfony_djot.yaml
symfony_djot:
    converters:
        # Default has safe_mode: true (XSS protection enabled)
        default: ~

        # For trusted content (admin, CMS)
        trusted:
            safe_mode: false
    cache:
        enabled: false
        pool: cache.app
```

### Multiple Converter Profiles

[](#multiple-converter-profiles)

Use different configurations for different contexts:

```
{# Default is safe #}
{{ comment.body|djot }}

{# Use named converter for trusted content #}
{{ article.body|djot('trusted') }}

{# Or use djot_raw for quick trusted rendering #}
{{ article.body|djot_raw }}
```

```
public function __construct(
    // Default converter (safe mode enabled)
    private DjotConverterInterface $djot,

    // Trusted converter (safe mode disabled)
    #[Autowire(service: 'symfony_djot.converter.trusted')]
    private DjotConverterInterface $trusted,
) {}
```

### Safe Mode

[](#safe-mode)

Safe mode is *enabled by default* for XSS protection. Disable only for trusted content:

```
symfony_djot:
    converters:
        trusted:
            safe_mode: false
```

### Extensions

[](#extensions)

Enable [djot-php extensions](https://github.com/php-collective/djot-php) per converter:

```
symfony_djot:
    converters:
        default:
            extensions:
                - type: autolink
                - type: smart_quotes
                - type: heading_permalinks
                  symbol: '#'
                  position: after
        with_mentions:
            extensions:
                - type: mentions
                  user_url_template: 'https://github.com/{username}'
                - type: table_of_contents
```

Available extensions:

- `admonition` - Admonition blocks (note, tip, warning, danger, etc.)
- `autolink` - Auto-convert URLs to clickable links
- `code_group` - Transform code-group divs into tabbed interfaces
- `default_attributes` - Add default attributes to elements by type
- `external_links` - Configure external link behavior (target, rel)
- `frontmatter` - Parse YAML/TOML/JSON frontmatter blocks
- `heading_level_shift` - Shift heading levels up/down
- `heading_permalinks` - Add anchor links to headings
- `heading_reference` - Link to headings with `[text](#heading)` syntax
- `inline_footnotes` - Convert spans with class to inline footnotes
- `mentions` - Convert @username to profile links
- `mermaid` - Render Mermaid diagram code blocks
- `semantic_span` - Convert spans to ``, ``, `` elements
- `smart_quotes` - Convert straight quotes to typographic quotes
- `table_of_contents` - Generate TOC from headings
- `tabs` - Tabbed content blocks (CSS or ARIA mode)
- `wikilinks` - Support `[[Page Name]]` wiki-style links

See [Extensions documentation](https://php-collective.github.io/symfony-djot/extensions/) for detailed configuration options.

### Form Type

[](#form-type)

Use the `DjotType` for form fields that accept Djot markup:

```
use PhpCollective\SymfonyDjot\Form\Type\DjotType;

$builder->add('body', DjotType::class);
```

### Validation

[](#validation)

Validate that a field contains valid Djot markup:

```
use PhpCollective\SymfonyDjot\Validator\Constraints\ValidDjot;

class Article
{
    #[ValidDjot]
    private string $body;
}
```

Documentation
-------------

[](#documentation)

Full documentation: **[php-collective.github.io/symfony-djot](https://php-collective.github.io/symfony-djot/)**

- [Installation](https://php-collective.github.io/symfony-djot/guide/installation)
- [Configuration](https://php-collective.github.io/symfony-djot/guide/configuration)
- [Twig Usage](https://php-collective.github.io/symfony-djot/guide/twig-usage)
- [Service Usage](https://php-collective.github.io/symfony-djot/guide/service-usage)
- [Forms](https://php-collective.github.io/symfony-djot/guide/forms)
- [Validation](https://php-collective.github.io/symfony-djot/guide/validation)
- [Safe Mode](https://php-collective.github.io/symfony-djot/guide/safe-mode)
- [Extensions](https://php-collective.github.io/symfony-djot/extensions/)
- [Caching](https://php-collective.github.io/symfony-djot/guide/caching)
- [Djot Syntax](https://php-collective.github.io/symfony-djot/guide/djot-syntax)

Demo Application
----------------

[](#demo-application)

See the [symfony-djot-demo](https://github.com/php-collective/symfony-djot-demo) for a complete example application.

What is Djot?
-------------

[](#what-is-djot)

[Djot](https://djot.net) is a modern light markup language created by John MacFarlane (author of CommonMark/Pandoc). It offers cleaner syntax and more features than Markdown while being easier to parse.

Learn more about Djot syntax at [djot.net](https://djot.net).

###  Health Score

35

—

LowBetter than 77% of packages

Maintenance87

Actively maintained with recent releases

Popularity4

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity38

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% 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 ~2 days

Total

3

Last Release

87d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/39854?v=4)[Mark Scherer](/maintainers/dereuromark)[@dereuromark](https://github.com/dereuromark)

---

Top Contributors

[![dereuromark](https://avatars.githubusercontent.com/u/39854?v=4)](https://github.com/dereuromark "dereuromark (20 commits)")

---

Tags

bundledjotmarkupparsersymfonytwigsymfonybundletwigparsermarkupdjot

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/php-collective-symfony-djot/health.svg)

```
[![Health](https://phpackages.com/badges/php-collective-symfony-djot/health.svg)](https://phpackages.com/packages/php-collective-symfony-djot)
```

###  Alternatives

[easycorp/easyadmin-bundle

Admin generator for Symfony applications

4.3k17.5M376](/packages/easycorp-easyadmin-bundle)[rcsofttech/audit-trail-bundle

Enterprise-grade, high-performance Symfony audit trail bundle. Automatically track Doctrine entity changes with split-phase architecture, multiple transports (HTTP, Queue, Doctrine), and sensitive data masking.

1155.2k](/packages/rcsofttech-audit-trail-bundle)[kimai/kimai

Kimai - Time Tracking

4.7k8.7k1](/packages/kimai-kimai)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.4M196](/packages/sulu-sulu)[2lenet/crudit-bundle

The easy like Crud'it Bundle.

1615.6k12](/packages/2lenet-crudit-bundle)[web-auth/webauthn-framework

FIDO2/Webauthn library for PHP and Symfony Bundle.

51390.8k2](/packages/web-auth-webauthn-framework)

PHPackages © 2026

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