MS Access Endpoint

Connect any PostgreSQL-compatible tool to your Microsoft Access databases — no migration, no middleware, no compromises.

Get Started

What It Does

The 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.

Your data stays in Access. No migration, no export step, no separate database server. The endpoint adds a network interface to your existing .accdb file — your forms, reports, and VBA code continue working exactly as before.
🔌

PostgreSQL Wire Protocol

Full PostgreSQL v3 protocol — StartupMessage, simple and extended query, TLS negotiation, COPY sub-protocol, compression, and cancellation. Any PG-compatible client just works.

⚙️

Native DAO Engine

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.

📦

libpq-Compatible Client Library

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.

🛡️

TLS Encryption

Built-in TLS support encrypts all traffic between client and server. Negotiated during connection startup — the same SSLRequest handshake PostgreSQL uses.

Wire Compression

DEFLATE-based compression negotiated per-connection. Reduces bandwidth by 5–10× on text-heavy data — especially valuable for large result sets over the network.

🪟

Runs as a Windows Service

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.


How It Works

The endpoint follows the same accept → worker → engine pattern used by MariaDB and PostgreSQL themselves:

StepWhat Happens
1. ListenTCP listener accepts incoming connections on port 9432
2. StartupClient sends PostgreSQL StartupMessage — server authenticates and opens the .accdb database via DAO
3. QueryClient sends SQL as a PostgreSQL wire message — server translates it to DAO, executes, and returns results as PostgreSQL DataRow / RowDescription messages
4. ResultsServer 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. ReadyServer sends ReadyForQuery — client can send the next query or disconnect

Client Libraries

🔧

libmsacc — C Client Library

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.

🐍

pymsaccess — Python Client

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.


Getting Started

Prerequisites: Windows with the Microsoft Access Database Engine (or Access itself) installed. A .accdb or .mdb file.

1. Install the Endpoint

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.

2. Configure

Edit jet-endpoint.toml to set your port, authentication mode, TLS preferences, and log settings. All configuration lives in this single file:

OptionWhat It Does
network.portTCP port to listen on (default: 9432)
network.max_connectionsMaximum simultaneous clients (default: 255)
network.idle_timeout_secondsDisconnect idle clients after this many seconds (default: 300)
auth.modeAuthentication mode: "simple" (password) or "accept_all"
tls.enabledEnable TLS encryption (default: true)
debug.diagnosticsLogging level: "none", "normal", or "verbose"

3. Connect

Point any PostgreSQL-compatible client at localhost:9432. Your database path is the connection "database name":

psql:
psql -h 127.0.0.1 -p 9432 -U admin -d "C:\Users\you\mydb.accdb"
Python:
conn = pymsaccess.connect(host="127.0.0.1", port=9432, user="admin", database=r"C:\Users\you\mydb.accdb")
DBeaver / LibreOffice Base / any JDBC tool:
Use the standard PostgreSQL JDBC driver with connection URL jdbc:postgresql://127.0.0.1:9432/. DBeaver works with both preferQueryMode=simple and preferQueryMode=extended (recommended).

Compatible Clients

Because the endpoint speaks standard PostgreSQL v3 wire protocol, any tool that can connect to PostgreSQL can connect to your Access database:

🖥️

Command Line

psql — the standard PostgreSQL interactive terminal. Full \d introspection, \copy, tab-completion.

📊

GUI Tools

DBeaver, LibreOffice Base, pgAdmin, DataGrip — any GUI that speaks the PG wire protocol.

📈

BI & Analytics

Power BI, Tableau, Metabase, Grafana — connect to Access as if it were PostgreSQL.

💻

Programming Languages

Python (pymsaccess, psycopg2, SQLAlchemy), R (RPostgreSQL), Node.js (pg), Go (pgx), Rust (sqlx), Java (JDBC), C# (Npgsql) — any language with a PG driver.


🧪 Development Status

The MS Access Endpoint is under active development. Current capabilities:

AreaStatus
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
🎯 Target: Public Beta. The endpoint is feature-complete and stable in development testing. Contact us for early access or to discuss your use case.

📄 Documents

DocumentDescription
Installation GuideInstalling and configuring the MS Access Endpoint on Windows. Covers the installer wizard, configuration file reference, Windows Service setup, logging, and troubleshooting.
JET Wire Protocol — SpecificationA PostgreSQL-compatible wire protocol for the MS Access / Jet thin TCP endpoint, incorporating MariaDB features where the Jet engine supports them.
LibreOffice Base Setup GuideStep-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.

⚠️ Know the Limits of MS Access

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:

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.