Commentail
Self-hosted comments for Wagtail CMS
Moderated discussions, verified guests and inline replies — styled by your site.
Get started · Documentation · Wiki · Support
Commentail is a Django comments library built for Wagtail 7.4 LTS. 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.
Wagtail 8.0 is not supported by 0.1.0.
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 | >=7.4.3, <7.5 |
| Django | >=5.2, <5.3 |
| Database | SQLite or PostgreSQL; CI covers PostgreSQL 14 |
| UI languages | English and Russian |
| Frontend | Django templates, optional progressive JavaScript |
| License | MIT |
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.0
For the optional PostgreSQL driver, use python -m pip install 'commentail[postgres]==0.1.0'.
You can also install a downloaded wheel directly, or extract the source distribution
and run python -m pip install . in its root.
2. Connect Django and Wagtail
- Add
commentailandwagtail.contrib.settingsto your existingINSTALLED_APPS. - Insert
commentail.middleware.CapabilityHeadersMiddlewarebefore 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.0 release notes describe the initial feature set and limits. The source distribution includes the runnable Wagtail example, tests and guides; the wheel includes the runtime, translations, templates and static assets.
CI checks six 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.0. 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.
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.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| commentail-0.1.0.tar.gz | 1.5 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| commentail-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.6 MB
Release files / commentail-0.1.0.tar.gz
| Download URL | commentail-0.1.0.tar.gz |
|---|---|
| Size | 1.5 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
59704ac4a454669137d750f6fb8dbe77e8f679ec5451f3da93d506e28868a175
|
|
BLAKE2b-256 checksum How to use checksums |
c77ce6850f00578c69ef92912e9177b506b463a1a27b4472202b6f8be731739f
|
| 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 17, 2026.
Transparency logRelease files / commentail-0.1.0-py3-none-any.whl
| Download URL | commentail-0.1.0-py3-none-any.whl |
|---|---|
| Size | 125.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a4eb2f1dceb822a98e7aec882e030f7d6c89fb9b3698608e54595479c23da472
|
|
BLAKE2b-256 checksum How to use checksums |
2faa3110bf82605f4536cf9f99ac5794d54e9c173acc63cae8dd7a1642486836
|
| 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 17, 2026.
Transparency log