Home
Softono

Django Keel

Open source MIT Jinja
372
Stars
29
Forks
6
Issues
5
Watchers
3 months
Last Commit

 About Django Keel

A versatile, production-ready Django project template for any use case Build SaaS applications, API backends, web apps, or internal tools with one template.

Platforms

Web Self-hosted Kubernetes

Languages

Jinja

Need Help Installing Django Keel?

We provide expert installation service for this software. Our team will install, configure, and secure Django Keel on your server. plans start at just $30.

Django Keel

View on GitHub

๐Ÿšข Django Keel

A versatile, production-ready Django project template for any use case

Build SaaS applications, API backends, web apps, or internal tools with one template.

CI License: MIT Python 3.12+ Django 6.0 Documentation

[!NOTE] ๐Ÿ’ผ Available for Hire โ€” Need help with Backend Development or DevOps? I specialize in Django, Python, Kubernetes, CI/CD, and cloud infrastructure. ๐Ÿ“ง Contact: [email protected]

Django Keel is a comprehensive Copier template that adapts to your needsโ€”whether you're building a multi-tenant SaaS with billing, a simple API backend, a traditional web app, or an internal corporate tool. One template, infinite possibilities.

Choose your project type and get smart defaults. Or customize everything yourself.

๐Ÿšข What is a "Keel"?

In nautical terms, the keel is the structural backbone of a shipโ€”running along the bottom from bow to stern. It provides:

  • Stability - Prevents the ship from capsizing in rough waters
  • Direction - Keeps the vessel on course, resisting sideways drift
  • Foundation - The first part built, upon which the entire ship is constructed

Similarly, Django Keel provides the structural foundation for your Django projects:

  • Stability - Production-ready defaults and battle-tested patterns
  • Direction - Clear project structure and 12-Factor App compliance
  • Foundation - A solid base to build upon, whether you're sailing smooth seas or navigating stormy deployments

Just as a ship's keel allows it to sail anywhere, Django Keel enables you to deploy your application to any platformโ€”Kubernetes, AWS, Fly.io, Render, or traditional servers.

Table of Contents

๐Ÿ“‹ Feature Availability

Before diving in, here's what's included by default, optional, or planned (grouped by category):

Core (Always Included)

Feature Status Notes
Django 5.2 + Python 3.12/3.13/3.14 โœ… Included Always enabled
Custom User Model โœ… Included Email-based authentication
Split Settings (dev/test/prod) โœ… Included 12-Factor App ready
Docker + Compose โœ… Included Local development
pytest + coverage โœ… Included Coverage gate configurable (default 80%)
ruff + mypy โœ… Included Code quality enforced
Health/readiness endpoints โœ… Included /health/ and /ready/

API & Frontend

Feature Status Notes
Django REST Framework ๐Ÿ“ฆ Optional Enable with api: drf (or api: both for DRF + GraphQL)
Strawberry GraphQL ๐Ÿ“ฆ Optional Enable with api: graphql (or api: both for DRF + GraphQL)
HTMX + Tailwind CSS ๐Ÿ“ฆ Optional Enable with frontend: htmx-tailwind
Next.js ๐Ÿ“ฆ Optional Enable with frontend: nextjs (requires Node.js 20 LTS+)

Background Tasks & Async

Feature Status Notes
Celery (Beat/Flower) ๐Ÿ“ฆ Optional Enable with background_tasks: celery (enabled by default)
Temporal ๐Ÿ“ฆ Optional Enable with background_tasks: temporal
Django Channels (WebSockets) ๐Ÿ“ฆ Optional Enable with use_channels: true

Note on Temporal: Requires Temporal Cloud or a self-hosted Temporal cluster. Keel wires the client SDK + example worker with sample workflows/activities; the Temporal server/Cloud is not provisioned.

Observability

Feature Status Notes
Structured JSON Logging โœ… Included Always enabled
Sentry ๐Ÿ“ฆ Optional observability: standard or full (enabled by default)
OpenTelemetry ๐Ÿ“ฆ Optional observability: full only
Prometheus metrics ๐Ÿ“ฆ Optional observability: full only

