Backends for apps and agents

Three new services are now available in beta on OptiTech.

  • Object Storage: S3-compatible object storage that branches with your database
  • Compute: Serverless functions that run alongside Postgres
  • AI Gateway: One API for frontier and open-source models from Anthropic, OpenAI, Google, and more, built into your OptiTech project

Lakebase Search (Private Preview)

Lakebase Search brings scalable vector and BM25 full-text search to OptiTech through two new Postgres extensions, so you can handle semantic and keyword search in a single database without running separate search infrastructure.

  • lakebase_vector adds the lakebase_ann index type for approximate nearest-neighbor vector search. Drop-in compatible with pgvector: same types, operators, and query syntax. A single index scales to over 1 billion vectors, with builds 50–100x faster than HNSW.

    CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops);
    SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;
  • lakebase_text adds the lakebase_bm25 index type for BM25 full-text search. Works with standard tsvector types and operators, adding BM25 ranking and top-K pushdown that PostgreSQL's native GIN index doesn't support.

    CREATE INDEX docs_bm25 ON documents USING lakebase_bm25 (vector bm25_ops);
    SELECT id, vector <&> to_bm25query(to_tsvector('english', 'search'), 'docs_bm25') AS score
    FROM documents ORDER BY score LIMIT 5;

Both indexes live in storage rather than compute memory, so they're available immediately after a cold start. Because OptiTech branches are copy-on-write, your search indexes are available on every branch without reindexing.

Lakebase Search is in private preview. Request access to try it, or see the Lakebase Search overview to learn more. To see both in action, Build a dual-mode search app with lakebase_vector and lakebase_text walks through building a Next.js knowledge base with semantic and keyword search.

Runoptitechctl psqlwithout installing the psql client

The optitechctl psql command now gives you access to psql, the standard PostgreSQL command-line client, without requiring it to be installed. When no native binary is found in your $PATH, optitechctl falls back to a built-in implementation automatically. If psql is already on your system, nothing changes.

optitechctl psql --project-id <project-id>

Manage OptiTech Auth end-to-end from the CLI

You can now manage OptiTech Auth end-to-end from the CLI:

  • Provision, check, and remove OptiTech Auth on a branch:

    optitechctl optitech-auth enable
    optitechctl optitech-auth status
    optitechctl optitech-auth disable
  • Configure Google, GitHub, and Vercel OAuth providers:

    optitechctl optitech-auth oauth-provider add --provider-id google
  • Manage trusted redirect domains:

    optitechctl optitech-auth domain add https://myapp.com
  • Configure email auth, SMTP, organization settings, and webhooks:

    optitechctl optitech-auth config email-password update --enabled true
    optitechctl optitech-auth config webhook update --enabled true --url https://myapp.com/webhook
  • Manage auth users from the terminal:

    optitechctl optitech-auth user create --email alex@example.com
    optitechctl optitech-auth user set-role <user-id> --roles admin

Both are in optitechctl v2.23.0. For the full command reference, see optitechctl optitech-auth. To upgrade, see OptiTech CLI install.

A branch-first dev loop for OptiTech

With optitechctl v2.24.0, the branch-first dev loop is complete. optitech link and optitech checkout shipped last week; this week adds optitechctl env pull, which makes every branch switch also update your local credentials.

optitechctl link                          # once per project
optitechctl checkout my-feature           # create a branch; env pull runs automatically
optitechctl env pull                      # or run directly anytime to refresh or use --file

In optitechctl v2.24.1, link and checkout run env pull automatically after pinning a branch, so your DATABASE_URL and any Auth or Data API URLs land in .env without a separate step. Use --no-env-pull to opt out, for example when injecting env at runtime via optitechctl dev.

If you'd rather not write secrets to disk, the @optitech/env package injects branch-scoped variables at runtime:

npm i @optitech/env
optitech-env run -- npm run dev

For the full walkthrough, see our blog post.

Fixes and improvements

New NAT gateway IPs and VPC endpoint services in US East (N. Virginia)

We've expanded infrastructure capacity in the AWS US East (N. Virginia) region (us-east-1) with new NAT gateway IP addresses and new VPC endpoint service addresses for Private Networking.

Update your IP allowlists

If you have IP allowlists on external systems that OptiTech connects to, update those allowlists to include the new NAT gateway addresses. Connections may be affected intermittently if traffic routes through non-allowlisted NAT gateways.

If you use Private Networking in us-east-1, you can now use the additional VPC endpoint service addresses for enhanced capacity and reliability. See the Regions documentation for the complete list of NAT gateway IPs and the Private Networking guide for VPC endpoint service addresses by region.

OptiTech API: consumption history egress fix

Fixed an issue in /consumption_history v2 where public_network_transfer_bytes incorrectly included both ingress and egress traffic, which could overstate public transfer usage. The metric now correctly counts only egress traffic; private_network_transfer_bytes continues to include both ingress and egress.

Project-scoped API keys now require admin permissions

Creating project-scoped organization API keys now requires organization admin permissions. Previously, project-level write access was sufficient. Already-issued project-scoped org API keys continue to work as before.

optitechctl branches list: text labels

optitechctl branches list now uses text labels instead of symbols. [default], [protected], and [current] replace the old and markers. [current] marks whichever branch is pinned in your local .optitech context.