Server Changelog
Integrator-facing changes for the vueda Python package.
Use this page for changes that affect server package consumers: Django apps, settings, serializers, viewsets, permissions, metadata responses, management commands, migrations, REST behavior, and compatibility notes.
Unreleased
Breaking Changes
Workflow
update_object_statetakes only the state (#527):update_object_state(state)no longer acceptsuserorchange_reason. The write joins the open action, which records the acting user. Remove theuserandchange_reasonarguments from calls toupdate_object_state.
Features
History
history-listincludes workflow state changes (#527):- On a workflow-enabled model, an object's history includes its workflow state changes as events with
relation: "state". A transition's state change and the writes of itson_transitionhook appear as one action, labelled with the transition code, such asapprove. A custom history view can label these events by checking forrelation: "state". - Model History Response describes which events the response includes and how they group.
- On a workflow-enabled model, an object's history includes its workflow state changes as events with
Fixes
Models
- Nested expands under a viewset's own
Prefetch(#546):- A nested expand now keeps its query plan when the viewset prefetches the relation with a
Prefetchqueryset of its own, so the nested relation loads in one query instead of one query per row. A nested model with aformatted_name_lookup_expressionreturns its name instead ofnull, and the viewset'sPrefetchno longer needs_base_managerto avoid thatnull. Query Cost of List and Retrieve Expansion describes which viewset prefetches this covers.
- A nested expand now keeps its query plan when the viewset prefetches the relation with a
v3.0.0b1 (2026-10-21)
This is the first public beta of the VUEDA v3 server. It adds REST endpoints, permissions, metadata, history, and workflow to a Django project, and the VUEDA client builds its screens from that metadata. A project on server v2.3.3 upgrades with Upgrade from VUEDA v2, which also covers the matching client upgrade. That guide lists v2 security defects that may need a review of existing data.
Installation and Requirements
Install the beta from the public PyPI index. Prereleases need an explicit opt-in:
uv add --prerelease allow vuedaThe server requires:
- Python 3.12 to 3.14.
- Django 6.1 and Django REST framework 3.18 or later.
- PostgreSQL. History uses database triggers.
- A cache that every worker process shares, named by
CACHE_URL. Install theredisextra for a Redis cache. Configure the Cache and Sessions describes the choices.
get_defaults() builds the Django settings from your environment. Configuration Reference lists every key that it reads.
Capabilities
- History. Every VUEDA model records its changes through database triggers unless it opts out. History responses group events by the user action that caused them, and
audited_actiongroups writes outside a request. History and Workflow describes the policy, and Purge Model History Rows covers retention. - Workflow. A model opts into workflow with
class Vueda.Workflow. State permissions layer over model permissions, and transitions can ask the user to confirm warnings. Workflow Permission Overlay describes the rules, and Manage Workflows and Generate Workflow Migrations covers the tooling. - Write confirmation. Serializers, viewsets, and custom actions return warnings that the client confirms before the write. Require Confirmation Before a Write covers each hook.
- Ordering and filtering. Ordering and filter names cross relations with dots. A model can place nulls in requested sorts, order by a database function by default, and order or filter by a related
formatted_name. Ordering, filter, and column total paths may end in a transform, such ascreated__year. Model info reports the default ordering. Declare List Ordering shows each option. - Column totals. A list response sums the columns that the request asks for. Expose Aggregates in
listResponses describes the contract. - Composite primary keys. Models with a composite primary key get list, detail, and write endpoints. Set Up CRUD for a Composite Primary Key Model shows the setup.
- File fields. File and image columns serialize as
{name, url}. Ablank=Truecolumn acceptsnull, which saves no file or clears the stored one. Saves that carry files go as multipart with a manifest. - Nested writes. Nested writes check the related model's permissions, keep child rows under their own parent, and accept files at any depth. Nested Write Compatibility describes the contract.
- Auth endpoints. VUEDA routes forgot-password, reset-password, and two-factor reauthentication, and rate-limits code sends and password attempts. Rate-Limited Auth Endpoints lists the limits.
- Optional apps. A project can leave out
vueda.workflowandvueda.vdq. Django App Boundaries describes what each app adds. - VDQ tracking. The VDQ queue matches provider status updates to queue items that have no stored provider ID. VDQ and Background Work Model describes the matching.
- System checks.
manage.py checkreports configuration that would fail at request time, such as orderings that name no field and column totals that cannot be summed.
Known Limitations
- An upgrade from v2 does not convert django-simple-history records into v3 history (#511). Archive the
Historical*tables before you migrate. updateworkflowmigrationscannot rewrite workflow migrations that v2 generated. The reverse code of those migrations deletes the object states of every workflow (#510).- A write can link any related row whose primary key the user knows. The link ignores row-level rules on the related model (#466).
- A nested row drops an unknown key without an error (#424).
- Choice endpoints return the first 200 rows and have no search (#381).
- The permissions overview cannot delete a group (#423).
- A workflow cannot be retired from a model that has objects (#431).
- Object transition lists ignore
allow_transitionoverrides, so the client can offer a transition that fails (#430). - A VDQ queue item stays in
queuedorsendingwhen its worker stops mid-task (#436). - Any signed-in user can download any VDQ email attachment by its ID. Known Limitations describes the boundary.
Public Baseline
VUEDA server versions before v3.0.0b1 were private releases or prereleases. This page starts the public history at v3.0.0b1.