SaaS Features

Feature Status Notes
Multi-tenant teams (RBAC) ๐Ÿ“ฆ Optional Enable with use_teams: true
Stripe (basic) ๐Ÿ“ฆ Optional Enable with use_stripe: basic
Stripe (dj-stripe) ๐Ÿ“ฆ Optional Enable with use_stripe: advanced
2FA (TOTP) ๐Ÿ“ฆ Optional Enable with use_2fa: true

Additional Features

Feature Status Notes
SOPS (encrypted secrets) ๐Ÿ“ฆ Optional Enable with use_sops: true
PostgreSQL FTS ๐Ÿ“ฆ Optional Enable with use_search: postgres-fts
OpenSearch ๐Ÿ“ฆ Optional Enable with use_search: opensearch
i18n/l10n ๐Ÿ“ฆ Optional Enable with use_i18n: true

Deployment Targets

Feature Status Notes
Kubernetes (Helm + Kustomize) ๐Ÿ“ฆ Optional Enable with deployment_targets: [kubernetes]
AWS ECS Fargate (Terraform) ๐Ÿ“ฆ Optional Enable with deployment_targets: [ecs]
Fly.io ๐Ÿ“ฆ Optional Enable with deployment_targets: [flyio]
Render ๐Ÿ“ฆ Optional Enable with deployment_targets: [render]
AWS EC2 (Ansible) ๐Ÿ“ฆ Optional Enable with deployment_targets: [aws-ec2-ansible]

Legend:

  • โœ… Included - Always generated, core to every project
  • ๐Ÿ“ฆ Optional - Choose during project generation (some enabled by default)
  • ๐Ÿ”ฎ Planned - Coming in future releases

Project Type Defaults (What Changes Automatically)

Type API Frontend Teams Stripe Background Deploy
saas drf nextjs โœ… on advanced celery kubernetes
api drf none โŒ off โŒ off celery render
web-app none htmx-tailwind โŒ off โŒ off celery flyio
internal-tool drf htmx-tailwind โœ… on โŒ off celery aws-ec2-ansible
custom pick pick pick pick pick pick

โš™๏ธ Default Configuration

When you press Enter on every prompt (choosing defaults for project_type: custom):

# Project Type
project_type: custom # Or: saas, api, web-app, internal-tool

# Dependency Management
dependency_manager: uv # Or: poetry
python_version: "3.14" # Or: "3.12" Or: "3.13"

# Database & Cache
database: postgresql # Production-ready database
db_managed: true # Use managed DB (RDS/Cloud SQL recommended)
cache: redis # Or: none

# API & Frontend
api: drf # Or: graphql, both, none
frontend: none # Or: htmx-tailwind, nextjs

# Authentication
auth: allauth # Or: jwt, both
use_2fa: false # Two-factor authentication disabled

# Background Tasks
background_tasks: celery # Or: temporal, both, none (optional, **enabled by default**)
use_channels: false # WebSockets disabled

# Observability
observability:
  standard # Or: minimal, full
  # minimal = JSON logs + health
  # standard = minimal + Sentry
  # full = standard + Prometheus + OTel

# SaaS Features
use_teams: false # Multi-tenancy disabled
use_stripe: false # Or: basic, advanced

# Additional Features
use_search: none # Or: postgres-fts, opensearch
use_i18n: false # Internationalization disabled
use_sops: false # Encrypted secrets disabled

# Security
security_profile: standard # Or: strict (see docs for differences)

# Storage
media_storage: aws-s3 # Or: gcs, azure, whitenoise-only

# Deployment
deployment_targets: [kubernetes] # Or: [aws-ec2-ansible, ecs, flyio, render]

# CI/CD
ci_provider: github-actions # Or: gitlab-ci, both

๐Ÿ’ก Tip: Select a project type (saas, api, web-app, internal-tool) for smarter defaults!

Note: Some "optional" features are enabled by default for production-ready projects (e.g., Celery, Sentry via observability: standard). You can disable them during generation.

