This release is a pre-release and may not be stable for production use.
dj-hyperview
Server-driven Hyperview UI for Django, with every screen owned by your project. Resolve, render, validate, cache, and publish mobile UI from filesystem or database templates without bundling application screens into the package.
- Consumer-owned screens — keep XML and HXML inside the Django project that defines the mobile application.
- Ordered template sources — resolve from configured filesystem directories, the optional database app, or custom source backends with explicit precedence.
- Live database publication — edit validated templates through Django admin and expose committed changes on the next request.
- Cache consistency — opt into any Django cache backend, including Redis, with source-aware keys and generation-based invalidation.
- Django-native HTTP integration — use lazy template responses, class-based views, request metadata, content negotiation, and standard CSRF protection.
- Fail-closed validation — enforce canonical names, UTF-8, XML safety, consumer-provided XSD rules, and configurable resource limits.
dj-hyperview does not ship application screens, runtime XML or HXML files, mobile components, Redis, or a required database app. Those choices remain under the consumer project's control.
Requirements
- Python: 3.12, 3.13, or 3.14
- Django: 5.2 or 6.1
- lxml: 6.1 or newer, below 7
- Hyperview contract: 0.110.0
Installation
# uv (recommended)
uv add dj-hyperview
# pip
pip install dj-hyperview
Register the base Django application:
INSTALLED_APPS = [
# Your project applications.
"dj_hyperview.apps.DjHyperviewConfig",
]
The base app performs no database, cache, or network access during startup. Database-backed templates and admin integration are optional.
Quick start
Create hyperview/screens/home.xml inside the consumer project:
<?xml version="1.0" encoding="UTF-8"?>
<doc xmlns="https://hyperview.org/hyperview">
<screen id="home">
<body>
<view>
<text>Hello from Django</text>
</view>
</body>
</screen>
</doc>
Configure the filesystem source in settings.py:
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
HYPERVIEW = {
"TEMPLATE_DIRS": [BASE_DIR / "hyperview"],
"SOURCES": [
{"BACKEND": "dj_hyperview.sources.FileSystemSource"},
],
}
Expose the screen through Django's URL configuration:
from django.urls import path
from dj_hyperview import HyperviewTemplateView
urlpatterns = [
path(
"hyperview/home/",
HyperviewTemplateView.as_view(template_name="screens/home.xml"),
name="hyperview-home",
),
]
A request to /hyperview/home/ returns the rendered document as
application/vnd.hyperview+xml.
Configuration
All package settings live under the HYPERVIEW dictionary. Sources are queried
in declaration order, and the first match wins:
HYPERVIEW = {
"TEMPLATE_DIRS": [BASE_DIR / "hyperview"],
"SOURCES": [
{"BACKEND": "dj_hyperview.contrib.database.sources.DatabaseSource"},
{"BACKEND": "dj_hyperview.sources.FileSystemSource"},
],
}
To publish templates through the database and Django admin, add the optional app and run migrations:
INSTALLED_APPS = [
# Django applications used by your project.
"django.contrib.admin",
"dj_hyperview.apps.DjHyperviewConfig",
"dj_hyperview.contrib.database",
]
python manage.py migrate
Caching remains disabled unless a non-empty HYPERVIEW["CACHE"] configuration
is supplied. See the configuration and cache guides before enabling a shared
backend.
Documentation
📚 Full documentation — including Installation, Quick Start, Configuration, Filesystem sources, Database and admin, Cache consistency, Security, and the public Python API.
The package is published at PyPI.
Development
See the contributing guide for the quality contract, supported test matrix, and release workflow.
uv sync --all-groups
uv run pytest
uv run ruff check .
uv run ruff format --check .
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dj_hyperview-0.1.0a4.tar.gz.
File metadata
- Download URL: dj_hyperview-0.1.0a4.tar.gz
- Upload date:
- Size: 29.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f3970efdd770942dbad352a92e0f0a421d21582a8b3f8dfb6adf823d4065cdcf
|
|
| MD5 |
03165cbe0d629174e7ac3ede490e2641
|
|
| BLAKE2b-256 |
9f64a3ce0c591bdff5087f33f665f5083688f3e4ed70bfe8dc0d4f405ffaf172
|
Provenance
The following attestation bundles were made for dj_hyperview-0.1.0a4.tar.gz:
Publisher:
release.yml on eamigo86/dj-hyperview
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dj_hyperview-0.1.0a4.tar.gz -
Subject digest:
f3970efdd770942dbad352a92e0f0a421d21582a8b3f8dfb6adf823d4065cdcf - Sigstore transparency entry: 2720302901
- Sigstore integration time:
-
Permalink:
eamigo86/dj-hyperview@dc972ef1eabd47a7d1a87130bf0e5823c1f62a5e -
Branch / Tag:
refs/tags/v0.1.0a4 - Owner: https://github.com/eamigo86
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@dc972ef1eabd47a7d1a87130bf0e5823c1f62a5e -
Trigger Event:
push
-
Statement type:
File details
Details for the file dj_hyperview-0.1.0a4-py3-none-any.whl.
File metadata
- Download URL: dj_hyperview-0.1.0a4-py3-none-any.whl
- Upload date:
- Size: 42.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9b5a72f6336766a8a176552ae5de00b94ee0058b0a58de041ebec37fcac20dc3
|
|
| MD5 |
b6b5c11a989ef15c581795eb466da9af
|
|
| BLAKE2b-256 |
ca57ef4422f1b478bf072b1d371cd853e9f4a1b3e39f370f6cc62a445d3fbf10
|
Provenance
The following attestation bundles were made for dj_hyperview-0.1.0a4-py3-none-any.whl:
Publisher:
release.yml on eamigo86/dj-hyperview
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dj_hyperview-0.1.0a4-py3-none-any.whl -
Subject digest:
9b5a72f6336766a8a176552ae5de00b94ee0058b0a58de041ebec37fcac20dc3 - Sigstore transparency entry: 2720303448
- Sigstore integration time:
-
Permalink:
eamigo86/dj-hyperview@dc972ef1eabd47a7d1a87130bf0e5823c1f62a5e -
Branch / Tag:
refs/tags/v0.1.0a4 - Owner: https://github.com/eamigo86
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@dc972ef1eabd47a7d1a87130bf0e5823c1f62a5e -
Trigger Event:
push
-
Statement type: