Skip to content
All releases

OriginChainDB / Release notes

Release notes · 4–10 October 2026

Vector search arrives on dedicated databases, with your own embedder and embedding runs, and Migrate can embed rows as they move. Also: 24 more queries match PostgreSQL, sequences and enum types, JSON like PostgreSQL, and your own request IDs.

Published
Period covered
4–10 October 2026
In this release
9 highlights 5 product areas
In this release 9 highlights
The release in focus 64 sec
A 64-second overview of this release. Background music, no narration; every update is described in full on this page.

What’s new

9 highlights
Vectors

Vector search on dedicated databases

The vector record API is on for dedicated configurations: create vector indexes and namespaces, write records with dense vectors, sparse vectors and metadata, and query them with metadata filters. A table's vector column reads back its vectors in SQL, and deleting a row deletes its vector. A key reaches an index only through a grant.

Dedicated configurations only. You bring the embeddings or your own embedder; OriginChainDB does not run an embedding service.

Vectors

Bring your own embedder and embed your tables

Save your own embedding provider, its key and model in the console, and test it. Then embed the rows of a table you already have with an embedding run: pick the columns, which rows and how many, and later runs can embed only new or changed rows. Your provider bills you directly.

Migrate

Migrate: embed rows while you move

When you migrate a database, you can embed rows on the way in: pick the text columns, which rows and a maximum number of rows, and Migrate fills the vectors with your own saved embedder.

Database

24 more queries match PostgreSQL

24 more query shapes now return exactly what PostgreSQL returns, on the PostgreSQL connection and the SQL API. Numbers are compared by value in grouping, joins and subqueries, so GROUP BY and DISTINCT treat 10 and 10.0 as one value. uuid and date/time literals are read exactly, a malformed uuid gets PostgreSQL's 22P02 error, and jsonb values are compared by value too.

Not every jsonb query matches PostgreSQL yet.

Developers

Sequences and enum types for ORMs

On the PostgreSQL connection, sequences work (nextval, currval, setval, lastval and DEFAULT nextval('seq')), SERIAL columns are integer, and CREATE TYPE … AS ENUM gives enum columns that compare and sort in the order their labels were declared. Four more queries now match PostgreSQL exactly: for example, RETURNING a jsonb column returns the stored document, and =, <> and IN compare numbers by value. More mistakes get PostgreSQL's own error codes, such as 42P01 for a table that does not exist. Prisma, TypeORM and GORM match PostgreSQL on many more of their getting-started steps.

This is not full ORM compatibility: some of each ORM's steps still differ from PostgreSQL. Renaming a table (ALTER TABLE … RENAME TO) is refused.

Developers

Versioned index names in the search API

In the Elasticsearch-compatible API, an index named like logs_v2 is now its own index. You can create the new version, reindex into it, move the alias to it and delete the old one, without the names colliding.

Console

Table editor lists your column types

The console's table editor, where you create a table and change its columns, now lists the column types your database offers: from text, UUID and decimal to date, time of day (new to the picker), interval, JSON, IP address and geographic point.

Bytes columns, column defaults and unique indexes are not in the editor yet; use SQL for them. A table keyed by a floating-point, JSON, list or geographic-point column can't be edited there.

Database

JSON compares and prints like PostgreSQL

Comparing a JSON field with a literal now compares JSON values, as PostgreSQL does: doc -> 'age' = '25' matches 25 and 25.0 and no longer matches the string "25", also over CTEs, derived tables and views. Converting a JSON number to numeric keeps every digit. On the PostgreSQL connection, jsonb columns are reported as jsonb and print with PostgreSQL's spacing and key order, and JSON literals are typed json or jsonb.

SQL

                      WITH c AS (SELECT id, j FROM t) SELECT id FROM c WHERE j -> 'age' = '25'
                    

Not every JSON form matches PostgreSQL yet. Apps that relied on the old compact JSON text, or on 'null'::jsonb arriving as SQL NULL, may notice the change.

Developers

Trace any request with your own ID

Send your own request ID with the x-oc-logical-request-id header, and OriginChainDB records it and echoes it back, so you can match any error to our record of the request. Browser code can now read request IDs too. The TypeScript 0.5.0, Python 0.8.0 and Go v0.5.0 SDKs attach request IDs to every error and add a diagnostics option that is off by default and sends only metadata, never queries, data or error text.

A request ID that is not a UUID is ignored, never refused. Using the TypeScript SDK in a browser worker? Use 0.5.1 or later.

Also in this release

  • PostgreSQL connections apply settings given at connect time (options=-c …, search_path, application_name) exactly like SET, and DISCARD ALL fully resets a session for connection poolers; open cursors are not dropped yet (dedicated configurations).
  • PostgreSQL’s name column type works, with its 63-byte limit, and an extremely deeply nested CHECK, generated-column or index-filter expression gets a clear 54001 “statement too complex” error (every configuration).
  • Graph and full-text searches, aggregations and suggestions honour X-OC-Statement-Timeout-Ms, show in GET /v1/queries and can be cancelled by id (every configuration).
  • Free and $29/$49 databases: creating a per-user token now answers with a clear message pointing to the instance key, the only credential these databases use. Dedicated databases are unchanged.