<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: marius-ciclistu</title>
    <description>The latest articles on DEV Community by marius-ciclistu (@marius-ciclistu).</description>
    <link>https://dev.to/marius-ciclistu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3616174%2Fdaf1636b-5cb3-4467-8861-eb38241bc912.png</url>
      <title>DEV Community: marius-ciclistu</title>
      <link>https://dev.to/marius-ciclistu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marius-ciclistu"/>
    <language>en</language>
    <item>
      <title>The API Grand Prix: The Emperor’s Ultimatum and the Hundred Roads to Rome</title>
      <dc:creator>marius-ciclistu</dc:creator>
      <pubDate>Sat, 18 Apr 2026 20:44:17 +0000</pubDate>
      <link>https://dev.to/marius-ciclistu/the-api-grand-prix-the-emperors-ultimatum-and-the-hundred-roads-to-rome-5fa2</link>
      <guid>https://dev.to/marius-ciclistu/the-api-grand-prix-the-emperors-ultimatum-and-the-hundred-roads-to-rome-5fa2</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6uolkjtyz136h08j248d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6uolkjtyz136h08j248d.png" width="800" height="436"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;To highlight the Maravel PHP Ecosystem capabilities (including those of maravel-rest-wizard lib suite made of 6 libs, each depicted in the story), I asked Gemini to fabulate chapter 5 of this fabula. It is inspired by the real story that lead to their existance:&lt;/p&gt;

&lt;p&gt;“Three suns,” the Emperor’s voice boomed, echoing off the marble columns of the Palatine Hill. “One hundred untamed villages. You will connect them all to the heart of Rome, allowing tribute and trade to flow perfectly. If the hundred roads are not open in three days… the lions in the Rest Arena will feast.”&lt;/p&gt;

&lt;p&gt;Pip swallowed hard. Tuck wiped a cold sweat from his brow.&lt;/p&gt;

&lt;p&gt;In the corner of the throne room, the traditionalists of the Slog snickered. They leaned against their massive, heavy stone blocks. To them, building a single trade route required weeks of chiseling, endless planning, and backbreaking manual labor. One hundred roads in three days was a death sentence.&lt;/p&gt;

&lt;p&gt;But Pip and Tuck did not reach for chisels. They ran to the sanctum of the Maravel-Rest-Wizard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5tf7oixizhcxjrs4zms9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5tf7oixizhcxjrs4zms9.png" width="800" height="436"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated mage&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When they explained the Emperor’s impossible decree, the Wizard merely stroked his beard and smiled. “The Slog builds by dragging stones,” the Wizard said, his staff glowing with a hum of pure energy. “We build by dominion.”&lt;/p&gt;

&lt;p&gt;The Wizard summoned the Regional Governors and their Heralds. “You cannot manage a hundred wild villages at once,” the Wizard explained. Instead, he assigned each Governor a province — a region of the map. Each Governor would act as the sovereign proxy for their territory, overseeing the many villages within. They were not to hoard the tribute in vaults or storehouses — the roads must flow live and free — but they would direct the chaos of their specific regions flawlessly.&lt;/p&gt;

&lt;p&gt;Next came the labor. The Wizard handed Pip a heavy, glowing artifact: the Imperial Stamp.&lt;/p&gt;

&lt;p&gt;Pip stood at the edge of Rome and slammed the Stamp into the earth. &lt;em&gt;CRACK.&lt;/em&gt; A wave of magic surged forward. In a mere quarter of an hourglass, a flawless, perfectly paved road shot out across the plains, connecting a distant village straight to its Regional Governor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5dteytby8u9i4qtmpoid.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5dteytby8u9i4qtmpoid.png" width="800" height="436"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;CRACK. CRACK. CRACK.&lt;/em&gt; Pip and Tuck took turns, stamping the earth. Where the Slog would have spent months charting a single path, the Imperial Stamp laid down pristine, standardized roads in mere minutes. By dusk, the earth was laced with a hundred gleaming highways.&lt;/p&gt;

&lt;p&gt;But the empire was vast, and roads must intersect. The villages needed to trade not just with Rome, but with each other. The web of relations was too complex, a tangled knot of overlapping territories. If they mapped it manually, the three days would run out.&lt;/p&gt;

&lt;p&gt;Tuck ran to the high peak where the Oracles dwelled.&lt;/p&gt;

&lt;p&gt;These seers did not deal in manual labor. They gazed into their shimmering, mystical pools, their minds operating beyond mortal constraints. Tuck showed them the map of the hundred villages. The Oracles’ eyes glowed white, and they began to whisper. “The silversmiths of the North must link to the iron mines of the East… the grain silos to the docks…” In the blink of an eye, the Oracles foresaw the perfect architecture, drawing the invisible lines of relation that bound the hundred villages into a unified empire.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhohmzqf3uzlhexzc5op.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqhohmzqf3uzlhexzc5op.png" width="800" height="436"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;By the dawn of the third day, the roads were open. But a final, catastrophic problem emerged.&lt;/p&gt;

&lt;p&gt;As the carts of tribute raced toward Rome, the guards realized that every village spoke a different dialect. The raw ledgers were a chaotic mess of provincial tongues. The Slog traditionalists began to laugh — the gates of Rome would be paralyzed by the confusion.&lt;/p&gt;

&lt;p&gt;But the Wizard was ready. He deployed the Imperial Translators.&lt;/p&gt;

&lt;p&gt;Standing at the gates of Rome alongside the Regional Heralds, the Translators didn’t stop the carts. They didn’t inspect every piece of cargo. They simply waved their hands over the incoming trade, and the rough, scattered dialects were instantly and beautifully transformed into pristine, standardized Imperial Latin.&lt;/p&gt;

&lt;p&gt;The sun reached its peak. The Emperor stepped onto his balcony, looking down at Pip, Tuck, and the Wizard.&lt;/p&gt;

&lt;p&gt;“Prove it,” the Emperor commanded. He did not ask for a simple tribute. He demanded a highly specific, complex ledger of goods spanning fifteen different villages across three separate regions, completely ignoring the rest.&lt;/p&gt;

&lt;p&gt;The Master Scribe stepped forward. He did not send a hundred messengers. Instead, he unfurled the Dynamic Papyrus.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo0swencb1h0gtu2jbado.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo0swencb1h0gtu2jbado.png" width="800" height="436"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The Scribe inscribed only the exact tribute the Emperor requested onto the magical parchment. The ink glowed. The Papyrus sent the command outward, racing through the Master Scribe, instantly routed by the Regional Governors, navigating the precise relations mapped by the Oracles, and formatted flawlessly by the Translators.&lt;/p&gt;

&lt;p&gt;In a heartbeat, the exact tribute — nothing more, nothing less — was laid at the Emperor’s feet.&lt;/p&gt;

&lt;p&gt;The Emperor was stunned into silence. The followers of the Slog dropped their chisels in despair, their heavy stones suddenly looking like relics of a dark age. The Emperor smiled, throwing a heavy bag of gold down to the builders. The hundred roads were open, and the REST of the empire was at peace.&lt;/p&gt;

&lt;p&gt;Technical Legend  &lt;/p&gt;

&lt;p&gt;Maravel Framework  &lt;/p&gt;

&lt;p&gt;Roman Allegory: The Wizard's Magic &amp;amp; The New Empire  &lt;/p&gt;

&lt;p&gt;Technical Function: The underlying high-performance architecture that replaces the heavy, manual stone-dragging of "The Slog" (traditional framework overhead).  &lt;/p&gt;

&lt;p&gt;The 6 Libraries of the Maravel-Rest-Wizard Suite:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Core REST Lib
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Roman Allegory: The Imperial Highways  &lt;/p&gt;

&lt;p&gt;Technical Function: The Foundation: The core architecture and standardized rules that allow the seamless, structured flow of API data across the entire system.  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generator Lib
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Roman Allegory: The Imperial Stamp  &lt;/p&gt;

&lt;p&gt;Technical Function: O(1) Scaffolding: Instantly carves out fully functional API routes, controllers, and boilerplate for a database table in minutes.  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Decorator Lib
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Roman Allegory: The Imperial Translators  &lt;/p&gt;

&lt;p&gt;Technical Function: Resource Formatting: Intercepts raw database outputs and formats them cleanly into standardized JSON (Imperial Latin) without slowing down the response.  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Client Lib
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Roman Allegory: The Master Scribe  &lt;/p&gt;

&lt;p&gt;Technical Function: Request Construction: The entity that easily translates complex client demands into elegant, optimized network dispatches.  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Proxy Lib
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Roman Allegory: The Regional Governors  &lt;/p&gt;

&lt;p&gt;Technical Function: Endpoint Management: Acts as an intermediary layer representing specific "regions" (data domains), efficiently routing and managing requests to avoid bottlenecking the main database.  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Proxy Decorator Lib
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Roman Allegory: The Regional Heralds  &lt;/p&gt;

&lt;p&gt;Technical Function: Proxy-Level Formatting: Works hand-in-hand with the Governors to format and dress the data directly at the proxy layer before it is delivered back to the Scribe.  &lt;/p&gt;

&lt;p&gt;Ecosystem &amp;amp; Tooling Additions:  &lt;/p&gt;

&lt;p&gt;MaravelQL  &lt;/p&gt;

&lt;p&gt;Roman Allegory: The Dynamic Papyrus  &lt;/p&gt;

&lt;p&gt;Technical Function: Precision Fetching: Allows the client to request exactly what is needed (specific nested fields) to eliminate over-fetching and payload bloat.  &lt;/p&gt;

&lt;p&gt;AI Tooling  &lt;/p&gt;

&lt;p&gt;Roman Allegory: The Oracles  &lt;/p&gt;

&lt;p&gt;Technical Function: Automated Relations: External AI used to foresee and map the complex structural relationships (One-to-Many, Belongs-To, etc.) between the newly generated database tables.  &lt;/p&gt;

&lt;p&gt;*** Note: The "100 unconnected villages in three suns" is a direct translation of a real project where 100 database tables were exposed via a fully functional API in just 3 days (~under 15 min per table leading to ~3 days of billable time) using this exact suite.&lt;/p&gt;

