mrkeyoor.com_
Tue 06 Oct 06:32 UTC
Dataevaluationupdated 06 Oct 2026

lead review

Lead is a deliberately slow PostgreSQL extension that lets an application exercise PlanetScale TIN-compatible search SQL outside production. It implements the query syntax, scoring, highlighting, and index options needed for development and CI, while leaving real search data out of the index.

Verdict

Our Lead run installed 83 packages, then both build and tests stopped because $PGRX_HOME did not exist, so adoption starts with the exact pgrx setup the README specifies. Use it if TIN-compatible development SQL is the requirement and keep the database small; do not treat it as a free production search engine. Open scoring and stemming gaps also deserve regression tests around the query shapes your application uses.

We ran it

Lab card: what happened when we ran leadScreenshot of lead (github.com/planetscale/lead)
Install✓ · 33s83 packages
Build✗ · 70s
Tests✗ · 66sran, no count parsed
Repo91 files~19,141 lines of source · 0.8 MB · 1 CI workflows

Answers from our run

Does lead build from source?

Dependencies installed in 33 seconds (83 packages), and the build failed. We cloned commit b656e2c into a clean Debian container with 3 CPUs and no project-specific setup.

Do lead's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Who should not use lead?

Production search workloads: the README calls Lead intentionally unsuitable because every scan returns all heap pages for PostgreSQL to recheck.

What are the alternatives to lead?

ParadeDB, PGroonga, pgrx. Our Lead run installed 83 packages, then both build and tests stopped because $PGRX_HOME did not exist, so adoption starts with the exact pgrx setup the README specifies.

Setup2/5Both checks stopped at a missing PGRX_HOME after 83 packages
Docs4/5README states the pgrx recipe and compatibility boundary plainly
Community2/5160 stars and four open issues on a September 2026 repository
Maturity2/5Version 1.0.3 has open scoring and stemming compatibility gaps

Who it’s for

Teams using PlanetScale TIN in production that need compatible SQL in development, CI, or staging.
PostgreSQL developers testing TINQL queries, scoring calls, highlighting, expression indexes, or partial indexes.
Engineers who value exact row visibility and query rechecks more than search speed in a small test database.

Who it’s NOT for

Production search workloads: the README calls Lead intentionally unsuitable because every scan returns all heap pages for PostgreSQL to recheck.
CI environments that expect a plain cargo build to work: the documented setup requires cargo-pgrx 0.19.1, an initialized PGRX home, and PostgreSQL 17 or 18.
Applications relying on stemmed TIN indexes: open issue 16 says Lead 1.0.3 rejects the stemmer index option accepted by TIN 1.0.4.
Teams testing ranking after updates or across several indexed fields without targeted regressions: open issues 14 and 15 document stale and predicate-order-dependent scores.
Anyone expecting an official ready-made container: issue 12 requests one, and our repository scan found no Dockerfile.

Setup reality

Our sandbox installed 83 Rust packages in 33 seconds at commit b656e2c. The build failed with exit 101 after 70 seconds, and the test command failed with exit 101 after 66 seconds; both logs ended at the same error, $PGRX_HOME does not exist.

The README requires cargo-pgrx 0.19.1 exactly, initialization for PostgreSQL 17 or 18, and one matching version feature. After packaging or starting its development database, you still have to run CREATE EXTENSION tin.

Lead needs neither preload configuration nor its own shared memory or external files. The operational catch is deliberate: every search sends all current heap pages back to PostgreSQL for exact visibility and query rechecks, so this is a compatibility fixture for small non-production databases.

Lead copies TIN's SQL contract, not its production index

Lead exists for one narrow job: let code written for PlanetScale TIN execute against PostgreSQL 17 or 18 before it reaches production. It supplies the tin access method, the ==> operator, TINQL parsing, tokenizer and index options, scoring functions, and two forms of highlighting. That makes it useful in development, CI, and staging, where a missing operator or invalid query shape should fail before deployment.

The trade is visible in every search. Lead stores no search data in its index. A scan reads the table's current block count, marks every heap page as a lossy candidate, and lets PostgreSQL recheck each visible row. This preserves query behavior and MVCC visibility without recreating TIN's production machinery. It also means table growth directly expands the work, which is why the README calls the extension deliberately non-production.

Version 1.0.3 needs an exact pgrx toolchain

The build instructions pin cargo-pgrx 0.19.1 and require initialization for PostgreSQL 17 or 18. You choose one matching feature when packaging, building, or running the extension. An interactive database still needs CREATE EXTENSION tin, but Lead does not require shared_preload_libraries or session_preload_libraries. That is a fairly clean runtime shape once the compiler and PostgreSQL toolchain exist.

