PHP Reddit – Telegram
PHP Reddit
34 subscribers
294 photos
39 videos
25K links
Channel to sync with /r/PHP /r/Laravel /r/Symfony. Powered by awesome @r_channels and @reddit2telegram
Download Telegram
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
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
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
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
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
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
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
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
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
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
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
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
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 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
Why are so many packages designed exclusively for Laravel?

I have noticed that many packages that are being shared here lately are designed exclusively for Laravel. I know it is one of the largest (if not THE largest) framework for PHP, but does that mean that everyone should develop exclusively for it?

In my opinion every developer should look at the whole ecosystem around PHP and not just target one specific framework. IMO a framework agnostic package would be better as more people would benefit from it.

I don't want to link to any individual packages here because I don't want to blame the package maintainers. They have great ideas with their packages.

Of course, I don't have a solution for this. But I want to know if I am the only one who thinks this situation is going in the wrong direction or if my assumption is just plain wrong?

https://redd.it/1r8v229
@r_php