Pre-release. HareBox is a working local build with no public service yet. Statuses on every feature say what runs today; speed and reliability figures are targets until measured. Status

Preview environments and live demos

Give every branch, pull request or prospect a running app at a private HTTPS URL that wakes when someone opens it.

For Product teams, sales engineers and agencies

Why it pays

  • A real stack per branch Databases, queues and workers run as they do in production, in one VM.
  • Shareable and private Private URLs with rotating tokens, or sign-in through your identity provider.
  • Costs only while viewed Stopped previews cost nothing, and a request wakes them.

Step by step

  1. Start a preview from your app template

    One sandbox per pull request, labelled with its number.

    CLI

    ID=$(harebox new --from app-v1 --name pr-311 --label pr=311 | jq -r .id)

    Python

    box = hb.create(template="app-v1", name="pr-311", labels={"pr": "311"})

    TypeScript

    const box = await hb.create({ template: "app-v1", name: "pr-311", labels: { pr: "311" } });
  2. Deploy the branch inside it

    Check out the branch and start the stack.

    CLI

    harebox exec "$ID" -- "git fetch origin pull/311/head:pr && git checkout pr && docker compose up -d"

    Python

    box.run("git fetch origin pull/311/head:pr && git checkout pr && docker compose up -d")

    TypeScript

    await box.run("git fetch origin pull/311/head:pr && git checkout pr && docker compose up -d");
  3. Expose it, with sign-in

    Use a token link for quick shares, or OIDC to require your team's login.

    CLI

    harebox host "$ID" 8080 --title "PR 311" --auth oidc

    Python

    ep = hb.create_endpoint(box.id, body={"port": 8080, "title": "PR 311", "auth": "oidc", "wake_on_request": True})

    TypeScript

    const ep = await hb.createEndpoint(box.id, { body: { port: 8080, title: "PR 311", auth: "oidc", wake_on_request: true } });
  4. Rotate the link when you share it outside

    Rotation is atomic: the old link stops working the moment the new one exists.

    CLI

    harebox host rotate "$ID" ENDPOINT_ID

Tips

  • Delete the preview when the pull request closes, from your CI's close event.
  • Use a custom domain for sales demos, so the URL carries your brand.
  • Keep seed data in the template, so every preview starts with realistic content.