๐Ÿ”’ Security Baseline

Django Keel enforces production security out of the box:

Included Security Features

  • โœ… python manage.py check --deploy runs in CI
  • โœ… HSTS (HTTP Strict Transport Security) enabled in production
  • โœ… Secure cookies (SECURE_* flags) in production
  • โœ… SSL redirect enforced in production
  • โœ… CSP headers (Content Security Policy) with sane defaults
  • โœ… Admin hardening - Custom admin URL, staff-only access
  • โœ… Rate limiting - Optional with django-ratelimit
  • โœ… Brute-force protection - Optional with django-axes
  • โœ… SOPS (age) - Encrypted secrets management (optional)
  • โœ… .env.example - Template for environment variables
  • โœ… No secrets in repo - Environment-based configuration

GitHub Security (when using GitHub Actions)

  • OIDC to cloud providers (no long-lived keys)
  • Dependabot enabled for dependency updates
  • Secret scanning enabled
  • Branch protection recommended

security_profile: strict

When you enable security_profile: strict, additional hardening is applied:

  • CSP locked to 'self' - Content Security Policy blocks all external resources
  • Admin path randomized - Admin URL is generated randomly (not /admin/)
  • Session age shortened - Sessions expire faster (15 min vs 2 weeks)
  • HTTPS-only cookies - All cookies require HTTPS, no fallback
  • SECURE_HSTS_PRELOAD - Enabled for HSTS preload list submission
  • Stricter CORS - No wildcards, explicit origins only
  • Additional headers - X-Frame-Options, X-Content-Type-Options, Referrer-Policy
  • Permissions-Policy - Restrictive policy (e.g., camera=(), geolocation=(), microphone=())

Production Checks

Every generated project includes:

# Security audit
just security-check

# This runs:
# - python manage.py check --deploy
# - pip-audit (dependency vulnerabilities)
# - safety check (known security issues)

๐Ÿ” Security Policy: We follow Django's security best practices and respond to vulnerabilities within 24 hours. Report issues to security@django-keel (coming soon).

๐Ÿ”„ Template Updates & Versioning

How Updates Work

Django Keel uses semantic versioning (SemVer):

  • MAJOR (2.0.0) - Breaking changes requiring manual intervention
  • MINOR (1.1.0) - New features, backward compatible
  • PATCH (1.0.1) - Bug fixes, backward compatible

Your project tracks the template version in .copier-answers.yml:

_commit: a1b2c3d
_src_path: gh:CuriousLearner/django-keel

Updating Your Project

cd your-project

# Create a backup branch before updating
git switch -c pre-update

# Run update
copier update

# If issues arise, you can rollback
git reset --hard

Copier will:

  1. Show you a diff of changes
  2. Let you selectively accept/reject changes
  3. Preserve your customizations
  4. Handle merge conflicts intelligently

Breaking Changes

We mark breaking changes in the CHANGELOG with a โš ๏ธ BREAKING label and provide migration guides.

Policy: We aim for no more than 2 major versions per year to minimize disruption.

๐Ÿงช Compatibility & Support

Tested Combinations

We test Django Keel against:

Python Django Status
3.12 5.2 โœ… Tested
3.12 6.0 โœ… Tested
3.13 5.2 โœ… Tested
3.13 6.0 โœ… Tested
3.14 5.2 โœ… Tested
3.14 6.0 โœ… Tested

Support Policy

  • Python: Last 2-3 minor versions (currently 3.12, 3.13, 3.14)
  • Django: Last 2-3 minor versions (currently 5.2, 6.0)
  • LTS versions get priority bug fixes
  • Security patches backported for 1 year

CI Testing

Every commit is tested against:

  • โœ… All Python + Django combinations
  • โœ… Template generation with all project types
  • โœ… Docker builds
  • โœ… Code quality (ruff, mypy)
  • โœ… Security checks (pip-audit, safety)
  • โœ… SBOM generation (Syft)
  • โœ… Container image scanning (Trivy)

โœจ Features

