Siler is a set of general purpose high-level abstractions aiming an API for declarative programming in PHP.

Monthly Downloads: 501
Programming language: PHP
License: MIT License
Tags: Micro Frameworks     API     Router     Micro     Framework     Functional     Microframework     Websocket     Graphql     Swoole    
Latest version: v1.7.9

Siler alternatives and similar libraries

Based on the "Micro Frameworks" category.
Alternatively, view Siler alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of Siler or a related project?

Add another 'Micro Frameworks' Library


Build codecov Psalm coverage Latest Stable Version Total Downloads License

Siler is a set of general purpose high-level abstractions aiming an API for declarative programming in PHP.

  • 💧 Files and functions as first-class citizens
  • 🔋 Zero dependency, everything is on top of PHP built-in functions
  • Blazing fast, no additional overhead - benchmark 1, benchmark 2 and benchmark 3

Use with Swoole

Flat files and plain-old PHP functions rocking on a production-grade, high-performance, scalable, concurrent and non-blocking HTTP server.

Read the tutorial.

Getting started


composer require leocavalcante/siler

That is it. Actually, Siler is a library, not a framework (maybe a micro-framework), the overall program flow of control is dictated by you. So, no hidden configs or predefined directory structures.

Hello, World!

use Siler\Functional as λ; // Just to be cool, don't use non-ASCII identifiers ;)
use Siler\Route;

Route\get('/', λ\puts('Hello, World!'));

Nothing more, nothing less. You don't need even tell Siler to run or something like that (puts works like a lazily evaluated echo).

use Siler\Route;
use Siler\Http\Response;

Route\get('/', fn() => Response\json(['message' => 'Hello, World!']));

The Response\json function will automatically add Content-type: application/json in the response headers.


Siler provides first-class support for Swoole. You can regularly use Route, Request and Response modules for a Swoole HTTP server.

use Siler\Http\Response;
use Siler\Route;
use Siler\Swoole;

$handler = function () {
    Route\get('/', fn() => Response\json('Hello, World!'));

$port = 8000;
echo "Listening on port $port\n";
Swoole\http($handler, $port)->start();


Install peer-dependency:

composer require webonyx/graphql-php
type Query {
    hello: String
use Siler\Route;
use Siler\GraphQL;

$type_defs = file_get_contents(__DIR__ . '/schema.graphql');
$resolvers = [
    'Query' => [
        'hello' => fn ($root, $args, $context, $info) => 'Hello, World!'

$schema = GraphQL\schema($type_defs, $resolvers);

Route\post('/graphql', fn() => GraphQL\init($schema));

Another peer-dependency:

composer require doctrine/annotations


 * @\Siler\GraphQL\Annotation\ObjectType()
final class Query
     * @\Siler\GraphQL\Annotation\Field()
    public static function hello($root, $args, $context, $info): string
        return 'Hello, World!';
use Siler\GraphQL;
use Siler\Route;

$schema = GraphQL\annotated([Query::class]);

Route\post('/graphql', fn() => GraphQL\init($schema));

Object type name will be guessed from class name, same for field name, and it's return type (i.e.: PHP string scalar === GraphQL String scalar).

What is next?



*Note that all licence references and agreements mentioned in the Siler README section above are relevant to that project's source code only.