DEV Community

Lighthouse PHP
Lighthouse PHP

Posted on

🚨 Lighthouse: A Minimal PHP Framework That Actually Gets Out of Your Way

Building modern web apps shouldn't require learning 50 new concepts. Sometimes you just want to write PHP.

The Problem with Modern PHP Frameworks

Don't get me wrong—Laravel, Symfony, and other frameworks are incredible. But sometimes you're building a simple web app and you find yourself:

  • 📚 Reading documentation for hours just to create a basic form
  • 🔧 Configuring dozens of services you don't need
  • 🐘 Fighting with complex abstractions for simple tasks
  • ⚡ Waiting for slow development servers to restart

What if there was a better way?

Meet Lighthouse 🚨

Lighthouse is a minimal, predictable PHP micro-framework that embraces the simplicity PHP was meant for. It's designed around one core principle: get productive immediately.

<?php
// That's it. Your first route.
route('/', function() {
    return view('home.php', ['message' => 'Hello World!']);
});
Enter fullscreen mode Exit fullscreen mode

Why Lighthouse is Different

1. Logic Where It Makes Sense

Instead of forcing everything through controllers, Lighthouse lets you handle form logic directly in views—the way PHP was designed:

<?php
// views/contact.php
$errors = [];

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $email = sanitize_email($_POST['email']);
    $message = sanitize_string($_POST['message']);

    if (!validate_email($email)) {
        $errors[] = 'Invalid email';
    }

    if (empty($errors)) {
        db_insert('contacts', ['email' => $email, 'message' => $message]);
        $success = 'Message sent!';
    }
}
?>

<form method="POST">
    <?php if ($success ?? false): ?>
        <div class="success"><?= $success ?></div>
    <?php endif; ?>

    <input type="email" name="email" required>
    <textarea name="message" required></textarea>
    <button type="submit">Send</button>
</form>
Enter fullscreen mode Exit fullscreen mode

Self-contained. Predictable. No magic.

2. Modern Stack, Zero Configuration

  • PHP 8+ with type hints and modern features
  • SQLite for zero-config databases
  • HTMX for dynamic interactions
  • Pico.css for beautiful, minimal styling
# Get started in 30 seconds
lighthouse new my-app
cd my-app
php -S localhost:8000 -t public/
Enter fullscreen mode Exit fullscreen mode

3. Security by Default

// CSRF protection built-in
<?= csrf_field() ?>

// Input sanitization included
$clean_input = sanitize_string($_POST['data']);

// Rate limiting ready
if (!check_rate_limit($_SERVER['REMOTE_ADDR'])) {
    // Handle rate limit
}
Enter fullscreen mode Exit fullscreen mode

4. Database Operations That Make Sense

// Simple, predictable database operations
$users = db_select('users', ['active' => 1]);
$user_id = db_insert('users', ['name' => $name, 'email' => $email]);
db_update('users', ['last_login' => date('Y-m-d H:i:s')], ['id' => $user_id]);
Enter fullscreen mode Exit fullscreen mode

Real-World Example: Authentication in 5 Minutes

Here's how you build a complete login system:

<?php
// routes.php
route('/login', function() {
    return view('login.php');
});

route('/dashboard', function() {
    if (!auth_user()) {
        header('Location: /login');
        exit;
    }
    return view('dashboard.php');
});
Enter fullscreen mode Exit fullscreen mode
<?php
// views/login.php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $email = sanitize_email($_POST['email']);
    $password = $_POST['password'];

    $user = db_select_one('users', ['email' => $email]);

    if ($user && auth_verify_password($password, $user['password'])) {
        auth_login($user['id']);
        header('Location: /dashboard');
        exit;
    }

    $error = 'Invalid credentials';
}
?>

<form method="POST">
    <?php if ($error ?? false): ?>
        <div class="error"><?= $error ?></div>
    <?php endif; ?>

    <input type="email" name="email" required>
    <input type="password" name="password" required>
    <?= csrf_field() ?>
    <button type="submit">Login</button>
</form>
Enter fullscreen mode Exit fullscreen mode

That's it. No controllers, no middleware configuration, no service providers. Just PHP doing what PHP does best.

When to Use Lighthouse

Lighthouse shines when you're building:

  • 🚀 MVPs and prototypes - Get to market fast
  • 📊 Internal tools and dashboards - No need for complexity
  • 🏢 Small business websites - Contact forms, simple e-commerce
  • 🎓 Learning projects - Focus on concepts, not framework magic
  • 🔧 API backends - Lightweight and fast

The Philosophy

Lighthouse embraces pragmatic PHP development:

  • Start simple - Use logic in views for rapid development
  • Refactor when needed - Move to more complex patterns as you grow
  • Choose what fits - Multiple approaches supported
  • Stay productive - Don't over-engineer simple problems

Getting Started

# Install the CLI
bash -c "$(curl -fsSL https://raw.githubusercontent.com/max-yterb/Lighthouse/main/scripts/install.sh)"

# Create your first app
lighthouse new my-awesome-app
cd my-awesome-app

# Start building
php -S localhost:8000 -t public/
Enter fullscreen mode Exit fullscreen mode

What's Next?

Lighthouse is actively developed with a focus on:

  • 🔐 Enhanced authentication providers (OAuth, SAML)
  • 🗄️ Multiple database support (MySQL, PostgreSQL)
  • ⚡ Performance monitoring tools
  • 📱 Advanced HTMX integration patterns

Try It Today

If you're tired of complex frameworks for simple projects, give Lighthouse a try. It might just remind you why you fell in love with PHP in the first place.


What do you think? Are you ready to try a framework that gets out of your way? Drop a comment below with your thoughts on modern PHP development!

Tags: #php #webdev #framework #opensource #microframework

Top comments (1)

Collapse
 
xwero profile image
david duymelinck

The first thing when I looked at the code is that the framework isn't using Composer. Any reason why?