Familiar controllers and services
Controllers receive requests, and services handle business logic. Separate these roles with Go structs and methods.
Learn to write controllers
Structure Go apps with the controllers and services you know from NestJS and Spring. Use constructor injection and interceptors, and explore throughput and memory usage measured with the same resources.
go install github.com/NARUBROWN/spine-cli/cmd/spine@v0.1.4
spine new hello-spine --module example.com/hello-spine
cd hello-spine
go mod tidy
spine contract check
spine verify
spine dev
Create a project with the CLI, validate it, and run it. See the first app guide for the complete steps.
Build your first app with the CLIWe compared NestJS/Express, Spring MVC and FastAPI/Uvicorn with 3 vCPU and 3GiB of memory allocated to each.
Spine internal lab test / 2026.11.01
View measurement conditions and full results163,559req/s
HTTP throughput
Median measured under saturated load
41.8MiB
Observed memory
Usage at 20,000 requests per second
1.062ms
p99 response latency
Latency at 20,000 requests per second
Higher is better
If each user sends one request per second
Spine could have handled requests for about 69,582 more people.
Spine could have handled requests for about 44,616 more people.
Spine could have handled requests for about 113,386 more people.
Saturated throughput at 256 concurrent connections. We compared the actual throughput of each implementation.
This example converts the difference in requests per second into a user count, assuming one request per user per second. Actual capacity depends on request frequency and the work the app performs.