๐ŸŽฏ Core

  • Django 5.2/6.0 with Python 3.12/3.13/3.14 support
  • uv or Poetry for blazing-fast dependency management
  • 12-Factor App aligned - Implements all 12 factors in practice (docs)
    • Single codebase with multiple deploys
    • Explicit dependencies with lock files
    • Config in environment variables
    • Backing services as attached resources
    • Separate build/release/run stages (Procfile, release.sh)
    • Stateless processes
    • Port binding export
    • Horizontal scalability via process model
    • Fast startup, graceful shutdown
    • Dev/prod parity
    • Logs as event streams
    • Admin processes as one-off tasks
  • Custom User Model from day one
  • Split Settings (base/dev/test/prod)
  • Docker + Compose for local development - Postgres, Redis, and Mailpit included out-of-the-box

๐Ÿ” Authentication & Security

  • django-allauth with email verification
  • JWT authentication (SimpleJWT)
  • 2FA support (TOTP)
  • Security hardening (HSTS, CSP, etc.)
  • SOPS for encrypted secrets
  • Rate limiting and brute-force protection

๐ŸŒ API Options

  • Django REST Framework with drf-spectacular (OpenAPI 3.0)
  • Strawberry GraphQL (modern, type-safe)
  • CORS configuration
  • API versioning ready
  • Automatic schema generation

๐ŸŽจ Frontend Options

  • None (API-only)
  • HTMX + Tailwind CSS (modern, minimal JS) - Alpine.js available as optional addition
  • Next.js (full-stack React)

โšก Async & Background Tasks

  • Celery - Traditional async tasks (emails, reports, high-volume processing)
  • Temporal - Durable workflows (onboarding, payment flows, long-running processes)
  • Both - Use Celery AND Temporal together
  • Celery Beat for periodic tasks
  • Flower for monitoring
  • Django Channels for WebSockets (optional)

๐Ÿ“Š Observability

  • Structured JSON Logging (always included)
  • Sentry error tracking (optional)
  • OpenTelemetry distributed tracing (optional, observability: full)
  • Prometheus metrics (optional, observability: full)
  • Health and readiness endpoints (always included)

Note: OpenTelemetry and Prometheus add overhead and cost. Enable only when needed and configure exporters appropriately.

๐Ÿš€ Deployment

  • Kubernetes (Enterprise-scale):
    • Helm charts
    • Kustomize overlays (dev/staging/prod)
    • PostgreSQL options: Managed (RDS recommended) or CloudNativePG operator
    • Traefik + cert-manager for ingress
    • Horizontal Pod Autoscaling
    • ArgoCD ready

๐Ÿ’ก K8s DB Guidance: Start with managed Postgres (RDS/Cloud SQL/Azure Database) unless you have strong operational reasons for CloudNativePG. Both paths included.

  • AWS ECS Fargate (Serverless containers):

    • No EC2 instance management
    • Application Load Balancer with auto-scaling
    • Multi-AZ high availability
    • Terraform infrastructure-as-code
  • Fly.io (Global edge):

    • Deploy close to users worldwide
    • Automatic HTTPS & SSL
    • PostgreSQL & Redis included
    • Free tier available
    • Multi-region deployment
  • Render (Platform-as-a-Service, PaaS):

    • One-click deployment from GitHub
    • Auto-deploy on git push
    • PostgreSQL & Redis included
    • Free and paid tiers
    • Zero configuration
  • AWS EC2 (Ansible) (Full control):

    • Ubuntu 24.04 playbooks
    • Caddy reverse proxy with auto-HTTPS
    • Systemd services
    • Zero-downtime deploys (socket activation/rolling restart)
  • Docker (Universal):

    • Multi-stage optimized builds
    • docker-compose for development
    • Deploy anywhere