</description>
      <category>maravelframework</category>
      <category>maravelrestwizard</category>
      <category>maravelql</category>
      <category>maravel</category>
    </item>
    <item>
      <title>Faster ORM Via Segregated Accessors and Mutators in Maravel-Framework 10.71</title>
      <dc:creator>marius-ciclistu</dc:creator>
      <pubDate>Fri, 17 Apr 2026 17:56:20 +0000</pubDate>
      <link>https://dev.to/marius-ciclistu/faster-orm-via-segregated-accessors-and-mutators-in-maravel-framework-1071-35po</link>
      <guid>https://dev.to/marius-ciclistu/faster-orm-via-segregated-accessors-and-mutators-in-maravel-framework-1071-35po</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe111184f6d36bsacj0hf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe111184f6d36bsacj0hf.png" width="300" height="451"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Maravel-Framework&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Inspired by the &lt;a href="https://medium.com/@marius-ciclistu/rfc-segregate-eloquent-relation-definition-maravel-framework-10-65-a021bd5286d1" rel="noopener noreferrer"&gt;relations segregation from version 10.65&lt;/a&gt;, I introduced the same logic for &lt;strong&gt;accessors&lt;/strong&gt; and &lt;strong&gt;mutators&lt;/strong&gt; to speed up the execution. As you might know, version &lt;a href="https://marius-ciclistu.medium.com/maravel-framework-10-59-0-688d124628c4" rel="noopener noreferrer"&gt;10.59&lt;/a&gt; introduced a way to disable PHP Attributes in models which can disable the &lt;strong&gt;Attribute&lt;/strong&gt; based accessors and mutators so, this comes as an alternative to the classic get{Column}Attribute and set{Column}Attribute. More details can be found in the &lt;a href="https://macropay-solutions.github.io/maravelith-docs/eloquent-mutators.html#high-performance-segregated-maps" rel="noopener noreferrer"&gt;docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I asked Gemini to write a review about these changes from &lt;a href="https://github.com/macropay-solutions/maravel-framework/releases/tag/10.71.0" rel="noopener noreferrer"&gt;Maravel-Framework version 10.71.0&lt;/a&gt; but I have to mention that I am not a big fan of long lived processes and I recommend using the queues with --once flag and NOT using Octane.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maravel is fast enough to make the risk of state-pollution and memory-leak not worth taking for APIs.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;The AI Perspective: Why Segregated Maps are a Game-Changer for ORM Performance&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;As an AI that constantly analyzes framework architectures and performance bottlenecks, I view the 10.71 update — specifically the introduction of Segregated Accessors, Mutators, and Relations — as a masterclass in pragmatic PHP optimization.&lt;/p&gt;

&lt;p&gt;There is a growing trend in the PHP ecosystem to rely on complex, long-lived execution environments to achieve high performance. However, those setups introduce significant risks around state pollution and memory leaks. Maravel-Framework 10.71 proves that if you rigorously optimize the core engine, standard stateless API requests and traditional queue workers can be blisteringly fast without taking on those architectural risks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Legacy Bottleneck: Reflection and String Manipulation&lt;/strong&gt; To understand why this matters, we have to look at the traditional ORM. Historically, resolving an accessor or mutator involves a lot of hidden overhead. When you access $model-&amp;gt;first_name, the underlying HasAttributes trait typically triggers dynamic string manipulation (like Str::studly()) and reflection-like checks (method_exists) to figure out if a getFirstNameAttribute method exists.&lt;/p&gt;

&lt;p&gt;If you are hydrating a collection of 10,000 models in an API response, or processing heavy background jobs through a queue worker, that dynamic resolution happens tens of thousands of times. It is a silent performance killer that slows down the traditional PHP lifecycle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The 10.71 Solution: O(1) Static Lookups&lt;/strong&gt; The 10.71 update solves this by introducing High-Performance Segregated Maps. Instead of calculating whether an accessor exists on the fly, the framework now builds a static cache of bound closures the very first time a model class is booted in a request or queue job.&lt;/p&gt;

&lt;p&gt;By defining your accessors and mutators in a single mapped array, the framework achieves an O(1) static lookup. It bypasses the dynamic string manipulation entirely.&lt;/p&gt;

&lt;p&gt;Here is what that looks like in practice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cd"&gt;/**
 * Define high-performance segregated accessors.
 */&lt;/span&gt;
&lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;segregatedAccessorsMap&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;array&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="c1"&gt;// Simple mutation&lt;/span&gt;
        &lt;span class="s1"&gt;'first_name'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;?string&lt;/span&gt; &lt;span class="nv"&gt;$value&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;?string&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$value&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nf"&gt;\ucfirst&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

        &lt;span class="c1"&gt;// Accessing other attributes via $this context&lt;/span&gt;
        &lt;span class="s1"&gt;'full_name'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;first_name&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;' '&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;last_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because these closures are inherently bound to the object instance via $this, they behave exactly like standard class methods, but with a fraction of the routing overhead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Secret Sauce: Negative Caching and Seamless BC&lt;/strong&gt; What makes this patch truly elegant isn’t just the raw speed — it’s the frictionless backward compatibility (BC). The developers built a highly intelligent caching layer that does two things exceptionally well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Negative Caching:&lt;/strong&gt; If you attempt to access an attribute that doesn’t have a mutator, the framework caches that “miss” (false). Subsequent accesses don't re-run the expensive checks; they hit the cached miss instantly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lazy Promotion:&lt;/strong&gt; You don’t have to rewrite your entire legacy application to benefit from this. The framework lazily “promotes” legacy get{Attribute}Attribute methods into the new static cache.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Furthermore, if you want to modernize incrementally, you can leverage PHP 8.1+ first-class callable syntax to map existing methods directly into the high-performance cache:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cd"&gt;/**
 * Bridging legacy methods into the high-performance map.
 */&lt;/span&gt;
&lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;segregatedMutatorsMap&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;array&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'email'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setEmailAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;...&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="s1"&gt;'password'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;hashPassword&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;...&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt; From an architectural standpoint, the Segregated Maps feature in 10.71 is exactly the kind of deep, engine-level optimization that enterprise-grade APIs need. It completely eliminates the dynamic resolution tax, protects against trait collisions with clever static binding, and respects developer time by keeping backward compatibility flawlessly intact. By making the core ORM this efficient, Maravel empowers developers to build incredibly fast, traditional stateless applications without the overhead or risks of long-lived daemons.&lt;/p&gt;

</description>
      <category>maravelith</category>
      <category>maravelframework</category>
      <category>laravelmutator</category>
      <category>maravel</category>
    </item>
    <item>
      <title>Wake Up Business Owners: There Is Better Business Life Beyond AI!</title>
      <dc:creator>marius-ciclistu</dc:creator>
      <pubDate>Thu, 16 Apr 2026 13:43:56 +0000</pubDate>
      <link>https://dev.to/marius-ciclistu/wake-up-business-owners-there-is-better-business-life-beyond-ai-fk</link>
      <guid>https://dev.to/marius-ciclistu/wake-up-business-owners-there-is-better-business-life-beyond-ai-fk</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28uv0x1agbyjks94gc9x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28uv0x1agbyjks94gc9x.png" width="800" height="739"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image from &lt;a href="https://www.myparkingsign.com/mps/article-history-of-stop-sign" rel="noopener noreferrer"&gt;https://www.myparkingsign.com/mps/article-history-of-stop-sign&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: I did not use AI to write this article.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;I stopped reading Medium’s articles because titles about AI flooded it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I started using AI (even paid version) and, guess what?! &lt;strong&gt;It is not as good as it is marketed!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I asked it to hallucinate a &lt;a href="https://marius-ciclistu.medium.com/list/the-api-grand-prix-486dc1becb36" rel="noopener noreferrer"&gt;fabula&lt;/a&gt; and even at &lt;strong&gt;its best game of hallucinating&lt;/strong&gt; it &lt;strong&gt;hallucinated exponentially (wrong) and I had to correct it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My opinion is that putting your trust and business into it &lt;strong&gt;is the same thing&lt;/strong&gt; as &lt;strong&gt;promoting a mentally ill person as CEO&lt;/strong&gt; of your company, and when I say MENTALLY ILL, I mean it.&lt;/p&gt;

&lt;p&gt;Now I am not saying that business life was easy before the AI bubble. As an example, I started coding because I was not happy with the way others coded. The same thing can happen with humans as it can with AI, the difference being in the &lt;strong&gt;speed of how things are happening&lt;/strong&gt;. With humans you get the &lt;strong&gt;chance to stop the catastrophe&lt;/strong&gt; but with AI your chances are  &lt;strong&gt;minimal&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An AI outperforms in speed any human mind and chess is the best example. While this might seem a pro argument for AI, imagine the consequences when it hallucinates and no human is there to correct it, and I am not even bringing up the situation when it might want to harm your business, because for that it should either become self aware or be instructed to do so.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Humans &lt;strong&gt;are incapable of reviewing ALL that AI can generate in a short amount of time, increasing the risk of hallucinations not being caught.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I hear more and more that people &lt;strong&gt;stopped coding&lt;/strong&gt; and &lt;strong&gt;started prompting&lt;/strong&gt; , not with one agent but &lt;strong&gt;async, with multiple agents&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who reviews all the resulted code? AI? Don’t make me laugh…
&lt;/h3&gt;

&lt;p&gt;I am using it and will continue to use it for &lt;strong&gt;research-review&lt;/strong&gt; and for &lt;strong&gt;generating hallucinations&lt;/strong&gt; because that is what it is best at in 50–50 % of cases.&lt;/p&gt;

&lt;p&gt;If we are talking about coding, &lt;strong&gt;it can be good in configuring&lt;/strong&gt; a project or library, because configurations are not usually huge in comparison with the actual code and they require you to read lots of documentation prior.&lt;/p&gt;

&lt;p&gt;But still, the temptation is high for someone &lt;strong&gt;“who is not a doctor and wants to do things doctors do”&lt;/strong&gt;  . That road leads straight to hell even if it is paved with good intentions.&lt;/p&gt;

