Build the SaaS, not the plumbing.
Tiger is a 1-click, multi-tenant SaaS foundation for PHP β auth, orgs, roles, theming,
i18n, and a clean /api β so you ship product from day one. Front-end
agnostic, zero build step.
Flip light/dark or the skin in the header β this page restyles live, no reload.
Startup-friendly
Zero to a running, themed, multi-tenant app in one command β on a $0 stack if you want. No infra to stand up, no boilerplate to write. Spend your runway on product, not plumbing.
Enterprise-class MVPs
Auth, role-based access, audit logging, multi-tenancy, i18n, and live config β the substrate enterprises spend months on β ship with your first commit. Your MVP is production-shaped out of the gate.
Structured for vibe coding
Predictable patterns, docs that live in the code, and an AGENTS.md your
AI assistant reads before it writes. Describe what you want and let the conventions
keep it clean β vibe code that doesn't rot.
Built for speed
A lean core with no per-request framework bloat β zero build step, tiny memory footprint, OPcache-tuned. Flies on a $5 shared host, not just a beefy server. Fast is the default, not an upgrade.
The numbers don't lie
Steady at the median, the 95th, and the 99th percentile — the tail stays flat under load, not just on a quiet box. That's the raw cost of generating a real page, with no output cache and no tricks. Consistent, with zero errors.
The competition
faster than Laravel, Next.js, or Django + ORM at generating the same dynamic page — most of their time is framework plumbing, not your code. And Tiger does it on a $5 shared host those stacks can't even run on. Lean beats heavy.
~10 ms measured (single warm request, 2‑vCPU box, PHP 8 + OPcache). Multipliers reflect typical per‑request generation times for an equivalent dynamic page vs. mainstream framework defaults — not a controlled benchmark; results vary by workload and hardware.
Everything a SaaS needs, none of the busywork
The boring-but-essential substrate, done right.
Front-end agnostic
Server-rendered .phtml or any SPA (React, Vue, β¦) against one JSON /api. The core ships no UI framework β build the front end however you like.
Multi-tenant by default
Orgs, users, and memberships out of the box. A user can be admin in one org and viewer in another β roles live on the membership.
Zero build toolchain
No npm, no webpack, no Sass. composer install and the UI renders. Assets are vendored; a build tool only appears if a theme opts in.
i18n with live overrides
Semantic keys, language-only locales, /es/ URLs. Change any string in production with no deploy β same for config.
Auth & ACL included
Password policy, lockout, DB sessions, an audit log, and a deny-by-default ACL with live, per-tenant roles.
Pluggable logging
Structured JSON logs to error_log, stderr, syslog β or straight to CloudWatch / GCP / Azure. Switch with one config line.
Live theming & skins
Light/dark and swappable skins that hot-swap with no reload β per user and per org. Try the switchers above β
Batteries-included CLI
bin/tiger migrate, install:admin, make:module β scaffold a live module (controller + /api service + ACL) in seconds.
REST without the bloat
One endpoint. The message says where it's going. Add a method and it's live — no route to design, no verb to argue about, no endpoint zoo to maintain.
One endpoint, not 50
A single /api. The module + service +
method ride in the message, so a new call is a new method —
not a new route, a new controller, and a new version to babysit.
Secured by ACL
Every call is authorized before it runs — deny-by-default, resource = the service, privilege = the method. Auth isn't a check you can forget to write; it's the gateway you can't route around.
Stateless or stateful
Ride the session for a first-party UI, or go token-based and stateless for a public API or a mobile client — the same services answer either way. Pick the model per surface, not per framework.
Discoverable by design
Because routing is data in the message, the API can describe itself — versioned services and an OpenAPI / Swagger catalog fall out of the pattern, not a bolt-on spec you keep in sync by hand.
Spin up your app in minutes
One command scaffolds a running, themed, multi-tenant app.
$ cd my-app && vendor/bin/tiger install:admin