Skip to main content

Commentail

Self-hosted comments for Wagtail CMS

Moderated discussions, verified guests and inline replies — styled by your site.

Tests and distributions

Get started · Documentation · Wiki · Support

Commentail — a blue bird perched on a comment bubble

Commentail is a Django comments library for Wagtail 7.4 LTS and 8.0. Add a Django template tag to an article, moderate discussions inside Wagtail, and keep content, accounts and email delivery in your own application.

The widget inherits your site's typography and colors. CSS custom properties, replaceable templates and Python callbacks let you adapt it without a frontend framework or an external comments platform.

0.1.1 Beta adds Wagtail 8.0 and Django 6.x support. Version-to-version changelog · Roadmap. Changes and upgrade notes.

Why Commentail?

For readers For editors For developers
Guest email verification or existing site accounts Four moderation policies One template tag for Pages and registered objects
Inline replies and author editing Site defaults and Page overrides CSS properties and template overrides
Direct-reply email with unsubscribe Word/phrase rules and CSV import/export Replaceable avatars, names and CAPTCHA
Responsive layout and plain HTML fallbacks Site-scoped group permissions Database outbox; no Redis/Celery requirement

Comments are plain text with an adjustable 5000-character default. Optional clickable HTTP(S) links use safe attributes. Replies can address any visible message while keeping one visual nesting level. Moderators approve, reject, hide, restore or erase text; they never rewrite another author's words.

Published comments include Schema.org Comment microdata and JSON-LD, using the visible text and author name. Choose either format or disable output in Python. Structured-data guide →

Compatibility

Component Version / requirement
Python 3.12–3.14
Wagtail / Django 7.4.3+ in 7.4 / Django 5.2 or 6.0; 8.0.x / Django 5.2, 6.0 or 6.1
Database File SQLite or PostgreSQL 16
UI languages English and Russian
Frontend Django templates, optional progressive JavaScript
License MIT

This table describes the 0.1.1 beta release. All five framework pairs are tested on Python 3.12, 3.13 and 3.14 with both databases (30 combinations). Package bounds are Wagtail>=7.4.3,<8.1 and Django>=5.2,<6.2; only the pairs listed above are supported. Wagtail 7.4 with Django 6.1 is outside this matrix. Wagtail 8.1 and later require separate verification before support is declared.

Guest comments require configured SMTP and the scheduled worker. Registered users can comment without an email address, but receive no mail. Your site provides login and registration. No required external CDN or CAPTCHA service.

Quick start

1. Install

In your site's virtual environment, install the release:

python -m pip install commentail==0.1.1

For the optional PostgreSQL driver, use python -m pip install 'commentail[postgres]==0.1.1'. You can also install a downloaded wheel directly, or extract the source distribution and run python -m pip install . in its root. When upgrading from 0.1.0, review the upgrade notes, including guest-name validation and overridden forms. The 0.1.0 package retains its original Wagtail 7.4 and Django 5.2 limits.

2. Connect Django and Wagtail

  • Add commentail and wagtail.contrib.settings to your existing INSTALLED_APPS.
  • With PostgreSQL, also include django.contrib.postgres (required by Django 6.x checks).
  • Insert commentail.middleware.CapabilityHeadersMiddleware before CSRF middleware.
  • Retain the host session/authentication/messages middleware and template request context processor.
  • Include Commentail URLs before Wagtail's catch-all:
path("commentail/", include("commentail.urls")),

Run python manage.py migrate, python manage.py check and your normal static collection. See the complete installation guide for settings, URL imports, CSRF draft recovery and deployment details.

3. Add the widget

{% load commentail_tags %}
{% commentail_css %}
{% commentail_js %}
{% commentail page %}

Put the resource tags once in the base template and the widget in the article. The template controls where Page comments are available; the corresponding Page editor receives a Comments tab. Configure site defaults, then inherit or override on individual Pages. Review all is the initial moderation policy.

4. Enable email and cleanup

Configure Django's SMTP settings and schedule this once per minute:

python manage.py process_commentail

It sends the database outbox and removes expired transient records. Guests confirm email before moderation. Public submissions with an email are automatically subscribed to direct-reply notifications when mail is enabled; each reply email includes per-comment unsubscribe. Email setup and behavior →

Make it yours

The widget has a transparent surface and inherits the container's font and text color, following your site's light/dark theme. Load overrides after its stylesheet:

.commentail {
  --commentail-color-accent: var(--brand-link, #245a86);
  --commentail-border-radius: .5rem;
  --commentail-max-width: 100%;
}

Use GET_AVATAR to return a profile image URL, or return None for generated initials. Register ordinary Django models through OBJECT_ADAPTERS. Technical settings use a single COMMENTAIL dictionary with default and hostname overrides.

Documentation by task

The Wiki and the versioned guides cover the same topics. Start with the task you need:

Area Guides
Connect Installation · Runnable example
Configure Site, Page and Python settings · Moderation · CSV rules
Reader behavior Guests · Replies and editing
Customize CSS and themes · Templates and email · Python callbacks · Django model adapters
Operate SMTP and worker · Deployment · Security and privacy
Diagnose Troubleshooting / FAQ · Example and testing

Release scope and verification

0.1.1 beta notes describe the changes and upgrade steps; 0.1.0 release notes preserve the initial release contract. The source distribution includes the runnable Wagtail example, tests and guides; the wheel includes the runtime, translations, templates and static assets.

The CI workflow defines 30 framework/Python/database combinations, JavaScript, lint, migration drift, translations and source/wheel installation. Browser checks covered installed Safari, Chrome, Yandex Browser and Firefox with and without JS, plus selected VoiceOver scenarios and a phone. Previous major browser versions remain unverified; this is not an exhaustive accessibility or device certification.

There is no separate REST API, rich-text editor, uploads, likes, reports or live updates in 0.1.1. SMTP retries can duplicate mail after an uncertain delivery result. Host-specific themes, access rules and email delivery need their own acceptance checks.

Support Commentail

If Commentail helps your project, you can support maintenance, documentation and compatibility work. Contributions are optional.

Support via CloudTips

Scan to support Commentail via CloudTips

For questions and reproducible bugs, check the FAQ then open a GitHub issue. Do not include credentials, private comments or protected email links.

Metadata

Release files for commentail 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for commentail 0.1.1
File Size Uploaded Provenance
commentail-0.1.1.tar.gz 1.5 MB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for commentail 0.1.1
File Interpreter ABI Platform
commentail-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 1.6 MB

Release files / commentail-0.1.1.tar.gz

Download URL commentail-0.1.1.tar.gz
Size 1.5 MB
Tags Source
SHA-256 checksum
How to use checksums
f890a7f4c2850bc2be87f554ed329973b93943e893363b0cdd558c0cd0d6673e
BLAKE2b-256 checksum
How to use checksums
b8c84f420d23b8fbdff69bf49d029f555037739dfa7460adec62d333b5f82290
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / commentail-0.1.1-py3-none-any.whl

Download URL commentail-0.1.1-py3-none-any.whl
Size 126.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d1554486d74be95ba52cc4a0c69319e9bfdabc7134df1877d1e51cc6a4f22b1f
BLAKE2b-256 checksum
How to use checksums
f7b3545041abdac02fcf5209bc7645c9b318e16f20c7302efd08877f71fb37e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Security for commentail 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for commentail-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page