pgbox
Zero-config embedded PostgreSQL with pgvector for Python.
from pgbox import get_server
server = get_server("~/.myapp/data")
uri = server.get_uri() # postgresql:///postgres?host=...&port=5501
server.enable_extension("vector")
server.execute("CREATE TABLE items (id serial, embedding vector(384))")
No Docker. No install steps. No configuration. Just pip install pgbox and you have a running PostgreSQL 17.4 with pgvector 0.8.0.
Install
pip install pgbox
Pre-compiled PostgreSQL binaries are included in the wheel — nothing to download at runtime.
Platforms: macOS (Apple Silicon + Intel), Linux (x86_64)
Python: 3.11+
Usage
Basic
from pgbox import get_server
# Start PostgreSQL (or connect to existing instance at this path)
server = get_server("/path/to/pgdata")
# Get connection URI for any PostgreSQL client
uri = server.get_uri()
# Use with asyncpg
import asyncpg
conn = await asyncpg.connect(uri)
# Use with psycopg2
import psycopg2
conn = psycopg2.connect(uri)
# Use with SQLAlchemy
from sqlalchemy import create_engine
engine = create_engine(uri)
Enable extensions
server.enable_extension("vector") # pgvector for embeddings
server.enable_extension("pg_trgm") # trigram similarity
Execute SQL
server.execute("CREATE TABLE users (id serial PRIMARY KEY, name text)")
server.execute("INSERT INTO users (name) VALUES ('Alice')")
result = server.execute("SELECT * FROM users")
Create databases
server.create_database("myapp")
uri = server.get_uri(database="myapp")
Context manager (auto-cleanup)
# Server stops when the block exits
with get_server("/tmp/test_data") as server:
uri = server.get_uri()
# ... use it ...
# Server stops + data directory deleted
with get_server("/tmp/test_data", cleanup_mode="delete") as server:
uri = server.get_uri()
# ... use it, everything cleaned up on exit ...
Health check
server.is_healthy() # True if accepting connections
server.pid # Postmaster process ID
server.port # TCP port
Cleanup modes
| Mode | Behavior |
|---|---|
"stop" (default) |
Stop PostgreSQL on exit |
"delete" |
Stop + delete the data directory |
"nothing" |
Leave running (for daemon/service use) |
How it works
pgbox bundles pre-compiled PostgreSQL 17.4 and pgvector 0.8.0 binaries directly in the Python wheel. When you call get_server():
- Initialize — runs
initdbif the data directory doesn't exist - Start — runs
pg_ctl starton an available port - Wait — polls
pg_isreadyuntil the server accepts connections - Return — gives you a
PostgresServerwith connection URI
The server is a singleton per data directory — calling get_server() twice with the same path returns the same instance. Cross-process safety is handled via file locks.
Versions
| Component | Version |
|---|---|
| PostgreSQL | 17.4 |
| pgvector | 0.8.0 |
License
Apache-2.0
Metadata
Release files for pgbox 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pgbox-0.1.3-cp312-cp312-manylinux_2_28_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.28+ x86-64 | Details for pgbox-0.1.3-cp312-cp312-manylinux_2_28_x86_64.whl |
| pgbox-0.1.3-cp312-cp312-macosx_15_0_universal2.whl | CPython 3.12 | CPython 3.12 | macOS 15.0+ universal2 (ARM64, x86-64) | Details for pgbox-0.1.3-cp312-cp312-macosx_15_0_universal2.whl |
| pgbox-0.1.3-cp312-cp312-macosx_14_0_universal2.whl | CPython 3.12 | CPython 3.12 | macOS 14.0+ universal2 (ARM64, x86-64) | Details for pgbox-0.1.3-cp312-cp312-macosx_14_0_universal2.whl |
Total release size: 32.9 MB
Release files / pgbox-0.1.3-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | pgbox-0.1.3-cp312-cp312-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 12.2 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
04c98df4b96c146bdfea9d9bfcef8ae5b4f0fcf627b45a5419421005ca69bfee
|
|
BLAKE2b-256 checksum How to use checksums |
1ebed228534c9e800ddc2a3d74d666d3b3cf826b89631ffed10577a73a16ea20
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 29, 2026.
Transparency logRelease files / pgbox-0.1.3-cp312-cp312-macosx_15_0_universal2.whl
| Download URL | pgbox-0.1.3-cp312-cp312-macosx_15_0_universal2.whl |
|---|---|
| Size | 10.3 MB |
| Tags | CPython 3.12 macOS 15.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
cb9c0b61be8ee11452c42270ed8e94659b901f87b628bd2bb9c5406b507f795c
|
|
BLAKE2b-256 checksum How to use checksums |
2e1037c840763cbfb54a67c333316e331c535f80297ac20bee3469247605e228
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 29, 2026.
Transparency logRelease files / pgbox-0.1.3-cp312-cp312-macosx_14_0_universal2.whl
| Download URL | pgbox-0.1.3-cp312-cp312-macosx_14_0_universal2.whl |
|---|---|
| Size | 10.3 MB |
| Tags | CPython 3.12 macOS 14.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
3830c85fc8b53bc5e82cf456ad62d4520a17efc6901e6239bd27baa2a7846c1f
|
|
BLAKE2b-256 checksum How to use checksums |
d93001ff48bf6b2716bf07da017bb4fa6c6dd4594526c8e92c9a0a05e85a47f2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 29, 2026.
Transparency logSecurity for pgbox 0.1.3
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.
Full provenance
All 3 files in this release have been uploaded with provenance metadata.
Attestation for pgbox-0.1.3-cp312-cp312-manylinux_2_28_x86_64.whl
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 29, 2026.
Transparency logA 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.