Ubiquex

AI-Native Infrastructure Engineering

AI assists. A human signs. The ledger remembers.

payments
$ ubx plan --stack payments Proposal 9f3a81 · resolved against live state + aws.rds.DbInstance main db.r6g.large · 100 GB + aws.rds.DbInstance replica eu-west-1b + aws.sqs.Queue settlements retention 4d ~ aws.ec2.SecurityGroup db-access 1 rule added blast radius +3 ~1 -0 pinned network @ 4b1e77a2c3d4
◆ SUMMARY

Adds a primary Postgres instance with a read replica in a second availability zone, plus a settlement queue holding four days of messages. The existing security group gains one ingress rule scoped to the new database, so nothing becomes publicly reachable. Both instances sit inside the existing VPC.

hash frozen · stale on driftawaiting signature
Signed
every change, bound to its hash
Generated
from each vendor's own API
Typed
in Go, TypeScript and Python
Stateless
truth folds from the ledger
HOW IT WORKS

From intent to signed reality

Each step leaves a record. Months later you can walk any resource back through all four and see what happened, and who decided it.

1
your editor

Author

Write it in Go, TypeScript or Python, or describe it to an assistant. The SDK describes infrastructure and never executes anything.

2
ubx plan

Plan

Resolved against live state into a typed, hashed proposal. Every assumption an assistant made is listed for you to read.

3
ubx accept

Accept

One signature, bound to that exact hash. Nothing can change between review and apply, and there is no path around this step.

4
ubx ship

Ship

The only command that reaches a provider. It applies what was signed, then appends the result to the ledger.

AUTHOR

Real types. Zero execution.

Typed bindings generated from each provider’s own schema. The program describes intent and never executes anything.

// payments.ts

import * as ubx from "@ubx/sdk";
import * as aws from "@ubx/sdk-aws";

export default ubx.stack("payments", () => {
  aws.rds.DbInstance(stack, "main", {
    instanceClass:    "db.r6g.large",
    allocatedStorage: 100,
    password: ubx.secret("db-password"),
  });

  aws.sqs.Queue(stack, "settlements", {
    messageRetentionSeconds: 345600,
  });
});
COMPOSE

Without a language to learn

The complexity lives in the blueprint, where a real language earns its keep. Calling one is declarative.

# payments.ubx.hcl

stack = "payments"

blueprint "postgres" "primary" {
  source  = "acme/postgres"
  version = "1.2.0"
  size    = "db.r6g.large"
}

blueprint "service" "api" {
  source   = "acme/service"
  vpc_id   = "@network.aws_vpc.main.id"
  replicas = 3
}
THE LEDGER

No state file. An append-only record.

Current truth is folded from the record rather than stored, so there is nothing to lock, corrupt or lose. Each entry names its parent, so history cannot be quietly rewritten.

Why does this exist

ubx why

Walk any resource back to the proposal that created it, the intent behind it, and the person who signed it.

What changed underneath

ubx scan

Compare live state against the ledger, and turn any difference into an adoption or revert proposal.

Who set this attribute

ubx blame

Per-attribute provenance: which proposal last set each field, and who signed that one.

WHY UBX

Built for assistants, open by construction

An assistant can do the work but never the signing. Providers are generated from each vendor’s published API, so coverage is broad on day one and stays current on its own.

MCP NATIVE

Bring your own model

ubx speaks the Model Context Protocol, so Claude, ChatGPT or any MCP client can read your ledger, explain a resource and draft a blueprint. Eight tools, none of which can ship.

8
MCP tools
0
that can apply
OPEN ECOSYSTEM

Generated from the vendor’s own API

No hand-written provider to wait on. Schemas come from CloudFormation, OpenAPI, Smithy and Discovery Docs, so coverage tracks the API rather than a maintainer’s backlog.

8
providers
13,000+
resources and data sources

Ship your first stack

Install ubx, write a stack in the language you already use, and read the proposal before anything reaches a provider.