๐Ÿงช Developer Experience

  • ruff for linting and formatting (10-100x faster)
    • Comprehensive rule set (13+ categories)
    • 100-character line length
    • Modern Python 3.12+ type hints
  • mypy + django-stubs for type checking
  • pytest with coverage reporting (coverage gate configurable, default 80%)
  • pre-commit hooks for automated quality checks
  • Just task runner with essential commands:
    just dev            # Start development server
    just test           # Run test suite
    just lint           # Lint and format code
    just migrate        # Run migrations
    just createsuperuser # Create admin user
    
    A focused set of commands (extendable) for all common workflows.
  • Docker Compose for local development
  • VS Code Devcontainer support
  • MkDocs Material documentation
  • Infrastructure validation (YAML, Docker Compose, Helm, Ansible)

๐Ÿ’ผ SaaS Features (Optional)

  • Multi-tenant teams (RBAC) - Full team management system
    • Owner/Admin/Member roles
    • Team invitations with email tokens
    • Per-seat billing integration
  • Advanced Stripe Integration - Production-ready billing
    • Basic mode (stripe API) or Advanced mode (dj-stripe)
    • Subscription management with metadata
    • Per-seat and usage-based billing
    • Webhook handlers for all events
    • Customer portal integration
  • Feature Gating - Subscription-based access control
    • @subscription_required, @feature_required, @plan_required decorators
    • Usage limit checking
    • Class-based view mixins
  • User Impersonation - Admin support tools
    • Staff can impersonate users for debugging
    • Full audit logging
    • Security checks built-in
  • Feature Flags - A/B testing with django-waffle
    • Flags, switches, and samples
    • User/group-based targeting
    • Gradual rollouts

๐Ÿ“ฆ Additional Features

  • PostgreSQL Full-Text Search or OpenSearch
  • Internationalization (i18n/l10n)
  • Professional email template system

๐Ÿ”„ Template Updates

  • Built-in Copier update mechanism
  • Track template version
  • Merge upstream changes easily

๐Ÿš€ Quick Start

Prerequisites

Next.js option? Install Node.js 20 LTS (or later) and pnpm/npm/yarn.

Create a New Project

# Using copier
copier copy gh:CuriousLearner/django-keel your-project-name

# Follow the interactive prompts

What Gets Generated

your-project/
โ”œโ”€โ”€ apps/                      # Django applications
โ”‚   โ”œโ”€โ”€ core/                 # Core functionality (health checks, etc.)
โ”‚   โ”œโ”€โ”€ users/                # Custom user model
โ”‚   โ””โ”€โ”€ api/                  # API endpoints (if selected)
โ”œโ”€โ”€ config/                    # Django configuration
โ”‚   โ”œโ”€โ”€ settings/             # Split settings
โ”‚   โ”œโ”€โ”€ urls.py
โ”‚   โ”œโ”€โ”€ wsgi.py
โ”‚   โ””โ”€โ”€ asgi.py
โ”œโ”€โ”€ deploy/                    # Deployment configs
โ”‚   โ”œโ”€โ”€ k8s/                  # Kubernetes (Helm + Kustomize)
โ”‚   โ”œโ”€โ”€ ecs/                  # AWS ECS Fargate (Terraform)
โ”‚   โ”œโ”€โ”€ flyio/                # Fly.io configuration
โ”‚   โ”œโ”€โ”€ render/               # Render blueprints
โ”‚   โ””โ”€โ”€ ansible/              # EC2/Ansible playbooks
โ”œโ”€โ”€ fly.toml                   # Fly.io config (if selected)
โ”œโ”€โ”€ render.yaml                # Render blueprint (if selected)
โ”œโ”€โ”€ docs/                      # MkDocs documentation
โ”œโ”€โ”€ tests/                     # Test suite
โ”œโ”€โ”€ Dockerfile                 # Production image
โ”œโ”€โ”€ docker-compose.yml         # Development environment
โ”œโ”€โ”€ Justfile                   # Task runner
โ”œโ”€โ”€ pyproject.toml            # Dependencies & config
โ””โ”€โ”€ README.md

Start Developing

cd your-project

# Install dependencies (uv)
uv sync

# Start services
docker compose up -d

# Run migrations
just migrate

# Create superuser
just createsuperuser

# Start development server
just dev

