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.
System: You are a SQL expert. Query to {{ .task }}:
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
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 · vpcNo Hardcoded Strings
Prompt text lives in version-controlled templates, not scattered across your codebase. No more grep-and-replace to update a prompt.
zero hardcodingDeploy-Free Updates
Push a new template version and it goes live instantly. No PR, no build pipeline, no service restart required.
instant rollout5-Line Integration
One render() call, same API across Python, Node, and Go. Swap the template name, never touch calling code again.
python · node · goEasy Templating
Write prompts as code: variables, conditionals, loops, filters, macros. Sandboxed rendering. No more concatenated strings.
easy · sandboxedAtomic Versioning
Published versions are immutable. Go-live is atomic, no partial deployments. Roll back to any version in one operation.
immutable · diffTeam-Level RBAC
Role-based access control and granular team permissions. Define policies for who can view, edit, draft, or publish prompt templates.
granular accessDraft & Review
Draft - Review - Publish workflow. Visual diff between any two versions. Comprehensive change tracking of every edit and revision.
change reviewOTEL 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
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 workspacePromotion Pipelines
Promote skills across safe operational stages: draft → stable → live. Easily manage promotion flows and demote/archive older logical versions seamlessly.
draft · stable · liveImmutable Snapshots
All active and stable skill versions are completely frozen. Guarantee 100% predictable and drift-free runtime execution in production environments.
zero behavioral driftInstant 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 & branchSkill 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 renderingMultipart 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