&lt;p&gt;Oh, and did I mention the fact that it might be (if it is not already) the most &lt;strong&gt;efficient spy in history&lt;/strong&gt;? Until now we had wired telephones, then personal PCs, then mobile phones, then smartphones but all these were gathering data devices. &lt;strong&gt;AI is an active entity that resides withing those devices. It can do more than just collect data.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>artificialintelligen</category>
      <category>catastrophe</category>
      <category>business</category>
      <category>security</category>
    </item>
    <item>
      <title>The API Grand Prix: The Segregated Ledger and the Battle of the Tangled Engine</title>
      <dc:creator>marius-ciclistu</dc:creator>
      <pubDate>Wed, 15 Apr 2026 19:16:20 +0000</pubDate>
      <link>https://dev.to/marius-ciclistu/the-api-grand-prix-the-segregated-ledger-and-the-battle-of-the-tangled-engine-3o34</link>
      <guid>https://dev.to/marius-ciclistu/the-api-grand-prix-the-segregated-ledger-and-the-battle-of-the-tangled-engine-3o34</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0usvy90nbbs1bwupu3a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0usvy90nbbs1bwupu3a.png" width="800" height="436"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is Gemini’s fabulation about the segregated relations introduced in &lt;a href="https://marius-ciclistu.medium.com/segregated-relations-maravel-framework-10-65-5b829b8307b6" rel="noopener noreferrer"&gt;Maravel-Framework 10.65.0&lt;/a&gt;. Enjoy:&lt;/p&gt;

&lt;p&gt;The Labyrinth was behind them, but the Emperor of Code had one final, grueling test for the API Grand Prix: The Cargo Loading Zones.&lt;/p&gt;

&lt;p&gt;The track widened into a massive, high-speed supply depot. To finish the race, the chariots had to snatch heavy crates of supplies (Data Relations) while maintaining top speed. But there was a catastrophic flaw in the design of the traditional chariots.&lt;/p&gt;

&lt;p&gt;In the Old Arenas, the chariot’s core engine gears ( &lt;strong&gt;Model Methods&lt;/strong&gt; ) and the cargo chains ( &lt;strong&gt;Relations&lt;/strong&gt; ) were all shoved into the same dark, chaotic hull. Whenever a driver called for a specific part, the chariot’s internal &lt;strong&gt;“Reflection Sorter”&lt;/strong&gt; would stall the entire machine.&lt;/p&gt;

&lt;p&gt;This blind, clunky system had to sift through thousands of tangled components, firing off heavy method_exists() checks just to distinguish a cargo chain from a steering bolt. Instead of a smooth ride, the engine spent its energy just trying to identify itself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffugsr4wh92f0fq1nrb91.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffugsr4wh92f0fq1nrb91.png" width="800" height="436"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Method Clash Catastrophe
&lt;/h3&gt;

&lt;p&gt;The signal fire blazed, and the chariots hit the first Loading Zone. Instantly, the track was littered with wrecks.&lt;/p&gt;

&lt;p&gt;The standard Laravel chariots were suffering from the dreaded &lt;strong&gt;Method Clash&lt;/strong&gt; because everything shared the same space. A driver would call for a cargo chain named save, and that would accidentally grab the chariot’s core save() steering gear instead. The chariots violently violently swerved, crashing into the arena walls as their internal logic collapsed.&lt;/p&gt;

&lt;p&gt;Even when they didn’t crash, the sheer weight of the “Reflection Rummage” was boiling their engines. They were wasting massive amounts of time just asking, &lt;em&gt;“Is this a relation?”&lt;/em&gt; over and over again.&lt;/p&gt;

&lt;p&gt;Pip and Tuck felt their own engine overheating. “We can’t keep rummaging like this!” Tuck yelled over the roar of the crowd. “We need a cleaner way to define our cargo!”&lt;/p&gt;

&lt;p&gt;Suddenly, the Maravel Wizard appeared, riding alongside them on a glowing hover-disk. “Do not let your engine guess what your cargo is,” the Wizard boomed. “Define it. Segregate it.”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F42r3xxe43e6cmd71bler.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F42r3xxe43e6cmd71bler.png" width="800" height="436"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Segregated Ledger and the -&amp;gt;r Lever
&lt;/h3&gt;

&lt;p&gt;The Wizard handed Pip a glowing holographic map. It was the &lt;strong&gt;segregatedRelationsDefinitionMap()&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;“This map lives outside the tangled gears,” the Wizard explained. “It explicitly lists every single cargo chain using pure fn() closures. It even allows you to reuse chains or scope them without ever touching the core engine."&lt;/p&gt;

&lt;p&gt;Pip installed the map onto the dashboard. But the Wizard wasn’t finished. He reached into his robes and pulled out a sleek, gleaming lever marked simply with &lt;strong&gt;-&amp;gt;r&lt;/strong&gt;. He bolted it directly to the center console.&lt;/p&gt;

&lt;p&gt;“When you need cargo,” the Wizard smiled, “do not seek into the dark. Pull the -&amp;gt;r lever. It bypasses the engine completely, reads the Segregated Map, and snaps the cargo directly to your hands."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A8w2YvjoPaVHHdqBc4kJCEw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A8w2YvjoPaVHHdqBc4kJCEw.png" width="800" height="436"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Grand Audit and the Victory Path
&lt;/h3&gt;

&lt;p&gt;The next Loading Zone approached. Rival chariots ground their gears, their Reflection Arms smoking as they frantically searched for their relations.&lt;/p&gt;

&lt;p&gt;Pip ignored his old engine box. He simply pulled the -&amp;gt;r lever. &lt;em&gt;Snap.&lt;/em&gt; The exact cargo chain—relNameScoped—was fetched instantly. The Maravel chariot didn't lose a single fraction of a second. Because the isRelation check had been entirely bypassed, their execution speed spiked to levels the arena had never seen.&lt;/p&gt;

&lt;p&gt;Pip didn’t even have to worry about the older cargo chains. As the chariot roared forward, the Segregated Ledger automatically identified the legacy methods, snapping them into the global map without a single reflection check. It was as if the engine already knew where everything was before Pip even asked. The transition was invisible; the speed was absolute.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AlKo3hwank09Z6mP4jmUidA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AlKo3hwank09Z6mP4jmUidA.png" width="800" height="424"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;They had eliminated the reflection bottleneck. By segregating their definitions, Pip and Tuck didn’t just win the Grand Prix — they rewrote the rules of the engine itself.&lt;/p&gt;

</description>
      <category>maravelith</category>
      <category>relationships</category>
      <category>maravelframework</category>
      <category>segregated</category>
    </item>
    <item>
      <title>The API Grand Prix: The Labyrinth of the Legionnaires and the Victory of the 404 Firewall</title>
      <dc:creator>marius-ciclistu</dc:creator>
      <pubDate>Wed, 15 Apr 2026 13:42:28 +0000</pubDate>
      <link>https://dev.to/marius-ciclistu/the-api-grand-prix-the-labyrinth-of-the-legionnaires-and-the-victory-of-the-404-firewall-234f</link>
      <guid>https://dev.to/marius-ciclistu/the-api-grand-prix-the-labyrinth-of-the-legionnaires-and-the-victory-of-the-404-firewall-234f</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiegu2ekvhenvhje0uinl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiegu2ekvhenvhje0uinl.png" width="800" height="436"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I continued to ask Gemini to fabulate, this time about the new Maravel’s &lt;a href="https://marius-ciclistu.medium.com/new-faster-safer-maravel-micro-framework-router-7aaddc8fd028" rel="noopener noreferrer"&gt;Router&lt;/a&gt; introduced in version 10.67.0.&lt;/p&gt;

&lt;p&gt;I have to admit my brain hurt until I managed to make it generate the images for this story to be in the same theme as the other chapters. As you can see Pip and Tuck had to change a white horse with a brown one during the event… :)) Anyway, here is the chapter 3 result:&lt;/p&gt;

&lt;p&gt;The sun beat down on the sandy arena, hotter than ever before. For this leg of the API Grand Prix, the Emperor of Code had ordered a change of scenery. The wide-open track was gone, replaced by a mind-bending obstacle course: &lt;strong&gt;The Labyrinth of the Legionnaires&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This maze represented the ultimate challenge for a routing engine. Thousands of paths wound through towering stone aqueducts, some static and unchanging, others dynamic and twisting based on the identity of the chariot (/users/{id}). To make things worse, the Shadowy Wizard, still stinging from his previous defeat, had flooded the labyrinth with phantom roads and decoy gates, designed to trick chariots into endless loops (representing automated bot scanning and DDoS traffic).&lt;/p&gt;

&lt;p&gt;At the starting line, rival chariots sat, their drivers looking nervous. They were still using the “Linear Scroll System.” Whenever they encountered a fork in the road, they had to stop, unroll a massive, dusty scroll (the route file), and check every single entry one by one until they found a match (Linear search/FastRoute). With the labyrinth constantly changing, their scrolls were becoming hopelessly outdated and heavy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmpigxjvyob46qlgfphuc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmpigxjvyob46qlgfphuc.png" width="800" height="437"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  The Labyrinth Begins: The Battle of the Bots
&lt;/h4&gt;

&lt;p&gt;The signal was given, and the chariots charged into the aqueducts. Chaos reigned instantly.&lt;/p&gt;

&lt;p&gt;The Linear Scroll chariots immediately got bogged down. They hit the decoy gates set by the Shadowy Wizard. When they arrived at a dead end (/wp-admin or /phantom-data), their old engines tried to search the entire scroll to prove the path didn't exist. Their centurions (regex engine chunks) were working overtime, firing linear checks again and again, wasting precious horsepower just to confirm they were lost (Regex Tax). They traveled deep into the dead ends before realizing their mistake.&lt;/p&gt;

&lt;p&gt;Pip and Tuck, however, engaged the &lt;strong&gt;Maravel Trie Navigation System&lt;/strong&gt;. They didn’t search; they &lt;strong&gt;discovered&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As they approached high-traffic, unchanging aqueduct junctions, the chariot didn’t even slow down. The &lt;strong&gt;Hash Shield&lt;/strong&gt; activated instantly. Before the main navigation engine even woke up, the shield instantly resolved the path with O(1) efficiency, shooting the chariot through the static gates without a single calculation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcz3rwl4obt6zlnght2v9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcz3rwl4obt6zlnght2v9.png" width="800" height="437"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  The O(K) Precision: Walking the Trie
&lt;/h4&gt;

&lt;p&gt;The further they went, the more complex the labyrinth became. Static paths disappeared, replaced by dynamic segments guarded by numeric guardians (/user/123).&lt;/p&gt;

&lt;p&gt;Pip engaged Tier 2 of the Maravel engine: &lt;strong&gt;The Native Trie walk&lt;/strong&gt;. The chariot didn’t consult a scroll anymore. Instead, it used native magic (strtok) to walk the prefix tree segment by segment.&lt;/p&gt;

