# Shipping psql without psql: a pure-TypeScript Postgres client in neonctl

DevFeed: [Shipping psql without psql: a pure-TypeScript Postgres client in neonctl](<https://devfeed.tech/articles/shipping-psql-without-psql-a-pure-typescript-postgres-client-in-neonctl-5792.md>)

Original publisher: [Read original article](<https://neon.com/blog/shipping-psql-without-psql>)

Author: Vadim Kharitonov

Published: 2026-06-12T10:30:00Z

Content type: article

Language: en

Sources: [Blog -- Neon Docs](<https://devfeed.tech/sources/blog-neon-docs.md>)

Topics: [PostgreSQL](<https://devfeed.tech/topics/postgresql.md>), [TypeScript](<https://devfeed.tech/topics/typescript.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Claude Code](<https://devfeed.tech/topics/claude-code.md>), [ai-coding](<https://devfeed.tech/topics/ai-coding.md>), [Security](<https://devfeed.tech/topics/security.md>), [TLS (Transport Layer Security)](<https://devfeed.tech/topics/tls.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-coding](<https://devfeed.tech/tags/ai-coding.md>), [claude-code](<https://devfeed.tech/tags/claude-code.md>), [cli](<https://devfeed.tech/tags/cli.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [postgres](<https://devfeed.tech/tags/postgres.md>), [product](<https://devfeed.tech/tags/product.md>), [security](<https://devfeed.tech/tags/security.md>), [tls](<https://devfeed.tech/tags/tls.md>), [typescript](<https://devfeed.tech/tags/typescript.md>)

## AI overview

Neon describes reimplementing the PostgreSQL psql client in pure TypeScript and embedding it in the neonctl CLI. The fallback activates when no native psql installation is available, avoiding native dependencies while targeting consistent behavior across platforms. The implementation was largely produced by Claude via Claude Code, with human oversight, a conformance harness based on PostgreSQL's regression suite, and an adversarial security review.

## Source excerpt

neonctl psql used to fail with "command not found" whenever psql wasn't on your PATH -- which is most macOS laptops, slim Linux containers, Windows boxes, CI runners, and sandboxes. So we did the uncomfortable thing: reimplemented the psql client in pure TypeScript, embedded it in the CLI, and built a byte-exact conformance harness against PostgreSQL's own regression suite to prove it actually behaves like psql...