Run the runtime locally, test one policy decision, then decide whether you need the console.
Every plan starts with the same boundary: the runtime runs in your environment. This guide gets you through the runtime-only path first so the commercial decision comes after technical validation, not before it.
Signing up creates a workspace, auto-generates your runtime token, and hands you a ready-to-paste Docker command on the first screen.
| Plan | Runtime | Console | Use it when |
|---|---|---|---|
| Starter | Self-hosted runtime | No console | Evaluate the runtime and manage policies locally. |
| Growth | Self-hosted runtime | Hosted console | Add policy workflow and metadata-first operational visibility. |
| Enterprise | Self-hosted runtime | Hosted or self-hosted console | Handle custom deployment or procurement requirements. |
1. Clone the runtime repository
Start with the open-source runtime. Keep the first run local and uncomplicated so you can validate the evaluation path before thinking about team workflows.
git clone <runtime-repo-url> znyx-runtime
cd znyx-runtime2. Run the standalone example
The standalone mode is the cleanest way to evaluate the product boundary. It uses local policy files and does not require the console.
git clone <runtime-repo-url> znyx-runtime
cd znyx-runtime
docker build -f znyx-backend/Dockerfile.runtime -t znyx-runtime znyx-backend/
docker run -d -p 8080:8080 --name znyx-runtime znyx-runtimeAfter startup, check http://localhost:8080/healthz and http://localhost:8080/readyz before sending an evaluation request.
3. Send a sample request
Use a small request that should trigger a visible policy action so you can confirm the runtime is enforcing policy in your environment.
curl -X POST http://localhost:8080/v1/evaluate/input \
-H "Content-Type: application/json" \
-d '{
"request_id": "quickstart-001",
"tenant_id": "default",
"app_id": "default",
"text": "My email is test@example.com"
}'4. Wrap your model call
The application pattern stays the same whether you remain on Starter or later connect the runtime to a console: evaluate input before the model call and evaluate output before it leaves your app.
from znyx_sdk import GuardrailsSyncClient
guardrails = GuardrailsSyncClient("http://localhost:8080")
input_result = guardrails.evaluate_input(
user_message,
tenant_id="default",
app_id="my-app",
)
if input_result.is_blocked:
return {"error": input_result.user_message}
llm_response = call_llm(input_result.sanitized_text or user_message)
output_result = guardrails.evaluate_output(
llm_response,
tenant_id="default",
app_id="my-app",
)
return output_result.sanitized_text or llm_response5. Decide whether to stay runtime-only or add the console
Stay on Starter if local policy files and self-service docs are enough. Move to Growth when you need shared policy rollout, operational traces, and team workflow. Move to Enterprise when the console also needs to live in your environment.