Skip to content(if available)orjump to list(if available)

Show HN: PLJS – JavaScript for Postgres

Show HN: PLJS – JavaScript for Postgres

5 comments

·June 25, 2025

PLJS is a new, modern JavaScript trusted language extension, bundling QuickJS, a small and fast JavaScript runtime with Postgres, providing fast type conversion between Postgres and JavaScript, fast execution, and a very light footprint.

Here are bencharks that show how it compares to PLV8: https://github.com/plv8/pljs/blob/main/docs/BENCHMARKS.md

This is the first step toward a truly light-weight, fast, and extensible JavaScript runtime embedded inside of Postgres. The initial roadmap has been published at https://github.com/plv8/pljs/blob/main/docs/ROADMAP.md

You can join the discussion by joining the PLV8 Discord: https://discord.gg/XYGSCfVNBC

You can find PLJS at https://github.com/plv8/pljs

phartenfeller

Interesting. This is now the second DB next to Oracle[1] that can do JS (that I know of). pgSQL and PL/SQL of course still stay relevant but in the Oracle spehere the argument is that you can reuse existing code from NPM. Like this blog post [2] describes how to run an GraphQL endpoint from within the DB.

[1] https://docs.oracle.com/en/database/oracle/oracle-database/2... [2] https://blogs.oracle.com/developers/post/creating-a-graphql-...

jerrysievert

PLV8 (the predecessor to this project) was released in June of 2012. It provided JavaScript as a trusted language extension to Postgres 9.2.

PLJS is a newer generation.

timz

Amazing.. Would be nice to have something like that for Redis to replace Lua

oulipo

What would be the typical use-case? Light data transformation?

Is there a significant advantage over Rust-based embedded Postgres language like https://github.com/tcdi/plrust which is compiled and a bit more type-safe?

tehlike

A lot of logic just becomes easier with javascript. If you have complex-ish trigger logic, or a procedure etc - doing these in pl/pgsql is just hard if not intracatable. Also allows up reuse of a lot of code that people have built with npm - even if not directly with require(), it becomes possible to bundle compiled binary.

I used this for storing patches of data (to save space, compression is a pain in Postgres) and applying runtime to show full version etc. It's fun.