baremetalphp/framework

A lightweight, educational PHP framework with service container, routing, ORM, and more

Maintainers

Package info

github.com/baremetalphp/framework

pkg:composer/baremetalphp/framework

Statistics

Installs: 25

Dependents: 1

Suggesters: 0

Stars: 2

Open Issues: 0

0.2.0 2025-12-08 20:17 UTC

This package is auto-updated.

Last update: 2026-03-11 23:56:04 UTC


README

A lightweight, educational PHP framework with service container, routing, ORM, migrations, and more.

License PHP Version Packagist Version Downloads Stars Code Size

Inspired By Laravel Lightweight

Caution

This framework is NOT PRODUCTION READY. This is a limited feature framework intended as a learning tool/playground for developers.

Features

  • ๐ŸŽฏ Service Container - Dependency injection and service management
  • ๐Ÿ›ฃ๏ธ Routing - Clean, simple routing with middleware support
  • ๐Ÿ—„๏ธ ORM - Active Record style ORM with relationships (hasOne, hasMany, belongsTo, belongsToMany)
  • ๐Ÿ“Š Migrations - Database version control and schema management
  • ๐ŸŽจ Views - Simple templating engine with blade-like syntax
  • ๐Ÿ” Authentication - Built-in authentication helpers
  • ๐Ÿงช Testing - PHPUnit test suite included
  • โšก CLI Tools - Built-in console commands for common tasks

Requirements

  • PHP 8.0+
  • PDO extension
  • SQLite, MySQL, or PostgreSQL support

Quick Start

Creating a New Project

The easiest way to get started is to use the project skeleton:

composer create-project baremetalphp/baremetalphp [your-project]

cd [your-project]

php mini migrate
php mini serve

Note: The framework defaults to a SQLite database, but you can set up a MySQL connection in .env (PostgreSQL is ~95% functional but not fully tested).

Manual Setup

  1. Require the framework:
composer require elliotanderson/phpframework
  1. Set up your application structure:
my-app/
โ”œโ”€โ”€ app/
โ”‚   โ”œโ”€โ”€ Http/
โ”‚   โ”‚   โ””โ”€โ”€ Controllers/
โ”‚   โ””โ”€โ”€ Models/
โ”œโ”€โ”€ bootstrap/
โ”‚   โ””โ”€โ”€ app.php
โ”œโ”€โ”€ config/
โ”‚   โ””โ”€โ”€ database.php
โ”œโ”€โ”€ public/
โ”‚   โ””โ”€โ”€ index.php
โ”œโ”€โ”€ routes/
โ”‚   โ””โ”€โ”€ web.php
โ””โ”€โ”€ composer.json
  1. Create a route (routes/web.php):
use BareMetalPHP\Routing\Router;
use BareMetalPHP\Http\Response;

return function (Router $router): void {
    $router->get('/', function () {
        return new Response('Hello, World!');
    });
};
  1. Bootstrap your application (bootstrap/app.php):
<?php

require __DIR__ . '/../vendor/autoload.php';

use BareMetalPHP\Application;

$app = new Application(__DIR__ . '/..');
$app->registerProviders([
    BareMetalPHP\Providers\ConfigServiceProvider::class,
    BareMetalPHP\Providers\DatabaseServiceProvider::class,
    BareMetalPHP\Providers\RoutingServiceProvider::class,
    BareMetalPHP\Providers\ViewServiceProvider::class,
]);

return $app;
  1. Create your entry point (public/index.php):
<?php

$app = require __DIR__ . '/../bootstrap/app.php';
$app->run();

Usage Examples

Routing

$router->get('/users', [UserController::class, 'index']);
$router->post('/users', [UserController::class, 'store']);
$router->get('/users/{id}', [UserController::class, 'show']);

Models

use BareMetalPHP\Database\Model;

class User extends Model
{
    protected $table = 'users';
    
    // Relationships
    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

// Usage
$user = User::find(1);
$posts = $user->posts;

Database Migrations

use BareMetalPHP\Database\Migration;

class CreateUsersTable extends Migration
{
    public function up($connection)
    {
        $this->createTable($connection, 'users', function ($table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamps();
        });
    }
    
    public function down($connection)
    {
        $this->dropTable($connection, 'users');
    }
}

Views

use BareMetalPHP\View\View;

return View::make('welcome', [
    'name' => 'World'
]);

CLI Commands

The framework includes a CLI tool (mini) with several commands:

  • php mini serve - Start the development server
  • php mini migrate - Run pending migrations
  • php mini migrate:rollback - Rollback the last migration
  • php mini make:controller Name - Create a new controller
  • php mini make:migration name - Create a new migration

Testing

composer test
# or
vendor/bin/phpunit

Documentation

For detailed documentation, visit the framework documentation.

License

MIT License - see LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.