PostFinite

Postgres that thins its own history and tells you what happens next.

A managed Postgres database with horizon tables: time-series tables bounded in both directions. Old rows downsample themselves as they age. Future rows are forecast ahead by competing methods, scored against what actually arrives, over typed entities the database itself validates, connected into a graph you can draw.

Horizon tables

One statement, in both directions of time

A horizon table covers unbounded history in finite space, and writes its own future ahead of now.

-- turn an ordinary table into a horizon table
SELECT chrono.create_horizon_table('readings', 'ts',
  '1 day', '1 day', '1 hour', 'linear', true);

-- enrol competitors; every method writes its own future
SELECT chrono.add_forecast_method('readings', 'seasonal_naive');
SELECT chrono.add_forecast_method('readings', 'seasonal_linear');

-- reality scores them as it arrives; rank 1 is EARNED
SELECT method, mape_pct, rank
  FROM chrono.method_leaderboard('readings');

Continuous aggregates you configure and maintain are a different shape of answer. Here retention, downsampling and forecasting are properties of the table, and the error rate is a column you can query rather than a claim in a benchmark. The console charts each table’s competing futures, and an entity linked to its slice of a table shows its own forecast on its own page.

Typed entities

Validation the database enforces, not your app code

Everything you track is an entity with a type, and the type decides what the database accepts.

SELECT postfinite.declare_metric('turbine', 'rpm', 'rpm',
  'float8', 0, 4000, NULL);

INSERT INTO chrono.entity_telemetry (ts, entity_id, metric_name, metric_value)
VALUES (now(), 'turbine-a1', 'wattage', 900);
ERROR:  Metric "wattage" is not declared for this device's type
        (strict enforcement). Declare it with postfinite.declare_metric().

Types also carry a full taxonomy: categories, domains, and a relationship vocabulary, surfaced in the console and queryable like everything else.

The graph

Entities connect with verbs

this pump feeds that tank is a row.

INSERT INTO chrono.entity_edges (source_id, target_id, relationship)
VALUES ('pump-01', 'tank-3', 'feeds');

SELECT * FROM chrono.neighbors('tank-3', 'both', NULL);
SELECT * FROM chrono.subgraph('pump-01', 2, 100);

Platform entities

Your database knows where it lives

Every database ships with a small set of platform-published entities: the service, the provider, the region.

SELECT entity_id, name FROM chrono.entities
 WHERE origin = 'global';
--  pf:platform   Postfinite Cloud   (heartbeats hourly)
--  pf:neon       Neon
--  pf:us-east-1  AWS us-east-1

Also included

A console that teaches itself

A getting-started checklist that checks itself off against your real data, a 60-second guided tour over the live UI, and a help dot beside every concept. Forecast charts, the graph, and per-entity futures are drawn in, not bolted on.

Connectors: ingest is telemetry too

Whatever feeds a horizon table is itself an entity. Record its rows_written and lag_seconds as ordinary readings and your pipeline’s health becomes chartable, even forecastable.

Your own address

Every account gets you.postfinite.com. Bring a custom domain if you prefer: one CNAME, certificates handled, live within the hour.

Passkeys

Sign in with the key on your phone, laptop or security key. The platform stores only the public half, the key is bound to this site so a look-alike page cannot use it, and a teammate joins with a one-time enrollment code you hand over yourself.

Vector search

pgvector with HNSW and IVFFlat. Embeddings sit beside the rows they describe, in the same transaction, with no second datastore to keep in sync.

Event streaming

A transactional outbox with change-data-capture triggers, so a committed write can drive other systems without a dual write.

A database, not a tenant in one

Every account gets its own isolated Postgres database with its own role and connection string. Standard wire protocol, so your existing driver, psql, and migration tool all work unchanged.

Plans

Plan Price Entities Storage Status
Loading plans…

What you actually get today

Managed PostgreSQL 18, provisioned for you as an isolated database. The Postfinite engine (chrono horizon tables, postfinite_auth, postfinite_nats) is applied to it as schema. Self-hosting the engine as native extensions, on the PostgreSQL 18.4 fork, is the other way to run it.

There is no documentation site yet, and nothing here is charging money. Accounts are opened by invitation: ask for one and a person reads it, and you sign in with a passkey. If you would rather talk first, the address below reaches the same person.