Components
See all supported services, databases, caches, and messaging systems in the Components reference.
nurburg.dev is a platform for designing, deploying, and benchmarking backend systems. Define your infrastructure as code in a git repository, run it in an isolated environment, and get performance scores you can compare across experiments.
You define an experiment in a git repository. nurburg.dev deploys your services and databases in an isolated environment, runs your load tests and API tests against them, and produces scores.
An experiment consists of:
Create a GitHub repository for your experiment. By convention, name it experiment-my-project for explorations or challenge-my-project for challenge submissions.
Create the .nurburgdev/ directory at the root of your repo. This is where your experiment configuration lives.
Write experiment.toml to declare your infrastructure and tests:
description = "My first experiment"
[[service]]name = "app"runtime = "nodejs"port = 3000healthCheckUrl = "/health"cpuCores = 0.5memoryMB = 256instances = 1env = {DATABASE_URL = "postgres://user:pass@db:5432/mydb"}
[[postgres]]name = "db"cpuCores = 0.5memoryMB = 512storageGB = 10dbName = "mydb"user = "user"password = "pass"
[[traffic]]file = ".nurburgdev/traffic.js"
[[score]]name = "ERR_RATE"taskName = "traffic"threshold = 5.0Create a Procfile in your service’s source directory (defaults to the repo root). It tells nurburg.dev how to build and start your service:
build: go build -o ./app .web: ./appbuild runs once before web and must exit with code 0. For runtimes with no compile step, omit it:
web: node server.jsbuild: mvn package -qweb: java -jar target/app.jarWrite a k6 load test at .nurburgdev/traffic.js. The HOST environment variable is automatically set to your service’s base URL:
import http from "k6/http";import { sleep } from "k6";
export const options = { vus: 50, duration: "60s",};
export default function () { http.get(`${__ENV.HOST}/api/items`); sleep(0.5);}Push to GitHub and go to nurburg.dev/new to connect your repository and run your first experiment.
The .nurburgdev/README.md is your experiment’s writeup on nurburg.dev. It uses standard Markdown with a YAML frontmatter block:
---title: "My Experiment"author: "Anunay Biswas"authorLink: "https://github.com/anunaybiswas"authorTitle: "Software Engineer"summary: "One-sentence description shown in listings"publishedOn: 2024-06-01tags: [postgres, scalability]intent: "experiment"draft: false---
Your writeup goes here...Components
See all supported services, databases, caches, and messaging systems in the Components reference.
Tasks & Scores
Learn how to define load tests, API tests, and pass/fail scores.