News: the terminal now splits into panes, and agents address each one. Read the changelog →

Local Postgres. No Docker.

Your database, an editor and a terminal in one native Mac app.

Download the DMG
curl -fsSL https://sawit.dev/install.sh | sh
Apple Silicon · macOS · one 60 MiB binary

No Docker

PostgreSQL 16, 17 or 18 from Homebrew, Postgres.app, your PATH, or a download Sawit fetches itself.

Drawn by the GPU

Rust and GPUI in one native binary, with no JVM, Chromium or Node runtime inside.

Agents welcome

sawit-mcp gives AI agents 123 tools. Destructive ones ask for the name again.

Watch the demo

A database in four steps

Name it, let Sawit check the port, start it, and your app connects. Each instance listens on localhost only.

shopPostgreSQL 16 · :55432Running
Instance shop

LOG: database system is ready to accept connections

  1. 01New

    shop

    PostgreSQL 16 · :55432
    • Listens on localhost only
    • postgres superuser, trust auth
  2. 02Checked

    :55432 is free

    No other process, Homebrew service or container
    • Shadowed binds caught too
    • Start is held on a conflict
  3. 03Running

    pg_ctl start

    Live log in the window
    • Stop and restart one click away
    • Data kept when it stops
  4. 04.env

    DATABASE_URL

    postgres://postgres​@localhost:55432
    • Written to the project’s .env
    • Next.js, Rails, TanStack Start

One window, every tool

Postgres, an editor, a terminal and git, side by side, in Zed’s One Dark colours.

Read the README
SQL editor with an aggregation query and its result table

SQL editor, shortcut ⌘↩

Runs the selection, or the whole editor. Results stream in, with DETAIL and HINT on errors.

Table grid for shop.orders with 18,500 rows, row checkboxes, search and Export

Table browser

50 rows a page over a separate read-only connection. Export what matches to CSV or Excel.

Schema diagram of customers, orders, order_items, products and reviews

Schema diagrams

Tables and foreign keys drawn as a diagram, or read as DBML. Save it as .dbml or .svg.

Markdown file next to its rendered preview

Code editor, shortcut ⇧⌘I

About 200 languages, and Prettier, rustfmt, gofmt or Ruff on one shortcut.

Code editor with a TSX file and a terminal running psql underneath

Terminal, shortcut ⌘J

Full alacritty emulation in a dock under your code, with split panes.

List of listening ports with their processes and projects

Listening ports

Every dev server you started, the project it belongs to, and a button to stop it.

Git

Status, diff, stage and commit, and a graph of the branches.

Git panel with changed files and a commit graph
Browser for agents

A tab per project on your dev server, with Web Inspector, that AI agents drive over MCP.

Browser tab showing a local dev server inside Sawit

One binary, about 60 MiB

Welcome screen, instances, a table, SQL, a schema diagram, code with a terminal, ports, git, dev tools, MCP and the canvas, in one take.

Binary
60 MiB
PostgreSQL
16–18
Tools for agents
123
Editor languages
~200

Served in any terminal

Every command works with or without the app open.

Kebun · the estate

  • sawit kalimantanLists the tables of a database
  • sawit kalimantan hutanThe first 100 rows, like psql
  • sawit kalimantan hutan "izin is null"The text becomes the WHERE clause
  • sawit listInstances, databases, ports and connections
  • sawit browseThe dev server of this project, a port or a URL, in the browser tab

Panen · the harvest

  • sawit panen kalimantan hutan hutan.xlsxA table or a query, to CSV or Excel
  • sawit backup kalimantan kalimantan.dumpThe database, one schema or one table
  • sawit tanam kalimantan konsesi konsesi.csvPlants a CSV in a table, all rows or none

Bakar · the burning

  • sawit bakar portsDev servers only: asks, then SIGTERM, then SIGKILL
  • sawit bakar ports 3000 -yWhatever listens there, without asking
  • sawit bakar instancesRunning instances; the data is kept
  • sawit nyalakanStopped instances; a port already taken is explained, never forced

Pupuk · the fertiliser

  • sawit list toolsPackage managers, runtimes and AI agents
  • sawit pasang bun uvOfficial install scripts, prerequisites first
  • sawit pupukEvery tool with a newer release
  • sawit cabut bunOnly the copy its installer, Homebrew or npm put there

“Bakar 2 lahan di atas? Asapnya tanggung sendiri.”Burn the two plots above? The smoke is on you.

Install Sawit

Two ways in, the same app. After the first install it updates itself.

ScriptRecommended

curl | sh one command

Downloads the latest release into Applications.

  • No “cannot verify” warning
  • Install a given release with SAWIT_VERSION=vX.Y.Z
  • Quits and replaces a running Sawit

Disk image

.dmg from GitHub releases

Drag Sawit to Applications, the usual way.

  • Apple Silicon, macOS only
  • Not notarized yet: Open Anyway in Privacy & Security, once
  • Same app, same self-updates
Download Sawit.dmg

Good to know

Do I need Docker?

No. Sawit uses PostgreSQL from Homebrew, Postgres.app or your PATH, or downloads PostgreSQL 16, 17 or 18 itself.

Which Macs does it run on?

Apple Silicon, macOS only. Sawit leans on the Keychain, lsof, AVPlayer and CoreGraphics.

Why does macOS say it cannot verify Sawit?

Sawit is not notarized yet. The install script avoids the warning. With the DMG, open Sawit once and choose Done, then Open Anyway in System Settings → Privacy & Security, or run xattr -dr com.apple.quarantine /Applications/Sawit.app.

Where do my passwords go?

Into the macOS Keychain, never a file. The table browser reads over a separate read-only connection.

How does it update?

After the first install the app updates itself. To install a given release instead of the latest, put SAWIT_VERSION=vX.Y.Z (a tag from the releases page) before sh.

Can I edit a single cell in the grid?

Not yet. The grid deletes rows or sets one column on the rows you select; single cells go through the SQL editor.

The Sawit app icon: a palm tree whose trunk is three database discs

Pasang Sawit

Install it with one command on an Apple Silicon Mac.

View the source
Your passwords stay in the macOS Keychain, never a file.