Download the PHP package webpatser/fledge-framework without Composer

On this page you can find all versions of the php package webpatser/fledge-framework. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package fledge-framework

Fledge

Laravel 13, optimized for PHP 8.5

Named after Fledge from C.S. Lewis's Narnia, a horse transformed by Aslan into something faster and more capable. Laravel's name also comes from Narnia (Cair Paravel). Fledge transforms Laravel for PHP 8.5.

What is Fledge?

Fledge is a drop-in replacement for Laravel's illuminate/framework that requires PHP 8.5 and uses its native features for better performance. Same Illuminate\ namespace, same API, full ecosystem compatibility.

Laravel 13 supports PHP 8.3+ and ships polyfills so it can run on older versions. Fledge removes those polyfills and version checks, and replaces league/uri with PHP 8.5's native URI extension. That swap is the single biggest performance win.

141 files changed on top of Laravel 13.24.0. The full framework test suite passes under CI's --fail-on-deprecation, including against symfony 8.1.

Why?

Laravel supports PHP 8.3+ because that's the right call for the ecosystem. But if you're already on PHP 8.5, you're paying for compatibility you don't need:

Fledge strips all of that.

Performance

A default Laravel skeleton (single homepage route, PHP-FPM with persistent connections) renders ~17% faster on Fledge than on stock Laravel 13.7.0 with the same PHP 8.5 build and the same Redis backend:

Metric Laravel 13 Fledge Difference
Homepage render (median) 30 ms 25 ms 17% faster

This is one workload on one machine. Your numbers will differ depending on where your application's time actually goes: DB calls, external HTTP, template compile, queue dispatch. To reproduce the micro-benchmarks (URI, polyfills, cache throughput) on your own stack:

JSON output is available with --format=json for CI integration.

Where the gain comes from

Two compounding wins drive most of the speedup:

  1. Native Uri\Rfc3986\Uri replacing league/uri. PHP 8.5 ships URI parsing as a compiled C extension. Request::uri(), the url() helper, redirects, and route generation all touch URIs on every request, so the savings stack across the request lifecycle:

    Operation league/uri PHP 8.5 native
    Parse URI 0.047 ms 0.0005 ms
    Modify URI 0.24 ms 0.0004 ms

    Roughly 100x faster for URI operations alone.

  2. Non-blocking Redis I/O via fledge-fiber. This one is more nuanced and worth being precise about. On a single sequential Cache::get() against a local Redis, fledge-fiber is actually slower than Predis (measured at ~32 µs vs ~21 µs per call on this machine). That's the cost of setting up a Fiber, registering a Revolt wakeup, and suspending: pure overhead when you have nothing else to do.

    Where fledge-fiber pays off is when something else can run in the meantime:

    • Concurrent Redis calls inside Concurrency::driver('fiber')->run() overlap on socket I/O. Three parallel Cache::get() calls finish in ~32 µs total instead of ~63 µs sequential.
    • Network RTT to a remote Redis (1-5 ms typical) makes all clients I/O-bound. Predis blocks the whole worker on that RTT. fledge-fiber suspends and lets other Fibers progress.
    • Mixed I/O paths (Redis + DB + HTTP in one request) can overlap when each driver supports Fiber suspension. Sequential blocking clients can't.

    So the honest framing: fledge-fiber doesn't make a single Redis call faster, it stops a Redis call from blocking everything else. On low-latency local Redis with no concurrency, you're paying overhead for a feature you're not using. On real-world request paths with multiple I/O touches or remote backends, the suspension wins out.

Smaller wins (removed symfony/polyfill-php84 and polyfill-php85, dropped version_compare guards, native array_all/array_any, pipe operator in Pipeline::then(), persistent cURL share) trim a few additional milliseconds off bootstrap and hot paths.

About the polyfill removal