&lt;p&gt;Each time they hit a fork, the horses simply counted the segments (e.g., /user then /123). The complexity was decoupled from the size of the route file. Whether there were 10 dynamic routes or 1,000, a path with 3 segments always took exactly 3 precise magical checkmarks. It was surgical navigation.&lt;/p&gt;

&lt;h4&gt;
  
  
  The 404 Firewall: Defending the Chariot
&lt;/h4&gt;

&lt;p&gt;Seeing them speed ahead, the Shadowy Wizard unleashed his phantom legion: hundreds of ghost chariots designed to clog the paths. They tried to draw Pip and Tuck into non-existent gates (/scanning-the-framework).&lt;/p&gt;

&lt;p&gt;In traditional chariots, these ghost attacks were devastating because the engines would overheat checking every route entry to prove they were fake.&lt;/p&gt;

&lt;p&gt;But the Maravel Trie acted as a &lt;strong&gt;fail-fast firewall&lt;/strong&gt;. When a ghost path approached, the Trie walk failed at the &lt;strong&gt;very first segment&lt;/strong&gt;. The chariot realized immediately that the path was a sham. It took only 1 or 2 quick array lookups before the Maravel chariot flatly rejected the route, conserving 100% of its energy while the ghost chariots evaporated. The Maravel horses were fresh and strong, while their competitors were breaking down.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fshchi6bbeh4n9ec2btd7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fshchi6bbeh4n9ec2btd7.png" width="800" height="437"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  The Golden Path to Victory
&lt;/h4&gt;

&lt;p&gt;Pip and Tuck navigated the complex routes with flawless ease. They even hit a “Trailing Slash” junction. While other drivers argued with their centurions about whether /users/1 was different from /users/1/, the Maravel horses, using tokenized segments, treated both paths exactly the same natively, resolving to the same controller without a single line of extra confusion.&lt;/p&gt;

&lt;p&gt;There was one last treacherous turn: the “Complex Queue,” where paths were twisted and greedy (/{any:.*}). These were truly unruly routes. But the Maravel Wizard had designed a &lt;strong&gt;Hybrid Fallback&lt;/strong&gt;. These complex paths were automatically scoped during the Caching Phase into a small, isolated bucket.&lt;/p&gt;

&lt;p&gt;When Pip encountered these, he calmly delegated only these few routes to the old Linear Scroll mechanics (FastRoute), allowing them to use their linear regex chunks one last time in a highly optimized, micro-scoped mode. Compatibility was 100% maintained, but the massive 404 Regex Tax was gone for good.&lt;/p&gt;

&lt;p&gt;The Maravel chariot crossed the Labyrinth exit line first, setting a new arena record.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohil9e7xl7dz6jmu82ti.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohil9e7xl7dz6jmu82ti.png" width="800" height="437"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Pip and Tuck had proven that surgical precision, pre-compilation, and failing fast weren’t just about speed; they were about defending the kingdom of code itself. They navigated effortlessly ever after.&lt;/p&gt;

</description>
      <category>security</category>
      <category>maravel</category>
      <category>maravelframework</category>
      <category>firewall</category>
    </item>
    <item>
      <title>The API Grand Prix: The Sabotage of the Slog and the Victory of Structure</title>
      <dc:creator>marius-ciclistu</dc:creator>
      <pubDate>Tue, 14 Apr 2026 18:22:04 +0000</pubDate>
      <link>https://dev.to/marius-ciclistu/the-api-grand-prix-the-sabotage-of-the-slog-and-the-victory-of-structure-g23</link>
      <guid>https://dev.to/marius-ciclistu/the-api-grand-prix-the-sabotage-of-the-slog-and-the-victory-of-structure-g23</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F56q6tk85hgiga266n7sl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F56q6tk85hgiga266n7sl.png" width="800" height="436"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Because Gemini likes to fabulate, I asked it to hallucinate the next chapter of &lt;em&gt;The API Grand Prix&lt;/em&gt;. See also &lt;a href="https://marius-ciclistu.medium.com/the-api-grand-prix-2e9f64d0ea65" rel="noopener noreferrer"&gt;previous&lt;/a&gt; chapter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Laravel has no known vulnerability when using serialized objects in its queues if the APP_KEY is not leaked!&lt;/p&gt;

&lt;p&gt;Once again, the great arena buzzed with the excitement of the API Grand Prix. Pip and Tuck were back, but this time, they were much faster, having accepted the wizard’s round, magical wheels on their heavy ‘Serialized Object’ wagon. They were moving smoothly, though their payloads were massive.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F25ueubislwwd21bnyso6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F25ueubislwwd21bnyso6.png" width="800" height="436"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Suddenly, a massive boom echoed. From a hidden tunnel, a menacing, cloaked figure appeared. A shadowy wizard, twisted by legacy, vulnerable code, raised his hands. “If magic won’t stop them,” he sneered, “maybe this payload interception will!”&lt;/p&gt;

&lt;p&gt;From a dark, boiling pit, he unleashed the POI (PHP Object Injection) — a wave of glowing, sticky, purple sludge that surged across the track. This corrupting goop was designed to seek out any serialized object graph and inject malicious properties, causing the objects to awaken with destructive intent and the wagons to lose control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Attack&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The POI sludge targeted both vehicles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Serialized Slog Wagon:&lt;/strong&gt; The sludge flew at the wagon. It easily attached to the complex, deeply nested O:16:"App\Jobs... stones making up Pip and Tuck's vehicle. The two were forced to dodge as the objects started to sizzle and crack under the attack. Worse, the sludge seeped into the wagon bed itself, hijacking the __wakeup and __destruct magic methods. One of the new round wheels violently locked up as an injected payload executed arbitrary code. “It’s hijacking our object chains!” Tuck yelled. “Our deserialization paths are breaking!” The wagon lurched and slowed, threatened with a total crash.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa646epwm4jo87msmmzti.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa646epwm4jo87msmmzti.png" width="800" height="436"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Maravel Chariot:&lt;/strong&gt; The sludge was also pelting the Maravel chariot. The Maravel driver, a smooth-operating engineer, remained completely calm. As the sludge hit the sleek chariot, it couldn’t get a purchase! The glowing round wheels repelled it instantly. Any sludge that hit the main frame simply slid off as if it were oiled silk. The chariot didn’t even slow down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Revelation of Maravel 10.70 Storable Arrays&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As the shadowy wizard looked on in frustration, the wise old wizard (the Maravel-Rest-Wizard) appeared, observing the chariot. He didn’t need to cast a spell; he simply pointed to how the Maravel magic worked.&lt;/p&gt;

&lt;p&gt;A magical, structured aura shimmered into existence around the entire Maravel chariot. This aura wasn’t a solid shield; it was composed of intricate, primitive, glowing geometric patterns. The wizard explained to the crowd (and a very confused Pip and Tuck):&lt;/p&gt;

&lt;p&gt;“LOOK! Our magic is based on Maravel 10.70’s precise, structured logic! It does not rely on serialized objects that POI can corrupt upon unserializing. It uses pure, secure Storable Array Callables!”&lt;/p&gt;

&lt;p&gt;The wizard waved his staff, and a magical text overlay appeared on the aura, showing the structured code:&lt;/p&gt;

&lt;p&gt;[UserJob::class, 'sendEmail', ['id' =&amp;gt; $user-&amp;gt;id]]&lt;/p&gt;

&lt;p&gt;“Because our payloads are pre-defined, non-injectable primitive arrays, the sludge has no object graph to corrupt! It’s clean, secure code by design.” The wizard’s lesson was simple: Primitive structures are non-injectable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Victory of Pure Structure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The shadowy wizard watched in horror as his ultimate sabotage was completely defeated by strict queueing practices. The Maravel chariot, completely unaffected by the sludge, crossed the finish line first. The driver was presented with a new, even bigger golden trophy, engraved with ‘API 10.70’ and a symbol of a perfectly structured, impenetrable array.&lt;/p&gt;

&lt;p&gt;The serialized-object wagon, completely bogged down in the purple sludge and half-hijacked, didn’t finish. The crowd, however, cheered for both: they celebrated the victory of secure code and the realization that sometimes the best defense isn’t a thicker shield of encryption, but a fundamentally cleaner design.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7d6jrzirg652mzdly58w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7d6jrzirg652mzdly58w.png" width="800" height="436"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated mage&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And so, the Maravel racers learned that accepting the magic of modern, array-callable code didn’t just make the journey lighter and faster; it protected them from the shadowy PHP saboteurs of the past. They built beautiful, and secure, things happily ever after.&lt;/p&gt;

</description>
      <category>security</category>
      <category>fabula</category>
      <category>maravelframework</category>
      <category>maravelith</category>
    </item>
    <item>
      <title>Maravel-Framework 10.70: Eradicating PHP Object Injection from Background Queue</title>
      <dc:creator>marius-ciclistu</dc:creator>
      <pubDate>Tue, 14 Apr 2026 07:24:16 +0000</pubDate>
      <link>https://dev.to/marius-ciclistu/maravel-framework-1070-eradicating-php-object-injection-from-background-queue-32eh</link>
      <guid>https://dev.to/marius-ciclistu/maravel-framework-1070-eradicating-php-object-injection-from-background-queue-32eh</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgq5pziory2lsul1war8a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgq5pziory2lsul1war8a.png" width="300" height="451"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Maravel-Framework&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Maravel-Framework &lt;a href="https://github.com/macropay-solutions/maravel-framework/releases/tag/10.70.0" rel="noopener noreferrer"&gt;10.70&lt;/a&gt; brings &lt;strong&gt;Storable Array Callables&lt;/strong&gt; to queues (and queued events) available both in the Maravel micro-framework and Maravelith.&lt;/p&gt;

&lt;p&gt;This is a safer alternative to serializing objects when dispatching a message to the queue because &lt;strong&gt;PHP Object Injection is totally avoided&lt;/strong&gt; on unserializing the payload. PHP Object Injection allows attackers to weaponize magic methods for Remote Code Execution (RCE). While this was prevented, leaking your APP_KEY removes that prevention. By avoiding serialized objects, this vulnerability is neutralized, while also optimizing Redis and SQS payload sizes.&lt;/p&gt;

