Skip to main content

django-vpg

Status: Pre-1.0. The driver core runs in production as GlitchTip's database engine, and this package is maintained by the GlitchTip team. Everything below 1.0 is the API sandbox — packaging and public surface may still change between minor versions.

A Rust-powered PostgreSQL driver and Django database backend.

Documentation: https://django-vpg.glitchtip.com

django-vpg replaces the connection/cursor IO layer of Django's stock PostgreSQL backend with a Rust core (tokio-postgres + deadpool, via PyO3): swap one ENGINE line, keep your schema, migrations, and ORM code unchanged.

Part of the django-v* family — django-vcache, django-vtasks, django-vpg — small, fast, Rust-core Django infrastructure maintained by the GlitchTip team. django-vcache and django-vtasks are battle-tested in production at glitchtip.com; django-vpg is the newest member. (The v originally stood for Valkey; with three packages it now just marks the family.)

Why

  • CPU and RSS. Protocol parsing, row decoding, and type marshalling run in Rust; only final Python values are materialized — intermediate protocol buffers and COPY encoding never traverse the Python heap. In the GlitchTip team's A/B benchmarks against psycopg (production-shaped ingest workloads, replayed locally), the driver holds resident memory flat under heavy-tailed payloads where libpq's buffers ratchet (2.5 vs 21 MB growth per 10k events), and wins per-op CPU on jsonb reads, pipelined batch inserts, and COPY event batches.
  • fetch_models fusion. Row → model-instance materialization can run as a single driver call instead of a per-row Python loop.
  • COPY at native speed. COPY FROM STDIN with batch text-format encoding in Rust (encode_copy_chunk).
  • psycopg-shaped errors. Full PEP 249 exception hierarchy with sqlstate and Diagnostics, so existing error-handling code ports cleanly.
  • Server-side cancellation. Cancelled queries fire a PostgreSQL CancelRequest on a fresh connection and the pooled connection returns clean — no poisoned pool state, no abandoned server work.
  • Real pooling. deadpool checkout/return with warmup, wait timeouts, and jittered max-lifetime recycling; prepared-statement cache with psycopg3-style admission (prepare_threshold / prepared_max). Behind a transaction-mode PgBouncer without max_prepared_statements, disable prepared statements the psycopg way — OPTIONS={"prepare_threshold": None}.
  • libpq-parity TLS. sslmode (disable/allow/prefer/require/ verify-ca/verify-full), sslrootcert, client certificates.

Install

pip install django-vpg            # sync ORM + async driver API
pip install "django-vpg[async]"   # + async ORM via django-async-backend (Django 6+)

Wheels cover Linux (manylinux + musllinux, x86_64 + aarch64, CPython 3.12-3.14). Other platforms install from the sdist, which needs a Rust toolchain at build time.

Note: psycopg (the library) must be installed — it is a declared dependency. Django's stock postgresql backend, which django-vpg subclasses for schema/introspection/operations, imports it at load time. The IO path never uses it.

Quickstart

DATABASES = {
    "default": {
        "ENGINE": "django_vpg.backend",
        "NAME": "mydb",
        "USER": "postgres",
        "PASSWORD": "...",
        "HOST": "db.example.com",
        "PORT": "5432",
        # Optional driver OPTIONS (libpq-parity naming; psycopg3-compatible
        # pool dict):
        # "OPTIONS": {
        #     "pool": {"max_size": 20, "min_size": 2},   # default max_size: 10
        #     "sslmode": "verify-full",
        #     "sslrootcert": "/path/ca.pem",
        # },
    }
}

Supported OPTIONS keys: pool (psycopg3-compatible dict — max_size, min_size, timeout, max_lifetime, max_idle, name — or False for a dedicated single-slot connection per Django connection, e.g. under test runners), pool_size (shorthand for pool={"max_size": N}; default 10), prepare_threshold (psycopg3 semantics — int = prepare after N uses, default 5, 0 = prepare on first use, None = disable prepared statements), prepared_max, isolation_level, application_name, connect_timeout, keepalives, keepalives_idle, sslmode, sslrootcert, sslcert, sslkey, and server_settings. pgbouncer (bool) is accepted as a legacy alias for prepare_threshold=None; prefer the psycopg spelling, which — unlike pgbouncer — is a real psycopg key, so the same OPTIONS dict also works on the stock backend. Unknown keys warn once and are dropped.

