Skip to content

Wagtail

Django CMS focused on flexibility and user experience.

Self-hostedNot yet verified
Demo online
BSD-3-Clause★ 20440

Open the official app on wagtail.org

This tool is hosted by its maintainers. Click below to open wagtail.org in a new tab — it's their official demo.

Browse productivity tools →

What's next with Wagtail?

Choose how you want to get started.

Use it free

Open the official tool or demo — no account needed.

Free

Self-host it

Run the open-source version on your own infrastructure.

Open

What is Wagtail?

Wagtail is a browser tool.

How it works

Wagtail is a browser tool.

How to use it

  1. 1Use the Wagtail tool.
  2. 2Use the Wagtail tool.
  3. 3Use the Wagtail tool.
  4. 4Use the Wagtail tool.

What it can do

  • AI Tools

Use cases

Assumptions and limitations

Assumptions

  • source: https://github.com/wagtail
  • license: BSD-3-Clause — free to use
  • privacy: Opens an external demo

Limitations

  • The system requires an active Python WSGI/ASGI server environment. For static-only hosting platforms like GitHub Pages, use a static site generator instead.
  • The administration panel relies on a relational SQL database structure. For graph-based or unstructured document stores, implement a dedicated NoSQL database architecture.
  • The default search backend uses basic database queries which struggle with large-scale relevance scoring. For millions of documents, integrate the Elasticsearch backend extension.
  • Complex custom StreamField migrations require manual database schema rewriting in Python. For rapid prototyping with constantly changing schemas, consider a headless NoSQL CMS.

Understanding the result

Django CMS focused on flexibility and user experience.

Tool details

  • Clearly flagged when a network request is needed.
  • No account, no sign-up, and no tracking of your content.
  • Powered by wagtail (BSD-3-Clause).
Built with
wagtail (https://github.com/wagtail)
License
BSD-3-Clause
Runs locally
No — requires a network request
Verification
Not yet verified
Input
Text
Output
Output
Open-source source & license

Built with https://github.com/wagtail. OpenToolVault provides the discovery and browser interface while crediting the original project maintainers.

Built with
wagtail
License
BSD-3-Clause
View source on GitHub

Open-source project

OpenToolVault is an independent directory. We are not affiliated with or endorsed by this project.

References

Frequently asked

How do I add custom fields to a page model in Wagtail?

To add custom fields, open your models.py file and import specific field types from django.db.models such as CharField, TextField, or RichTextField. Inside your inherited Page class, define these fields as class attributes just like in standard Django development. After adding your fields, run python manage.py makemigrations in your terminal to generate the database instructions. Next, execute python manage.py migrate to apply those schema changes to your active database. Finally, include these fields in your page's content_panels definition so they appear in the administrative editing interface for content creators.

What is the underlying algorithmic mechanism of the Wagtail page routing system?

The routing mechanism operates via a tree-traversal algorithm that matches URL path components against the nested node paths stored in the database. When an incoming request hits the WSGI application, Wagtail's Site middleware identifies the correct root page based on the incoming HTTP Host header. The request path is then split into segments and evaluated recursively down the tree nodes using modified pre-order tree traversal patterns. Once the deepest matching page node is identified, the system instantiates the corresponding Python model class and invokes its custom route method to handle remaining URL sub-paths.

How can I set up headless API endpoints in my Wagtail project?

To configure headless endpoints, you need to enable the built-in wagtail.api.v2 module within your Django installed applications settings. Next, create an api.py file in your app directory and register your custom page models by subclassing Wagtail's PageViewSet or PagesAPIEndpoint. Include the API router URLs inside your project's main urls.py file under a designated path like api/v2/. You can then send GET requests to endpoint URLs such as /api/v2/pages/ to retrieve fully serialized JSON representations of your content tree, including all StreamField blocks and custom metadata.

How is Wagtail different from traditional WordPress installations?

While WordPress relies on a flat post-type structure supplemented by plugin-heavy page builders like Elementor, Wagtail is built on Django and enforces strict, code-defined data models. This structural difference means Wagtail websites are significantly more secure, performant, and resistant to malicious plugin vulnerabilities. Additionally, Wagtail's StreamField gives editors modular layout control without letting them break underlying HTML templates, whereas WordPress builders frequently output bloated, difficult-to-maintain markup. Wagtail is fundamentally designed for Python engineers and professional editorial teams, whereas WordPress targets general consumers.

Why am I getting a Site matching query does not exist error when starting my project?

This error occurs when the database lacks a default Site record matching the incoming domain name or port number of your request. To fix this, log into your Django administrative dashboard at /admin/, navigate to the Settings section, and click on Sites. Ensure that you have created a Site object whose hostname matches your current local address, such as localhost or 127.0.0.1, and that the port number aligns with your development server setting. Alternatively, you can seed this default site programmatically by writing a custom data migration or management command using Wagtail's Site.objects.get_or_create() API.

Spotted something wrong with Wagtail, or want to maintain it? See how to help.