I Built a D&D Game in the Terminal with Laravel AI SDK
https://www.youtube.com/watch?v=dYuFiNiv03w
https://redd.it/1r34cqb
@r_php
https://www.youtube.com/watch?v=dYuFiNiv03w
https://redd.it/1r34cqb
@r_php
YouTube
Laravel AI SDK: I Built a D&D Terminal Game with AI as Dungeon Master
I used the new Laravel AI SDK to build a D&D-style dungeon escape game — right in the terminal. The AI acts as your Dungeon Master, generates ASCII art, tracks your health and inventory, and gives you choices that actually matter. This is a lot of fun. Join…
GitHub - eznix86/pest-plugin-testcontainers: Testing Containers the PestPHP Way
https://github.com/eznix86/pest-plugin-testcontainers
https://redd.it/1r287d1
@r_php
https://github.com/eznix86/pest-plugin-testcontainers
https://redd.it/1r287d1
@r_php
GitHub
GitHub - eznix86/pest-plugin-testcontainers: Testing Containers the PestPHP Way
Testing Containers the PestPHP Way. Contribute to eznix86/pest-plugin-testcontainers development by creating an account on GitHub.
Xampp in 2026.
I have been using PHP and Laravel for many years and recently started taking my setup more seriously.
Right now on my Mac I am still using XAMPP for local development. It works fine, but I keep seeing people recommend other tools like Valet, Herd, Docker, etc.
I also sometimes work on plain PHP projects, not just Laravel, so flexibility matters to me.
For those using Mac in 2026, what is your current local setup for PHP and Laravel?
Are you using Valet, Herd, Docker, or something else?
What would you recommend as the best and most efficient setup today?
https://redd.it/1r58lxd
@r_php
I have been using PHP and Laravel for many years and recently started taking my setup more seriously.
Right now on my Mac I am still using XAMPP for local development. It works fine, but I keep seeing people recommend other tools like Valet, Herd, Docker, etc.
I also sometimes work on plain PHP projects, not just Laravel, so flexibility matters to me.
For those using Mac in 2026, what is your current local setup for PHP and Laravel?
Are you using Valet, Herd, Docker, or something else?
What would you recommend as the best and most efficient setup today?
https://redd.it/1r58lxd
@r_php
Reddit
From the PHP community on Reddit
Explore this post and more from the PHP community
How is ZED for PHP ? Anyone moved from Phpstorm to zed ?
I have been a phpstorm user for years. While I am quite happy with it, the performance of zed is something else. My PC is decent and I don't really have a performance issue with phpstorm on most days.
But zed is not merely fast, its in a different league. It feels like a modern application with old school like lightning light UI. Like how the earlier versions of firefox were. Like xfce or how snappy windows xp was . Currently its taking only 120 MB of RAM with a project open!
But performance is not everything. Phpstorm is a professional almost perfect for php. Zed is great, but lacks the default perfect php experience of phpstorm - things like context, jumping to definition, autocomplete etc. To make zed match phpstorm we need some paid extensions
\- 'php tools' - yaerly cost. Almost as expensive as phpstorm !
\- intelliphense - one time. Cheaper, less powerful.
Anyone has experience with either ? Anyone moved from phpstorm to zed and found it good ? Worth trying , or buying these extensions ?
https://redd.it/1r59xkm
@r_php
I have been a phpstorm user for years. While I am quite happy with it, the performance of zed is something else. My PC is decent and I don't really have a performance issue with phpstorm on most days.
But zed is not merely fast, its in a different league. It feels like a modern application with old school like lightning light UI. Like how the earlier versions of firefox were. Like xfce or how snappy windows xp was . Currently its taking only 120 MB of RAM with a project open!
But performance is not everything. Phpstorm is a professional almost perfect for php. Zed is great, but lacks the default perfect php experience of phpstorm - things like context, jumping to definition, autocomplete etc. To make zed match phpstorm we need some paid extensions
\- 'php tools' - yaerly cost. Almost as expensive as phpstorm !
\- intelliphense - one time. Cheaper, less powerful.
Anyone has experience with either ? Anyone moved from phpstorm to zed and found it good ? Worth trying , or buying these extensions ?
https://redd.it/1r59xkm
@r_php
Reddit
From the PHP community on Reddit
Explore this post and more from the PHP community
Kreuzberg v4.3.0 and benchmarks
Hey all,
Excited to announce that we published updated benchmarks for Kreuzberg, comparing it against other document extraction tools like Apache Tika, Docling, Unstructured, PDFPlumber, PyMuPDF4LLM, MarkItDown, and Mineru. We want to help you understand how Kreuzberg behaves in practice. We also released Kreuzberg v4.3.0 which has a lot of new cool improvements (more below)!
What is Kreuzberg?
Kreuzberg is an open-source document intelligence framework written in Rust, with Python, Ruby, Java, Go, PHP, Elixir, C#, and TypeScript (Node/Bun/Wasm/Deno) bindings. It focuses on fast, structured extraction across 75+ formats, including PDFs, Office docs, HTML, images, and more.
All benchmarks run automatically on GitHub Actions in a standardized Linux environment. Every framework is tested using the same harness.
We measure: Throughput (MB/s), Duration: extraction time per document, Quality Score: Extraction accuracy, Extraction time vs subprocess overhead, Memory usage RAM consumption, CPU usage, Tail latencies (p95 / p99)
Benchmarks run in both:
Single-file mode (latency, cold start)
Batch mode (throughput, parallelism)
Runtime characteristics
In addition to extraction performance, we also measure:
Cold start time (framework initialization latency) and Installation footprint (framework install size on disk)
High-level results show that:
Kreuzberg shows significantly higher throughput across PDFs, DOCX, PPTX, and HTML
Processing times are in milliseconds instead of seconds
Cold start times are much lower compared to alternatives
Installation footprint is smaller than other frameworks
All results are generated in CI, published as structured JSON and fully reproducible.
More updates: Kreuzberg 4.3.0 is out
Alongside the benchmarks, we’ve continued shipping improvements and fixing issues. Key highlights: PaddleOCR optional backend - in Rust, Document structure extraction (similar to Docling), Native Word97 format extraction - valuable for enterprises and government orgs
Find all info in our GitHub Changelog here: https://github.com/kreuzberg-dev/kreuzberg/blob/main/CHANGELOG.md
Contributions are welcome :)
https://redd.it/1r5a4a0
@r_php
Hey all,
Excited to announce that we published updated benchmarks for Kreuzberg, comparing it against other document extraction tools like Apache Tika, Docling, Unstructured, PDFPlumber, PyMuPDF4LLM, MarkItDown, and Mineru. We want to help you understand how Kreuzberg behaves in practice. We also released Kreuzberg v4.3.0 which has a lot of new cool improvements (more below)!
What is Kreuzberg?
Kreuzberg is an open-source document intelligence framework written in Rust, with Python, Ruby, Java, Go, PHP, Elixir, C#, and TypeScript (Node/Bun/Wasm/Deno) bindings. It focuses on fast, structured extraction across 75+ formats, including PDFs, Office docs, HTML, images, and more.
All benchmarks run automatically on GitHub Actions in a standardized Linux environment. Every framework is tested using the same harness.
We measure: Throughput (MB/s), Duration: extraction time per document, Quality Score: Extraction accuracy, Extraction time vs subprocess overhead, Memory usage RAM consumption, CPU usage, Tail latencies (p95 / p99)
Benchmarks run in both:
Single-file mode (latency, cold start)
Batch mode (throughput, parallelism)
Runtime characteristics
In addition to extraction performance, we also measure:
Cold start time (framework initialization latency) and Installation footprint (framework install size on disk)
High-level results show that:
Kreuzberg shows significantly higher throughput across PDFs, DOCX, PPTX, and HTML
Processing times are in milliseconds instead of seconds
Cold start times are much lower compared to alternatives
Installation footprint is smaller than other frameworks
All results are generated in CI, published as structured JSON and fully reproducible.
More updates: Kreuzberg 4.3.0 is out
Alongside the benchmarks, we’ve continued shipping improvements and fixing issues. Key highlights: PaddleOCR optional backend - in Rust, Document structure extraction (similar to Docling), Native Word97 format extraction - valuable for enterprises and government orgs
Find all info in our GitHub Changelog here: https://github.com/kreuzberg-dev/kreuzberg/blob/main/CHANGELOG.md
Contributions are welcome :)
https://redd.it/1r5a4a0
@r_php
Kreuzberg
Kreuzberg - High-Volume Document Processing
Powering High-Volume Document Processing, Fast, Cost-Efficient, and Open Source.
A Week of Symfony #998 (February 9–15, 2026)
https://symfony.com/blog/a-week-of-symfony-998-february-9-15-2026?utm_medium=feed&utm_source=Symfony%20Blog%20Feed
https://redd.it/1r5bsd1
@r_php
https://symfony.com/blog/a-week-of-symfony-998-february-9-15-2026?utm_medium=feed&utm_source=Symfony%20Blog%20Feed
https://redd.it/1r5bsd1
@r_php
Symfony
A Week of Symfony #998 (February 9–15, 2026) (Symfony Blog)
This week, development activity was very intense for the upcoming Symfony 8.1 release, which introduced new features across the framework. Meanwhile, we shared more details about the upcoming SymfonyL…
Does anyone here prefer PHPUnit to Pest?
This question was asked here 3 years ago and the response then was uniformly a preference for PHPUnit and especially a dislike for its syntax. A typical comment was the observation that "Pest is just Jest for PHP... and I hate Jest".
Since then I know Pest has progressed to include in-browser testing, but how does the community feel about Pest now?
https://redd.it/1r5j9ea
@r_php
This question was asked here 3 years ago and the response then was uniformly a preference for PHPUnit and especially a dislike for its syntax. A typical comment was the observation that "Pest is just Jest for PHP... and I hate Jest".
Since then I know Pest has progressed to include in-browser testing, but how does the community feel about Pest now?
https://redd.it/1r5j9ea
@r_php
Reddit
From the laravel community on Reddit
Explore this post and more from the laravel community
Anybody try replacing PHPStan/Pint/Rector Et al. with Mago?
I have a pretty large production codebase that I've setup with PStan, Pint, Rector in CI which I was thinking about migrating to Mago over the weekend to test out:
https://mago.carthage.software/
Not exactly sure it can replace all of those (Pint?) it's just been on my backlog for so long, I haven't even had the time to look into it that far -- just thinking about carving up some time to do so.
Thought I might do some due diligence first before I sink a full Saturday into this. Has anybody played around with it, run into issues, or generally have any advice?
https://redd.it/1r3sdz7
@r_php
I have a pretty large production codebase that I've setup with PStan, Pint, Rector in CI which I was thinking about migrating to Mago over the weekend to test out:
https://mago.carthage.software/
Not exactly sure it can replace all of those (Pint?) it's just been on my backlog for so long, I haven't even had the time to look into it that far -- just thinking about carving up some time to do so.
Thought I might do some due diligence first before I sink a full Saturday into this. Has anybody played around with it, run into issues, or generally have any advice?
https://redd.it/1r3sdz7
@r_php
GitHub
laravel-mise/payload/.github/workflows at main · loadinglucian/laravel-mise
Contribute to loadinglucian/laravel-mise development by creating an account on GitHub.
Weekly /r/Laravel Help Thread
Ask your Laravel help questions here. To improve your chances of getting an answer from the community, here are some tips:
What steps have you taken so far?
What have you tried from the documentation?
Did you provide any error messages you are getting?
Are you able to provide instructions to replicate the issue?
Did you provide a code example?
Please don't post a screenshot of your code. Use the code block in the Reddit text editor and ensure it's formatted correctly.
For more immediate support, you can ask in the official Laravel Discord.
Thanks and welcome to the r/Laravel community!
https://redd.it/1r5l9yg
@r_php
Ask your Laravel help questions here. To improve your chances of getting an answer from the community, here are some tips:
What steps have you taken so far?
What have you tried from the documentation?
Did you provide any error messages you are getting?
Are you able to provide instructions to replicate the issue?
Did you provide a code example?
Please don't post a screenshot of your code. Use the code block in the Reddit text editor and ensure it's formatted correctly.
For more immediate support, you can ask in the official Laravel Discord.
Thanks and welcome to the r/Laravel community!
https://redd.it/1r5l9yg
@r_php
Laravel
Installation - Laravel 12.x - The PHP Framework For Web Artisans
Laravel is a PHP web application framework with expressive, elegant syntax. We’ve already laid the foundation — freeing you to create without sweating the small things.
Kotlin-style List/Set/Map for PHP 8.4 - Mutable/Immutable, change tracking, key preservation, live map views, and generics support
Hello, so I've been working on a collection library for a few months (over the weekends), and I have finally decided to release it as the beta 0.1, as I consider the API to be relatively stable, and I would like to release a few 0.x versions during 2026 before committing to 1.0.
Docs: [https://noctud.dev](https://noctud.dev)
GitHub: **https://github.com/noctud/collection**
Why another collection library?
I've tried several existing libraries, but none of them solved the typical PHP headaches. Most are just array wrappers that provide a nicer API (which is often inconsistent). The main problems I wanted to solve were:
PHP arrays silently casting keys ("1" becomes int(1), true becomes 1).
You can't use objects as keys.
Filtering leaves gaps in indices.
There's no real API.
Enforcing array<string, something> is impossible if you don't control the data source.
I thought it would be a few days of work. It turned out to be a \~6 month project.. the more I worked on it, the more work I saw ahead.
What came out of it:
List, Set, Map - each with mutable and immutable variants
Key-preserving Maps - "1" stays string, true stays bool, objects work as keys
Full generics - PHPStan level 9, every element type flows through the entire chain
Mutable & Immutable - immutable methods return new instances marked with #\[NoDiscard\] (PHP 8.5 will warn on discarded results)
Change tracking - $set->tracked()->add('x')->changed tells you if the mutation actually did something
Lazy initialization - construct from closures, materialized on first access via PHP 8.4 lazy objects
Copy-on-write - converting between mutable/immutable is virtually free
Map views - $map->keys, $map->values, $map->entries are live collection objects, not plain arrays, and they share memory space
PhpStorm plugin - fixes generic type inference in callbacks and __invoke() autocomplete, I fixed a bug regarding \_\_invoke and added support for features not natively available.
Regarding PhpStorm bugs: I've reported several issues specifically related to static return types (most of them are Trait-related). As a result, I avoided using static completely to ensure method chaining autocomplete works correctly in the IDE. The only rule for third-party extensions is that Mutable collections (their mutable methods) must return $this. This is standard practice and doesn't necessarily require static enforcement, though this may change in the future.
Quick taste:
$map = mutableMapOf('a' => 1, 'b' => 2, 'c' => 3);
$map->values->sum(); // 6
$map->keys->sorted(); // ImmutableSet {'a', 'b', 'c'}
$map->filter(fn($v) => $v > 1)->keys; // Set {'b', 'c'}
$map'd' = 4;
$list = listOf(3, 1, 4, 1, 5);
$list->distinct()->sorted(); // 1, 3, 4, 5
$list->partition(fn($n) => $n > 2); // [3, 4, 5, 1, 1]
// StringMap enforces string keys even if constructed from array<int, string>
$map = stringMapOf('1' => 'a');
$map->keys; // Set {'1'}
$map->keys->firstOrNull(); // "1"
I don't want to make this post too long, I've tried to make a nice presentation on the docs homepage, and all the details and design decisions can be found in docs, there is even a dedicated page about the design, as well as an FAQ where I try to compare it to Java/Kotlin collections and explain why I made certain decisions.
It's built on top of Kotlin/Java foundations, with some nice adjustments - If the Java/Kotlin maintainers could rebuild their collections from scratch, I think it would look something like this, because Java "messed up" the
Hello, so I've been working on a collection library for a few months (over the weekends), and I have finally decided to release it as the beta 0.1, as I consider the API to be relatively stable, and I would like to release a few 0.x versions during 2026 before committing to 1.0.
Docs: [https://noctud.dev](https://noctud.dev)
GitHub: **https://github.com/noctud/collection**
Why another collection library?
I've tried several existing libraries, but none of them solved the typical PHP headaches. Most are just array wrappers that provide a nicer API (which is often inconsistent). The main problems I wanted to solve were:
PHP arrays silently casting keys ("1" becomes int(1), true becomes 1).
You can't use objects as keys.
Filtering leaves gaps in indices.
There's no real API.
Enforcing array<string, something> is impossible if you don't control the data source.
I thought it would be a few days of work. It turned out to be a \~6 month project.. the more I worked on it, the more work I saw ahead.
What came out of it:
List, Set, Map - each with mutable and immutable variants
Key-preserving Maps - "1" stays string, true stays bool, objects work as keys
Full generics - PHPStan level 9, every element type flows through the entire chain
Mutable & Immutable - immutable methods return new instances marked with #\[NoDiscard\] (PHP 8.5 will warn on discarded results)
Change tracking - $set->tracked()->add('x')->changed tells you if the mutation actually did something
Lazy initialization - construct from closures, materialized on first access via PHP 8.4 lazy objects
Copy-on-write - converting between mutable/immutable is virtually free
Map views - $map->keys, $map->values, $map->entries are live collection objects, not plain arrays, and they share memory space
PhpStorm plugin - fixes generic type inference in callbacks and __invoke() autocomplete, I fixed a bug regarding \_\_invoke and added support for features not natively available.
Regarding PhpStorm bugs: I've reported several issues specifically related to static return types (most of them are Trait-related). As a result, I avoided using static completely to ensure method chaining autocomplete works correctly in the IDE. The only rule for third-party extensions is that Mutable collections (their mutable methods) must return $this. This is standard practice and doesn't necessarily require static enforcement, though this may change in the future.
Quick taste:
$map = mutableMapOf('a' => 1, 'b' => 2, 'c' => 3);
$map->values->sum(); // 6
$map->keys->sorted(); // ImmutableSet {'a', 'b', 'c'}
$map->filter(fn($v) => $v > 1)->keys; // Set {'b', 'c'}
$map'd' = 4;
$list = listOf(3, 1, 4, 1, 5);
$list->distinct()->sorted(); // 1, 3, 4, 5
$list->partition(fn($n) => $n > 2); // [3, 4, 5, 1, 1]
// StringMap enforces string keys even if constructed from array<int, string>
$map = stringMapOf('1' => 'a');
$map->keys; // Set {'1'}
$map->keys->firstOrNull(); // "1"
I don't want to make this post too long, I've tried to make a nice presentation on the docs homepage, and all the details and design decisions can be found in docs, there is even a dedicated page about the design, as well as an FAQ where I try to compare it to Java/Kotlin collections and explain why I made certain decisions.
It's built on top of Kotlin/Java foundations, with some nice adjustments - If the Java/Kotlin maintainers could rebuild their collections from scratch, I think it would look something like this, because Java "messed up" the
noctud.dev
Collection
Enterprise-grade, type-safe, mutable/immutable collections for PHP 8.4+
Mutable/Immutable split, Kotlin added immutable collections later as a library.
I plan to refactor the tests soon.. the Map tests were written early on, before StringMap and IntMap were fully implemented and now it doesn't click perfectly, and I also plan on adding Lazy collections as a Sequence later this year.
Feedback is welcome! This is the first public release and my first serious open source project. The target audience is mainly developers using high levels of static analysis, as well as library authors who could benefit from the interface-driven design (only interfaces are exposed; implementations are hidden and swappable).
Docs: https://noctud.dev
GitHub: https://github.com/noctud/collection
PhpStorm plugin: plugins.jetbrains.com/plugin/30173-noctud
https://redd.it/1r5oten
@r_php
I plan to refactor the tests soon.. the Map tests were written early on, before StringMap and IntMap were fully implemented and now it doesn't click perfectly, and I also plan on adding Lazy collections as a Sequence later this year.
Feedback is welcome! This is the first public release and my first serious open source project. The target audience is mainly developers using high levels of static analysis, as well as library authors who could benefit from the interface-driven design (only interfaces are exposed; implementations are hidden and swappable).
Docs: https://noctud.dev
GitHub: https://github.com/noctud/collection
PhpStorm plugin: plugins.jetbrains.com/plugin/30173-noctud
https://redd.it/1r5oten
@r_php
noctud.dev
Collection
Enterprise-grade, type-safe, mutable/immutable collections for PHP 8.4+
Weekly Ask Anything Thread
Feel free to ask any questions you think may not warrant a post. Asking for help here is also fine.
https://redd.it/1r5zn07
@r_php
Feel free to ask any questions you think may not warrant a post. Asking for help here is also fine.
https://redd.it/1r5zn07
@r_php
Reddit
From the symfony community on Reddit
Explore this post and more from the symfony community
Laravel already uses ports and adapters internally, and you should too
https://extended.reading.sh/laravel-ports-and-adapters
https://redd.it/1r6djdn
@r_php
https://extended.reading.sh/laravel-ports-and-adapters
https://redd.it/1r6djdn
@r_php
Medium
The architecture pattern that makes vendor lock-in optional
A practical guide to ports and adapters for compound engineering, with Laravel examples and an AGENTS.md you can drop into any project
My current setup for Laravel, PHP and AI assisted development (2026 edition)
https://freek.dev/uses
https://redd.it/1r6ndhu
@r_php
https://freek.dev/uses
https://redd.it/1r6ndhu
@r_php
freek.dev
My current setup for Laravel, PHP and AI assisted development (2026 edition) | freek.dev
After posting a screenshot, I often get questions about which editor, font or tools I'm using. Instead of replying to those questions individually I've decided to just write down the settings and apps that I'm using.
Laravel Cloud down for anyone else?
Got a downtime alert (from a third-party monitor, so more than just my internet) for a site I host on Laravel Cloud. Can't get to https://cloud.laravel.com/ at all, either.
https://status.laravel.com/ doesn't have monitoring for the Cloud offering, it seems. Anyone else having trouble?
https://redd.it/1ra461v
@r_php
Got a downtime alert (from a third-party monitor, so more than just my internet) for a site I host on Laravel Cloud. Can't get to https://cloud.laravel.com/ at all, either.
https://status.laravel.com/ doesn't have monitoring for the Cloud offering, it seems. Anyone else having trouble?
https://redd.it/1ra461v
@r_php
Laravel Cloud
Laravel Cloud Hosting - Deploy & Scale Laravel Apps
Deploy and scale Laravel apps without managing servers. Laravel Cloud is fast, secure Laravel hosting with autoscaling. Start free on the Starter plan.
Curious where the community stands on this
With PHP 8.x adding typed properties, union types, stricter internal behavior, and deprecating things like dynamic properties, it feels like PHP has been intentionally moving toward stronger typing and predictability over the last several years.
Some folks argue PHP’s strength has always been being loosely typed and flexible, and that stricter behavior should stay optional. Others see the changes as necessary for maintainability, tooling, and large-scale systems.
For those working in modern PHP:
Do you feel PHP is (and should be) moving away from its old “loosely typed magic” toward more explicit, type-safe patterns? Or do you think this evolution is hurting what made PHP great?
https://redd.it/1r9ys21
@r_php
With PHP 8.x adding typed properties, union types, stricter internal behavior, and deprecating things like dynamic properties, it feels like PHP has been intentionally moving toward stronger typing and predictability over the last several years.
Some folks argue PHP’s strength has always been being loosely typed and flexible, and that stricter behavior should stay optional. Others see the changes as necessary for maintainability, tooling, and large-scale systems.
For those working in modern PHP:
Do you feel PHP is (and should be) moving away from its old “loosely typed magic” toward more explicit, type-safe patterns? Or do you think this evolution is hurting what made PHP great?
https://redd.it/1r9ys21
@r_php
Reddit
From the PHP community on Reddit
Explore this post and more from the PHP community
Symfony (no Mercure) + Python Realtime Stack for highly scalable and true E2E WebSocket apps
Over the years, I’ve been tinkering with WebSockets in PHP and Symfony and tried a lot of approaches.
Ratchet and event-loop servers like ReactPHP WS are easy to set up, but they struggle with non-blocking, large-scale connections. Big messages or lots of clients and everything blocks.
Other PHP solutions or extensions like Swoole, usually mix WebSocket handling with business logic, run monolithic PHP processes, and are tricky to scale horizontally. This also makes polyglot client support harder and adds complexity if you want fully self-hosted setups with real, future-proof end-to-end encryption.
Mercure and SSE only go server-to-client, so true bidirectional events require extra HTTP or webhook logic. Pusher and other SaaS solutions are convenient, but your data, presence, and GDPR compliance live externally.
None of these options scale reliably to hundreds of thousands of connections or give you full control over your data flow.
That’s why I built this stack.
Terminator (Symfony-first) lets you integrate WebSockets and webhooks quickly while keeping business logic fully in Symfony. It’s ideal for moderate realtime needs, but messages pass through Symfony, the payload is not blind in this mode.
Realtime-Core (Broker-first) is designed for high-scale use, with a stateless Python gateway and Redis/RabbitMQ streaming. Symfony acts as a producer and consumer. In this mode, the payload is blind in the gateway by design, enabling true end-to-end encryption. Unlike solutions such as Swoole, the gateway never sees plaintext. The architecture is horizontally scalable, polyglot-friendly, and future-proof.
The result is true bidirectional WebSockets, scalable connections, full Symfony integration, and complete control over your data - all fully self-hosted, without relying on SaaS.
What you guys think, thought this could be something reusable or did I miss something?
https://redd.it/1ra1tap
@r_php
Over the years, I’ve been tinkering with WebSockets in PHP and Symfony and tried a lot of approaches.
Ratchet and event-loop servers like ReactPHP WS are easy to set up, but they struggle with non-blocking, large-scale connections. Big messages or lots of clients and everything blocks.
Other PHP solutions or extensions like Swoole, usually mix WebSocket handling with business logic, run monolithic PHP processes, and are tricky to scale horizontally. This also makes polyglot client support harder and adds complexity if you want fully self-hosted setups with real, future-proof end-to-end encryption.
Mercure and SSE only go server-to-client, so true bidirectional events require extra HTTP or webhook logic. Pusher and other SaaS solutions are convenient, but your data, presence, and GDPR compliance live externally.
None of these options scale reliably to hundreds of thousands of connections or give you full control over your data flow.
That’s why I built this stack.
Terminator (Symfony-first) lets you integrate WebSockets and webhooks quickly while keeping business logic fully in Symfony. It’s ideal for moderate realtime needs, but messages pass through Symfony, the payload is not blind in this mode.
Realtime-Core (Broker-first) is designed for high-scale use, with a stateless Python gateway and Redis/RabbitMQ streaming. Symfony acts as a producer and consumer. In this mode, the payload is blind in the gateway by design, enabling true end-to-end encryption. Unlike solutions such as Swoole, the gateway never sees plaintext. The architecture is horizontally scalable, polyglot-friendly, and future-proof.
The result is true bidirectional WebSockets, scalable connections, full Symfony integration, and complete control over your data - all fully self-hosted, without relying on SaaS.
What you guys think, thought this could be something reusable or did I miss something?
https://redd.it/1ra1tap
@r_php
GitHub
GitHub - snoke/Symfony-Python-Realtime-Stack
Contribute to snoke/Symfony-Python-Realtime-Stack development by creating an account on GitHub.
I got tired of undocumented 3rd-party API changes breaking my apps, so I built Sentinel to passively detect JSON schema drift.
Hey everyone,
If you consume external REST APIs long enough, you know the pain: the provider silently drops a field, changes a string to an integer, or makes a previously required field optional. You usually only find out when your production app throws a null pointer exception or your DB rejects a type.
I built PHP Sentinel to solve this. It's a passive API contract monitor for PHP 8.3+ that sits in your HTTP client layer and watches the JSON coming back from the APIs you consume.
What it actually does: You don't write any schemas or rules by hand. Sentinel just silently observes the traffic.
1. Sampling: It watches the first X successful JSON responses for an endpoint.
2. Inference: It builds a probabilistically accurate JSON Schema (e.g., figuring out which fields are truly
3. Hardening: Once it hits the sample threshold (default 20), it locks the baseline schema.
4. Drift Detection: From then on, every new response is compared to the baseline in real-time. If the structure "drifts" (like a new field appears, or a required type changes), it dispatches an event and logs it.
Core features:
Zero-touch: Drop it into your PSR-18 client, Laravel `Http::` facade, or Symfony client and forget about it.
Smart Drift Rules: It knows that an optional field missing isn't drift, but a previously required field disappearing is a
Auto-healing: You can configure it to automatically "reharden" and build a new baseline after it reports a drift, so it adapts to legitimate API evolutions without you touching the code.
Framework Native: Comes with a Laravel ServiceProvider and a Symfony Bundle out of the box, plus an artisan/console CLI tool to inspect the inferred schemas manually.
Why I made it: Writing and maintaining OpenAPI specs for other people's APIs sucks. This is meant to be a passive safety net that gives you a Slack/log alert when a payload change happens, rather than digging through stack traces later.
It's fully unit-tested (Pest) and strictly typed (PHPStan Level 8).
Repo: https://github.com/malikad778/php-sentinel
I just pushed v1.0.3 and I'd love to hear what the community thinks. Are there specific edge cases in third-party API drift that you've been burned by? Any feedback on the architecture or inference engine would be awesome.
Thanks!
https://redd.it/1r9ze4l
@r_php
Hey everyone,
If you consume external REST APIs long enough, you know the pain: the provider silently drops a field, changes a string to an integer, or makes a previously required field optional. You usually only find out when your production app throws a null pointer exception or your DB rejects a type.
I built PHP Sentinel to solve this. It's a passive API contract monitor for PHP 8.3+ that sits in your HTTP client layer and watches the JSON coming back from the APIs you consume.
What it actually does: You don't write any schemas or rules by hand. Sentinel just silently observes the traffic.
1. Sampling: It watches the first X successful JSON responses for an endpoint.
2. Inference: It builds a probabilistically accurate JSON Schema (e.g., figuring out which fields are truly
required vs which ones are just optional and happen to be missing sometimes).3. Hardening: Once it hits the sample threshold (default 20), it locks the baseline schema.
4. Drift Detection: From then on, every new response is compared to the baseline in real-time. If the structure "drifts" (like a new field appears, or a required type changes), it dispatches an event and logs it.
Core features:
Zero-touch: Drop it into your PSR-18 client, Laravel `Http::` facade, or Symfony client and forget about it.
Smart Drift Rules: It knows that an optional field missing isn't drift, but a previously required field disappearing is a
BREAKING change. A new undocumented field is just ADDITIVE.Auto-healing: You can configure it to automatically "reharden" and build a new baseline after it reports a drift, so it adapts to legitimate API evolutions without you touching the code.
Framework Native: Comes with a Laravel ServiceProvider and a Symfony Bundle out of the box, plus an artisan/console CLI tool to inspect the inferred schemas manually.
Why I made it: Writing and maintaining OpenAPI specs for other people's APIs sucks. This is meant to be a passive safety net that gives you a Slack/log alert when a payload change happens, rather than digging through stack traces later.
It's fully unit-tested (Pest) and strictly typed (PHPStan Level 8).
Repo: https://github.com/malikad778/php-sentinel
I just pushed v1.0.3 and I'd love to hear what the community thinks. Are there specific edge cases in third-party API drift that you've been burned by? Any feedback on the architecture or inference engine would be awesome.
Thanks!
https://redd.it/1r9ze4l
@r_php
GitHub
GitHub - malikad778/php-sentinel: Passive API Contract Monitoring for PHP 8.3+. Detects breaking changes, json schema drift, and…
Passive API Contract Monitoring for PHP 8.3+. Detects breaking changes, json schema drift, and unexpected structural modifications in third-party REST APIs via probabilistic inference. - malikad778...
GitHub - eznix86/laravel-sqlite: SQLite In Production With Laravel
https://github.com/eznix86/laravel-sqlite
https://redd.it/1ra8tyr
@r_php
https://github.com/eznix86/laravel-sqlite
https://redd.it/1ra8tyr
@r_php
GitHub
GitHub - eznix86/laravel-sqlite: SQLite In Production With Laravel
SQLite In Production With Laravel. Contribute to eznix86/laravel-sqlite development by creating an account on GitHub.
NativePHP: Build Mobile Apps with PHP & Laravel
https://youtu.be/Ed2cf3KExAI?si=16ECUnpWE6QfTGat
https://redd.it/1r8ym0p
@r_php
https://youtu.be/Ed2cf3KExAI?si=16ECUnpWE6QfTGat
https://redd.it/1r8ym0p
@r_php
YouTube
NativePHP: Build Mobile Apps with PHP & Laravel
❤️ sponsor this channel: https://nunomaduro.com/sponsorships 🙌🏻 this video was made possible by:
🔴 redberry / work with the best laravel digital agency: https://redberry.international/?ref=nunomaduro
📤 mailtrap / modern email delivery for developers & product…
🔴 redberry / work with the best laravel digital agency: https://redberry.international/?ref=nunomaduro
📤 mailtrap / modern email delivery for developers & product…
Cheat Sheet for Rector (PDF)
https://cheat-sheets.nth-root.nl/rector-cheat-sheet.pdf
https://redd.it/1r9txd6
@r_php
https://cheat-sheets.nth-root.nl/rector-cheat-sheet.pdf
https://redd.it/1r9txd6
@r_php