Skip to main content

Django and Tailwind integration based on the prebuilt Tailwind CSS CLI.

Project description

django-tailwind-cli

GitHub Workflow Status PyPI Ruff uv GitHub Django Versions Python Versions Downloads Downloads / Month

The simplest way to integrate Tailwind CSS with Django

No Node.js required! This library provides seamless Tailwind CSS integration for Django using the standalone Tailwind CSS CLI. Inspired by the Tailwind integration for Phoenix, it eliminates the need for Node.js in your Django development workflow.

✨ Why django-tailwind-cli?

  • 🚀 Zero Node.js dependency - No npm, webpack, or build tools required
  • ⚡ Instant setup - Get Tailwind running in under 5 minutes
  • 🔄 Hot reload - Watch mode with automatic CSS rebuilding
  • 📦 Production ready - Optimized builds with automatic purging
  • 🎨 DaisyUI support - Built-in component library integration
  • 🛠️ Developer friendly - Rich CLI with helpful error messages and debugging tools

🚀 Quick Start

1. Install the package

# Using pip
pip install django-tailwind-cli

# Using uv (recommended)
uv add django-tailwind-cli

# Using poetry
poetry add django-tailwind-cli

2. Configure Django settings

Add to your settings.py:

INSTALLED_APPS = [
    # ... your other apps
    "django_tailwind_cli",
]

# Configure static files directory — make sure it exists on disk,
# Django raises an error at startup if it does not.
STATICFILES_DIRS = [BASE_DIR / "assets"]
mkdir -p assets

3. Set up your base template

Create or update your base template (e.g., templates/base.html):

<!DOCTYPE html>
{% load tailwind_cli %}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>My Django App</title>
    {% tailwind_css %}
</head>
<body class="bg-gray-50">
    <div class="container mx-auto px-4">
        {% block content %}{% endblock %}
    </div>
</body>
</html>

4. Start developing

# Start Django's dev server with a parallel Tailwind watcher (recommended)
python manage.py tailwind runserver

# Or run build and watch separately
python manage.py tailwind watch  # In one terminal
python manage.py runserver       # In another terminal

The watcher runs under Django's own auto-reloader, so editing settings.py (e.g. adding a new app) restarts it automatically and picks up the new configuration on the fly. Pass --noreload to opt out.

First run creates a managed <BASE_DIR>/.django_tailwind_cli/ directory for the CLI binary and an auto-generated source.css. The directory is automatically git-ignored — no entry in your project-level .gitignore needed.

Tip: Prefer a guided walkthrough? Run python manage.py tailwind setup instead for an interactive step-by-step first-time setup.

🎉 You're ready to go!

Start adding Tailwind classes to your templates:

{% extends "base.html" %}

{% block content %}
<div class="max-w-4xl mx-auto py-12">
    <h1 class="text-4xl font-bold text-gray-900 mb-8">
        Welcome to Django + Tailwind!
    </h1>
    <p class="text-lg text-gray-600">
        This text is styled with Tailwind CSS.
    </p>
    <button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded mt-4">
        Click me!
    </button>
</div>
{% endblock %}

📚 Next Steps: Check out the full documentation for advanced configuration and usage patterns.

🎯 Core Features

🏗️ Build System

  • Automatic CLI download - No manual setup required
  • Smart caching - Faster rebuilds with file change detection
  • Production optimization - Automatic CSS purging and minification
  • Force rebuild - --force flag for clean builds

🔧 Development Tools

  • Interactive setup - python manage.py tailwind setup
  • Configuration viewer - python manage.py tailwind config
  • Troubleshooting guide - python manage.py tailwind troubleshoot

🎨 Styling Features

  • Tailwind CSS 4.x - Latest features and performance improvements
  • DaisyUI integration - Pre-built components via tailwindcss-cli-extra
  • Custom CSS support - Bring your own styles and configurations
  • Template tag - Simple {% tailwind_css %} inclusion

⚡ Performance

  • File change detection - Only rebuild when necessary
  • Concurrent processing - Parallel build and server processes
  • Progress indicators - Visual feedback during downloads and builds
  • Verbose logging - Detailed diagnostics with --verbose

🛠️ Management Commands

Command Purpose Example
setup Interactive first-time setup guide python manage.py tailwind setup
build Production CSS build python manage.py tailwind build
watch Development file watcher (Django autoreload by default) python manage.py tailwind watch
runserver Django dev server + watcher (forwards any runserver flag) python manage.py tailwind runserver
config Show current configuration python manage.py tailwind config
troubleshoot Debug common issues python manage.py tailwind troubleshoot

tailwind runserver is a transparent passthrough: every positional argument and option (apart from --force-default-runserver) is forwarded verbatim to the underlying runserver or runserver_plus. Every flag those commands accept works — including runserver_plus-only ones like --extra-file, --reloader-interval, and --print-sql.

📋 Requirements

  • Python: 3.10+
  • Django: 4.2 LTS, 5.2, or 6.0
  • Platform: Windows, macOS, Linux (automatic platform detection)

