The PHP framework
without the tax.
Savv is a lean PHP engine for brand websites, portfolios, and public-facing experiences. Ship fast. No Node.js. No build pipeline. No ceremony. Just PHP running at full speed on any server on earth.
Everything you need.
Nothing you don't.
Every feature is purpose-built for content-driven, public-facing sites. No bloat included.
File-Based Routing
Drop a PHP file in views/pages/ and it
becomes a URL. No registration, no config, no controllers required.
PWA Baked In
Manifest, service worker, offline fallback — all generated dynamically from configs/pwa.php. Two
helper calls and you're done.
Zero Build Tools
No Node.js. No npm. No webpack, Vite, or any compiler. Composer install, point at public/, go live.
Built-In Redirections
One line in configs/redirections.php
creates a pretty short URL. No plugin. No route file edit needed.
Route Caching
php savv route:cache
compiles everything into one static PHP manifest. Static-site dispatch speed, dynamic codebase.
Live Editing
No rebuild between your file and your users. Edit views, configs, or content and reload. Instant. Critical in production emergencies.
CMS Fallback
Run WordPress, e-commerce, or any other PHP app alongside Savv under the same domain with zero server config changes.
Deploy Anywhere
Shared hosting. Budget VPS. Bare metal. Enterprise cloud. If the server runs PHP 8, it runs Savv. No containers required.
Built-In Blogging
Drop a Markdown file in views/posts/ with
frontmatter and it's published at its slug URL automatically.
Lightweight ORM
Fluent query builder, eager loading, dirty-state tracking, and four relationship types — all on a lean PDO core with zero magic and full type safety. No N+1 queries by default.
Events, Observers, Bus
Use in-process events for app flow, model observers for side effects, and Redis-backed bus dispatch when multiple Savv apps need to talk without tight coupling.
Honest comparison
with the alternatives.
Savv is not trying to replace Laravel or Next.js. It's built for a specific job — and it's the best tool for that job.
| Feature | Savv Web ✦ | Full-Stack PHP | Static Site Gen |
|---|---|---|---|
| File-based routing, zero config | ✓ | ✗ | ✓ |
| No build tool required | ✓ | ✗ | ✗ |
| PWA built-in, no setup | ✓ | ✗ | ✗ |
| URL redirections, no settings | ✓ | ✗ | ✗ |
| SSG-feel speed | ✓ | ✗ | ✓ |
| Deploy on shared/budget hosting | ✓ | ⚠ | ✓ |
| Edit live in production | ✓ | ✗ | ✗ |
| CMS fallback / hybrid deployment | ✓ | ✗ | ✗ |
| Package size under 1 MB | ✓ | ✗ | ⚠ |
| Lightweight ORM built-in, no extra package | ✓ | ✓ | ✗ |
| In-process events & model observers | ✓ | ✓ | ✗ |
| Redis-backed inter-service message bus | ✓ | ⚠ | ✗ |
| Deep ORM / large plugin ecosystem | ✗ | ✓ | ✗ |
Your entire entry point
stays tiny.
Every Savv application bootstraps from a single, readable entry file. Nothing is hidden. Nothing is magic.
Bootstrap in one call
The application loads your environment, discovers routes, and registers the PWA engine — all in one method.
Pages are just PHP files
Create a file in views/pages/
and it resolves as a URL with zero other steps.
Two helpers for the full frontend stack
savv_head()
and savv_scripts()
inject Bootstrap, AOS, SPA transitions, and PWA registration automatically.
Listen to savv:init
for your JS
Custom event fires on first load and after every page swap. Your UI components always reinitialize correctly.
React to model changes with Events & Observers
SavvEvent fires in-process hooks. Model lifecycle methods like User::created() let observers react to data changes. SavvBus extends this across multiple apps via Redis — zero coupling required.
// The entire application entry point. // That's it. Really. define('PUBLIC_PATH', __DIR__); define('ROOT_PATH', dirname(__DIR__)); require ROOT_PATH . '/vendor/autoload.php'; $app = \Savv\Core\Application::bootstrap(ROOT_PATH, PUBLIC_PATH); $app->run();
// File: views/pages/about.php → accessible at /about // No route registration. No controller. Just this. $pageTitle = 'About — My Brand'; $pageDescription = 'Who we are.'; ob_start(); ?> <section> <h1>About Us</h1> </section> <?php $content = ob_get_clean(); include ROOT_PATH . '/views/layouts/index.php';
Small core. Surprisingly capable.
Savv stays focused on public-facing sites, but the core now covers more than routing and templates when your project needs a little application logic.
In-Memory Events
SavvEvent gives you a clean internal event layer for app flow without adding a separate event container.
Model Observers
Centralize lifecycle reactions like notifications, auditing, or cache work in dedicated observer classes.
Cross-Service Bus
Publish events to other Savv apps through Redis and let each service react locally through the same event interface.
Readable Data Layer
The ORM, query builder, identity map, and relationship blueprints stay traceable enough to understand in one sitting.
Savv runs alongside
your existing CMS.
No complex server rewrites. Savv routes what it knows about, and hands the rest off cleanly to WordPress, WooCommerce, or any PHP app on the same server.
Configure
integrations in one file. Set active: true and
Savv handles the rest — your blog, your shop, your Savv site, all under one domain.
Create configs/installations.php and add your CMS entry path
Set active: true on the installation you want to hand off to
Unmatched requests flow through Savv → CMS automatically
return [ 'wordpress' => [ 'active' => true, 'path' => '/var/www/wp/wp-blog-header.php', ], 'ecommerce' => [ 'active' => false, 'path' => '/var/www/shop/index.php', ], ];
The right tool for
the right job.
Savv is purpose-built for public-facing, content-driven sites. It's not trying to be everything — it's trying to be perfect for this.
Brand & Corporate Websites
Clean, fast, deployable anywhere.
Agency & Studio Portfolios
Showcase work with SPA-feel navigation.
Marketing & Campaign Sites
Launch fast, iterate without rebuilds.
Product Landing Pages
Pixel-perfect, performance-optimized.
Company Profiles & Brochures
PWA-ready from day one.
Hybrid CMS Sites
Savv front, WordPress blog behind.
Multi-Service Platforms
Independent Savv apps communicating via Redis bus — decoupled, fast, no shared codebase.
Up and running
in under two minutes.
Clone the starter:
git clone https://github.com/igefadele/savv_starter my-project
Install dependencies: cd my-project && composer install
Point your server document root at public/ and open the browser.
Add pages by dropping .php files into views/pages/. Done.