The async story (three layers)

  1. Sync ORM — stock Django, zero extra deps. Works everywhere Django works.
  2. Async driver API — real asyncio, works anywhere. The raw driver (django_vpg._vpg_driver.RustPgDriver) exposes await-able query, execute, transaction, and COPY operations with no dependency on any async framework beyond asyncio itself; driver awaitables interoperate with gather, wait_for, shield, and cancellation. (django_vpg.dbapi itself is the sync DB-API 2.0 shim the Django engine builds on.)
  3. Async ORM — via django-async-backend. Installing the django-vpg[async] extra activates AsyncDatabaseWrapper, which plugs into the async_connections framework. Without it, the backend cleanly degrades to sync-only (no ImportError).

Unifying Django's connections and async_connections (transaction management and isolation across both worlds) is active upstream work in django-async-backend that this package tracks closely.

Pooling and session semantics (psycopg is the reference)

Two rules, both deliberately psycopg's, because porting an app should not mean re-learning connection behaviour:

  • The backend decides whether a transaction is open — never the driver. Every PostgreSQL response ends with a ReadyForQuery carrying the session's transaction state; libpq caches it as PQtransactionStatus and psycopg exposes it as Connection.info.transaction_status, which django-vpg does too. On release the pool applies psycopg_pool's policy: idle sends nothing, an open or failed block is rolled back, and a connection whose state cannot be established is discarded rather than reused. (Inferring this from SQL text instead is not sound — it misreads ROLLBACK TRANSACTION TO SAVEPOINT, COMMIT AND CHAIN, ABORT, comment-led SQL and PL/pgSQL bodies, and it cannot see statements that never went through the driver's own statement path.) A pool hook re-checks at checkout, so no return path can hand on a connection that is still inside a transaction.
  • Session state is not reset between checkouts. Same as psycopg_pool, which ships no reset by default: GUCs set with SET, TEMP tables, session advisory locks and LISTEN registrations survive into whoever checks the connection out next. Reset them yourself if your application needs a clean session — and note DISCARD ALL is the wrong tool, because it deallocates prepared statements the driver's per-connection cache still refers to.

One more difference worth knowing if you use the async ORM: in async autocommit each statement borrows a pooled connection and returns it, so consecutive autocommit statements may run on different backend sessions — pg_backend_pid() is not stable, and TEMP tables, SET GUCs and advisory locks do not persist between them. The sync path pins one session per connection and matches psycopg. Transactions pin in both. This is a deliberate trade for throughput (holding no connection between statements lets a small pool serve many concurrent tasks), and it is safe rather than merely fast because of the status checks above. It will become a configurable choice before 1.0.

The tokio runtime

The driver runs on a fork-safe shared tokio runtime owned by the package (1 worker thread by default; VPG_TOKIO_WORKER_THREADS overrides). Prefork servers are safe: the runtime is rebuilt per child on first use.

Rust embedders get the same hook django-vcache offers: link vpg-pyo3 as an rlib, re-export its pyclasses into your own pymodule, and install a process-wide runtime with vpg_core::set_runtime_provider(my_get_runtime) so one tokio pool serves every driver in the process. (This is how GlitchTip's own Rust extension embeds the driver.) The hook returns false if a runtime had already been built — assert on it at module init to catch wiring mistakes.

Known limitations

  • USE_TZ = True only (Django's default). timestamptz values are returned timezone-aware in UTC. The stock psycopg backend returns naive local datetimes when USE_TZ = False; django-vpg does not implement that conversion yet, so a USE_TZ = False project will hit naive/aware comparison errors on DateTimeFields.
  • One statement per execute(). Multi-statement strings (cursor.execute("SET x = 1; SELECT 1")) raise a syntax error where psycopg3 runs them; the extended query protocol is one statement per Parse. Django's schema editor and test-runner paths batch through a dedicated internal path and are unaffected — this only bites ported raw-SQL code, which should split its statements.

Status

The driver is the only database engine in GlitchTip's backend (as of July 2026). Pre-1.0 while the standalone packaging settles; the driver core predates this package and carries its full test suite (including an in-process PG wire-server harness) with it.

Known naming wart: the vendored tokio-postgres buffer-cap patch reads the GT_PG_BUF_CAP_BYTES env var (512 KiB default retained-buffer cap); it will be renamed with a compatibility window before 1.0.

Development

./scripts/check.sh        # fmt + clippy -D warnings + cargo test + ruff
                          # (includes tests/wire.rs — an in-process scripted
                          #  PG wire server; no live postgres needed)

# Python suite (needs maturin + a live postgres for the marked tests):
python -m venv .venv && source .venv/bin/activate
pip install maturin pytest pytest-asyncio django psycopg django-async-backend
maturin develop --release
VPG_TEST_DSN=postgres://postgres@localhost:5432/postgres python -m pytest tests/

The workspace is two crates: crates/vpg-core (pure Rust, no pyo3, cargo test-able) and crates/vpg-pyo3 (thin bindings, cdylib + rlib). vendor/tokio-postgres carries a minimal retained-buffer-capacity patch — see vendor/tokio-postgres/GT_PATCH.md for rationale and the re-audit procedure on version bumps.

License

MIT

Metadata

Release files for django-vpg 0.3.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-vpg 0.3.2
File Size Uploaded Provenance
django_vpg-0.3.2.tar.gz 280.7 kB Without provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for django-vpg 0.3.2
File
django_vpg-0.3.2-cp314-cp314-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ x86-64 Details
django_vpg-0.3.2-cp314-cp314-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ ARM64 Details
django_vpg-0.3.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64 Details
django_vpg-0.3.2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ ARM64 Details
django_vpg-0.3.2-cp313-cp313-musllinux_1_2_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-64 Details
django_vpg-0.3.2-cp313-cp313-musllinux_1_2_aarch64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ ARM64 Details
django_vpg-0.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
django_vpg-0.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details
django_vpg-0.3.2-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details
django_vpg-0.3.2-cp312-cp312-musllinux_1_2_aarch64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ ARM64 Details
django_vpg-0.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
django_vpg-0.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details

Total release size: 27.8 MB

Release files / django_vpg-0.3.2.tar.gz

Download URL django_vpg-0.3.2.tar.gz
Size 280.7 kB
Tags Source
SHA-256 checksum
How to use checksums
3d42a7a3440485a9fee75adfb5b668d951fd3266596ba1ffac4afd66dd237161
BLAKE2b-256 checksum
How to use checksums
2e2c4c0994faa18de3723e41f601ef9954f286a0c88f4a05b9c980f929c31770
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_vpg-0.3.2-cp314-cp314-musllinux_1_2_x86_64.whl

Download URL django_vpg-0.3.2-cp314-cp314-musllinux_1_2_x86_64.whl
Size 2.3 MB
Tags CPython 3.14 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
a9886e1d44ff563f642fb98427875c8a60bd77fd52b1de2651f231eb971b28c9
BLAKE2b-256 checksum
How to use checksums
121f9f93b1151892743e71b7b0c5c723eb32b4481f67b361b3b292b2c09b68bf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_vpg-0.3.2-cp314-cp314-musllinux_1_2_aarch64.whl

Download URL django_vpg-0.3.2-cp314-cp314-musllinux_1_2_aarch64.whl
Size 2.3 MB
Tags CPython 3.14 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
5356c9473b259db5fdd5670635cbc55060e209fcf0a349edfaf8f2d9ac9bc9a0
BLAKE2b-256 checksum
How to use checksums
241d996c99c047665d5b5b95684ec23fab989cca22805778f8fe219e9ea043de
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_vpg-0.3.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL django_vpg-0.3.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.3 MB
Tags CPython 3.14 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
871e267f184de290d6f0d616c1a447e3c64e6c7048fcd0a76e6024ba3d6880b1
BLAKE2b-256 checksum
How to use checksums
799e95f898b26cf76bcbf7bf5d49356289cd046c1057494b9f2be50572f61c7c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_vpg-0.3.2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL django_vpg-0.3.2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 2.3 MB
Tags CPython 3.14 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
d03d417a2692ab075448a80a95ef6010dc773aac73be3d5c21d8a3bfca159517
BLAKE2b-256 checksum
How to use checksums
428285a73fe006009ce8081a3d61f25e450bfac5e93c5c8f7304582ee10d4fad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_vpg-0.3.2-cp313-cp313-musllinux_1_2_x86_64.whl

Download URL django_vpg-0.3.2-cp313-cp313-musllinux_1_2_x86_64.whl
Size 2.3 MB
Tags CPython 3.13 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
8c1398417f13c92ee212abdc38075478e533fa7d79f25691853c9e1e2e175412
BLAKE2b-256 checksum
How to use checksums
4af0280acb04503e6bf0c4fbc98f426065d7c345b290a6fadb876bb57cb9ad27
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_vpg-0.3.2-cp313-cp313-musllinux_1_2_aarch64.whl

Download URL django_vpg-0.3.2-cp313-cp313-musllinux_1_2_aarch64.whl
Size 2.3 MB
Tags CPython 3.13 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
c2de75e77ec7bcb5157614dcb24a633f976ddc1427249a25582c59813083115a
BLAKE2b-256 checksum
How to use checksums
40138d49d2b5726f8b1d31495e51031436d72eae89c892cb3cbc34a4035e3897
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_vpg-0.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL django_vpg-0.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.3 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
4ca17a5487c8d40a232c37936ef4900523bde639fa13185e39ce26465a6713ed
BLAKE2b-256 checksum
How to use checksums
b41eb8597d1b110c52a3ce789ebeb128cb613eb5761a9fabe70be9e4e46a5672
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_vpg-0.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL django_vpg-0.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 2.3 MB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
bbd9e84e1b624865179dafb0097bca348ab382f403d53f522e313c49b9441f3e
BLAKE2b-256 checksum
How to use checksums
9a57752d1be4d718f8f564be5c2637852c4cb9338c647692635c44444eefc0b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_vpg-0.3.2-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL django_vpg-0.3.2-cp312-cp312-musllinux_1_2_x86_64.whl
Size 2.3 MB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
175dfeb130b98f1be6e7f21d0c3e73818dcb465d393460ebd1fd94e93c65f886
BLAKE2b-256 checksum
How to use checksums
4cb751d9acdcb98c506ea7ff052926e662ca8352c8484db31502e841f4d891e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_vpg-0.3.2-cp312-cp312-musllinux_1_2_aarch64.whl

Download URL django_vpg-0.3.2-cp312-cp312-musllinux_1_2_aarch64.whl
Size 2.2 MB
Tags CPython 3.12 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
801171ca5fcc9a01becb1fe5f6d35430fccd5a5b713a8498ae1152a57cba6ec4
BLAKE2b-256 checksum
How to use checksums
37b55e7e09f4b3c91a64eae728348ba8bf2211062b0730c46715b657a6248928
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_vpg-0.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL django_vpg-0.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.3 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
d7ec8df765bb38ae18ce6f48bdda391ab2f0656f4eefef76c219115f68a16053
BLAKE2b-256 checksum
How to use checksums
0b8a997e357ae7d36d1420ca7e757c3eed06e510814df1d248156039669ab83c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_vpg-0.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL django_vpg-0.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 2.3 MB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
ed9b89c342ccd6a179b49cdfb2be33eb440a6a8e64b7ceb723170f6279225dee
BLAKE2b-256 checksum
How to use checksums
b1d8f3e2c35d2517a7aafb060bfc3d18afda783e77ad1a6c985dc54c465c54c1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for django-vpg 0.3.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page