Skip to main content

Getting Started with django-rspack

This guide walks you through setting up django-rspack in a new or existing Django project.

Prerequisites

  • Python 3.10+
  • Django 4.2+
  • Node.js 18+ and npm

Installation

1. Install the Python package

pip install django-rspack

2. Add to your Django settings

# settings.py
INSTALLED_APPS = [
...
"django_rspack",
]

3. Run the installer

python manage.py rspack_install

This creates the following files:

FilePurpose
config/shakapacker.ymlMain configuration file
rspack.config.jsRspack bundler configuration
app/javascript/packs/application.jsDefault JavaScript entry point
package.jsonNode.js package file (if not present)

4. Install Node.js packages

npm install

This installs the shakapacker npm package and Rspack CLI tools.

5. Add template tags to your templates

{% load rspack %}
<!DOCTYPE html>
<html>
<head>
<title>My App</title>
{% rspack_bundle_css "application" %}
</head>
<body>
<h1>Hello, django-rspack!</h1>
{% rspack_bundle_js "application" %}
</body>
</html>

6. Start the dev server

In a separate terminal:

python manage.py rspack_dev_server

Then start Django:

python manage.py runserver

Optional: Dev server proxy middleware

To automatically proxy asset requests to the Rspack dev server during development, add the middleware:

# settings.py
MIDDLEWARE = [
"django_rspack.middleware.RspackDevServerMiddleware",
...
]

This is optional — without it, the dev server serves assets directly on its own port (default: 3035).

Adding CSS

Create a CSS file and import it from your entry point:

/* app/javascript/packs/application.css */
body {
font-family: system-ui, sans-serif;
}
// app/javascript/packs/application.js
import "./application.css";
console.log("Hello from django-rspack!");

Then add the CSS tag to your template:

{% rspack_bundle_css "application" %}

Multiple entry points

Create additional entry files in app/javascript/packs/:

// app/javascript/packs/admin.js
console.log("Admin panel JS");

Update your rspack.config.js:

entry: {
application: path.resolve(__dirname, "app/javascript/packs/application.js"),
admin: path.resolve(__dirname, "app/javascript/packs/admin.js"),
},

Use them in different templates:

{% rspack_bundle_js "admin" %}

Next steps