Welcome to django-indieweb’s documentation!¶
django-indieweb provides IndieAuth, Micropub, Webmention, WebSub, and h-card support for Django applications.
Contents:
- IndieWeb Concepts
- Tutorial
- IndieAuth Implementation
- Overview
- Authorization Flow with Consent Screen
- Server Metadata and Discovery
- Production Client and Identity Hardening
- Redirect URI Binding
- Token Introspection
- Managing Access Tokens
- Authentication vs Authorization
- Wire Compatibility Policy
- Customizing the Consent Screen
- Security Considerations
- Configuration
- Testing IndieAuth
- Example: Using IndieAuth with a Micropub Client
- Troubleshooting
- Micropub Implementation Guide
- Webmentions
- Features
- Quick Start
- Configuration
- Implementing URL Resolution
- Implementing Spam Protection
- Receiving and Queued Processing
- Vouch Support
- Salmention Support Status
- Target URL Matching
- HTTP Redirects
- Authorship Extraction
- Reprocessing and Source Removal
- Using Webmention.io Alongside django-indieweb
- Template Usage
- Management Commands
- Signals
- Models
- Testing Webmentions
- Troubleshooting
- API Reference
- WebSub Support
- Overview
- WebSub publisher flow
- Discovery in Templates
- Discovery in HTTP Headers
- Notifying Hubs
- Management Command
- Subscriber Lease Inspection
- Subscriber Flow
- Callback Verification
- Content Distribution
- Host-Owned Delivery Workflows
- Explicit Lease Renewal
- Delivery Attempt Retention
- Signed Deliveries
- Security and Compatibility Notes
- H-Cards
- API Reference
- Endpoints Overview
- WebSub Publisher Helpers
- WebSub Subscriber Callback
- IndieAuth Server Metadata
- IndieAuth Flow
- Authorization Endpoint
- Token Endpoint
- Token Introspection Endpoint
- Token Management UI
- Micropub Endpoint
- Micropub Media Endpoint
- Webmention Endpoint
- Error Responses
- Scopes
- Rate Limiting
- CORS Support
- H-Card Support
- Configuration
- Development
- Backlog
- Changelog
- Unreleased
- 0.6.2 (2026-09-02)
- 0.6.1 (2026-05-11)
- 0.6.0 (2026-05-10)
- 0.5.3 (2025-10-28)
- 0.5.2 (2025-07-27)
- 0.5.1 (2025-07-26)
- 0.5.0 (2025-07-25)
- 0.4.3 (2025-07-11)
- 0.4.2 (2025-07-10)
- 0.4.1 (2025-07-10)
- 0.4.0 (2025-07-10)
- 0.3.5 (2025-06-29)
- 0.3.4 (2025-06-29)
- 0.3.3 (2025-06-29)
- 0.3.2 (2025-06-29)
- 0.3.1 (2025-06-28)
- 0.3.0 (2025-06-28)
- 0.2.0 (2025-06-16)
- 0.1.0 (2025-06-13)
- 0.0.8 (unreleased)
- 0.0.7 (2023-01-07)
- 0.0.6 (2022-11-05)
- 0.0.5 (2019-05-19)
- 0.0.4 (2016-06-14)
- 0.0.3 (2016-06-13)
- 0.0.2 (2016-05-15)
- 0.0.1 (2016-05-14)
- indieweb
Features¶
IndieAuth authentication endpoint - For logging into IndieWeb sites
IndieAuth authorization endpoint with consent screen - For granting permissions to apps
IndieAuth token endpoint - For exchanging auth codes for access tokens
Micropub endpoint with content creation, source query, update, delete, undelete, and media upload support
Webmention support - Send and receive cross-site conversations
WebSub support - Advertise topic/hub discovery links, notify hubs, and receive tokenized subscriber callbacks
H-card profiles - Store and display user profiles with microformats2
Pluggable content handler system for Micropub integration
Pluggable interfaces for Webmention URL resolution and spam checking
Support for both form-encoded and JSON Micropub requests
Microformats2 parsing for rich webmention content and h-cards
Micropub query endpoints (config with media-endpoint discovery, syndicate-to, source)
Django integration
Note
The Micropub endpoint now includes content creation, source query, update, delete, and undelete actions through a pluggable handler architecture. A dedicated media endpoint stores direct uploads through Django storage and is advertised through Micropub config. See Micropub Implementation Guide for implementation details.
Project Planning¶
Planned work is tracked in the project backlog. See Backlog.
Installation¶
Install django-indieweb using pip:
pip install django-indieweb
Or with uv:
uv pip install django-indieweb
Quick Start¶
Add “indieweb” to your INSTALLED_APPS setting:
INSTALLED_APPS = [ ... 'indieweb', ]
Include the indieweb URLconf in your project urls.py:
path('indieweb/', include('indieweb.urls')),
Run migrations:
python manage.py migrate
Visit the IndieWeb endpoints at:
/indieweb/auth/- Authentication endpoint/indieweb/token/- Token endpoint/indieweb/micropub/- Micropub endpoint/indieweb/media/- Micropub media endpoint/indieweb/webmention/- Webmention endpoint
To enable content creation and editing via Micropub, create a content handler:
from indieweb.handlers import MicropubContentHandler, MicropubEntry class MyContentHandler(MicropubContentHandler): def create_entry(self, properties, user): # Your content creation logic here pass
See Micropub Implementation Guide for detailed implementation examples.
To publish WebSub-enabled topics, configure
INDIEWEB_WEBSUB_HUBS, add discovery links to your topic responses, and callnotify_hubs()after content changes. See WebSub Support.
Adapter Responsibilities¶
Micropub handlers are host-owned authorization boundaries. After
django-indieweb authenticates the bearer token and checks the requested scope,
your MicropubContentHandler must verify that the authenticated user is
allowed to create, update, delete, undelete, read source content, list content
or media, and manage media for the submitted URL or storage object. The bundled
InMemoryMicropubHandler is an unsafe development/testing example only; it
keeps entries in process memory and performs no ownership checks.