Connect any PostgreSQL-compatible tool to your Microsoft Access databases — no migration, no middleware, no compromises.
Get StartedThe MS Access Endpoint is a lightweight TCP server that runs alongside your Access database and speaks the PostgreSQL v3 wire protocol on port 9432. Any tool that can connect to PostgreSQL — psql, DBeaver, LibreOffice Base, Power BI, Python, R, your custom application — can now connect to your Access database.
.accdb file — your forms, reports, and VBA code continue working exactly as before.
Full PostgreSQL v3 protocol — StartupMessage, simple and extended query, TLS negotiation, COPY sub-protocol, compression, and cancellation. Any PG-compatible client just works.
Queries run through Microsoft's DAO (Data Access Objects) — the same engine that powers Access itself. Zero impedance mismatch. Your SQL, data types, and relationships work exactly as they do inside Access.
libmsacc mirrors the libpq C API — MSACCconnectdb, MSACCexec, MSACCgetvalue. Drop-in pattern for anyone who has used libpq. pymsaccess provides a Python DB-API 2.0 adapter.
Built-in TLS support encrypts all traffic between client and server. Negotiated during connection startup — the same SSLRequest handshake PostgreSQL uses.
DEFLATE-based compression negotiated per-connection. Reduces bandwidth by 5–10× on text-heavy data — especially valuable for large result sets over the network.
Install as a proper Windows service and it starts on boot, survives logouts, and can be managed through services.msc or PowerShell. Single jet-endpoint.toml configuration file.
The endpoint follows the same accept → worker → engine pattern used by MariaDB and PostgreSQL themselves:
| Step | What Happens |
|---|---|
| 1. Listen | TCP listener accepts incoming connections on port 9432 |
| 2. Startup | Client sends PostgreSQL StartupMessage — server authenticates and opens the .accdb database via DAO |
| 3. Query | Client sends SQL as a PostgreSQL wire message — server translates it to DAO, executes, and returns results as PostgreSQL DataRow / RowDescription messages |
| 4. Results | Server maps 18 DAO data types (Text, Long, Integer, DateTime, Currency, Boolean, Memo, etc.) to their closest PostgreSQL OIDs — so clients see familiar column types |
| 5. Ready | Server sends ReadyForQuery — client can send the next query or disconnect |
libpq-compatible native client. MSACCconn, MSACCresult, MSACCexec — the same mental model as libpq, adapted for Access. C API with connection management, query execution, result inspection, cancel, compression, and COPY sub-protocol.
DB-API 2.0 adapter for the JET endpoint. connect() → cursor() → execute() → fetchall(). Connection pooling, async support, type mapping, and compatibility with pandas, SQLAlchemy, and any tool that speaks DB-API 2.0.
Prerequisites: Windows with the Microsoft Access Database Engine (or Access itself) installed. A .accdb or .mdb file.
Download and run the Windows installer. It places jet-endpoint.exe, jet-endpoint.toml, and the required DLLs in your chosen directory. Can be run as a Windows service, and should be when used in production systems.
Edit jet-endpoint.toml to set your port, authentication mode, TLS preferences, and log settings. All configuration lives in this single file:
| Option | What It Does |
|---|---|
network.port | TCP port to listen on (default: 9432) |
network.max_connections | Maximum simultaneous clients (default: 255) |
network.idle_timeout_seconds | Disconnect idle clients after this many seconds (default: 300) |
auth.mode | Authentication mode: "simple" (password) or "accept_all" |
tls.enabled | Enable TLS encryption (default: true) |
debug.diagnostics | Logging level: "none", "normal", or "verbose" |
Point any PostgreSQL-compatible client at localhost:9432. Your database path is the connection "database name":
psql -h 127.0.0.1 -p 9432 -U admin -d "C:\Users\you\mydb.accdb"
conn = pymsaccess.connect(host="127.0.0.1", port=9432, user="admin", database=r"C:\Users\you\mydb.accdb")
jdbc:postgresql://127.0.0.1:9432/. DBeaver works with both preferQueryMode=simple and preferQueryMode=extended (recommended).
Because the endpoint speaks standard PostgreSQL v3 wire protocol, any tool that can connect to PostgreSQL can connect to your Access database:
psql — the standard PostgreSQL interactive terminal. Full \d introspection, \copy, tab-completion.
DBeaver, LibreOffice Base, pgAdmin, DataGrip — any GUI that speaks the PG wire protocol.
Power BI, Tableau, Metabase, Grafana — connect to Access as if it were PostgreSQL.
Python (pymsaccess, psycopg2, SQLAlchemy), R (RPostgreSQL), Node.js (pg), Go (pgx), Rust (sqlx), Java (JDBC), C# (Npgsql) — any language with a PG driver.
The MS Access Endpoint is under active development. Current capabilities:
| Area | Status |
|---|---|
| PostgreSQL v3 wire protocol | ✅ Complete — simple + extended query, COPY, TLS, compression, cancel |
| DAO engine integration | ✅ Complete — native DAO via COM interop, 18 type mappings |
| Schema introspection | ✅ Complete — 400+ PG catalog function emulations, \d support in psql |
| libmsacc C client | ✅ Complete — libpq-compatible API, all major functions |
| pymsaccess Python client | ✅ Complete — DB-API 2.0, pooling, async, COPY support |
| Windows service installer | ✅ Complete — Inno Setup installer, service registration |
| Security audit | ✅ Complete — 24/25 findings resolved, acceptable for development use |
| Regression suite | ✅ 59 protocol tests passing, 7 pre-existing Jet SQL dialect exceptions |
| Document | Description |
|---|---|
| Installation Guide | Installing and configuring the MS Access Endpoint on Windows. Covers the installer wizard, configuration file reference, Windows Service setup, logging, and troubleshooting. |
| JET Wire Protocol — Specification | A PostgreSQL-compatible wire protocol for the MS Access / Jet thin TCP endpoint, incorporating MariaDB features where the Jet engine supports them. |
| LibreOffice Base Setup Guide | Step-by-step configuration for connecting LibreOffice Base to the JET endpoint. Covers Linux and Windows setup, connection strings, troubleshooting, and LO Base vs DBeaver comparison. |
MS Access is a file-based desktop database — it was never designed as a high-concurrency network server. Before deploying the endpoint in production, be aware of these inherent limitations:
.accdb file, and query throughput drops sharply.TableDef.Indexes collection. If your database was created without explicit indexes (e.g. imported data with field-level primary keys only), the pg_index and pg_constraint catalog tables will appear empty.Need more scale? Consider keeping your Access data where it is and replicating it into a server-grade database. The endpoint gives you the connection — a replica gives you the performance, concurrency, and security that Access alone cannot provide.
🔄 Learn about Replicator — MS Access-to-Server Database Synchronisation
Replicate your Access data to PostgreSQL, MySQL, or SQL Server while leaving your original .accdb untouched. Your Access application keeps working. Your web apps and analytics get a real database.