PointArt
Ship powerful features with the simplicity of plain PHP.
A Spring Boot-inspired micro-framework. Attribute-based routing, dependency injection, ORM — no build step, no Composer, no magic.
Attribute-Based Routing
#[Router] and #[Route] replace verbose config files. Define routes right where your code lives.
Dependency Injection
#[Wired] auto-injects services and repositories into your controllers — no manual wiring needed.
ORM
#[Entity], #[Column], #[Id] map your classes to database tables. find(), save(), delete() with no SQL.
Dynamic Repositories
Declare findByNameAndEmail() as abstract — the framework generates the implementation at runtime.
Quick Example
use PointStart\Attributes\Router;
use PointStart\Attributes\Route;
use PointStart\Attributes\HttpMethod;
use PointStart\Core\Renderer;
#[Router(name: 'user', path: '/user')]
class UserController {
#[Wired]
private UserRepository $userRepository;
#[Route('/list', HttpMethod::GET)]
public function index(): string {
$users = User::findAll();
return Renderer::render('user.list', ['users' => $users]);
}
#[Route('/show/{id}', HttpMethod::GET)]
public function show(int $id): string {
$user = User::find($id);
return Renderer::render('user.show', ['user' => $user]);
}
#[Route('/create', HttpMethod::POST)]
public function create(
#[RequestParam] string $name,
#[RequestParam] string $email
): string {
$user = new User();
$user->name = $name;
$user->email = $email;
$user->save();
return Renderer::render('user.show', ['user' => $user]);
}
}
Why PointArt?
- No Composer — no dependency manager required
- No build step — deploy by copying files
- No template engine — views are plain
.phpfiles - No CLI scaffolding — create files yourself, use attributes to wire them up
- PHP 8.1+ — leverages native attributes and modern PHP features
- Runs on any host - shared or dedicated with Apache
mod_rewrite