open source · prompt infrastructure

Prompts are code.
Treat them like it.

An open-source prompt infrastructure toolkit that lets you version, update, and govern prompts in production, eliminating the need to hardcode prompts or redeploy your application for prompt changes.

sql_generator.tmplv3 · live
template
System: You are a SQL expert.
Query to {{ .task }}:
sdk call
import px0

client = px0.ApiClient(px0.Configuration())
renders_api = px0.PromptRendersApi(client)
response = renders_api.render_live(
    slug="sql_generator",
    render_request=px0.RenderRequest(
        variables={"task": "list active users"}
    )
)
import {
  Configuration,
  PromptRendersApi
} from "@px0-ai/px0";

const rendersApi = new PromptRendersApi(
  new Configuration()
);
const response = await rendersApi.renderLive(
  "sql_generator",
  { variables: { task: "list active users" } }
);
import "github.com/px0-ai/px0-go"

client := px0.NewAPIClient(
  px0.NewConfiguration(),
)

req := px0.NewRenderRequest()
req.SetVariables(map[string]interface{}{
  "task": "list active users",
})

res, _, _ := client.PromptRendersAPI.
  RenderLive(nil, "sql_generator").
  RenderRequest(*req).
  Execute()

// what px0 gives you

Prompt Registry

⛨ vpc

Self-Hosted & Private

Deploy in your own cloud, VPC, or on-premises. Retain absolute ownership of your templates, data, and access controls for compliance.

on-prem · vpc
". ."

No Hardcoded Strings

Prompt text lives in version-controlled templates, not scattered across your codebase. No more grep-and-replace to update a prompt.

zero hardcoding
∅ ci

Deploy-Free Updates

Push a new template version and it goes live instantly. No PR, no build pipeline, no service restart required.

instant rollout
sdk

5-Line Integration

One render() call, same API across Python, Node, and Go. Swap the template name, never touch calling code again.

python · node · go
{ }

Easy Templating

Write prompts as code: variables, conditionals, loops, filters, macros. Sandboxed rendering. No more concatenated strings.

easy · sandboxed
v1 v2 v3

Atomic Versioning

Published versions are immutable. Go-live is atomic, no partial deployments. Roll back to any version in one operation.

immutable · diff
🔒 rbac

Team-Level RBAC

Role-based access control and granular team permissions. Define policies for who can view, edit, draft, or publish prompt templates.

granular access
≡ Δ

Draft & Review

Draft - Review - Publish workflow. Visual diff between any two versions. Comprehensive change tracking of every edit and revision.

change review
◎ otel

OTEL Observability

Every render is traced and measured. Push rendering latency, performance, and error metrics to any OpenTelemetry-compatible backend.

otel · metrics

// extend agent capabilities

Skill Registry

📁 files

Multi-File Workspaces

Every skill version maintains a complete, structured file tree. Edit individual code files or configure assets in-place, or upload/download ZIP packages of your entire codebase.

git-like workspace
↗ status

Promotion Pipelines

Promote skills across safe operational stages: draft → stable → live. Easily manage promotion flows and demote/archive older logical versions seamlessly.

draft · stable · live
🔒 lock

Immutable Snapshots

All active and stable skill versions are completely frozen. Guarantee 100% predictable and drift-free runtime execution in production environments.

zero behavioral drift
⎘ copy

Instant Branching

Instantly duplicate any version's entire file tree to a new draft. Safely experiment, debug, or implement new logic without affecting live skills.

duplicate & branch
✍ render

Skill Template Rendering

Render skill code templates dynamically with sandboxed Jinja support. Inject system state, custom parameters, and real-time environment variables prior to execution.

sandboxed rendering
⚡ zip

Multipart ZIP Uploads

Provision skill runtimes in bulk. Bundle your script directories, packages, and custom configuration schemas into a single ZIP file and upload.

bulk provisioning