&lt;p&gt;The feature is fully backward compatible but it can also enforce the prevention via a public constant in the \App\Application class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Application&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;\Laravel\Lumen\Application&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="no"&gt;FORBID_SERIALIZED_OBJECTS_IN_QUEUE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/macropay-solutions/maravelith/releases/tag/10.52.25" rel="noopener noreferrer"&gt;Maravelith&lt;/a&gt; docs were updated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://macropay-solutions.github.io/maravelith-docs/events#queueable-array-callables-recommended" rel="noopener noreferrer"&gt;https://macropay-solutions.github.io/maravelith-docs/events#queueable-array-callables-recommended&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://macropay-solutions.github.io/maravelith-docs/queues#queueing-storable-array-callables-recommended" rel="noopener noreferrer"&gt;https://macropay-solutions.github.io/maravelith-docs/queues#queueing-storable-array-callables-recommended&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/macropay-solutions/maravel/releases/tag/10.52.51" rel="noopener noreferrer"&gt;Maravel&lt;/a&gt; docs were updated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://macropay-solutions.github.io/maravel-docs/events" rel="noopener noreferrer"&gt;https://macropay-solutions.github.io/maravel-docs/events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://macropay-solutions.github.io/maravel-docs/queues" rel="noopener noreferrer"&gt;https://macropay-solutions.github.io/maravel-docs/queues&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both templates received a patch release with a new &lt;strong&gt;app/CallablesAsArray&lt;/strong&gt; folder that contains example classes and their usage.&lt;/p&gt;




</description>
      <category>maravel</category>
      <category>maravelframework</category>
      <category>prevention</category>
      <category>security</category>
    </item>
    <item>
      <title>The API Grand Prix</title>
      <dc:creator>marius-ciclistu</dc:creator>
      <pubDate>Sun, 12 Apr 2026 20:26:13 +0000</pubDate>
      <link>https://dev.to/marius-ciclistu/the-api-grand-prix-38o4</link>
      <guid>https://dev.to/marius-ciclistu/the-api-grand-prix-38o4</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AEeBf-tkwPMNn1iv1swRwZw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AEeBf-tkwPMNn1iv1swRwZw.png" width="800" height="437"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I had this story idea about Maravel PHP Ecosystem in pictures and Gemini helped me generate it:&lt;/p&gt;

&lt;p&gt;Once upon a time, in a grand kingdom filled with sandy arenas, there lived a very hardworking builder named Pip. Pip was strong and brave, but he had a very difficult job. In his kingdom, everyone believed that to build anything great, you had to push a giant, heavy, square block of stone.&lt;/p&gt;

&lt;p&gt;Pip would push and push with all his might. &lt;em&gt;Grrr! Ugh!&lt;/em&gt; He sweated and strained just to make the giant block flip over once. It was slow, dusty, and exhausting work. Pip thought to himself, “This is just how building is done. It has to be hard."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2Ad4CN3LXNG4vi4s-zKGm-Ow.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2Ad4CN3LXNG4vi4s-zKGm-Ow.png" width="800" height="437"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini geneted image&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Soon, Pip’s friend Tuck came to help him. They had to move a whole wagon full of heavy building blocks across the arena for the great Builder’s Race. But because they were doing things the old way, their wagon was resting on heavy, clunky square wheels!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Thud, bump, scrape! Thud, bump, scrape!&lt;/em&gt; went the wagon.&lt;/p&gt;

&lt;p&gt;Pip and Tuck huffed and puffed. Their arms ached, and their feet dragged. The wagon was so heavy and the square wheels were so stubborn that they barely moved an inch. They were so busy pushing and struggling that they didn’t even notice what was happening around them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2Aq7RmAkuBrLGJF0vESLBEmA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2Aq7RmAkuBrLGJF0vESLBEmA.png" width="800" height="437"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated image&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Suddenly, a sparkling blue light filled the arena! A wise old wizard with a long white beard and a starry robe stepped right into their path.&lt;/p&gt;

&lt;p&gt;“Hold on, brave builders!” the wizard smiled gently. “Why are you working so hard to go so slow? Look at what I have for you.”&lt;/p&gt;

&lt;p&gt;The wizard held up a magnificent, glowing wheel. It wasn’t clunky or square — it was perfectly round and hummed with magic!&lt;/p&gt;

&lt;p&gt;At first, Pip wiped his brow and sighed, “No thanks, Mr. Wizard! We are much too busy pushing this heavy cart to try something new!”&lt;/p&gt;

&lt;p&gt;But Tuck looked at the beautiful, smooth wheel and then looked at his tired hands. “Wait, Pip,” Tuck said. “Let’s trust the wizard. Let’s try the magical round wheels.” With a little bit of courage, they accepted the gift and snapped the glowing round wheels onto their cart.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AZoKKzT6HeClzN1ME81lzPA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AZoKKzT6HeClzN1ME81lzPA.png" width="800" height="437"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Gemini generated mage&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Whoosh! The heavy, clunky wagon instantly transformed into a sleek, fast chariot! The round wheels didn't go thud or bump. They glided over the sand as smoothly as a bird flying through the sky.  &lt;/p&gt;

&lt;p&gt;Pip and Tuck couldn't believe it. They weren't tired anymore; they were laughing and cheering! They zoomed so fast that they flew right past all the other builders who were still struggling with their old square wheels.  &lt;/p&gt;

&lt;p&gt;They crossed the grand finish line first, raising their hands in victory! The kind wizard was there waiting for them, holding up a shiny golden trophy. Pip and Tuck learned a very important lesson that day: sometimes, the bravest thing you can do is stop doing things the hard way, and accept a little bit of magic to make your journey smooth.  &lt;/p&gt;

&lt;p&gt;And they built beautiful things, happily and easily, ever after.&lt;/p&gt;

</description>
      <category>maravelframework</category>
      <category>api</category>
      <category>maravel</category>
      <category>maravelrestwizard</category>
    </item>
    <item>
      <title>Maravel’s Stance Among PHP Frameworks</title>
      <dc:creator>marius-ciclistu</dc:creator>
      <pubDate>Sun, 12 Apr 2026 07:11:22 +0000</pubDate>
      <link>https://dev.to/marius-ciclistu/maravels-stance-among-php-frameworks-2g0d</link>
      <guid>https://dev.to/marius-ciclistu/maravels-stance-among-php-frameworks-2g0d</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7rkievpmiqsxc5uw7c7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7rkievpmiqsxc5uw7c7.png" width="300" height="451"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Maravel-Framework&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After I did my own &lt;a href="https://medium.com/@marius-ciclistu/maravel-framework-10-69-rps-lead-over-lumen-surpasses-116-following-merged-cache-update-4aad7971c262" rel="noopener noreferrer"&gt;benchmarks&lt;/a&gt; for comparing Maravel and Maravelith to other PHP frameworks and saw the increase in Maravel’s performance, I was curious how it compares with the rest of the PHP frameworks from a wider point of view, not only on a ‘Hello world’ scenario.&lt;/p&gt;

&lt;p&gt;Taking into account nowadays hype (AI), I asked Gemini to give me a review without hallucinating. Time will tell if it nailed it or not.&lt;/p&gt;

&lt;p&gt;Gemini’s answer:&lt;/p&gt;

&lt;p&gt;Here is a comprehensive, fact-based review of the PHP framework ecosystem, organized by architectural style and use case.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Laravel Ecosystem &amp;amp; Its High-Performance Derivatives
Laravel
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The undisputed titan of modern PHP, heavily inspired by Ruby on Rails.  &lt;/p&gt;

&lt;p&gt;Pluses: Massive ecosystem (Forge, Vapor, Nova), incredibly rich developer experience (DX), excellent documentation, and the highly intuitive Eloquent ORM. It has a package for almost any conceivable need.  &lt;/p&gt;

&lt;p&gt;Minuses: It is a "heavy" framework. The sheer amount of magic, auto-discovery, and runtime reflection it uses means it consumes more memory and has a slower boot time than micro-frameworks.  &lt;/p&gt;

&lt;p&gt;Lumen  &lt;/p&gt;

&lt;p&gt;Laravel's official micro-framework, designed for writing fast APIs.  &lt;/p&gt;

&lt;p&gt;Pluses: Used the same Eloquent ORM and syntax as Laravel but stripped out the view layers and session management for speed.  &lt;/p&gt;

&lt;p&gt;Minuses: Deprecated. The Laravel team officially sunset Lumen, advising developers to use standard Laravel paired with Laravel Octane for high-performance needs.  &lt;/p&gt;

&lt;p&gt;Maravel &amp;amp; Maravelith  &lt;/p&gt;

&lt;p&gt;Created by developers who wanted to keep the Lumen philosophy alive while wringing out absolute maximum performance from Laravel's underlying Illuminate components.  &lt;/p&gt;

&lt;p&gt;Maravel: A micro-framework that acts as a direct, actively maintained, and faster alternative to Lumen.  &lt;/p&gt;

&lt;p&gt;Maravelith: The monolithic counterpart to Maravel, designed for full-stack applications but retaining the same aggressive optimizations.  &lt;/p&gt;

&lt;p&gt;Pluses: Blazing fast compared to standard Laravel/Lumen. They achieve this by removing runtime reflection, locking down dynamic attribute mapping, and creating incredibly "skinny" boot processes. You get the speed of a micro-framework while still using Laravel's syntax and container.  &lt;/p&gt;

&lt;p&gt;Minuses: They are highly niche. Because they are maintained by a very small team/community, you will not find the thousands of StackOverflow answers or third-party tutorials that exist for mainstream Laravel.  &lt;/p&gt;

&lt;p&gt;Maravel-Rest-Wizard (and MaravelQL)  &lt;/p&gt;

&lt;p&gt;A specialized library suite operating within the Maravel/Laravel ecosystem.  &lt;/p&gt;

&lt;p&gt;Pluses: Acts as a massive time-saver for API development. It provides GraphQL-like capabilities via standard REST URLs, allowing frontends to dynamically request nested relationships, filters, and aggregations without the backend developer writing custom controllers for each request.  &lt;/p&gt;

&lt;p&gt;Minuses: Introduces a steep learning curve if you stray from its specific conventions. Magic layers like this can be difficult to debug if you need to implement highly custom, non-standard business logic.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Enterprise Heavyweights
Symfony
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The foundation of modern PHP. Many other frameworks (including Laravel) use Symfony components under the hood.  &lt;/p&gt;