Fledge drops symfony/polyfill-php84 and polyfill-php85, plus the version_compare guards that branch on every request to decide whether to call native or polyfilled functions. On a single HTTP request the per-call difference between native array_any() and a handwritten foreach is in the noise (run php artisan fledge:bench --scenario=polyfills and you'll see the variants land within measurement jitter). It's not a "Y% faster" headline.

The real win is structural:

That matters most on long-running processes (queue workers, octane, long-lived schedulers) where bootstrap cost amortizes and tighter hot paths add up over millions of calls. On a typical web request it is a small win that disappears into other variability.

Fiber-Based Concurrency

Fledge adds a FiberDriver to the Concurrency facade, powered by the Revolt event loop and fledge-fiber. Unlike the ProcessDriver (which spawns child processes) or the SyncDriver (sequential), the FiberDriver provides real cooperative async I/O within a single process:

No background process needed; the Revolt event loop runs inline within the run() call. Tasks using fledge-fiber async drivers (HTTP, MySQL, Redis) genuinely interleave on I/O suspension. Shared memory, no serialization overhead, works in both web requests and CLI.

Also available as a standalone package for Laravel 11/12/13: webpatser/laravel-fiber

Non-Blocking Redis (fledge-fiber driver)

Fledge ships with fledge-fiber as the default Redis driver. Every Redis call (cache reads, locks, queue operations, rate limiting) goes through a Fiber-suspending socket layer instead of a blocking one.

This is not "faster Redis", it is "non-blocking Redis". Those are different things, and the difference matters:

Workload fledge-fiber Predis (blocking) Winner
Single sequential Cache::get(), local Redis ~32 µs ~21 µs Predis (less overhead per call)
3 concurrent Cache::get() via Concurrency::run() ~32 µs total ~63 µs sequential fledge-fiber
Single call to remote Redis (1-5 ms RTT) RTT bound RTT bound, blocks worker fledge-fiber (worker stays free)
Mixed Redis + DB + HTTP in one request overlapped via Fibers strictly serial fledge-fiber

Numbers from php artisan fledge:bench --scenario=redis against a local Valkey, 10k iterations, 1k warmup. Reproduce on your own stack with REDIS_CLIENT=fledge and REDIS_CLIENT=predis.

Pick fledge-fiber when your request paths touch Redis multiple times, when Redis is on another host, or when you mix Redis with other I/O. Pick phpredis (or stay on Predis) when you only ever do single sequential calls against a local Redis and the per-call overhead matters more than the suspension benefit.

To fall back to the synchronous phpredis C extension:

The cache layer also includes Fiber-aware internals:

Ecosystem

Fledge is one piece of a small set of related packages:

The FiberDriver shipped in Illuminate\Concurrency\FiberDriver is a thin wrapper around fledge-fiber's async() and await() primitives. Earlier preview builds split the async runtime across fledge-fiber-database, fledge-fiber-redis, and fledge-fiber-http; those are now consolidated into a single fledge-fiber package.

Caveats

Worth knowing before going to production:

What Changed

Change Files Impact
Native Uri\Rfc3986\Uri replacing league/uri 3 ~100x faster URI ops
RFC 3986 normalization layer (IDN, unicode, brackets) 1 Compatibility bridge
Remove symfony/polyfill-php84 and polyfill-php85 7 Cleaner autoloading
Bump PHP to ^8.5 38 Drop compatibility code
Remove version_compare PHP 8.4 guards 3 No runtime branching
array_all/array_any in Arr::hasAll/hasAny 1 Faster array checks
array_any in Handler::shouldntReport 1 Replace Arr::first null check
array_any in FormRequest::isKnownField 1 Replace foreach early-return
array_find in InterventionDriver::transformationHandlerFor 1 Replace foreach early-return
Pipe operator in Pipeline::then() 1 Cleaner code
#[\NoDiscard] on Pipeline, Cache, Container, Validation 4 Developer safety
Persistent cURL share manager 3 Connection pooling
json_validate() fast path 1 Skip decode on invalid JSON
Fiber-based concurrency driver (Revolt + fledge-fiber) 2 Real async I/O in Concurrency facade
fledge-fiber as default Redis driver 5 Non-blocking Redis I/O for all operations
Fiber-aware cache layer (locks, failover, tags) 8 Concurrent cache ops inside Fibers
Fiber-safe queue worker signal handling (Revolt) 1 Horizon/queue workers work with fiber drivers
Redis required dependency for cache package 1 Redis is a first-class citizen

The RFC 3986 Problem (and How Fledge Solves It)

PHP 8.5's native URI parser is strictly RFC 3986 compliant, stricter than league/uri. It rejects:

An attempt to add native URI support to Laravel stalled because of this strictness gap.

Fledge solves it with a normalization layer (Uri::normalizeForRfc3986()) that transparently converts these inputs before passing them to the native parser:

You write Fledge normalizes to
https://bébé.be https://xn--bb-bjab.be (punycode)
https://example.com/日本語 https://example.com/%E6%97%A5... (percent-encoded)
?filter[status]=active ?filter%5Bstatus%5D=active (encoded brackets)

This makes Fledge a true drop-in replacement: your existing URLs keep working.

Installation

In an existing Laravel 13 project

webpatser/fledge-framework is on Packagist, so no extra repository config is needed. Require it directly with -W (so with-all-dependencies resolves the replace correctly):

This installs Fledge and removes vendor/laravel/framework from your tree (the replace block in Fledge's composer.json declares it provides laravel/framework and every illuminate/* split package). Your application code does not change, the Illuminate\ namespace continues to work.

To switch back to upstream Laravel:

Verify your install with the bundled script:

It exits 0 with OK running Fledge framework v13.X.Y.N if you are on Fledge, or 1 with a switch hint if you are still on stock Laravel.

Why composer require laravel/framework does NOT pull in Fledge

You might expect composer require "laravel/framework:^13.3" to pick up Fledge once the repository is registered. It does not, even with the VCS repository configured. Composer's resolver only honors replace declarations during transitive dependency resolution, not for top-level requires. A direct require laravel/framework:... always installs the upstream laravel/framework package, and Fledge stays unused on disk if you also require it.

That is why the canonical install line targets webpatser/fledge-framework directly. If you see vendor/laravel/framework in your tree after switching, you are running stock Laravel; the verify script above will catch that.

Constraint compatibility

All standard Composer constraint patterns resolve to the latest Fledge tag (v13.24.0.1 as of 2026-08-04):

Constraint Resolves to Notes
^13.3 v13.20.0.2 Recommended, accepts any 13.x release
^13.20 v13.20.0.2 Pins to current minor
~13.20.0 v13.20.0.2 Pins to 13.20.x patches and Fledge revisions
13.20.* v13.20.0.2 Wildcard, identical resolution
^13.20.0.1 v13.20.0.2 Pin to a specific Fledge revision
~13.20.0.1 v13.20.0.2 Same, accepts higher Fledge patches
>=13.0 v13.20.0.2 Open-ended
dev-fledge-13 (does not resolve cleanly) Dev branches need a branch-alias to satisfy ^13.0 constraints from other Laravel packages

Use ^13.7 in production. The 4-segment v13.X.Y.N versioning is fully Composer-compatible: the resolver treats the fourth segment as a regular patch component.

From scratch (framework development)

To work on the Fledge framework itself (not consume it as a dependency):

Active development happens on the fledge-13 branch, not main. Released tags follow the v13.X.Y.N pattern where the first three segments match upstream Laravel and N is Fledge's own patch counter.

From scratch (full app skeleton)

To start a new Laravel app with Fledge baked in, use the skeleton. The skeleton is currently distributed via Git, not Packagist, so clone it directly:

(Once the skeleton is published to Packagist, composer create-project webpatser/fledge my-app will replace the clone step. Watch the skeleton repo for status.)

Compatibility

Requirements

How This Project Works

Fledge tracks Laravel's 13.x branch. When Laravel releases a new version:

  1. Fetch the latest upstream tag
  2. Merge into the fledge-13 branch
  3. Resolve any conflicts in the ~50 modified files
  4. Run the full test suite
  5. Tag a matching Fledge release

The goal is automated sync for clean merges (~70% of releases), with manual intervention only when upstream touches the same files Fledge modifies.

Versioning

Fledge uses a fourth version segment to track its own releases on top of Laravel's version:

Laravel Fledge Meaning
v13.3.0 v13.3.0.1 First Fledge release based on Laravel 13.3.0
v13.3.0 v13.3.0.2 Fledge-only fix on top of 13.3.0
v13.4.0 v13.4.0.1 Fledge synced to Laravel 13.4.0
v13.4.0 v13.4.0.2 PHP 8.5 optimizations on top of 13.4.0

The first three segments always match the upstream Laravel version. The fourth is Fledge's own patch counter, starting at .1 for each new Laravel release.

In your composer.json, "laravel/framework": "^13.3" will pull in the latest Fledge release.

Project Structure

Rule: tests are never modified. If a test fails after a Fledge change, the change is wrong, not the test.

Known PHP 8.5 Test Failures

These 4 test failures exist on vanilla Laravel 13 running on PHP 8.5, they are not caused by Fledge:

Test Root Cause
RedisConnectionTest::testItScansForKeys Predis cursor format incompatibility
RedisConnectionTest::testItHscansForKeys Predis cursor format incompatibility
RedisConnectionTest::testItZscansForKeys Predis cursor format incompatibility
RedisConnectionTest::testItSscansForKeys Predis cursor format incompatibility

Credits

All credit goes to Taylor Otwell and the Laravel team. This project is built entirely on their work. Fledge is not a fork intended to compete with Laravel; it's an optimization layer for teams already running PHP 8.5.

License

MIT, same as Laravel.


All versions of fledge-framework with dependencies

PHP Build Version
Package Version
Requires php Version ^8.5
ext-ctype Version *
ext-filter Version *
ext-hash Version *
ext-mbstring Version *
ext-openssl Version *
ext-session Version *
ext-tokenizer Version *
composer-runtime-api Version ^2.2
webpatser/fledge-fiber Version ^13.4
brick/math Version ^0.14.2 || ^0.15 || ^0.16 || ^0.17 || ^0.18 || ^0.19
doctrine/inflector Version ^2.0.5
dragonmantank/cron-expression Version ^3.4
egulias/email-validator Version ^4.0
fruitcake/php-cors Version ^1.3
guzzlehttp/guzzle Version ^7.8.2 || ^8.0
guzzlehttp/promises Version ^2.0.3 || ^3.0
guzzlehttp/psr7 Version ^2.9 || ^3.0
guzzlehttp/uri-template Version ^1.0 || ^2.0
laravel/prompts Version ^0.3.11
laravel/serializable-closure Version ^2.0.10
league/commonmark Version ^2.8.1
league/flysystem Version ^3.25.1
league/flysystem-local Version ^3.25.1
monolog/monolog Version ^3.10
nesbot/carbon Version ^3.8.4
nunomaduro/termwind Version ^2.0
psr/container Version ^1.1.1 || ^2.0.1
psr/http-message Version ^1.0 || ^2.0
psr/log Version ^1.0 || ^2.0 || ^3.0
psr/simple-cache Version ^1.0 || ^2.0 || ^3.0
ramsey/uuid Version ^4.7
revolt/event-loop Version ^1.0
symfony/console Version ^7.4.0 || ^8.0.0
symfony/error-handler Version ^7.4.0 || ^8.0.0
symfony/finder Version ^7.4.0 || ^8.0.0
symfony/http-foundation Version ^7.4.0 || ^8.0.0
symfony/http-kernel Version ^7.4.0 || ^8.0.0
symfony/mailer Version ^7.4.0 || ^8.0.0
symfony/mime Version ^7.4.0 || ^8.0.0
symfony/polyfill-php86 Version ^1.36
symfony/process Version ^7.4.5 || ^8.0.5
symfony/routing Version ^7.4.0 || ^8.0.0
symfony/uid Version ^7.4.0 || ^8.0.0
symfony/var-dumper Version ^7.4.0 || ^8.0.0
tijsverkoyen/css-to-inline-styles Version ^2.2.5
vlucas/phpdotenv Version ^5.6.1
webpatser/fledge-portable-ascii Version ^1.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package webpatser/fledge-framework contains the following files

Loading the files please wait ...