Visit:

๐Ÿงช Testing

The template includes comprehensive test suites for both the template itself and generated projects.

Template Tests

# Run all template tests
pytest

# Run with coverage
pytest --cov

# Comprehensive test suite covering:
# - Django integration and compatibility
# - Feature generation for all project types
# - Project structure validation
# - Conditional file generation based on selections

Generated Project Tests

Each generated project includes a complete test suite with conditional test files:

cd your-project
just test

# Tests include:
# - Core functionality (health checks, settings, middleware)
# - User authentication and permissions
# - API endpoints (when enabled)
# - Celery tasks (when enabled)
# - Stripe integration (when enabled)
# - WebSocket functionality (when enabled)
# - 2FA authentication (when enabled)

๐Ÿ“– Documentation

Full documentation: https://django-keel.readthedocs.io/

Template Documentation

Generated Project Documentation

Each generated project includes its own comprehensive documentation in the docs/ directory:

  • Getting Started & Installation
  • Configuration
  • API Development
  • Testing Guide
  • Deployment (Kubernetes, EC2)
  • Architecture Overview
  • Monitoring & Observability

๐ŸŽจ Project Types & Examples

Django Keel adapts to your project needs with smart defaults based on project type:

๐Ÿš€ SaaS Application

Perfect for: Multi-tenant SaaS products with billing

project_type: saas
# Smart defaults:
# - API: DRF for backend
# - Frontend: Next.js for modern SPA
# - Teams: Enabled (multi-tenancy)
# - Stripe: Advanced mode with dj-stripe
# - Background: Celery for emails/async tasks
# - Deployment: Kubernetes for scale

๐Ÿ”Œ API Backend

Perfect for: Mobile apps, microservices, headless backends

project_type: api
# Smart defaults:
# - API: DRF only
# - Frontend: None
# - Teams: Disabled
# - Stripe: Disabled
# - Background: Celery for async processing
# - Deployment: Render for easy hosting

๐ŸŒ Web Application

Perfect for: Traditional Django web apps, MVPs, content sites

project_type: web-app
# Smart defaults:
# - API: None (traditional Django views)
# - Frontend: HTMX + Tailwind CSS
# - Teams: Disabled
# - Stripe: Disabled
# - Background: Celery for emails
# - Deployment: Fly.io for global edge

๐Ÿข Internal Tool

Perfect for: Corporate dashboards, admin panels, internal systems

project_type: internal-tool
# Smart defaults:
# - API: DRF for flexibility
# - Frontend: HTMX + Tailwind CSS
# - Teams: Enabled (departments/groups)
# - Stripe: Disabled (no billing)
# - Background: Celery for reports
# - Deployment: AWS EC2 (on-premise friendly)

โš™๏ธ Custom Configuration

Perfect for: Unique requirements, maximum control

project_type: custom
# You choose everything yourself!
# All options will be presented with sensible defaults

๐Ÿ“ Real-World Examples

Startup SaaS:

project_type: saas
use_stripe: advanced # Combines use_stripe + stripe_mode
use_teams: true
frontend: nextjs
deployment_targets: [kubernetes]

Mobile App Backend:

project_type: api
auth: jwt
use_channels: true # WebSockets for real-time features
deployment_targets: [render]

Company Blog:

project_type: web-app
frontend: htmx-tailwind
use_search: postgres-fts
deployment_targets: [flyio]

Enterprise Dashboard:

project_type: internal-tool
use_teams: true # Departments/groups
security_profile: strict
deployment_targets: [aws-ec2-ansible]

๐Ÿ”„ Updating Your Project

When the template is updated, you can pull in changes:

cd your-project
copier update

Copier will intelligently merge changes, respecting your modifications.

๐Ÿค Contributing

Contributions are welcome! Please see CONTRIBUTING.md for details.

๐Ÿ“œ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ™ Credits

Django Keel is inspired by:

๐ŸŒŸ Star History

If you find Django Keel useful, please consider starring the repository!

๐Ÿ“ž Support


Built with โค๏ธ by the Django community