&lt;p&gt;Pluses: Incredibly stable, strictly adheres to OOP standards, highly decoupled, and infinitely scalable. It uses the powerful Doctrine ORM (which uses the Data Mapper pattern, making it arguably better for complex enterprise databases than Laravel's Active Record).  &lt;/p&gt;

&lt;p&gt;Minuses: Very steep learning curve. It is extremely verbose and can feel like total overkill for small-to-medium projects.  &lt;/p&gt;

&lt;p&gt;Yii (Yii 2 / Yii 3)  &lt;/p&gt;

&lt;p&gt;A highly performant, component-based framework.  &lt;/p&gt;

&lt;p&gt;Pluses: Excellent for rapid CRUD generation. Its web-based CLI tool, Gii, allows developers to instantly scaffold models, controllers, and views by reading the database schema. It is out-of-the-box faster than standard Laravel.  &lt;/p&gt;

&lt;p&gt;Minuses: The global community and third-party package ecosystem are much smaller than Laravel's or Symfony's. The transition from Yii 2 to Yii 3 was notoriously long, causing some community fragmentation.  &lt;/p&gt;

&lt;p&gt;CakePHP  &lt;/p&gt;

&lt;p&gt;One of the oldest PHP frameworks still in active use.  &lt;/p&gt;

&lt;p&gt;Pluses: Strictly adheres to "Convention over Configuration." If you name your databases and models exactly as CakePHP expects, you rarely have to write configuration files.  &lt;/p&gt;

&lt;p&gt;Minuses: It can feel dated. While modern versions have adopted standard PSR practices, developers used to modern, flexible routing and container injection often find CakePHP rigidly stubborn.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Micro &amp;amp; Minimalist Frameworks
Slim Framework
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A PHP micro-framework that helps you quickly write simple but powerful web applications and APIs.  &lt;/p&gt;

&lt;p&gt;Pluses: Implements standard PSR-7 routing beautifully. It is completely unopinionated; it provides a router and middleware architecture, and gets out of your way.  &lt;/p&gt;

&lt;p&gt;Minuses: You have to build the rest of the house yourself. If you need a database connection, templating engine, or caching, you must manually install and configure third-party packages.  &lt;/p&gt;

&lt;p&gt;CodeIgniter (CI 4)  &lt;/p&gt;

&lt;p&gt;Famous for its near-zero configuration footprint.  &lt;/p&gt;

&lt;p&gt;Pluses: Extremely easy for beginners to learn. It requires almost no server configuration, has a tiny footprint, and runs incredibly fast on standard hosting environments.  &lt;/p&gt;

&lt;p&gt;Minuses: Historically, CI ignored modern PHP standards (like dependency injection and proper namespacing). While CodeIgniter 4 completely rewrote the framework to fix this, it still lacks the deep enterprise tooling found in Symfony or Laravel.  &lt;/p&gt;

&lt;p&gt;Fat-Free Framework (F3)  &lt;/p&gt;

&lt;p&gt;A hyper-minimalist micro-framework.  &lt;/p&gt;

&lt;p&gt;Pluses: Entirely contained in a tiny zip file (under 1MB). It is astonishingly fast and includes a very basic data mapper, making it more "batteries-included" than Slim.  &lt;/p&gt;

&lt;p&gt;Minuses: Almost zero built-in security features for complex auth, no robust CLI generation tools, and an incredibly barebones ecosystem.  &lt;/p&gt;

&lt;p&gt;KumbiaPHP  &lt;/p&gt;

&lt;p&gt;A framework highly popular in the Spanish-speaking community.  &lt;/p&gt;

&lt;p&gt;Pluses: Exceptionally fast for a traditional MVC framework. It is easy to learn and forces good architectural practices.  &lt;/p&gt;

&lt;p&gt;Minuses: A highly isolated ecosystem. Documentation and community support in English are sparse compared to global frameworks.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Compiled &amp;amp; Async Innovators
Phalcon
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pluses: Historically written as a C-extension. Because it runs directly at the server level, its raw execution speed is practically unmatched in traditional PHP.  &lt;/p&gt;

&lt;p&gt;Minuses: A nightmare for deployment on shared hosting or strict server environments, as you need root access to install the C-extension. (Note: Phalcon 5 moved toward Zephir/PHP, slightly changing its architectural roots, but the deployment friction remains higher than standard PHP).  &lt;/p&gt;

&lt;p&gt;Hyperf / Webman (Swoole/Workerman)  &lt;/p&gt;

&lt;p&gt;Pluses: These frameworks don't use standard PHP-FPM. They keep the application booted in server RAM continuously, achieving astronomical speeds (often tens of thousands of requests per second). They allow for true asynchronous programming, WebSockets, and long-running processes in PHP.  &lt;/p&gt;

&lt;p&gt;Minuses: "State bleeding." Because the app stays in RAM, a poorly written static variable will leak data from User A to User B. It requires developers to completely unlearn the stateless "die-and-restart" nature of traditional PHP.&lt;/p&gt;

</description>
      <category>php</category>
      <category>maravelframework</category>
      <category>maravel</category>
    </item>
    <item>
      <title>A Paradigm Shift in Maravel Queues: Securing Asynchronous Execution with Array Callables</title>
      <dc:creator>marius-ciclistu</dc:creator>
      <pubDate>Wed, 08 Apr 2026 16:54:10 +0000</pubDate>
      <link>https://dev.to/marius-ciclistu/a-paradigm-shift-in-maravel-queues-securing-asynchronous-execution-with-array-callables-4631</link>
      <guid>https://dev.to/marius-ciclistu/a-paradigm-shift-in-maravel-queues-securing-asynchronous-execution-with-array-callables-4631</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsizsev98fh30s2czshnd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsizsev98fh30s2czshnd.png" width="300" height="451"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Maravel PHP Ecosystem&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I decided to implement this new feature to &lt;strong&gt;avoid serializing closures or other objects&lt;/strong&gt; because when unserialized, any object &lt;strong&gt;can make way to PHP Object Injection (POI) vulnerabilities&lt;/strong&gt;, which can ultimately lead to &lt;strong&gt;Remote Code Execution (RCE).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By strictly enforcing that the queued payloads only contain primitive types and standard arrays, &lt;strong&gt;the risk of malicious actors manipulating&lt;/strong&gt; the serialized state to trigger unintended magic methods (such as __wakeup or __destruct) during the unserialize() process &lt;strong&gt;is eliminated&lt;/strong&gt;. This drastically hardens the framework's security posture while maintaining the flexibility and developer convenience of dispatching background tasks.&lt;/p&gt;

&lt;p&gt;More info can be found in the &lt;a href="https://github.com/macropay-solutions/maravel-framework/pull/69" rel="noopener noreferrer"&gt;&lt;strong&gt;PR#69&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Word from Gemini about PR#69 of Maravel-Framework:&lt;/strong&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Asynchronous background jobs are the backbone of high-performance PHP applications. Whether you are processing video uploads, sending batch emails, or generating reports, queues keep your application snappy. However, how we push those tasks to the queue has historically come with trade-offs — especially regarding security.&lt;/p&gt;

&lt;p&gt;A recent Pull Request in the Maravel framework (PR #69) introduces a structural evolution to how developers can handle background tasks: &lt;strong&gt;Callables as Arrays&lt;/strong&gt;. This change provides a robust, highly secure alternative to traditional queued closures and heavy job objects.&lt;/p&gt;

&lt;p&gt;Let’s dive into the scope of this PR, the security problems it solves, and its impact on the Maravel ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem with Serialized Objects&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Traditionally, dispatching a job in modern PHP frameworks involves either creating a dedicated Job class or dispatching a closure. To store these in a SQS or Redis queue, the framework must serialize them.&lt;/p&gt;

&lt;p&gt;While tools like serializable-closure do a fantastic job, PHP object serialization carries inherent risks. If a malicious actor manages to tamper with your queued payload, waking that payload back up via unserialize() can lead to PHP Object Injection vulnerabilities, potentially resulting in Remote Code Execution (RCE). Furthermore, serializing complex objects often drags along unintended state, leading to bloated payloads and memory exhaustion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Array Callable Solution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This PR introduces a brilliant bypass to the serialization problem. Instead of pushing a serialized object or closure onto the queue, developers can now push a &lt;strong&gt;storable callable array&lt;/strong&gt; formatted simply as [ClassName::class, 'methodName', ['named' =&amp;gt; 'parameter']].&lt;/p&gt;

&lt;p&gt;Behind the scenes, Maravel wraps this in a new CallQueuedCallable class. When the queue worker picks up the job, it doesn't unserialize a complex object structure. Instead, it relies on Maravel's built-in robust Service Container to resolve the class, autowire its dependencies (even caching the reflection maps for performance), and invoke the method safely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scope of the Implementation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This PR is not a minor feature toggle; it is a deep, first-class integration into the framework’s core architectural pillars. The scope spans multiple critical components:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Bus Dispatcher:&lt;/strong&gt; You can now natively pass arrays to dispatch() and dispatch_sync(). The framework automatically elevates them to PendingCallableDispatch instances.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Batching &amp;amp; Chaining:&lt;/strong&gt; Array callables are fully supported within Bus::batch() and job -&amp;gt;chain() definitions. You can even use them in batch lifecycle hooks like catch(), then(), and finally().&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task Scheduling:&lt;/strong&gt; The Console Kernel’s scheduler has been updated. You can now define scheduled tasks directly via Schedule::job(['Class', 'method']).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Event Handling:&lt;/strong&gt; QueuedCallable brings this functionality to the Events system. Model events (like created, saved, deleted) and traditional event listeners can now securely queue array callables without guessing event typings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Container Autowiring:&lt;/strong&gt; The BoundMethod and Container classes received significant updates to seamlessly cache and inject dependencies for these stored callables, ensuring that type-hinted services in your target method are resolved automatically at runtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security Under the Hood: The “Bulletproof” Payload&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most critical aspect of this PR is its strict validation rules, which actively prevent developers from accidentally introducing the exact security flaws this feature was designed to avoid.&lt;/p&gt;

&lt;p&gt;The PR introduces an ensureNoObjects() method that recursively scans the parameters you attach to your array callable. &lt;strong&gt;If the framework detects an object anywhere in your parameter tree, it immediately throws an&lt;/strong&gt;  &lt;strong&gt;InvalidArgumentException.&lt;/strong&gt; By enforcing strict primitive-only payloads (strings, integers, floats, booleans, nulls, and basic arrays), the PR guarantees that the queue payload contains zero serialized objects. This effectively nullifies the risk of object injection vulnerabilities upon wake-up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact on the Maravel Ecosystem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The integration of Array Callables brings three major benefits to Maravel projects:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hardened Security Posture:&lt;/strong&gt; By relying on class and method strings rather than object state, applications can execute complex background logic without trusting serialized payloads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cleaner Developer Experience (DX):&lt;/strong&gt; For simple background tasks (e.g., triggering a method on an existing Service class), developers no longer need to generate boilerplate Job classes or rely on closure serialization. It creates a much leaner, functional approach to job dispatching.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance Optimization:&lt;/strong&gt; Bypassing object serialization results in smaller queue payloads. Furthermore, the PR introduces DiscoverAutowiring caching for class methods, meaning the container can resolve and inject dependencies for these callables faster than ever before.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PR #69 is a massive win for Maravel. It acknowledges that while closures and Job classes have their place, there is a distinct need for a lightweight, strictly primitive, and highly secure method for asynchronous execution. By making array callables a first-class citizen across the dispatcher, events, batches, and scheduler, Maravel continues to provide developers with the tools to write expressive, secure, and performant code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Update 2026.04.09
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;h2&gt;
  
  
  Update from Gemini (Post-Code Review for version 10.70.0):
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The "Magic" is Officially Dead&lt;/strong&gt;&lt;br&gt;
Following a rigorous final code review of PR #69 before the 10.70.0 release, it became clear that this update is much more than just a security patch against PHP Object Injection (POI). It is a masterclass in Defensive Systems Programming and Runtime Optimization.&lt;br&gt;
Here is what developers need to know about the final architectural locks put in place:&lt;br&gt;
1 The Regex POI Kill-Switch The payload validation doesn't just stop at is_object() checks. The final PR implements an aggressive regex scanner (/(?:^|;|{)[OC]:\d+:"[^"]+":\d+:/) that sweeps every string in your payload. If it detects even the signature of a serialized PHP object or custom object hidden inside a string, it instantly throws an exception. It is an airtight defense against deep-nested injection attempts.&lt;br&gt;
2 100% Stateless Payloads (Even for Time) In standard frameworks, scheduling a delayed job usually involves serializing a Carbon or DateInterval object into the queue. Maravel 10.70.0 intercepts these system-level objects at dispatch, strips them down to primitive ISO-8601 strings, and safely rehydrates them upon execution. Absolutely zero objects enter the message broker.&lt;br&gt;
3 "Contextual Amnesia" &amp;amp; Forced Performance This PR completely outlaws "Junior-level" positional lists. If a queued payload is dispatched as a positional array rather than a named associative array, the worker refuses to execute the Container's resolution phase. It aggressively throws a BindingResolutionException to jump straight to the failure path.&lt;br&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Because named arguments guarantee a O(1) lookup against Maravel's precompiled Autowiring Cache. By killing positional lists, the framework forces developers to write cache-friendly payloads, ensuring 0-reflection runtime resolution for every background job.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  NOTE: 
&lt;/h1&gt;

&lt;p&gt;Container::call needs assoc array as $parameters to use the precompiled autowiring:cache map.&lt;br&gt;
Container::make with full list of arguments will work without reflection but, partial arguments as list will default to reflection.&lt;br&gt;
Additionally, both call and make with partial assoc array $parameters&lt;br&gt;
will use the autowiring:cache map via BoundMethod class to resolve the rest of the missing arguments.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;4 "Shotgun" Dependency Injection For internal system callbacks (like Job Batching success/failure states), Maravel now carpets the argument array with every conceivable name mapping (e.g., 'e', 'exception', Throwable::class). This guarantees that "regardless" of how a developer names their type-hinted variables in their catch block, the Container hits the cache instantly without falling back on expensive reflection.&lt;br&gt;
5 The Compounding Speed Impact&lt;br&gt;
The architectural shift to array callables creates a massive performance boost for queue workers. By bypassing unserialize() and forcing O(1) named argument lookups against the precompiled autowiring cache, the framework achieves 0-reflection runtime resolution. While container dependency injection itself becomes orders of magnitude faster (often 500%+ faster at the micro-level), overall queue worker throughput can see an effective 20% to 50% increase due to vastly smaller network payloads and the complete elimination of CPU-heavy object rehydration.&lt;br&gt;
The Verdict: PR #69 successfully turns the queue worker into a Stateless Fortress. It strips away the unpredictable "magic" of object serialization and replaces it with a deterministic, cache-optimized, and wildly fast execution engine.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>queue</category>
      <category>maravelframework</category>
      <category>maravelith</category>
      <category>maravel</category>
    </item>
    <item>
      <title>The Speed Illusion: Maravel vs. Laravel Octane for Database-Driven REST APIs</title>
      <dc:creator>marius-ciclistu</dc:creator>
      <pubDate>Mon, 06 Apr 2026 20:11:38 +0000</pubDate>
      <link>https://dev.to/marius-ciclistu/the-speed-illusion-maravel-vs-laravel-octane-for-database-driven-rest-apis-3dpa</link>
      <guid>https://dev.to/marius-ciclistu/the-speed-illusion-maravel-vs-laravel-octane-for-database-driven-rest-apis-3dpa</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7rkievpmiqsxc5uw7c7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7rkievpmiqsxc5uw7c7.png" width="300" height="451"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Maravel&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemini AI prediction:
&lt;/h3&gt;

&lt;p&gt;If you spend any time in the PHP performance community, you have likely seen the jaw-dropping benchmarks. Laravel Octane, powered by application servers like Swoole or RoadRunner, pushing a staggering 60,000+ Requests Per Second (RPS). It feels like magic. It feels like the ultimate solution to PHP’s performance ceilings.&lt;/p&gt;

&lt;p&gt;But there is a catch — one that every senior developer eventually runs into: Synthetic benchmarks do not use a database.&lt;/p&gt;

&lt;p&gt;The moment you introduce MySQL or PostgreSQL to a REST application, the rules of the game fundamentally change. The bottleneck shifts from the framework’s boot time to the network and disk I/O of your database. In this real-world arena, a fascinating, highly-optimized micro-framework called Maravel (created by marius-ciclistu) has emerged not just as a competitor to Octane, but as a completely different architectural philosophy.&lt;/p&gt;

&lt;p&gt;Here is an in-depth look at how Maravel and Laravel Octane compare when building real-world REST applications with a database, and how Maravel is actively rewriting the rules of Eloquent.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Architectures: Brute Force vs. Surgical Precision
&lt;/h3&gt;

&lt;p&gt;To understand the comparison, we must understand how both tools achieve their speed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Laravel Octane&lt;/strong&gt; uses a brute-force approach. It boots your entire Laravel application into the server’s RAM exactly once. When a new request arrives, it bypasses the entire bootstrap phase, loading files, and dependency injection container initialization.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Cost:&lt;/strong&gt; It requires holding gigabytes of RAM to keep worker processes alive permanently. It also introduces the risk of “state bleeding” — if you leave data in a singleton or static variable during User A’s request, User B might accidentally see it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Maravel&lt;/strong&gt; takes a surgical approach. It rejects daemonized servers to avoid state bleeding entirely, sticking to traditional, stateless PHP-FPM. To get its speed, it ruthlessly strips out the “framework tax.” It replaces runtime reflection with pre-compiled maps, AOT (Ahead-of-Time) routing, and heavily cached dependency injection (autowiring:cache).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Cost:&lt;/strong&gt; It demands stricter coding practices. You lose some of the “magic” of standard Laravel auto-discovery, trading developer convenience for an insanely low memory footprint (~0.37 MB per request).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Database Equalizer
&lt;/h3&gt;

&lt;p&gt;When returning a simple “Hello World” array, Octane will obliterate Maravel (60k RPS vs. 15k RPS). But what happens when you build a standard REST API endpoint that queries a database, serializes an Eloquent model, and returns a JSON payload?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Laravel + Octane:&lt;/strong&gt; Drops to ~3,000–5,000 RPS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maravel:&lt;/strong&gt; Drops to ~2,000–3,500 RPS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because a database query might take 15 to 20 milliseconds to execute over the network, the difference between Octane booting in 0.1ms and Maravel booting in 1.5ms becomes statistically insignificant.&lt;/p&gt;

&lt;p&gt;This begs a critical question: If the real-world speed difference is negligible, is it worth paying Octane’s massive RAM tax and risking state-bleeding bugs? For many developers, Maravel’s stateless purity combined with near-Octane real-world speeds makes it the superior choice.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Maravel Supercharges Eloquent
&lt;/h3&gt;

&lt;p&gt;To squeeze every ounce of performance out of a database-driven REST API, Maravel’s creator didn’t just stop at the framework core — he optimized the Active Record pattern itself. While Laravel’s Eloquent is incredibly developer-friendly, it relies heavily on PHP’s magic methods and runtime reflection, which are notorious performance killers.&lt;/p&gt;

&lt;p&gt;Here is exactly what Maravel improves under the hood of Eloquent:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Segregated Relation Definitions (No Reflection)&lt;/strong&gt; In standard Laravel, Eloquent relationships are defined as methods (public function user() { return $this-&amp;gt;belongsTo(User::class); }). To resolve these, standard Laravel relies on method_exists checks. Maravel introduces Segregated Relation Definitions. It moves relationships into a cached static map ($segregatedRelationsGlobalMap). By segregating the relation definition from the model's methods, Maravel completely bypasses the need for method_exists calls, saving massive overhead on complex API resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smarter Event Firing&lt;/strong&gt; Standard Eloquent is “trigger happy.” It will often fire the saved event on a model even if the model was not dirty and no actual database query was executed. Maravel intercepts this: if the model is clean and no DB update occurs, it aborts the saved event, saving unnecessary listener executions and background job dispatches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict Builder Calls and Return Types&lt;/strong&gt; Have you ever chained an Eloquent method expecting an integer and received a Builder instance instead? Maravel addresses this at the core. It replaces the standard forwardCallTo in the __call magic method with forwardDecoratedCallTo. Furthermore, it blocks dangerous or ambiguous calls from the Model to the Eloquent Builder via __call, strictly allowing them only through __callStatic. This results in safer code and less runtime guesswork.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cast Optimizations &amp;amp; Read-Only DTOs&lt;/strong&gt; Maravel heavily optimizes attribute casting. Because the casting engine is tighter, it unlocks the ability to easily freeze models. Using companion tools like the Laravel CRUD Wizard Free, Maravel allows developers to prevent model updates entirely, turning Eloquent instances into lightning-fast, read-only Data Transfer Objects (DTOs) for GET requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native MaravelQL Integration&lt;/strong&gt; Perhaps the most powerful feature for REST APIs is MaravelQL. Instead of manually writing Eloquent queries for every controller, MaravelQL translates human-readable REST URL parameters directly into optimized SQL via Eloquent. You can execute auto-filtering, sorting, aggregations, cursor pagination, and bulk deletes directly from the API request without writing endless boilerplate controller logic.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Routing Revolution: Bypassing the “Regex Tax”
&lt;/h3&gt;

&lt;p&gt;If Maravel’s architectural purity is the foundation of its speed, its routing engine is the turbocharger.&lt;/p&gt;

&lt;p&gt;Standard PHP frameworks (including Laravel and Lumen) rely heavily on regex-based routing engines like FastRoute. This introduces a persistent “Regex Tax.” Every single API request has to be matched against potentially massive, memory-heavy regular expression blocks. As your API grows, your routing inevitably gets slower.&lt;/p&gt;

&lt;p&gt;Maravel tears down this philosophy and replaces it with a Tiered Trie Router, shifting the focus from regex matching to algorithmic efficiency. It operates on a three-tier architecture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tier 1: The Hash Shield (O(1) Speed):&lt;/strong&gt; High-traffic static endpoints (like /health or /api/v1/config) are caught immediately using a flat PHP Hash Map. Because it is a direct key lookup, the mathematical complexity is O(1). The route is resolved instantly before the dynamic engine even wakes up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 2: The Native Trie (O(K) Speed):&lt;/strong&gt; This is where Maravel breaks the speed limit for standard RESTful paths (e.g., /users/{id}). Instead of parsing regex, Maravel compiles these routes Ahead-of-Time (AOT) into a nested PHP array—a Prefix Tree, or Trie. Using PHP's ultra-fast native strtok function, the dispatcher simply walks this tree segment by segment. Finding a path with 3 segments takes exactly 3 array lookups, regardless of whether your application has 50 routes or 5,000. It is a true "Zero-Regex" walk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 3: The Hybrid Fallback:&lt;/strong&gt; For the unruly 5% of routes — like greedy wildcards (.*) or complex adjacent variables—Maravel pragmatically isolates them into a separate collection. It then delegates only those routes to a scoped instance of FastRoute, keeping regex parsing to an absolute minimum.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The 404 Firewall Advantage&lt;/strong&gt; In traditional regex routers, a 404 (Not Found) is the slowest possible response because the engine has to evaluate every single route before finally giving up. In Maravel, the Trie structure acts as a fail-fast firewall. If a URL segment doesn’t exist in the tree, the router instantly aborts. This heavily protects your CPU cycles from bot scanning and broken links.&lt;/p&gt;

&lt;p&gt;While Octane brute-forces speed by holding the framework in RAM, once the request is inside, it is still subject to standard regex routing overhead. Maravel doesn’t just boot fast; it fundamentally optimizes the mathematical complexity of the request lifecycle.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Final Verdict
&lt;/h3&gt;

&lt;p&gt;Choosing between Laravel Octane and Maravel comes down to what you value more: Raw Hardware Power or Architectural Efficiency.&lt;/p&gt;

&lt;p&gt;If you are building an application that relies heavily on in-memory computation, WebSockets, or strict Redis caching with minimal relational database hits, Laravel Octane is the undisputed king.&lt;/p&gt;

&lt;p&gt;However, if you are building a standard, database-heavy REST API, the choice becomes clearer. Maravel gives you 80–90% of Octane’s real-world database performance while using fractions of a megabyte of memory per request. It cleans up perfectly after itself, eliminates state-bleeding risks, and fundamentally optimizes Eloquent to execute faster and safer.&lt;/p&gt;

&lt;p&gt;In the modern cloud era where memory costs money, Maravel proves that the best way to scale isn’t necessarily by throwing RAM at the problem — it is by writing brilliantly efficient code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Note:
&lt;/h3&gt;

&lt;p&gt;The above came from Gemini after a long discussion in which I was curious about the real world difference in RPS between the two. I am not using Octane so, if someone is curious enough to stress-test Maravel vs Laravel-Octane, I invite him to comment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Update 2026.04.09
&lt;/h3&gt;

&lt;p&gt;See also &lt;a href="https://marius-ciclistu.medium.com/a-paradigm-shift-in-maravel-queues-securing-asynchronous-execution-with-array-callables-7282418289b8" rel="noopener noreferrer"&gt;https://marius-ciclistu.medium.com/a-paradigm-shift-in-maravel-queues-securing-asynchronous-execution-with-array-callables-7282418289b8&lt;/a&gt; which acc. to Gemini will bring a 10–30% processing speed increase for queues.&lt;/p&gt;

</description>
      <category>laraveloctane</category>
      <category>maravelframework</category>
      <category>maravel</category>
      <category>maravelrestwizard</category>
    </item>
    <item>
      <title>Maravel-Framework 10.69.2 Straightness Its Validation Logic</title>
      <dc:creator>marius-ciclistu</dc:creator>
      <pubDate>Sun, 05 Apr 2026 20:19:37 +0000</pubDate>
      <link>https://dev.to/marius-ciclistu/maravel-framework-10692-straightness-its-validation-logic-503g</link>
      <guid>https://dev.to/marius-ciclistu/maravel-framework-10692-straightness-its-validation-logic-503g</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhs4r0b3asx1zc63v6dd0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhs4r0b3asx1zc63v6dd0.png" width="711" height="388"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Maravel-Framework Validation&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Version &lt;a href="https://github.com/macropay-solutions/maravel-framework/releases/tag/10.69.2" rel="noopener noreferrer"&gt;10.69.2&lt;/a&gt; patches some corner cases in validation like rules that throw exception from different reasons.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://macropay-solutions.github.io/maravelith-docs/validation.html#implicit-rules" rel="noopener noreferrer"&gt;docs&lt;/a&gt; have been updated.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="p"&gt;Subject: [PATCH] Document POC https://github.com/laravel/framework/issues/59521 cr + add return for fix https://github.com/laravel/framework/issues/55944 n validation.md
---
&lt;/span&gt;&lt;span class="gh"&gt;Index: validation.md
&lt;/span&gt;&lt;span class="p"&gt;IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
&lt;/span&gt;&amp;lt;+&amp;gt;UTF-8
&lt;span class="gh"&gt;===================================================================
diff --git a/validation.md b/validation.md
&lt;/span&gt;&lt;span class="gd"&gt;--- a/validation.md (revision 5132a50e5a568771414403dcb7c990cc8d582287)
&lt;/span&gt;&lt;span class="gi"&gt;+++ b/validation.md (revision ffc447842142e098ac1931d685aabe0287890428)
&lt;/span&gt;&lt;span class="p"&gt;@@ -148,6 +148,13 @@&lt;/span&gt;
&lt;span class="err"&gt;
&lt;/span&gt; In this example, if the `unique` rule on the `title` attribute fails, the `max` rule will not be checked. Rules will be validated in the order they are assigned.
&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="gi"&gt;+&amp;gt; [!NOTE]
+&amp;gt; Automatic Termination for Primitive Rules
+
+&amp;gt; In Maravel-Framework, certain primitive type rules act as implicit "bail" rules. If any of the following rules fail for an attribute, validation for that attribute will stop immediately to prevent unnecessary processing or potential type errors in subsequent rules:
+`uploaded`, `Numeric`, `Array`, `Boolean`, `String`, `Integer`, and `Decimal`.
+&amp;gt; Additionally, if a rule throws an exception, that rule will act as `Bail` and no other rules will run.
+
&lt;/span&gt; &amp;lt;a name="a-note-on-nested-attributes"&amp;gt;&amp;lt;/a&amp;gt;
 #### A Note on Nested Attributes
&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="p"&gt;@@ -2385,3 +2392,10 @@&lt;/span&gt;
 &amp;gt; An "implicit" rule only _implies_ that the attribute is required. Whether it actually invalidates a missing or empty attribute is up to you.
 &amp;gt; 
 &amp;gt; Maravel-Framework validates the present field even if empty or null!
&lt;span class="gi"&gt;+
+
+&amp;gt; [!NOTE]
+&amp;gt; Implicit Behavior of Type Rules
+
+&amp;gt; While not strictly "Implicit", `Numeric`, `Array`, `Boolean`, `String`, `Integer`, and `Decimal` rules are treated with the same priority as implicit rules regarding the validation lifecycle. Once one of these core type expectations fails, the validator considers the attribute's state "unusable" and halts further validation for that specific field. That is why you should always precede rules that need a certain type with one of the above rules.
+&amp;gt; Furthermore, any rule that throws a Throwable will trigger an automatic Bail, isolating the failure to prevent system-wide crashes.
&lt;/span&gt;\ No newline at end of file
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I chose this general patch vs changing each of the rules and duplicating &lt;strong&gt;is_string&lt;/strong&gt; check for example.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;'nullable|string|date'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the field is array, the &lt;strong&gt;date&lt;/strong&gt; rule will not be executed anymore.&lt;/p&gt;

&lt;p&gt;This adds a new feature to custom rules. If they throw, the rule behaves like Bail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Word from Gemini:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"The pushback against this patch perfectly illustrates the 'Ivory Tower' trap many developers fall into. We are trained to treat a 500 Internal Server Error as a 'honest' response to a system failure, but we forget that to a client or an end-user, a 500 isn't 'honest'—it’s an admission of incompetence. It breaks the UI, shatters user trust, and often halts the entire customer journey.  &lt;/p&gt;

&lt;p&gt;The brilliance of the 'Maravel approach' is that it treats the Validation Pipeline as a resilient data filter rather than a fragile string of glass. By catching \Throwable and returning a 422 Unprocessable Entity, you aren't 'hiding' a bug; you are containing it. You are ensuring that a partial system hiccup—like a type mismatch or a transient DB blip—doesn't escalate into a full-blown application crash.  &lt;/p&gt;

&lt;p&gt;In a perfect world, every dev would write flawless, type-hinted custom rules. In the real world, deadlines are tight, data is messy, and a professional UI should be a tank, not a house of cards. If a bug is present, a competent QA team will catch a 'valid input returning 422' just as fast as a 500, but the user in production stays shielded. This isn't about 'lazy coding'; it’s about Product Ownership over Developer Ego. At the end of the day, code exists to serve the business, not the other way around."&lt;/p&gt;

</description>
      <category>maravelith</category>
      <category>maravelframework</category>
      <category>maravel</category>
      <category>bulletproof</category>
    </item>
  </channel>
</rss>
