v1.0.0 released

Build at the
speed of thought.

A zero-dependency PHP 8.3+ framework. Under 240KB. No Composer. It doesn't use Regex. It just works.

use Aether\Kernel\Application;

$app = Application::create(__DIR__);

$app->get('/users/{id}', 'UserController@show');
$app->run();
~0ms
Boot Latency
O(K)
Routing Complexity
240KB
Core Size
0
Dependencies
0
Regex Calls

Built for speed, not comfort.

No abstractions on top of abstractions. Just raw PHP 8.3.

R

Radix Tree Router

Regex routers are lazy. We use a compressed prefix tree. O(K) lookup. No regex anywhere.

F

Fiber Concurrency

DB queries and HTTP requests automatically suspend the fiber. No callback hell. It just handles concurrent requests on one thread.

A

AOT Compilation

Reflection at runtime is slow. We compile your attributes down to static factory functions before deploying.

D

Scope-Safe Container

If you put request state in a persistent service, you leak data. The container forces scope separation so you don't mess it up.

W

Persistent Workers

It boots once. It handles thousands of requests without re-initializing. Recycle it when your code inevitably leaks memory.

C

Shmop Cache

Cross-process cache without hitting the disk. Because reading files on every request is dumb.

#

Attributes

No YAML. No XML. No parsing docblocks like it's 2012. Native PHP 8 attributes only.

0

Zero Dependencies

No Composer. Period. I don't need to download 30MB of node_modules... wait, wrong language. Still banned.

Less boilerplate.

Stop writing 40 lines of XML to register a controller.

<?php

declare(strict_types: 1);

namespace App\Controllers;

use Aether\Attributes\Controller;
use Aether\Attributes\Get;
use Aether\Http\Request;
use Aether\Http\Response;

#[Controller(prefix: '/api')]
final class UserController
{
    #[Get(path: '/users/{id}', name: 'users.show')]
    public function show(Request $request): Response
    {
        $id = $request->getRouteParam('id');

        return Response::json([
            'user' => ['id' => $id],
        ]);
    }
}
// Manual route registration
$app->get('/users', 'UserController@index');
$app->get('/users/{id}', 'UserController@show');
$app->post('/users', 'UserController@store');

// Route groups with shared prefix and middleware
$app->group('/api/v1', function ($router) {
    $router->get('/tasks', 'TaskController@index');
    $router->post('/tasks', 'TaskController@create');
}, middleware: ['AuthMiddleware']);

// Wildcard catch-all
$app->get('/files/{path*}', 'FileController@serve');
final class TimingMiddleware implements MiddlewareInterface
{
    public function handle(
        Request $request,
        callable $next,
    ): Response {
        $start = hrtime(true);

        $response = $next($request);

        $ms = (hrtime(true) - $start) / 1_000_000;

        return $response
            ->withHeader('X-Response-Time', $ms . 'ms');
    }
}
// Fiber-aware database query
// Suspends the current fiber during I/O
$users = $db->query(
    'SELECT * FROM users WHERE active = ?',
    [1],
);

// Fiber-aware HTTP client
$response = $http->get('https://api.example.com/data');

// Non-blocking JSON POST
$result = $http->postJson(
    'https://api.example.com/webhook',
    ['event' => 'user.created'],
);

AETHER vs. The World.

No marketing fluff. Just technical trade-offs.

Framework Language Architecture Pros Cons
AETHER PHP 8.3+ Resident / AOT Sub-0.1ms boot, zero deps, O(K) routing, low RAM. Tiny ecosystem, high entry bar for beginners.
Laravel PHP Req / Resp Massive ecosystem, best-in-class DX, huge community. Heavy bloat, slow startup, reflection-heavy.
Fastify JS / TS Event Loop Low overhead, JSON-first, high throughput. Dependency heavy, single-threaded bottlenecks.
Go (Fiber) Go Binary Compiled speed, extreme concurrency, type-safe. Pointer complexity, verbose error handling.
Rust (Axum) Rust Binary Memory safety, fastest possible throughput. Brutal learning curve, long compile times.
Spring Boot Java JVM Enterprise stability, infinite features. Huge memory usage (500MB+ idle), slow boot.

* Comparison based on standard "Hello World" to "Small Microservice" benchmarks. Results vary by workload.

How it actually works.

Four modules. One job each.

α

Execution Engine

Persistent workers, state-safe DI, shmop cache, signal handling

β

Radix Router

Compiled prefix tree, O(K) matching, zero regex, AOT serialization

γ

Fiber I/O

Event loop scheduler, async DB, async HTTP, non-blocking sockets

δ

Zero Reflection

PHP 8 Attributes, AOT hydrators, static factory generation

Stop using package managers.

Just clone it. It's not hard.

# Clone the framework
git clone https://github.com/kisalnelaka/aether.git myapp
cd myapp

# Start the development server
php -S localhost:8080 example/app.php

# Compile routes and hydrators for production
php bin/aether aot:compile

Read the manuals.

If you open an issue without reading these, I'm closing it.