# pRESTd [![Unit tests](https://github.com/prest/prest/actions/workflows/test-unit.yml/badge.svg)](https://github.com/prest/prest/actions/workflows/test-unit.yml) [![Go Reference](https://pkg.go.dev/badge/github.com/prest/prest/v2.svg)](https://pkg.go.dev/github.com/prest/prest/v2) [![Go Report Card](https://goreportcard.com/badge/github.com/prest/prest)](https://goreportcard.com/report/github.com/prest/prest) [![codecov](https://codecov.io/gh/prest/prest/branch/main/graph/badge.svg?token=eVD9urwIEv)](https://codecov.io/gh/prest/prest) [![Homebrew](https://img.shields.io/badge/dynamic/json.svg?url=https://formulae.brew.sh/api/formula/prestd.json&query=$.versions.stable&label=homebrew)](https://formulae.brew.sh/formula/prestd) [![Discord](https://img.shields.io/badge/discord-prestd-blue?logo=discord)](https://discord.gg/JnRjvu39w8) _p_**REST** (**P**_ostgreSQL_ **REST**) is a production-ready API that delivers instant REST and Model Context Protocol (MCP) APIs on top of your **existing or new Postgres** database—CRUD, custom SQL routes, auth, ACL, and a read-only MCP endpoint—without hand-writing a backend. > PostgreSQL version 9.5 or higher Contributor License Agreement — [![CLA assistant](https://cla-assistant.io/readme/badge/prest/prest)](https://cla-assistant.io/prest/prest) pREST - instant, realtime, high-performance on PostgreSQL | Product Hunt ## Documentation **Full documentation lives at [docs.prestd.com](https://docs.prestd.com/).** | Topic | Link | |-------|------| | Get pREST (Docker, Homebrew, Go) | [Get pREST](https://docs.prestd.com/get-prest) | | Configuration | [Configuring pREST](https://docs.prestd.com/get-started/configuring-prest) | | API reference | [API Reference](https://docs.prestd.com/api-reference) | | MCP over HTTP | [MCP over HTTP](https://docs.prestd.com/get-started/mcp-over-http) | | Multi-database | [Multi-database](https://docs.prestd.com/get-started/multi-database) | | Databases & roadmap | [Databases](https://docs.prestd.com/databases) · [Roadmap](https://docs.prestd.com/databases/roadmap) | | AI clients (Cursor, Claude, …) | [AI and MCP](https://docs.prestd.com/ai) | ## Quick start Install and run options (Docker, Homebrew, or Go) are documented in [Get pREST](https://docs.prestd.com/get-prest). Point pREST at Postgres (`PREST_PG_URL` or `pg.*` / `DATABASE_URL`), then call: ```http GET /{database}/{schema}/{table} ``` See [Configuring pREST](https://docs.prestd.com/get-started/configuring-prest) for auth, ACL, custom queries, and MCP. ## 1-Click Deploy ### Heroku Deploy to Heroku and get a realtime RESTful API backed by Heroku Postgres: [![Deploy to Heroku](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/prest/prest-heroku) More: [Deploy in Heroku](https://docs.prestd.com/deployment/deploy-in-heroku). ## Contributing Contributions are welcome. See the [Development Guide](https://docs.prestd.com/get-prest/development-guide) and [Contributing to pREST](https://docs.prestd.com/readme/contributing-to-prestd). Please sign the [CLA](https://cla-assistant.io/prest/prest). Questions? [GitHub Discussions](https://github.com/prest/prest/discussions) or [Discord](https://discord.gg/JnRjvu39w8). ## Testing Run unit tests locally: ```bash make test-unit ``` Run integration suites inside Docker (no local Postgres required): ```bash # Postgres (full stack: default, auth, multicluster, queries) — also: make test-integration make test-integration-postgres # TimescaleDB (Timescale-specific E2E only) make test-integration-timescaledb ``` Or with Docker Compose: ```bash docker compose -f integration/postgres/docker-compose.yml up -d --wait \ postgres postgres-b db-init prestd prestd-multicluster prestd-auth prestd-queries docker compose -f integration/postgres/docker-compose.yml run --rm --no-deps tests docker compose -f integration/postgres/docker-compose.yml down -v --remove-orphans ``` Postgres compose runs `./integration/suites/...` and `./integration/postgres/...`. TimescaleDB compose runs `./integration/timescaledb/...` only (see `.github/workflows/test-integration-timescaledb.yml`). Network tests require `PREST_TEST_URL` (and flavor-specific URLs for the Postgres job); outside Compose those tests skip when the URLs are unset. ## Example: Docker Build Build the Docker image locally for development (compiles from source): ```bash docker build -t prest/prest:latest . ``` For release builds, GoReleaser uses the same `Dockerfile` / `Dockerfile.noplugins` with a pre-built `prestd` binary. Local source builds can pass version metadata via build arguments: ```bash docker build \ --build-arg VERSION=v1.0.0 \ --build-arg COMMIT=hash \ --build-arg DATE=2026-02-11 \ -t prest/prest:latest . ```