The repository's CI shows what that toolchain entails. Its one workflow covers x86-64 and arm64 across both supported PostgreSQL majors, sets PGRX_HOME, installs PostgreSQL build packages, installs cargo-pgrx, downloads the chosen server, then runs build, Clippy, and local tests. Our 3-CPU Debian sandbox did not reproduce those preparation steps automatically, and the missing pgrx home stopped both checks.

What happened when we ran it

Our run at commit b656e2c installed 83 packages in 33 seconds. The build then ran for 70 seconds and exited with code 101. The final error came from pgrx-pg-config 0.19.1 and said $PGRX_HOME does not exist; the log did not identify any Rust source error in Lead itself.

Tests reached the same boundary. The command ran for 66 seconds, exited with code 101, and ended with the identical missing-home message while pgrx-pg-sys was preparing its build. Those results do not establish whether Lead's test cases pass after a correct pgrx initialization. They establish that a fresh Rust container cannot build or test this commit without the PostgreSQL-specific setup that the README and CI describe.

The checkout held 91 files, about 19,141 lines of source, and occupied 0.8 MB. We found one CI workflow, no Dockerfile, and no tests directory. The repository does contain local and PostgreSQL test commands through cargo-pgrx, plus an extra regression script reserved for developers with access to private TIN source. Public users cannot run that comparison suite from this repository alone.

Two open scoring reports can change ranked results

Open issue 14 reports that a committed text update can return the new row text with a stale relevance score on Lead 1.0.3. The reproduction keeps the query term and document length constant, yet the second score becomes zero. The report says matching and visibility remain correct, but ordering by the cached score can rank results incorrectly. That distinction matters if your test asserts only matched IDs.

Issue 15 finds another ranking boundary across two TIN-indexed columns. Reversing equivalent OR predicates changes which matching row receives a zero score, according to the supplied PostgreSQL 18.6 reproduction. The issue includes a query-level workaround that scores each field separately and adds the results, at the cost of more query work. Until those reports are resolved, test both matches and scores for your actual SQL shapes.

The stemmer gap can block a production migration in CI

Open issue 16 says a TIN 1.0.4 index using WITH (stemmer = 'en') is accepted in production but rejected by Lead 1.0.3 as an unrecognized parameter. That is exactly the sort of compatibility gap this project is meant to prevent: a valid production migration cannot pass through a Lead-backed CI database. The reporter's temporary choice was to use unstemmed indexes and prefix terms.

Lead still covers a meaningful portion of the surface, including expression and partial-index rechecks, explicit and implicit highlighting, and scoring at the same query level as the matching predicate. Its AGPL-3.0-or-later license is clear, and the last push on October 1, 2026 closed a change addressing five TIN divergences. GitHub listed 160 stars and four open issues, with no published release returned by the API.

Small CI databases are the right boundary

Lead makes sense when TIN is already a production choice and the alternative is skipping search SQL in CI. It gives PostgreSQL real operators and recheck behavior rather than a mock function that accepts anything. Keep fixtures small, pin cargo-pgrx 0.19.1, initialize the required PostgreSQL major, and write assertions for ranking as well as matching.

A team shopping for general PostgreSQL search should choose a production index instead. ParadeDB and PGroonga solve that different problem. Lead's value comes from being intentionally worse at retrieval while staying close to TIN's contract. The 70-second failed build in our sandbox is a useful warning: provision the documented pgrx environment first, then decide whether its remaining compatibility gaps cover the SQL your application actually ships.

Alternatives

ProjectWhat it isPick it when
ParadeDBA PostgreSQL extension for production full-text search, vector retrieval, and analytics.pick this instead when you need a real production search index rather than TIN SQL compatibility.
PGroongaA PostgreSQL extension that uses Groonga for multilingual full-text search.pick this instead when fast multilingual search matters and your application does not depend on TINQL.
pgrxThe Rust framework Lead itself uses to build PostgreSQL extensions.pick this instead when your goal is to create or test your own PostgreSQL extension rather than imitate TIN.

What people are saying

  1. [techcrunch-ai] Meta launches enterprise AI platform, hires MongoDB CEO to lead new initiative
  2. [theverge] All roads lead to cable
  3. [velocity-scout] planetscale/lead
  4. [hackernews] PS5 Linux lead quits: "a bunch of noobs using LLMs" that "they don't understand"

Sources

  1. Lead repository and README
  2. Lead CI workflow
  3. Issue 14: stale relevance after committed updates
  4. Issue 15: multi-field scores depend on predicate order
  5. Issue 16: stemmer index option

More data reviews

tax-doc-classifier · awesome-jev · awesome-jev · awesome-jev · prophet · awesome-zhuiju-free · the whole board →