⚙️ Configuration Examples

Basic Configuration

# settings.py
STATICFILES_DIRS = [BASE_DIR / "assets"]

Advanced Configuration

# Pin specific Tailwind version
TAILWIND_CLI_VERSION = "4.1.3"

# Custom CSS paths
TAILWIND_CLI_SRC_CSS = "src/styles/main.css"
TAILWIND_CLI_DIST_CSS = "css/app.css"

# Enable DaisyUI
TAILWIND_CLI_USE_DAISY_UI = True

# Use an already-installed Tailwind binary (e.g. `brew install tailwindcss`)
TAILWIND_CLI_USE_SYSTEM_BINARY = True

# Auto-inject @source directives for editable-installed external apps (opt-in)
TAILWIND_CLI_AUTO_SOURCE_EXTERNAL_APPS = True

Production Settings

# Optimized for production
TAILWIND_CLI_VERSION = "4.1.3"  # Pin version
TAILWIND_CLI_AUTOMATIC_DOWNLOAD = False  # Use pre-installed CLI
TAILWIND_CLI_DIST_CSS = "css/tailwind.min.css"

🔍 Troubleshooting

Common Issues

CSS not updating?

python manage.py tailwind build --force
python manage.py tailwind troubleshoot

Configuration problems?

python manage.py tailwind config
python manage.py tailwind setup

Missing templates? Make sure every template directory is covered by an @source directive in your Tailwind CSS input file — Tailwind CSS 4.x discovers templates exclusively through those directives.

Performance Tips

  1. Use file watching: python manage.py tailwind runserver for automatic rebuilds
  2. Declare template sources explicitly: Use @source directives in your CSS so Tailwind only scans what you need
  3. Optimize builds: Use --force only when necessary
  4. Monitor file changes: Use --verbose for detailed logging

🎨 DaisyUI Integration

Enable beautiful pre-built components:

# settings.py
TAILWIND_CLI_USE_DAISY_UI = True
<!-- Use DaisyUI components -->
<button class="btn btn-primary">Primary Button</button>
<div class="card bg-base-100 shadow-xl">
    <div class="card-body">
        <h2 class="card-title">Card Title</h2>
        <p>Card content goes here.</p>
    </div>
</div>

📚 Documentation & Resources

🔗 Related Projects

🤝 Contributing

We welcome contributions! This project uses modern Python tooling for development.

Prerequisites

  • uv - Fast Python package manager
  • just - Command runner (optional but recommended)

Quick Development Setup

# Clone the repository
git clone https://github.com/django-commons/django-tailwind-cli.git
cd django-tailwind-cli

# Setup development environment (with just)
just bootstrap

# Or setup manually with uv
uv venv
uv sync --all-extras

Development Commands

# With just (recommended)
just upgrade          # Update dependencies
just lint             # Run linting and formatting
just test             # Run test suite
just test-all         # Run tests across Python/Django versions

# Without just
uv sync --all-extras  # Update dependencies
uvx pre-commit run --all-files  # Run linting
uv run pytest        # Run tests
uvx --with tox-uv tox # Run full test matrix

Contribution Guidelines

  1. 🍴 Fork the repository
  2. 🌿 Create a feature branch (git checkout -b feature/amazing-feature)
  3. ✅ Test your changes (just test)
  4. 📝 Commit with conventional commits (feat:, fix:, docs:, etc.)
  5. 📤 Push to your branch (git push origin feature/amazing-feature)
  6. 🔄 Create a Pull Request

Code Quality

  • Type hints for all new code
  • Tests for new features and bug fixes
  • Documentation updates for user-facing changes
  • Conventional commits for clear history

License

This software is licensed under MIT license.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_tailwind_cli-4.6.0.tar.gz (117.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_tailwind_cli-4.6.0-py3-none-any.whl (37.0 kB view details)

Uploaded Python 3

File details

Details for the file django_tailwind_cli-4.6.0.tar.gz.

File metadata

  • Download URL: django_tailwind_cli-4.6.0.tar.gz
  • Upload date:
  • Size: 117.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for django_tailwind_cli-4.6.0.tar.gz
Algorithm Hash digest
SHA256 c600daede503e6b3f64d97eca5dead2cca52d9057b8818ec17a75e060febbf03
MD5 bd07ec472f4f5caa5b6388aca1394f13
BLAKE2b-256 fe3476a7f2ca5af05268b116f8010663dc0404d1c95428662976db4f720b77b1

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_tailwind_cli-4.6.0.tar.gz:

Publisher: release.yml on django-commons/django-tailwind-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file django_tailwind_cli-4.6.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_tailwind_cli-4.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 232016bffc89ded46420a12df3fd75b4b055ee002a335445af695f2e49abf770
MD5 24a6f29556b6aa1afd3eb15d19e935a7
BLAKE2b-256 f2d406eb54e1d2762ff613f9f1aadcebf6c0044c39cb9e7725d22638e013fbd6

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_tailwind_cli-4.6.0-py3-none-any.whl:

Publisher: release.yml on django-commons/django-tailwind-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page