DiscoveryServicesHow We WorkPlatformSolutionsInsightsDocsStart with the Map
Docs/Language/Getting Started

Getting Started

ProxyLang runs on proxyweb, the ProxyCore web runtime. This guide takes you from an empty file to a live, audited app in a handful of steps — write a .pxy, serve it, and grow it.

Preview — early access

ProxyCore and ProxyLang are in preview and private dogfooding, distributed as a Rust workspace rather than a public package. The steps below assume you have early-access to that workspace — request access if you don't yet.

Step 1 — Get the runtime

You need a recent stable Rust toolchain (rustup) and the ProxyCore workspace. Build it once; the proxyweb binary is what serves your files.

terminalshell
# with early-access to the workspace
git clone <proxycore-workspace> proxycore
cd proxycore
cargo build -p proxyweb

Step 2 — Write your first .pxy

A ProxyLang file is indented text — no braces. Start with a site and one page that declares a route:.

hello.pxyProxyLang
site "Hello"

direction:
  modern-minimal

page Home:
  route:
    /
  heading: Hello from ProxyLang
  paragraph: This whole page is defined in one .pxy file and rendered in the Brevet design system.
  callout success: Parsed once at startup, served as cached bytes.

Step 3 — Serve it

Point proxyweb at your file. It parses the .pxy, pre-renders each page, and serves on http://127.0.0.1:3200 by default.

terminalshell
cargo run -p proxyweb -- hello.pxy
#  proxyweb listening on http://127.0.0.1:3200
#  open it in a browser

Step 4 — Add a page

Add another page with its own route:. Static pages are pre-rendered and looked up in O(1) per request.

hello.pxyProxyLang
page About:
  route:
    /about
  heading: About this site
  list ordered:
    Parse the .pxy
    Lower the site block
    Pre-render each page to cached bytes

Step 5 — Make it live

Add a machine for behavior that changes over time. The runtime drives it at /machine/<Name>/fire, performs the checked transition, and records an audit entry per action.

hello.pxyProxyLang
machine Turnstile

states:
  locked
  open

when coin:
  state = open
  unlock gate

when push:
  state = locked
  lock gate
terminalshell
# fire an event at the live machine
curl "http://127.0.0.1:3200/machine/Turnstile/fire?event=coin"

Step 6 — Persist data (optional)

To store and read data, give the site a schema:, the allowed mutations:, and named queries:, then point the runtime at a database with PROXYWEB_DB. A form runs only the named mutation; a table reads only a named query.

terminalshell
PROXYWEB_DB=sqlite://hello.db cargo run -p proxyweb -- hello.pxy

See the guestbook example for the full read/write loop.

Next steps