Skip to content

Changelog

Changelog Policy

All changes to SpeedPy's public API surface — REST endpoints, serializer fields, scopes, auth behavior, webhook payloads, error shapes, rate limits, MCP schemas, and client examples — must be recorded in this changelog alongside other release notes.

Change Categories

Use these labels to classify each entry:

Category When to use
Breaking Removing/renaming fields or endpoints, changing types, tightening requirements, removing auth methods
Additive New endpoints, new optional fields, new query parameters, new enum values, new HTTP methods
Behavior change Changed semantics, different error codes, modified rate limits, altered sorting/filtering defaults
Deprecation Marking endpoints or fields for future removal (include sunset date)
Security Auth changes, permission fixes, vulnerability patches affecting integrations
Docs-only OpenAPI description updates, example corrections with no runtime effect
Experimental New features behind feature flags or explicitly marked unstable — no stability guarantee

Required Fields

Each API change entry must include:

  • Date or version — when the change ships
  • Category — one of the labels above
  • Affected surface — endpoints, fields, scopes, webhook events, or schemas involved
  • Description — what changed and why
  • Migration notes — what consumers need to do (for breaking changes and deprecations)
  • Client impact — how generated clients, webhook consumers, or integrations are affected
  • Deprecation/sunset window — when the old behavior will be removed (if applicable)
  • Links — to related schema changes, API versioning docs, or migration guides

Entry Template

### YYYY-MM-DD — `vX.Y.Z`

#### API Changes

- **Breaking:** `GET /api/v1/example/` — Removed the `legacy_field` response field.
  Consumers must use `new_field` instead. See [migration guide](./link).
  Sunset: 2026-09-01.

- **Additive:** `POST /api/v1/widgets/` — New optional `color` request field.
  No action required. Generated clients should regenerate to pick up the new field.

- **Deprecation:** `GET /api/v1/old-endpoint/` — Deprecated in favor of
  `/api/v1/new-endpoint/`. Returns `Deprecation: true` and `Sunset` headers.
  Will be removed after 2026-12-01. See [API Versioning](api-versioning.md).

- **Behavior change:** `GET /api/v1/items/` — Default sort changed from
  `created_at` to `updated_at`. Pass `?ordering=created_at` to preserve old behavior.

- **Security:** `POST /api/v1/auth/token/` — Rate limit tightened from 60/min to
  20/min per IP. Clients making bulk token requests may need to add backoff.

- **Additive:** New OAuth scope `teams:billing`. Grants read access to team
  billing data via `GET /api/v1/teams/{id}/billing/`. Existing tokens are
  unaffected; clients must request the new scope explicitly.

- **Breaking:** `POST /api/v1/widgets/` — Error response shape changed from
  `{"detail": "..."}` to `{"errors": [{"field": "...", "message": "..."}]}`.
  Clients parsing error responses must update their error-handling logic.

- **Additive:** New webhook event `invoice.finalized`. Fired when an invoice
  moves to finalized status. Payload includes `invoice_id`, `team_id`, and
  `amount`. No action required for existing webhook consumers.

- **Experimental:** `GET /api/v1/beta/suggestions/` — New endpoint, marked
  experimental. May change without notice in future releases.

Codegen-Sensitive Changes

Additive changes can break generated API clients if operation IDs or schema shapes change unexpectedly. When adding fields, endpoints, or enum values, note whether clients need to regenerate. Webhook payload changes follow the same policy as REST API response changes.

Experimental Endpoints

Endpoints marked experimental carry no stability guarantee. Document them in the changelog when added, but make clear they may change or be removed without a deprecation window.

For versioning rules, deprecation headers, and support windows, see API Versioning & Deprecation.


March 2026

Django 6.0

SpeedPy has been updated to Django 6.0.3, a major version upgrade from Django 5.2.8.

Django 6.0 brings continued improvements to the ORM, async support, and template engine. Review the Django 6.0 release notes before merging this update into your project, as there may be breaking changes depending on which Django internals you use.

Infrastructure

  • Node.js updated from 25.6.0 to 25.8.1 in the Docker image

Python Package Updates

Package Previous Updated
Django 5.2.8 6.0.3
django-stubs 5.2.8 6.0.1
gunicorn 23.0.0 25.1.0
django-ses 4.5.0 4.7.2
djangoql 0.18.1 0.19.1
pyjwt[crypto] 2.10.1 2.12.1
djangorestframework 3.16.1 3.17.0
django-otp 1.6.3 1.7.0
django-allauth 65.13.1 65.15.0
django-crispy-forms 2.5 2.6
django-debug-toolbar 6.1.0 6.2.0
django-environ 0.12.0 0.13.0
celery[redis] 5.6.1 5.6.2
whitenoise 6.11.0 6.12.0
psycopg 3.3.2 3.3.3
Pillow 12.0.0 12.1.1
black 25.12.0 26.3.1

New: update_pyproject.py script

A new update_pyproject.py script is now included in the boilerplate. It automates keeping your Python dependencies up to date by fetching the latest versions from PyPI and rewriting pyproject.toml in place.

How to get this update

Pull it into your project via the speedpy Git remote:

git fetch speedpy
git merge speedpy/master --allow-unrelated-histories

See the Updating page for full instructions.