<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Leaf PHP]]></title><description><![CDATA[Leaf is a PHP framework that allows build simple but powerful web apps and APIs quickly and easily.]]></description><link>https://leafphp.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!2N-e!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd473dc36-051e-493e-a559-bd267a1dd95f_473x473.png</url><title>Leaf PHP</title><link>https://leafphp.substack.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 17 Jun 2026 12:58:24 GMT</lastBuildDate><atom:link href="https://leafphp.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Michael Darko-Duodu]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[leafphp@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[leafphp@substack.com]]></itunes:email><itunes:name><![CDATA[Michael Darko-Duodu]]></itunes:name></itunes:owner><itunes:author><![CDATA[Michael Darko-Duodu]]></itunes:author><googleplay:owner><![CDATA[leafphp@substack.com]]></googleplay:owner><googleplay:email><![CDATA[leafphp@substack.com]]></googleplay:email><googleplay:author><![CDATA[Michael Darko-Duodu]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[September Recap: New in Leaf!]]></title><description><![CDATA[It's been 6 months since we released Leaf 4 and Leaf MVC 4, and what a journey it's been! From new features to community growth, we've been busy making Leaf the best framework for Makers.]]></description><link>https://leafphp.substack.com/p/september-recap-new-in-leaf</link><guid isPermaLink="false">https://leafphp.substack.com/p/september-recap-new-in-leaf</guid><dc:creator><![CDATA[Michael Darko-Duodu]]></dc:creator><pubDate>Sat, 27 Sep 2025 00:32:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_hC9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88ab7ca3-7a88-480e-bbaa-cdb8718b47a7_640x588.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_hC9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88ab7ca3-7a88-480e-bbaa-cdb8718b47a7_640x588.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_hC9!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88ab7ca3-7a88-480e-bbaa-cdb8718b47a7_640x588.gif 424w, https://substackcdn.com/image/fetch/$s_!_hC9!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88ab7ca3-7a88-480e-bbaa-cdb8718b47a7_640x588.gif 848w, https://substackcdn.com/image/fetch/$s_!_hC9!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88ab7ca3-7a88-480e-bbaa-cdb8718b47a7_640x588.gif 1272w, https://substackcdn.com/image/fetch/$s_!_hC9!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88ab7ca3-7a88-480e-bbaa-cdb8718b47a7_640x588.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_hC9!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88ab7ca3-7a88-480e-bbaa-cdb8718b47a7_640x588.gif" width="640" height="588" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88ab7ca3-7a88-480e-bbaa-cdb8718b47a7_640x588.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:588,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_hC9!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88ab7ca3-7a88-480e-bbaa-cdb8718b47a7_640x588.gif 424w, https://substackcdn.com/image/fetch/$s_!_hC9!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88ab7ca3-7a88-480e-bbaa-cdb8718b47a7_640x588.gif 848w, https://substackcdn.com/image/fetch/$s_!_hC9!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88ab7ca3-7a88-480e-bbaa-cdb8718b47a7_640x588.gif 1272w, https://substackcdn.com/image/fetch/$s_!_hC9!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88ab7ca3-7a88-480e-bbaa-cdb8718b47a7_640x588.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>2025 Roadmap progress</strong></h2><p>Earlier this year, we shared our <strong><a href="https://blog.leafphp.dev/posts/2025-roadmap.html">2025 roadmap</a></strong>, outlining our vision for Leaf. You don&#8217;t have to read it again, but in summary, we are building Leaf to be the easiest way to build and ship your ideas, focusing on modularity, automation, and a developer-friendly experience. Our list had items like:</p><ul><li><p>Leaf 4 &amp; Leaf MVC 4 releases</p></li><li><p>New website and documentation</p></li><li><p>Integrations with popular services like Stripe</p></li><li><p>A better database layer</p></li><li><p>A tighter integration with frontend tools &amp; templating engines</p></li><li><p>UI components and templates to speed up development</p></li><li><p>Better security and performance</p></li><li><p>More tutorials and learning resources</p></li><li><p>Easier deployment options using CLI</p></li><li><p>Automating queues, redis, and other services</p></li><li><p>General improvements to the developer experience</p></li></ul><p>We are happy to report that we&#8217;ve made significant progress on many of these items, and we&#8217;re excited to share some of the highlights with you.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://leafphp.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Leaf PHP! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h2><strong>Leaf 4 release</strong></h2><p>We released Leaf 4.0 and Leaf MVC 4.0, marking a significant step toward a more modular, automated, and developer-friendly framework. You can read all about the releases <strong><a href="https://blog.leafphp.dev/posts/leaf4-is-here.html">in this post</a></strong>. Leaf 4 might just be our favourite release yet because it doesn&#8217;t just bring new features; it pushes the boundaries of what a PHP framework can do while keeping it simple and easy to use. Here are our fav features from v4:</p><ul><li><p><strong>Redefined modularity</strong>: Leaf 3 introduced modularity, but Leaf 4 takes it to the next level. Every feature is now a module that can be installed or removed as needed, allowing you to keep your application lean and focused. And with Leaf MVC 4, simply installing a module automatically configures it for you so no extra setup is needed.</p></li><li><p><strong>Zero setup</strong>: Leaf 4 is designed to work out of the box with zero setup. Whether you&#8217;re starting a new project or adding Leaf to an existing one, you can get up and running in minutes without any configuration headaches.</p></li><li><p><strong>Improved developer experience</strong>: We&#8217;ve made significant improvements to the developer experience, including better error messages, improved documentation, and a more intuitive API. Leaf 4 is designed to be easy to learn and use, even for developers new to PHP or web development.</p></li></ul><p>These are just a few of the many features and improvements in Leaf 4, and 6 months later, we are still discovering new ways to leverage its capabilities.</p><p></p><h2><strong>New website, documentation &amp; tutorials</strong></h2><p>Just as we do for every major release, we launched a new website and documentation for Leaf 4. The new site is designed to be more user-friendly, with a focus on helping you find the information you need quickly and easily. The documentation has been completely rewritten to reflect the changes in Leaf 4, with plenty of examples and tutorials to help you get started.</p><p>We also added a &#8220;learn&#8221; section to the website, featuring tutorials, guides, and best practices for building applications with Leaf. We also added guides for working with third-party services like Sentry, Google Analytics, Mixpanel and more. Whether you&#8217;re a beginner or an experienced developer, there&#8217;s something for everyone in the learn section.</p><p>Of course, we will continue to improve the website and documentation based on your feedback, so please let us know if there&#8217;s anything you&#8217;d like to see.</p><p></p><h2><strong>Easier &amp; Faster deploys</strong></h2><p>One of our main goals for the year was to build a <code>leaf deploy</code> command to make deploying Leaf apps as simple as running a single command. While we haven&#8217;t fully completed this yet, the Leaf CLI has shipped the first version of this feature, allowing you to deploy Leaf apps to <strong><a href="http://fly.io/">Fly.io</a></strong> with just one command. Why <strong><a href="http://fly.io/">Fly.io</a></strong>? Because it&#8217;s simple, easy to use, and has a free tier that works well for most Leaf apps.</p><p>We are working on adding support for more platforms, including Vercel, Render, and others, so you will be able to deploy your Leaf apps to your platform of choice with just one command that goes something like:</p><pre><code><code>leaf deploy --to vercel
# or
leaf deploy --to render</code></code></pre><p>or even to your VPS on DigitalOcean, Linode, or any other provider with:</p><pre><code><code>leaf deploy --to vps --os ubuntu-latest</code></code></pre><h2></h2><h2><strong>New modules &amp; Improvements</strong></h2><p>The next big area of focus has been improving existing modules and adding new ones to make building applications with Leaf even easier. Here are some of the highlights:</p><ul><li><p><strong>Leaf Billing</strong>: We released Leaf Billing, a new module that makes it easy to add subscription billing to your Leaf apps using Stripe or PayStack. With Leaf Billing, you can manage customers, subscriptions, and payments with just a few lines of code without any complex setup.</p></li><li><p><strong>Leaf Cache</strong>: We added a new zero-config cache module that allows you to handle caching in a simple, single line of code. You can now cache database queries, API responses, or any other data with ease.</p></li><li><p><strong>Queues/Jobs</strong>: Queues and background jobs are essential for building scalable applications, and we&#8217;ve made significant improvements since the release in Leaf 4.0.</p></li><li><p><strong>Scheduled Jobs</strong>: We took default jobs a step further by adding support for scheduled jobs, allowing you to run tasks at specific intervals without needing to set up a separate cron job or server.</p></li><li><p><strong>Bucket Storage</strong>: We improved the filesystem module to support storing files in cloud storage services like AWS S3, Cloudflare R2, and others. This makes it easy to manage files in your Leaf apps without worrying about server storage limitations.</p></li><li><p><strong>Schema File Improvements</strong>: Schema files are a powerful feature, and we admitted that they needed some love. We made several improvements to schema files, including better support for relationships, indexes, seeding and more.</p></li><li><p><strong>Leaf Sprout</strong>: We released Leaf Sprout, a new terminal renderer that allows you to build interactive command-line applications with ease. We used Leaf Sprout to build the Leaf CLI btw, and it&#8217;s now available as a standalone module that you can use in your own projects.</p></li></ul><p>Along with these, we&#8217;ve made numerous small improvements and bug fixes across all modules to ensure they work seamlessly together.</p><p></p><h2><strong>Developer Experience Improvements</strong></h2><p>Our biggest DX improvements came with Leaf 4, but we didn&#8217;t stop there. We&#8217;ve continued to refine and enhance the developer experience based on your feedback. Here are some of the key improvements:</p><ul><li><p><strong>Better error handling</strong>: We improved error handling across the board, making them more informative and actionable. This means you can spend less time debugging and more time building.</p></li><li><p><strong>Automated Setup</strong>: We took our &#8220;zero setup&#8221; philosophy further by automating the setup of various modules and features. Now, when you install a module, it auto-magically configures itself for you, reducing the time spent on manual setup.</p></li><li><p><strong>Improved CLI</strong>: The Leaf CLI and Aloe CLI have received several quality-of-life improvements, including new commands, automatically running variants of commands suited to your project type, and better integration with Leaf MVC.</p></li></ul><p>Our goal is to make you not think about the framework and focus on building your application. We believe these improvements bring us closer to that goal.</p><p></p><h2><strong>What&#8217;s Next?</strong></h2><p>Even with all these exciting developments, we&#8217;re not resting on our laurels. We&#8217;ve checked off most of the items on our 2025 roadmap, but there&#8217;s still more to do. Here are some of the things we&#8217;re working on next:</p><ul><li><p><strong>More deployment options</strong>: We&#8217;re working on adding support for more deployment platforms to the <code>leaf deploy</code> command, making it even easier to get your Leaf apps live.</p></li><li><p><strong>More modules</strong>: We&#8217;re planning to release more modules to cover additional use cases and make building applications with Leaf even easier.</p></li><li><p><strong>Performance improvements</strong>: We&#8217;re always looking for ways to improve the performance of Leaf, and we have several optimizations in the pipeline that will make your applications faster and more efficient.</p></li><li><p><strong>Community contributions</strong>: We want to encourage more community contributions to Leaf, whether it&#8217;s through modules, documentation, or tutorials. If you&#8217;re interested in contributing, please reach out!</p></li></ul><p></p><h2><strong>You made this happen!</strong></h2><p>This year has been incredible for Leaf, and we couldn&#8217;t have done it without you. Your feedback, contributions, and support have been invaluable in shaping the direction of the framework. Whether you&#8217;ve reported a bug, submitted a feature request, or simply shared your experience with Leaf, you&#8217;ve helped make it better for everyone.</p><p>Stay tuned for more updates, and let&#8217;s keep building together!</p><p>&#128172; Join the party: <strong><a href="http://github.com/leafsphp">GitHub</a></strong> | <strong><a href="https://discord.gg/Pkrm9NJPE3">Discord</a></strong> | <strong><a href="https://twitter.com/leafphp">Twitter</a></strong></p><p>&#128640; Follow us for real-time updates: <strong><a href="https://youtube.com/@leafphp">YouTube</a></strong> | <strong><a href="https://leafphp.dev/">Website</a></strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://leafphp.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Leaf PHP! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Build Your Next SaaS with PHP — In Hours, Not Days]]></title><description><![CDATA[We've been working on Leaf PHP, and building it into the perfect tool for makers and solo builders.]]></description><link>https://leafphp.substack.com/p/build-your-next-saas-with-php-in</link><guid isPermaLink="false">https://leafphp.substack.com/p/build-your-next-saas-with-php-in</guid><dc:creator><![CDATA[Michael Darko-Duodu]]></dc:creator><pubDate>Sun, 13 Apr 2025 01:21:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!qCxP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959ba656-cb6c-4176-8056-85fdaf15ac8d_1958x979.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qCxP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959ba656-cb6c-4176-8056-85fdaf15ac8d_1958x979.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qCxP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959ba656-cb6c-4176-8056-85fdaf15ac8d_1958x979.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qCxP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959ba656-cb6c-4176-8056-85fdaf15ac8d_1958x979.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qCxP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959ba656-cb6c-4176-8056-85fdaf15ac8d_1958x979.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qCxP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959ba656-cb6c-4176-8056-85fdaf15ac8d_1958x979.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qCxP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959ba656-cb6c-4176-8056-85fdaf15ac8d_1958x979.jpeg" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/959ba656-cb6c-4176-8056-85fdaf15ac8d_1958x979.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:832062,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://leafphp.substack.com/i/161209188?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959ba656-cb6c-4176-8056-85fdaf15ac8d_1958x979.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qCxP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959ba656-cb6c-4176-8056-85fdaf15ac8d_1958x979.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qCxP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959ba656-cb6c-4176-8056-85fdaf15ac8d_1958x979.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qCxP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959ba656-cb6c-4176-8056-85fdaf15ac8d_1958x979.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qCxP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F959ba656-cb6c-4176-8056-85fdaf15ac8d_1958x979.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We've been working on <a href="https://leafphp.dev/">Leaf PHP</a>, and building it into the perfect tool for makers and solo builders. If you&#8217;re looking to build fast and ship faster, Leaf might be the fastest way to launch your next SaaS &#8212; all with plain, elegant PHP that scales with you.</p><p>Here&#8217;s how &#128071;</p><h2>&#128640; Kickstart with a ready-to-go starter</h2><p>Random and annoying tasks like setting up authentication end up taking away a ton of time which could go into building your application's actual features, so we built all of that so you don't have to. Create a new project using the CLI:</p><pre><code>leaf create</code></pre><p>You can choose to use the application starter together with your frontend tooling of choice</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!i98y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17db5fa-da0e-4dcc-8ca8-359060e1869d_908x194.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!i98y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17db5fa-da0e-4dcc-8ca8-359060e1869d_908x194.png 424w, https://substackcdn.com/image/fetch/$s_!i98y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17db5fa-da0e-4dcc-8ca8-359060e1869d_908x194.png 848w, https://substackcdn.com/image/fetch/$s_!i98y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17db5fa-da0e-4dcc-8ca8-359060e1869d_908x194.png 1272w, https://substackcdn.com/image/fetch/$s_!i98y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17db5fa-da0e-4dcc-8ca8-359060e1869d_908x194.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!i98y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17db5fa-da0e-4dcc-8ca8-359060e1869d_908x194.png" width="908" height="194" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a17db5fa-da0e-4dcc-8ca8-359060e1869d_908x194.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:194,&quot;width&quot;:908,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:26426,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://leafphp.substack.com/i/161209188?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17db5fa-da0e-4dcc-8ca8-359060e1869d_908x194.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!i98y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17db5fa-da0e-4dcc-8ca8-359060e1869d_908x194.png 424w, https://substackcdn.com/image/fetch/$s_!i98y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17db5fa-da0e-4dcc-8ca8-359060e1869d_908x194.png 848w, https://substackcdn.com/image/fetch/$s_!i98y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17db5fa-da0e-4dcc-8ca8-359060e1869d_908x194.png 1272w, https://substackcdn.com/image/fetch/$s_!i98y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa17db5fa-da0e-4dcc-8ca8-359060e1869d_908x194.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><div><hr></div><h2>&#128184; One-time payments &amp; subscriptions in minutes</h2><p>Billing should not be a pain, that's why we built a <a href="https://leafphp.dev/docs/utils/billing.html">billing module</a> for you applications. It currently supports only Stripe, but will soon add PayStack and LemonSqueezy support. To get started with subscriptions, just use our scaffolding tool:</p><pre><code>php leaf scaffold:subscriptions</code></pre><p>Add your tiers and publish them to stripe using the `config:billing` command. That's it!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fZnp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b00ffdb-7bfd-4c41-a720-2be0bf7cc34e_3566x1720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fZnp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b00ffdb-7bfd-4c41-a720-2be0bf7cc34e_3566x1720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fZnp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b00ffdb-7bfd-4c41-a720-2be0bf7cc34e_3566x1720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fZnp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b00ffdb-7bfd-4c41-a720-2be0bf7cc34e_3566x1720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fZnp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b00ffdb-7bfd-4c41-a720-2be0bf7cc34e_3566x1720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fZnp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b00ffdb-7bfd-4c41-a720-2be0bf7cc34e_3566x1720.jpeg" width="1456" height="702" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b00ffdb-7bfd-4c41-a720-2be0bf7cc34e_3566x1720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:702,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fZnp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b00ffdb-7bfd-4c41-a720-2be0bf7cc34e_3566x1720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fZnp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b00ffdb-7bfd-4c41-a720-2be0bf7cc34e_3566x1720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fZnp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b00ffdb-7bfd-4c41-a720-2be0bf7cc34e_3566x1720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fZnp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b00ffdb-7bfd-4c41-a720-2be0bf7cc34e_3566x1720.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>&#9203; Quick Waitlist setup</h2><p>Creating a waitlist/coming soon page is a great way to build anticipation for your product before it launches. It allows you to collect email addresses from interested users, which can be invaluable for marketing and user engagement once your product is live. You can scaffold a waitlist using:</p><pre><code>php leaf scaffold:waitlist</code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q53c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd878f9b4-95f1-45c0-923a-e17f70c91605_5088x1980.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q53c!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd878f9b4-95f1-45c0-923a-e17f70c91605_5088x1980.png 424w, https://substackcdn.com/image/fetch/$s_!q53c!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd878f9b4-95f1-45c0-923a-e17f70c91605_5088x1980.png 848w, https://substackcdn.com/image/fetch/$s_!q53c!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd878f9b4-95f1-45c0-923a-e17f70c91605_5088x1980.png 1272w, https://substackcdn.com/image/fetch/$s_!q53c!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd878f9b4-95f1-45c0-923a-e17f70c91605_5088x1980.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!q53c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd878f9b4-95f1-45c0-923a-e17f70c91605_5088x1980.png" width="1456" height="567" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d878f9b4-95f1-45c0-923a-e17f70c91605_5088x1980.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:567,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:569540,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://leafphp.substack.com/i/161209188?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd878f9b4-95f1-45c0-923a-e17f70c91605_5088x1980.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!q53c!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd878f9b4-95f1-45c0-923a-e17f70c91605_5088x1980.png 424w, https://substackcdn.com/image/fetch/$s_!q53c!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd878f9b4-95f1-45c0-923a-e17f70c91605_5088x1980.png 848w, https://substackcdn.com/image/fetch/$s_!q53c!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd878f9b4-95f1-45c0-923a-e17f70c91605_5088x1980.png 1272w, https://substackcdn.com/image/fetch/$s_!q53c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd878f9b4-95f1-45c0-923a-e17f70c91605_5088x1980.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>&#129514; Launch with a ready-made landing page</h2><p>Another annoying starting point for most developers is the landing page. Leaf MVC's scaffolding tool allows you to scaffold a landing page with a single command:</p><pre><code>php leaf scaffold:landing-page</code></pre><p>You get:</p><p>- A structured homepage layout</p><p>- Sections like hero, features, and footers</p><p>- Tailwind for styling + your preferred frontend setup</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tikG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cce73aa-b014-4178-8a7c-771a7afedc37_3016x1696.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tikG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cce73aa-b014-4178-8a7c-771a7afedc37_3016x1696.png 424w, https://substackcdn.com/image/fetch/$s_!tikG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cce73aa-b014-4178-8a7c-771a7afedc37_3016x1696.png 848w, https://substackcdn.com/image/fetch/$s_!tikG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cce73aa-b014-4178-8a7c-771a7afedc37_3016x1696.png 1272w, https://substackcdn.com/image/fetch/$s_!tikG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cce73aa-b014-4178-8a7c-771a7afedc37_3016x1696.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tikG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cce73aa-b014-4178-8a7c-771a7afedc37_3016x1696.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8cce73aa-b014-4178-8a7c-771a7afedc37_3016x1696.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:460496,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://leafphp.substack.com/i/161209188?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cce73aa-b014-4178-8a7c-771a7afedc37_3016x1696.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tikG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cce73aa-b014-4178-8a7c-771a7afedc37_3016x1696.png 424w, https://substackcdn.com/image/fetch/$s_!tikG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cce73aa-b014-4178-8a7c-771a7afedc37_3016x1696.png 848w, https://substackcdn.com/image/fetch/$s_!tikG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cce73aa-b014-4178-8a7c-771a7afedc37_3016x1696.png 1272w, https://substackcdn.com/image/fetch/$s_!tikG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cce73aa-b014-4178-8a7c-771a7afedc37_3016x1696.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>No design stress. Just tweak and go.</p><div><hr></div><h2>&#128161; Beginner-friendly. Lightning fast</h2><p>On top of all this, the biggest thing about Leaf is how easy it is to get started.</p><p>- Clean docs. Cleaner code.</p><p>- If you&#8217;ve written PHP before, it&#8217;ll feel like home.</p><p>- If you haven&#8217;t &#8212; it&#8217;s easy to learn in a weekend.</p><div><hr></div><h2>&#127793; Why Leaf?</h2><p>Because you don&#8217;t need 900 features to ship &#8212; you need speed, clarity, and the freedom to build.</p><p>That&#8217;s Leaf. No bloat. Just the essentials.</p><p>&#128736;&#65039; Try it: https://leafphp.dev</p><p>&#128218; Docs: https://leafphp.dev/docs</p><p>Happy gardening! &#128104;&#8205;&#127806;<br><br></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://leafphp.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Leaf PHP! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Leaf 4.0 is finally here! Build 10x Faster and Lighter]]></title><description><![CDATA[Today, we are excited to announce the release of Leaf 4 (&#127799; Snowdrop) and Leaf MVC 4 (&#9992;&#65039; Hughes H-4 Hercules)!]]></description><link>https://leafphp.substack.com/p/leaf-40-is-finally-here-build-10x</link><guid isPermaLink="false">https://leafphp.substack.com/p/leaf-40-is-finally-here-build-10x</guid><dc:creator><![CDATA[Michael Darko-Duodu]]></dc:creator><pubDate>Sun, 09 Mar 2025 01:27:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KQ6I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed37146d-621e-491c-ae30-5440febfd086_2784x2020.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KQ6I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed37146d-621e-491c-ae30-5440febfd086_2784x2020.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KQ6I!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed37146d-621e-491c-ae30-5440febfd086_2784x2020.png 424w, https://substackcdn.com/image/fetch/$s_!KQ6I!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed37146d-621e-491c-ae30-5440febfd086_2784x2020.png 848w, https://substackcdn.com/image/fetch/$s_!KQ6I!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed37146d-621e-491c-ae30-5440febfd086_2784x2020.png 1272w, https://substackcdn.com/image/fetch/$s_!KQ6I!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed37146d-621e-491c-ae30-5440febfd086_2784x2020.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KQ6I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed37146d-621e-491c-ae30-5440febfd086_2784x2020.png" width="1456" height="1056" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed37146d-621e-491c-ae30-5440febfd086_2784x2020.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1056,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KQ6I!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed37146d-621e-491c-ae30-5440febfd086_2784x2020.png 424w, https://substackcdn.com/image/fetch/$s_!KQ6I!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed37146d-621e-491c-ae30-5440febfd086_2784x2020.png 848w, https://substackcdn.com/image/fetch/$s_!KQ6I!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed37146d-621e-491c-ae30-5440febfd086_2784x2020.png 1272w, https://substackcdn.com/image/fetch/$s_!KQ6I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed37146d-621e-491c-ae30-5440febfd086_2784x2020.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This marks a new chapter in the evolution of Leaf, making PHP development faster, simpler, and more powerful than ever before. We will cover some highlights in this blog post - for a full list of changes and new features, please consult <a href="https://github.com/leafsphp/leafMVC/compare/v3.9.1...v4.x">the full changelog on GitHub</a>.</p><p>Let's dive in!</p><div><hr></div><p>As we shared in <a href="https://blog.leafphp.dev/posts/leaf4.html">our last post</a>, Leaf is more than just a framework&#8212;it&#8217;s the fastest way to build and ship your ideas. With Leaf 4, we&#8217;ve doubled down on that mission, refining the developer experience so you spend less time configuring and more time creating.</p><p>This release is the result of months of iteration, feedback from our amazing community, and a relentless focus on simplicity. Here&#8217;s what&#8217;s new:</p><p></p><h2>New CLI &amp; Setup Experience</h2><p>Say hello to the new Leaf CLI! It removes unnecessary choices and decision fatigue, giving you only what you need&#8212;nothing more. You get a guided setup experience that helps you choose the right options for your project, whether you&#8217;re building an API, a full-stack app, or a static site. Your next project starts with a single command:</p><pre><code>leaf create</code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1wW0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F017646f5-427d-4feb-8bf8-774a70333474_1200x590.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1wW0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F017646f5-427d-4feb-8bf8-774a70333474_1200x590.png 424w, https://substackcdn.com/image/fetch/$s_!1wW0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F017646f5-427d-4feb-8bf8-774a70333474_1200x590.png 848w, https://substackcdn.com/image/fetch/$s_!1wW0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F017646f5-427d-4feb-8bf8-774a70333474_1200x590.png 1272w, https://substackcdn.com/image/fetch/$s_!1wW0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F017646f5-427d-4feb-8bf8-774a70333474_1200x590.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1wW0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F017646f5-427d-4feb-8bf8-774a70333474_1200x590.png" width="1200" height="590" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/017646f5-427d-4feb-8bf8-774a70333474_1200x590.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:590,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1wW0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F017646f5-427d-4feb-8bf8-774a70333474_1200x590.png 424w, https://substackcdn.com/image/fetch/$s_!1wW0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F017646f5-427d-4feb-8bf8-774a70333474_1200x590.png 848w, https://substackcdn.com/image/fetch/$s_!1wW0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F017646f5-427d-4feb-8bf8-774a70333474_1200x590.png 1272w, https://substackcdn.com/image/fetch/$s_!1wW0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F017646f5-427d-4feb-8bf8-774a70333474_1200x590.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Your project is now a garden, and the CLI automatically fine-tunes your project based on your selections, setting up the right configurations, directories, and files for you. This means no time wasted on setup&#8212;just a ready-to-go environment so you can start building immediately with zero configuration.</p><p></p><h2>Lightweight &amp; Zero Config</h2><p>Speaking of no configuration, Leaf 4 is designed to work out of the box with zero setup. In previous versions, config files were everywhere&#8212;even if you didn&#8217;t need them. That's gone! v4 is all about simplicity and ease of use, so we&#8217;ve removed the need for most configurations. No more boilerplate, no more digging through files&#8212;just a clean, lightweight structure that gets out of your way.</p><p></p><h2>Minimalistic &amp; Intuitive</h2><p>The new Leaf MVC 4 structure is built for simplicity and clarity, giving you a minimalistic structure that stays out of your way. No unnecessary directories, files, or configurations&#8212;just the essentials, so you can focus on building, not wrestling with concepts and features you don&#8217;t need.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Mt5c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a156100-1841-4975-bc7d-120f9f05cda8_1522x648.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Mt5c!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a156100-1841-4975-bc7d-120f9f05cda8_1522x648.png 424w, https://substackcdn.com/image/fetch/$s_!Mt5c!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a156100-1841-4975-bc7d-120f9f05cda8_1522x648.png 848w, https://substackcdn.com/image/fetch/$s_!Mt5c!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a156100-1841-4975-bc7d-120f9f05cda8_1522x648.png 1272w, https://substackcdn.com/image/fetch/$s_!Mt5c!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a156100-1841-4975-bc7d-120f9f05cda8_1522x648.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Mt5c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a156100-1841-4975-bc7d-120f9f05cda8_1522x648.png" width="1456" height="620" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a156100-1841-4975-bc7d-120f9f05cda8_1522x648.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:620,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Mt5c!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a156100-1841-4975-bc7d-120f9f05cda8_1522x648.png 424w, https://substackcdn.com/image/fetch/$s_!Mt5c!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a156100-1841-4975-bc7d-120f9f05cda8_1522x648.png 848w, https://substackcdn.com/image/fetch/$s_!Mt5c!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a156100-1841-4975-bc7d-120f9f05cda8_1522x648.png 1272w, https://substackcdn.com/image/fetch/$s_!Mt5c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a156100-1841-4975-bc7d-120f9f05cda8_1522x648.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And with the updated `php leaf` console, automation and productivity reach a whole new level. The CLI now includes quickstarts, scaffolding, and intelligent tools that adapt to your project&#8212;so you spend less time setting up and more time building. Leaf detects your project type and predicts what you need next.</p><p></p><h2>Development Automation</h2><p>Whether you&#8217;re building an API or a Vue-powered frontend, Leaf 4 adapts to your needs, scaffolding controllers, models, and routes instantly. Need an authentication system? Just run `php leaf scaffold:auth`.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yp3o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90b7e9b9-d666-46c1-b48b-d73228619165_2292x880.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yp3o!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90b7e9b9-d666-46c1-b48b-d73228619165_2292x880.png 424w, https://substackcdn.com/image/fetch/$s_!yp3o!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90b7e9b9-d666-46c1-b48b-d73228619165_2292x880.png 848w, https://substackcdn.com/image/fetch/$s_!yp3o!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90b7e9b9-d666-46c1-b48b-d73228619165_2292x880.png 1272w, https://substackcdn.com/image/fetch/$s_!yp3o!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90b7e9b9-d666-46c1-b48b-d73228619165_2292x880.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yp3o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90b7e9b9-d666-46c1-b48b-d73228619165_2292x880.png" width="1456" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/90b7e9b9-d666-46c1-b48b-d73228619165_2292x880.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yp3o!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90b7e9b9-d666-46c1-b48b-d73228619165_2292x880.png 424w, https://substackcdn.com/image/fetch/$s_!yp3o!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90b7e9b9-d666-46c1-b48b-d73228619165_2292x880.png 848w, https://substackcdn.com/image/fetch/$s_!yp3o!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90b7e9b9-d666-46c1-b48b-d73228619165_2292x880.png 1272w, https://substackcdn.com/image/fetch/$s_!yp3o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90b7e9b9-d666-46c1-b48b-d73228619165_2292x880.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And it&#8217;s done&#8212;fully wired and ready to go.</p><p>Leaf 4 removes the manual, repetitive parts of development, so you can focus on what matters: building something great.</p><p></p><h2>Refreshed Documentation &amp; Learning Paths</h2><p>A major version upgrade deserves a refreshed learning experience. We&#8217;ve completely revamped the Leaf documentation with clearer guides, improved examples, and structured learning paths to help you level up faster.</p><p>Whether you&#8217;re new to Leaf or an experienced developer, the new docs make it easier than ever to find what you need and start building&#8212;without friction. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kaYP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F156b74ae-98af-4767-82e1-0224ae5da48d_1594x882.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kaYP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F156b74ae-98af-4767-82e1-0224ae5da48d_1594x882.png 424w, https://substackcdn.com/image/fetch/$s_!kaYP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F156b74ae-98af-4767-82e1-0224ae5da48d_1594x882.png 848w, https://substackcdn.com/image/fetch/$s_!kaYP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F156b74ae-98af-4767-82e1-0224ae5da48d_1594x882.png 1272w, https://substackcdn.com/image/fetch/$s_!kaYP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F156b74ae-98af-4767-82e1-0224ae5da48d_1594x882.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kaYP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F156b74ae-98af-4767-82e1-0224ae5da48d_1594x882.png" width="1456" height="806" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/156b74ae-98af-4767-82e1-0224ae5da48d_1594x882.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:806,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kaYP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F156b74ae-98af-4767-82e1-0224ae5da48d_1594x882.png 424w, https://substackcdn.com/image/fetch/$s_!kaYP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F156b74ae-98af-4767-82e1-0224ae5da48d_1594x882.png 848w, https://substackcdn.com/image/fetch/$s_!kaYP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F156b74ae-98af-4767-82e1-0224ae5da48d_1594x882.png 1272w, https://substackcdn.com/image/fetch/$s_!kaYP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F156b74ae-98af-4767-82e1-0224ae5da48d_1594x882.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Powerful New Features &amp; Enhancements</h2><p>By now, you&#8217;ve probably noticed that Leaf 4 isn&#8217;t just about adding new features&#8212;it&#8217;s about redefining the way you build. Our focus is on making your journey from "hello world" to production as smooth and effortless as possible. The best feature isn&#8217;t just a line of code; it&#8217;s the one that helps you build, iterate, and ship with confidence.</p><p>That said, we&#8217;ve also introduced some powerful enhancements to help you go even further:</p><h4>&#128073; Zero-Config Queues &amp; Jobs</h4><p>Offload long-running tasks seamlessly. Whether it&#8217;s sending emails, processing payments, or handling async jobs, just create a job, dispatch it, and let Leaf take care of the rest&#8212;no setup required.</p><h4>&#128073; First-Class Redis Support</h4><p>Need fast, scalable caching or session storage? Leaf 4 now includes first-class Redis support. Just install the Redis package, and you&#8217;re ready to go. It works with both the native Redis extension and Predis, so you can use what fits your stack.</p><h4>&#128073; Enhanced Database Layer</h4><p>Leaf&#8217;s database layer is now even more intuitive, whether you&#8217;re using models or raw queries. We&#8217;ve improved the query builder with simple relationships, eager loading, and automatic connection sharing&#8212;giving you less boilerplate and more control.</p><h4>&#128073; Revamped view layer</h4><p>Leaf MVC&#8217;s view layer is now even more flexible. While Blade is still available by default, you can now easily swap it for any other templating engine with the new View Engine API. Want to use React, Vue, or Svelte? Just use the `view:install` command, and Leaf will set everything up for you. We&#8217;ve also added new helpers for Inertia and templating routes, along with response helpers to make your life easier.</p><p></p><h2>What this means for you</h2><p>Leaf 4 isn&#8217;t just an update&#8212;it&#8217;s a rethinking of what a PHP framework should be. It&#8217;s about building fast, iterating without friction, and shipping your ideas sooner. With Leaf 4, the only question left is:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7Siz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8969713-4abb-47fa-b9fc-2e0c6d42adb6_1500x500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7Siz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8969713-4abb-47fa-b9fc-2e0c6d42adb6_1500x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7Siz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8969713-4abb-47fa-b9fc-2e0c6d42adb6_1500x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7Siz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8969713-4abb-47fa-b9fc-2e0c6d42adb6_1500x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7Siz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8969713-4abb-47fa-b9fc-2e0c6d42adb6_1500x500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7Siz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8969713-4abb-47fa-b9fc-2e0c6d42adb6_1500x500.jpeg" width="1456" height="485" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8969713-4abb-47fa-b9fc-2e0c6d42adb6_1500x500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:485,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:115887,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://leafphp.substack.com/i/158643160?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8969713-4abb-47fa-b9fc-2e0c6d42adb6_1500x500.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7Siz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8969713-4abb-47fa-b9fc-2e0c6d42adb6_1500x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7Siz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8969713-4abb-47fa-b9fc-2e0c6d42adb6_1500x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7Siz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8969713-4abb-47fa-b9fc-2e0c6d42adb6_1500x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7Siz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8969713-4abb-47fa-b9fc-2e0c6d42adb6_1500x500.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Upgrading from Leaf MVC 3</h2><p>If you&#8217;re already using Leaf MVC 3, upgrading to v4 requires a few changes. First off, you need to update the console and framework core to v4. You can do this by running:</p><pre><code>composer install leafs/mvc-core:^4.0 -W</code></pre><p>Next, you need to update your config files. Leaf MVC 4 configuration is almost identical to v3, but we&#8217;ve made a few changes to improve clarity and consistency. To keep things simple, if you are using the default configuration, you can just delete your `config` directory or any config files you didn&#8217;t modify.</p><p>Finally, you need to update your database files. Leaf 4 switched from migrations, seeds, and factories to a single schema file. This makes it easier to manage your database schema and keep everything in one place. You can generate a schema file by running:</p><pre><code>php leaf g:schema &lt;name&gt;</code></pre><p>That's pretty much it! Leaf MVC 4 will automatically detect your project type and adjust accordingly.</p><p></p><h2>Upgrading from Leaf 3</h2><p>If you are using Leaf 3 without the MVC setup, upgrading is super easy. Just update the Leaf core to v4 by running:</p><pre><code><code>composer install leafs/leaf:^4.0 -W</code></code></pre><p></p><h2>Happy gardening! &#127793;</h2><p>This release wouldn&#8217;t be possible without the Leaf community&#8212;your feedback, ideas, and support have shaped this project, and we&#8217;re incredibly grateful. Leaf 4 is here, and we can&#8217;t wait to see what you create with it.</p><p>If you&#8217;re new, there&#8217;s never been a better time to dive in. Let&#8217;s build something amazing together!</p><p></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://leafphp.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for free to receive updates about Leaf and building your cool stuff superfast</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[January Recap: Big Moves & Bigger Plans!]]></title><description><![CDATA[January wasn&#8217;t just a month&#8212;it was a launchpad. We kicked off 2025 with a bang, making big moves and setting the stage for even bigger plans ahead.]]></description><link>https://leafphp.substack.com/p/january-recap-big-moves-and-bigger</link><guid isPermaLink="false">https://leafphp.substack.com/p/january-recap-big-moves-and-bigger</guid><dc:creator><![CDATA[Michael Darko-Duodu]]></dc:creator><pubDate>Thu, 30 Jan 2025 22:36:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4EZy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07183831-4406-4445-be34-f216fcf4fa22_2044x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4EZy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07183831-4406-4445-be34-f216fcf4fa22_2044x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4EZy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07183831-4406-4445-be34-f216fcf4fa22_2044x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4EZy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07183831-4406-4445-be34-f216fcf4fa22_2044x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4EZy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07183831-4406-4445-be34-f216fcf4fa22_2044x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4EZy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07183831-4406-4445-be34-f216fcf4fa22_2044x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4EZy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07183831-4406-4445-be34-f216fcf4fa22_2044x1080.jpeg" width="1456" height="769" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/07183831-4406-4445-be34-f216fcf4fa22_2044x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:769,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:345067,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4EZy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07183831-4406-4445-be34-f216fcf4fa22_2044x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4EZy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07183831-4406-4445-be34-f216fcf4fa22_2044x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4EZy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07183831-4406-4445-be34-f216fcf4fa22_2044x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4EZy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07183831-4406-4445-be34-f216fcf4fa22_2044x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We published our 2025 roadmap at the beginning of the year, and you can read the <strong><a href="https://blog.leafphp.dev/posts/2025-roadmap.html">full post</a></strong> if you haven't already seen it. In summary, we planned to release Leaf MVC v4, work on integrations with popular services, add tools to help you build and ship faster, improve security and reliability, improve the documentation, and generally build a more community-driven project.</p><p>January has been an intense and exciting month for Leaf! After wrapping up 2024 with major improvements, we entered 2025 ready to ship faster, build smarter, and push Leaf to new heights.</p><p></p><h2><strong>&#127775; Leaf MVC 4.0 Alpha: The Future is Modular</strong></h2><p>We kicked off the year with the first alpha release of Leaf MVC 4.0, marking a significant step toward a more modular, automated, and developer-friendly framework.</p><p>&#128197; Release Timeline:</p><ul><li><p>Alpha: January 15, 2025 (Released &#127881;)</p></li><li><p>Beta: January 24, 2025 (Delayed - Jan 31 &#127881;)</p></li><li><p>RC: January 31, 2025 (Delayed - Feb 7 &#127881;)</p></li><li><p>Stable: February 10, 2025 (Delayed)</p></li></ul><p>We will be releasing a few more patches for testing, and then we'll quickly move to our beta release. We're excited about the feedback we've received so far, and we can't wait to see what you build with Leaf MVC 4.0! You can check out the <strong><a href="https://leafphp.dev/docs/mvc/mvc4.html">Leaf MVC 4.0 Alpha release notes</a></strong> to get started.</p><p><em>Why you&#8217;ll love it:</em></p><ul><li><p>A more flexible, modular structure like a bunch of legos</p></li><li><p>Automated features to speed up development which means less time on config and more time on building</p></li><li><p>Enhanced view engine &amp; routing system on steroids</p></li><li><p>Improved database handling for better performance</p></li></ul><p>Many of these changes have been backported to Leaf MVC 3, ensuring stability while making v4 a seamless upgrade.</p><p></p><h2><strong>&#9889; January's Power-Ups</strong></h2><p>Faster, easier, and more powerful&#8212;January was all about turbocharging your Leaf experience.</p><p>This month, we laid the groundwork for:</p><ul><li><p>New integrations with popular services like Stripe, and PayStack (Coming soon in February)</p></li><li><p>A new unified database layer using Schema files</p></li><li><p>Better automated frontend tooling for faster UI development</p></li><li><p>Better performance and security enhancements</p></li><li><p>Paperplane kit for Leaf MVC 4 (Pre-order now for 50% off)</p></li><li><p>Leaf Zero - Free UI components, page sections, and templates for Leaf MVC 4 (Coming soon in February)</p></li></ul><p>Most of these will be completed and launched next month, so stay tuned!</p><p></p><h2><strong>&#128737;&#65039; Security &amp; Reliability Improvements</strong></h2><p>Security is a top priority this year, and we&#8217;ve started working to improve Leaf&#8217;s security and reliability. In January, we closed up tiny gaps in things like authentication and encryption by moving potentially vulnerable code right into modules so Leaf can handle them better. This means less work for you while keeping your apps even more secure. Over the next few months, we will be releasing more security improvements, including:</p><ul><li><p>Rate limiting</p></li><li><p>Content security policy for better security defaults</p></li><li><p>Guides on setting up more secure infrastructure</p></li></ul><p></p><h2><strong>&#128745;&#65039; Paperplane &amp; Leaf Zero</strong></h2><p>Paperplane is a new kit for Leaf MVC 4 for people who want to build and ship faster.</p><ul><li><p>Launch SaaS apps faster than you can say &#8220;unicorn startup.&#8221;</p></li><li><p>Early access to Leaf Zero sections, components, and templates + example applications</p></li><li><p>Includes <em>Stripe/PayStack billing</em>, SEO tools, and pre-built auth&#8212;50% off if you act fast! &#128073; <strong><a href="https://paperplane.leafphp.dev/">Pre-Order Here</a></strong> (Offer expires when we hit 50 signups!)</p></li></ul><p>&#127873; <em>Leaf Zero (Free Forever):</em></p><ul><li><p>Free, beautiful UI components? Check.</p></li><li><p>Page templates? Check.</p></li><li><p>Your excuse for slow development? <em>Deleted.</em></p></li></ul><p>Coming soon in February. Stay tuned!</p><p></p><h2><strong>&#127793; Introducing Leaf Sprout: Bye-Bye Symfony Console</strong></h2><p>Long story short: we're breaking up with Symfony Console. Meet Sprout, a minimal, fast, and easy-to-use console app framework.</p><p>Here are some key features of Sprout:</p><ul><li><p>Dependency-free, not based on any Laravel or Symfony components which means it will work on PHP v7.2+ (Yes, even your grandma&#8217;s server)</p></li><li><p>First-class support for Leaf &amp; Leaf modules</p></li><li><p>Comes with built in styling, input handling, output handling, and more</p></li><li><p>Easy to use, easy to extend</p></li><li><p>Extensive support for composer and npm processed/scripts</p></li></ul><p>We are hoping to release Leaf Sprout in February, so the next Leaf CLI version will be fully based on Leaf Sprout. You can follow our progress on the <strong><a href="https://github.com/leafsphp/sprout">Leaf Sprout GitHub repository</a></strong>.</p><p></p><h2><strong>&#127909; Leaf Hangouts &amp; Community Growth</strong></h2><p>We kept the momentum going with our weekly YouTube hangouts, where we discussed upcoming features, improvements, and answered community questions. January&#8217;s sessions included:</p><ul><li><p>Deep Dive: Leaf MVC Simplification Roadmap</p></li><li><p>Answering Your Whys &#8211; The Philosophy Behind Leaf</p></li><li><p>What&#8217;s Cooking in Leaf PHP? Sneak Peeks &amp; Announcements</p></li></ul><p>If you missed any of them, catch the replays on our YouTube Channel! We have our final hangout of the month tomorrow, so don't miss it! Since it's the last day of the month, we're doing something a bit different. We'll be going to war with Laravel, Symfony, and other frameworks to see how Leaf stacks up against them.</p><p>&#128250; <strong><a href="https://youtube.com/@leafphp">Watch the Drama Unfold</a></strong> (Popcorn recommended)</p><p></p><h2><strong>&#127881; Other Highlights from January</strong></h2><p>Here are some other random highlights from January:</p><ul><li><p>Auth got user verification built in</p></li><li><p>Router updates for performance and usability</p></li><li><p>Mail, FS, HTTP, and other modules got tons of small updates</p></li><li><p>Support for Tailwind v4 was completed in CLI</p></li><li><p>Blade got tons of new directives and updates</p></li><li><p>Leaf CLI got an update that syncs commands to Leaf MVC CLI</p></li><li><p>Leaf DB got support for deferred connections out of the box</p></li><li><p>Leaf Server got support for concurrent PHP &amp; Vite servers</p></li><li><p>Leaf hit a new high of monthly downloads on composer</p></li><li><p>We got 2 new sponsors on Open Collective (Thank you Axiojet and Kunule!)</p></li><li><p>We hit a new high of monthly views on YouTube</p></li></ul><p></p><h2><strong>&#128293; What&#8217;s Next in February?</strong></h2><p>Now for the exciting part&#8212;what&#8217;s coming next in February! Our February is packed with new releases, updates, and exciting announcements, including:</p><ul><li><p>Leaf MVC 4.0 Beta: Refining the alpha release with bug fixes and additional features.</p></li><li><p>Release of Paperplane: A new quick-start for Leaf MVC 4 to help you build and ship faster.</p></li><li><p>Release of Leaf Zero: A free UI kit for Leaf &amp; Leaf MVC to speed up development.</p></li><li><p>Leaf Sprout: A new console module for Leaf CLI and Leaf MVC 4.</p></li><li><p>Release of Leaf Billing with Stripe &amp; PayStack: New integrations for Leaf &amp; Leaf MVC.</p></li><li><p>More Documentation &amp; Tutorials: Helping developers transition seamlessly to Leaf especially from other frameworks.</p></li></ul><p>On top of these new releases, we&#8217;ll continue to improve Leaf&#8217;s performance, security, and developer experience. We&#8217;re also planning to host our second ever Leaf event in 2025, so stay tuned for more details on that!</p><p></p><h2><strong>&#128588; You made this happen!</strong></h2><p>January has set the tone for an incredible year ahead and none of that would be possible without the amazing Leaf community&#8212;your support, feedback, and enthusiasm keep us going! &#127881;</p><p>Stay tuned for more updates, and let&#8217;s keep building together!</p><p>&#128172; Join the party: <strong><a href="http://github.com/leafsphp">GitHub</a></strong> | <strong><a href="https://discord.gg/Pkrm9NJPE3">Discord</a></strong> | <strong><a href="https://twitter.com/leafphp">Twitter</a></strong></p><p>&#128640; Follow us for real-time updates: <strong><a href="https://youtube.com/@leafphp">YouTube</a></strong> | <strong><a href="https://leafphp.dev/">Website</a></strong></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://leafphp.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Leaf PHP! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Looking to a more reliable Leaf - Roadmap for 2025]]></title><description><![CDATA[Now that we&#8217;ve checked off most of our 2024 goals, we&#8217;re excited to share our 2025 roadmap! Our focus is on making Leaf more reliable, secure, and developer-friendly, with plenty of improvements]]></description><link>https://leafphp.substack.com/p/looking-to-a-more-reliable-leaf-roadmap</link><guid isPermaLink="false">https://leafphp.substack.com/p/looking-to-a-more-reliable-leaf-roadmap</guid><dc:creator><![CDATA[Michael Darko-Duodu]]></dc:creator><pubDate>Sat, 04 Jan 2025 19:21:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8MVv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04bdef88-fe01-480d-8dbb-2fb67116f98c_1958x979.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8MVv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04bdef88-fe01-480d-8dbb-2fb67116f98c_1958x979.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8MVv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04bdef88-fe01-480d-8dbb-2fb67116f98c_1958x979.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8MVv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04bdef88-fe01-480d-8dbb-2fb67116f98c_1958x979.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8MVv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04bdef88-fe01-480d-8dbb-2fb67116f98c_1958x979.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8MVv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04bdef88-fe01-480d-8dbb-2fb67116f98c_1958x979.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8MVv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04bdef88-fe01-480d-8dbb-2fb67116f98c_1958x979.jpeg" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/04bdef88-fe01-480d-8dbb-2fb67116f98c_1958x979.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8MVv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04bdef88-fe01-480d-8dbb-2fb67116f98c_1958x979.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8MVv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04bdef88-fe01-480d-8dbb-2fb67116f98c_1958x979.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8MVv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04bdef88-fe01-480d-8dbb-2fb67116f98c_1958x979.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8MVv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04bdef88-fe01-480d-8dbb-2fb67116f98c_1958x979.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Building on from 2024</strong></h2><p>Last year, we proposed a few RFCs which everyone seemed to love, including merging Leaf API into Leaf MVC (implemented), merging Leaf's router into the core library (implemented), and switching our minimum PHP version to 8.0 which is yet to be implemented. On top of these, we built a lot of new features and improvements for Leaf and Leaf MVC, and to top it off, we started working on v4 of Leaf MVC.</p><p>Leaf MVC v4 is NOT a rewrite, it&#8217;s a major upgrade to Leaf MVC v3. We&#8217;re adding a lot of new features, improving existing ones, and making the framework more developer-friendly. We realized that we needed to make Leaf MVC more modular, so we&#8217;re breaking down the framework into smaller, more manageable packages but also automating everything you need to build your next project in days, not weeks.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C-_H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7350d5-7157-4ad5-b84e-4bebe7423aab_3468x1832.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C-_H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7350d5-7157-4ad5-b84e-4bebe7423aab_3468x1832.jpeg 424w, https://substackcdn.com/image/fetch/$s_!C-_H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7350d5-7157-4ad5-b84e-4bebe7423aab_3468x1832.jpeg 848w, https://substackcdn.com/image/fetch/$s_!C-_H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7350d5-7157-4ad5-b84e-4bebe7423aab_3468x1832.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!C-_H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7350d5-7157-4ad5-b84e-4bebe7423aab_3468x1832.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C-_H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7350d5-7157-4ad5-b84e-4bebe7423aab_3468x1832.jpeg" width="1456" height="769" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a7350d5-7157-4ad5-b84e-4bebe7423aab_3468x1832.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:769,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Leaf MVC v4&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Leaf MVC v4" title="Leaf MVC v4" srcset="https://substackcdn.com/image/fetch/$s_!C-_H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7350d5-7157-4ad5-b84e-4bebe7423aab_3468x1832.jpeg 424w, https://substackcdn.com/image/fetch/$s_!C-_H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7350d5-7157-4ad5-b84e-4bebe7423aab_3468x1832.jpeg 848w, https://substackcdn.com/image/fetch/$s_!C-_H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7350d5-7157-4ad5-b84e-4bebe7423aab_3468x1832.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!C-_H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a7350d5-7157-4ad5-b84e-4bebe7423aab_3468x1832.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Our plan is to release alpha and beta versions by the end of January 2025, with a stable release hopefully by the end of February. We are also taking feedback on the documentation of Leaf MVC, so if you have any suggestions, please <strong><a href="https://discord.gg/Pkrm9NJPE3">let us know</a></strong>.</p><p>The final time-line for Leaf MVC v4 should be something like this:</p><ul><li><p>Alpha: January 15, 2025</p></li><li><p>Beta: January 24, 2025</p></li><li><p>RC: January 31, 2025</p></li><li><p>Stable: February 10, 2025</p></li></ul><p>While this may seem rushed, we have a few reasons why we believe we can safely rush through this release:</p><ul><li><p>A lot of the new features in Leaf MVC v4 are being backported from v3, so they&#8217;re already stable or have been tested in production.</p></li><li><p>Leaf MVC v4 is not a complete rewrite, so almost all the features in v3 are being carried over to v4.</p></li><li><p>Lastly, we are testing Leaf MVC v4 in production on a few of our projects, and with the feedback we&#8217;ve gotten so far, we believe we can safely release a stable version by February.</p></li></ul><p>v3.9 and v3.10 will be released in the coming days, with a few bug fixes and improvements carried over from v4. So you'll be able to see our new serve command, some more modularity, view engine improvements, and a few other features in v3.9 and v3.10.</p><p></p><h2><strong>Shipping fast</strong></h2><p>Leaf is known for its ease of use, but building full-fledged applications isn&#8217;t as fast as it could be. In 2025, we want to make Leaf the fastest way to build applications, and we're working on a few new features to make this happen like:</p><ul><li><p>Integrations for services like Mailgun, Twilio, and Stripe</p></li><li><p>Providing easier ways to interact with external systems like databases, APIs, and more</p></li><li><p>A new, faster and more refined database layer that works seamlessly with both Leaf and Leaf MVC</p></li><li><p>Better integration with front-end frameworks like React, Vue, and Angular</p></li><li><p>A new, faster view layer for Leaf MVC and tons of new features for Leaf Blade and BareUI</p></li><li><p>Application scaffolding for not just Leaf stuff, but also UI bits of feature like authentication, user management, and more</p></li></ul><p>Besides all of these, we will be releasing powerful starter-kits that not only help you get started with Leaf, but also help you build full-fledged applications super fast.</p><p>The timeline for these changes is not yet set, but we're hoping to have most of them out by the end of the third quarter of 2025. This will involve lots of new modules, and we're hoping to get the community involved in building these packages, so if you're interested in contributing, please let us know.</p><p></p><h2><strong>Security and reliability</strong></h2><p>We've had a few security issues in the past, and we're working on making Leaf more secure. We're adding a few new security features to Leaf and Leaf MVC, and we're also making our security module more robust, adding new features like rate limiting, content security policy, and more. These will greatly improve your applications' security and reliability right out of the box without you having to do anything. We are also working to fix existing problems with how CSRF protection interferes with other aspects of your application like sessions and cookies.</p><p>We have an optimistic timeline for somewhere early March to have most of these features out, but we're not rushing this release considering the importance of security in applications, so we're taking our time to make sure everything is perfect. Also, a lot of our security features are being backported from v4, so you'll be able to see some of these features in Leaf and Leaf MVC v3.9 and v3.10.</p><p></p><h2><strong>Improving the documentation</strong></h2><p>We released our new documentation in late 2024, and we've been getting a lot of feedback on it. While its been great so far, we're working on making it even better. We're adding more interactive examples, beginner-friendly tutorials, and will be continuing our video documentation series. We will also resume our codelabs which contains specific tutorials on how to do specific things with Leaf eg: deploying a Leaf app to DigitalOcean, processing payments with Stripe, etc.</p><p>We are also working on making our documentation more AI-friendly, so you can get the information you need faster and easier, and also teach AI clients like Claude how to use Leaf. This will make it easier to use Leaf in your projects, and also make it easier for beginners and low-code developers to get started with Leaf.</p><p>This is a continuous process which will be ongoing throughout the year, so you'll be seeing a lot of changes to our documentation in the coming months.</p><p></p><h2><strong>Performance improvements</strong></h2><p>While Leaf is incredibly fast, already outperforming most frameworks, we've left a lot of performance on the table. We can make Leaf even faster, and we're working on a lot of improvements, especially to our router and http layer. We have some kind of caching currently present in different portions of Leaf, but we're working on a more robust caching system that will make your applications even faster. This caching layer will cover everything from views to database queries, and even the router itself.</p><p>This will be implemented incrementally, but we hope to have a prototype out by the end of the first quarter of 2025, and a stable version by the end of the second quarter.</p><p></p><h2><strong>Better Swoole integration</strong></h2><p>We added Swoole support to Leaf earlier through the Eien package, but we're working on making this integration even better. We're adding more features to Eien, and we're also working on making Leaf work seamlessly with Swoole. This will allow your Leaf apps work exactly the same way you're already used to, but with the added benefits of Swoole.</p><p>Our timeline for this update is late third quarter of 2025, or early fourth quarter. As much as we would love to have this out earlier, we're taking our time to make sure everything is perfect.</p><p></p><h2><strong>Deploy automation</strong></h2><p>We released the <code>leaf deploy</code> command in 2023 which made deployments to Heroku super easy, but we're working on making this even better and adding support for more platforms. One of Leaf's goals has always been to make deployments as easy as dropping a file into a folder, but a lot of providers now require you to set up a lot of things before you can deploy your app. We're working on making this process easier, and we're also working on making it easier to deploy your app to your own servers.</p><p>Here's what we're working on:</p><ul><li><p>Adding more Docker images for apache, nginx, and more</p></li><li><p>Updating our <strong><a href="http://fly.io/">fly.io</a></strong> images to be easier to use</p></li><li><p>Providing automated scripts to set up different Linux servers for Leaf</p></li><li><p>Automating the process of setting up databases, queues, and more</p></li><li><p>Providing a way to deploy your app to your own servers with a single command</p></li><li><p>Providing more documentation on how to deploy your app to different platforms</p></li></ul><p>While some of these exist, we're working on making them better and more robust, and we're hoping to have most of these out by the end of the of 2025. Of course, even today Leaf will happily run on any server that supports PHP 7.4+, but going from a fresh server to a running Leaf app is what we're working on making easier.</p><p></p><h2><strong>General module improvements</strong></h2><p>Besides all of these, there are smaller improvements we're working on like:</p><ul><li><p>Timezone support for Leaf date</p></li><li><p>Support for external buckets in Leaf FS</p></li><li><p>A new, more powerful Leaf Cache</p></li><li><p>Add new handy functions to Leaf's tilly helper</p></li><li><p>New MVC CLI commands</p></li><li><p>Update Leaf CLI scaffolding</p></li></ul><p>These will be worked on in bit, spread throughout the year, and we're hoping to have most of these out by the end of the year.</p><p></p><h2><strong>Community &amp; Funding</strong></h2><p>Finally, we're still trying to build a more community-driven project, and we're working on making it easier for you to contribute to Leaf, share your thoughts, and help us build a better framework. We are building Leaf to be a framework for everyone, and we want to make sure everyone has a say in how it's built, so don't hesitate to share your thoughts, ideas, and feedback with us. Currently, you can always open a discussion on our <strong><a href="https://discord.gg/Pkrm9NJPE3">Discord server</a></strong>, or open an issue on our <strong><a href="https://github.com/leafsphp/leaf">GitHub repository</a></strong>.</p><p>Beyond that, we hope to host another event in 2025, which is another reason we are going big on funding this year. We are looking to raise funds to host a bigger event, and also to fund the development of Leaf. Your donations will help us build a better framework, and keep development going on as long as possible. You can visit the <strong><a href="https://leafphp.dev/support.html">sponsor page</a></strong> to donate to Leaf. We will share more details on the event in the coming months, so stay tuned.</p><p></p><h2><strong>Wrapping up</strong></h2><p>Overall, we're excited about 2025, and we're looking forward to building a more reliable, secure, and developer-friendly Leaf. We're working on a lot of new features, improvements, and performance enhancements, which we know you'll love, so stay tuned for more updates in the coming months and let us know what you think &#128154;</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://leafphp.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Leaf PHP! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Leaf Auth just got better! Try roles & permissions today 👻]]></title><description><![CDATA[We published Leaf Auth v3.3 which brings a lot of usability updates in addition to the long awaited Roles & Permissions feature. Here's everything you need to know about v3.3 (&#129344; Sea Buckthorn)]]></description><link>https://leafphp.substack.com/p/leaf-auth-just-got-better-try-roles</link><guid isPermaLink="false">https://leafphp.substack.com/p/leaf-auth-just-got-better-try-roles</guid><dc:creator><![CDATA[Michael Darko-Duodu]]></dc:creator><pubDate>Thu, 19 Dec 2024 16:04:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!2N-e!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd473dc36-051e-493e-a559-bd267a1dd95f_473x473.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The main addition in v3.3 was the role/permission feature, and the whole release was centred around making it easier to assign roles to users. The full documentation for the authorization can be found  on the <a href="https://leafphp.dev/docs/auth/permissions.html">permissions page</a></p><h2>What is Leaf Auth?</h2><p>Leaf Auth is our module that contains all the functionality for allowing users to login/register an account on your application. It has lots of handy tools for managing the user state within your applications, now including user permissions.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u5RU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb388187a-b88a-43c8-96f7-89b9a105b2b6_204x192.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u5RU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb388187a-b88a-43c8-96f7-89b9a105b2b6_204x192.jpeg 424w, https://substackcdn.com/image/fetch/$s_!u5RU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb388187a-b88a-43c8-96f7-89b9a105b2b6_204x192.jpeg 848w, https://substackcdn.com/image/fetch/$s_!u5RU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb388187a-b88a-43c8-96f7-89b9a105b2b6_204x192.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!u5RU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb388187a-b88a-43c8-96f7-89b9a105b2b6_204x192.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u5RU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb388187a-b88a-43c8-96f7-89b9a105b2b6_204x192.jpeg" width="728" height="685.1764705882352" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b388187a-b88a-43c8-96f7-89b9a105b2b6_204x192.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:192,&quot;width&quot;:204,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Happy Dog Meme GIFs | Tenor&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Happy Dog Meme GIFs | Tenor" title="Happy Dog Meme GIFs | Tenor" srcset="https://substackcdn.com/image/fetch/$s_!u5RU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb388187a-b88a-43c8-96f7-89b9a105b2b6_204x192.jpeg 424w, https://substackcdn.com/image/fetch/$s_!u5RU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb388187a-b88a-43c8-96f7-89b9a105b2b6_204x192.jpeg 848w, https://substackcdn.com/image/fetch/$s_!u5RU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb388187a-b88a-43c8-96f7-89b9a105b2b6_204x192.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!u5RU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb388187a-b88a-43c8-96f7-89b9a105b2b6_204x192.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p></p><h2>How does it work? &#129300;</h2><p>Roles and permissions basically allow you to grant a user access to some specific features in your application. A user without a role or permission may not be able to access some URLs, buttons or forms throughout your app. Leaf Auth provides built-in support for roles and permissions which makes this a whole lot easier to use since the feature is tied directly to the auth user object.</p><p>You start out by defining all the roles and permissions which should be available in your application. This is to let Leaf know which roles can be assigned to various users</p><pre><code>auth()-&gt;createRoles([
  'admin' =&gt; ['view user', 'view users', 'create user', ...],
  'user' =&gt; ['view user', 'view users'],
  'guest' =&gt; ['view user']
]);</code></pre><p>Unlike with other libraries, Leaf Auth does not allow you to directly assign permissions to users, instead, you assign permissions to roles and then assign the correct roles to the user who should have them.</p><p>You can assign the roles using the auth user like this:</p><pre><code>auth()-&gt;user()-&gt;assign('admin');</code></pre><p>You can pass an array to assign for multiple roles as well</p><pre><code>auth()-&gt;user()-&gt;assign(['role1', 'role2']);</code></pre><p></p><h2>Database Stuff &#128191; </h2><p>Before we move on, it&#8217;s important to highlight a few things you might notice using roles and permissions with respect to database behaviour. The first thing you may notice is that createRoles() does not a database table with all your roles and permissions, and there are good reasons for this. The only data saved in the database is the role assigned to the user.</p><p>Leaf Auth tries to do as much as possible without relying on the database which improves performance and allows it to work with all sorts of systems and database types without having to do all kinds of configurations for different systems. The major downside to this approach is that your user data is not exactly normalized, so it&#8217;s a bit less performant to make queries like getting all users with the admin role. It&#8217;s however not that big of a problem since that performance loss is balanced by the performance gains you get from normal role/permission operations everywhere else.</p><p>The only information that Leaf will save in your database will be saved in the users table directly on the user which means once the user is fetched, Leaf can directly map the roles and permissions of that user without any real costs to your applications&#8217;s performance.</p><p></p><h2>Single role vs multi role &#128111;</h2><p>Most applications would do perfectly fine with a single role because unlike other RBAC implementations, Leaf&#8217;s implementation allows you to directly modify permissions tied to a role directly in your code which means if you have new permissions that should be part of a role, you can always just modify the permissions array for that role and Leaf will automatically pick up the new permissions.</p><p>Having multiple roles might be a better use-case for your application when you need to fine-tune exactly what a user can or can&#8217;t do in specific sections of your application. In those cases, you would probably have multiple roles which offer different permissions for access to different sections in your application.</p><p></p><h2>Example use-cases &#128194;</h2><p>The most basic use-case will be assigning roles to users right after they sign up to your application. This ensures that every user has a role in your application.</p><pre><code>$success = auth()-&gt;register(...);

if ($success) {
  auth()-&gt;user()-&gt;assign(...);
}</code></pre><p>While this is quite straightforward, it will only work for new applications. If you already have an application that does not employ roles and permissions, the easiest way to assign a role to everyone who should have that role (outside of a database query) is to assign the role on login. This will ensure that the role is assigned before the user proceeds to use the rest of your application.</p><pre><code>$success = auth()-&gt;login(...);

if ($success) {
  auth()-&gt;user()-&gt;assign(...);
}</code></pre><p>The problem with the approaches above is that they assume everyone is getting a particular role. In admin systems, you would usually have a super-admin assigning roles to other users within the app. For such use-cases, `register()` and `login()` will not work as they will sign the super-admin out of their own account.</p><p>If a super-admin needs to assign a role to an already existing user, you can use the `find()` method to get the user instance for that particular user and directly assign the role to them like this:</p><pre><code>$userToAssignRoleTo = auth()-&gt;find($userId);

if ($userToAssignRoleTo) {
  $userToAssignRoleTo-&gt;assign(...);
}</code></pre><p>With this implementation, the admin can assign a role to any existing user with the click of a button.</p><p>But what if the admin needs to assign a role to a user who doesn&#8217;t exist yet? That&#8217;s where `createAccountFor()` comes in. It behaves just like `register()` which means you get all the benefits including validation and all the auth configuration, except that it won&#8217;t interfere with the admin&#8217;s current session.</p><pre><code>$newUser = auth()-&gt;createUserFor(...);

if ($newUser) {
  $newUser-&gt;assign('admin');  

  ...
}</code></pre><p>These are the most-common approaches for assigning roles you will usually use in your applications, but there&#8217;s a lot more you can do with Leaf Auth. Find the full documentation for Leaf Auth on <a href="https://leafphp.dev/docs/auth/">leafphp.dev</a></p><p></p><h2>Upcoming events &#128640;</h2><p>We are hosting our ninth Leaf hang-out where we just chat with you, give you updates and build stuff for Leaf. On our last hangout, we talked about some updates for Leaf MVC v4 and updates to Leaf Auth. We have a lot more planned for our next one, so don&#8217;t forget to join in.</p><p>If you can&#8217;t make it to our next hangout, the recordings will be up on YouTube so you can catch it later. We will hold this session every other week, so you can join us another time.</p><p>&#128198; Friday, December 20</p><p>&#9200; 5 pm (GMT)</p><p>&#128205; <a href="http://youtube.com/@leafphp">youtube.com/@leafphp</a></p><p></p><h2>Support Leaf &#127775;</h2><p>You can help Leaf out by</p><ul><li><p>Following @leafphp on X and YouTube</p></li><li><p>Donating on <a href="https://leafphp.dev/support/">OpenCollective or GitHub sponsors</a></p></li></ul><p>Don&#8217;t forget to Join our Discord and share your feedback.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://leafphp.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Leaf PHP! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Complicating MVC? Our Thoughts.]]></title><description><![CDATA[Let's talk about MVC. Leaf has first-class support for MVC, but we've been thinking about how we can make it better. Is MVC a good pattern for building web applications? Is it too complicated?]]></description><link>https://leafphp.substack.com/p/complicating-mvc-our-thoughts</link><guid isPermaLink="false">https://leafphp.substack.com/p/complicating-mvc-our-thoughts</guid><dc:creator><![CDATA[Michael Darko-Duodu]]></dc:creator><pubDate>Sat, 30 Nov 2024 19:23:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!JR8Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2216ede-a177-4c63-9506-e66d33da81dc_1024x540.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JR8Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2216ede-a177-4c63-9506-e66d33da81dc_1024x540.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JR8Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2216ede-a177-4c63-9506-e66d33da81dc_1024x540.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JR8Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2216ede-a177-4c63-9506-e66d33da81dc_1024x540.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JR8Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2216ede-a177-4c63-9506-e66d33da81dc_1024x540.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JR8Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2216ede-a177-4c63-9506-e66d33da81dc_1024x540.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JR8Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2216ede-a177-4c63-9506-e66d33da81dc_1024x540.jpeg" width="1024" height="540" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a2216ede-a177-4c63-9506-e66d33da81dc_1024x540.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:540,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:175032,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JR8Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2216ede-a177-4c63-9506-e66d33da81dc_1024x540.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JR8Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2216ede-a177-4c63-9506-e66d33da81dc_1024x540.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JR8Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2216ede-a177-4c63-9506-e66d33da81dc_1024x540.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JR8Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2216ede-a177-4c63-9506-e66d33da81dc_1024x540.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>The MVC pattern</strong></h2><p>The Model-View-Controller (MVC) pattern is a software design pattern that separates an application into three main components: the model, the view, and the controller. The model represents the data, the view represents the user interface, and the controller acts as an intermediary between the model and the view. In Leaf MVC, the model is a class that you can use to directly interact with your database, the view is a template file that you can use to render your HTML, and the controller is a class that you can use to handle requests and responses. Leaf MVC takes this pattern a step further by providing a folder structure that uses classes to organize your code since every class will be in charge of a specific functionality in your application.</p><h2><strong>The problem with MVC</strong></h2><p>The problem isn&#8217;t with the MVC pattern itself&#8212;it&#8217;s widely regarded as one of the best architectural patterns for building web applications. Its separation of concerns between Models, Views, and Controllers provides clarity, maintainability, and scalability. The challenge lies in how we&#8217;ve implemented it. While Leaf MVC is designed to let you achieve more with less effort, the initial setup can feel daunting for beginners.</p><p>For years, Leaf MVC has drawn inspiration from the best practices of frameworks like Ruby on Rails and Laravel&#8212;both of which are outstanding in their own right. Even the Leaf MVC folder structure reflects this, blending what we believe are the strongest aspects of these frameworks to create something both familiar and effective.</p><p>However, along with the many advantages we&#8217;ve inherited, we&#8217;ve also carried over some of the challenges&#8212;particularly the sheer amount of boilerplate code that often accompanies these frameworks. This boilerplate, while functional, can create unnecessary complexity, especially for beginners who are just starting to explore the MVC pattern.</p><p>This is one of the reasons we&#8217;re actively rethinking how to make MVC in Leaf simpler and more approachable. While some argue that complaints about folder structures and complexity stem from a "skill issue", we think it's a framework "design issue". Here's why...</p><h2><strong>Design issue vs skill issue</strong></h2><p>That's exactly the problem! Every beginner has a skill issue, and if our framework is not designed to help them overcome that skill issue, then it's a design issue. A well-designed system should work for developers at all levels&#8212;reducing friction, clarifying intent, and eliminating unnecessary barriers to entry. While we've been talking about beginners, this is not just about them. Even experienced developers coming from other frameworks like Next.js or Gin should be able to get up and running without going down a rabbit hole of boilerplate code that they don't need.</p><p>Getting rid of unnecessary complexity doesn't mean we're dumbing down the framework. It means we're making it more accessible, more intuitive, and more enjoyable to use. Other frameworks like Laravel have done an amazing job managing the boilerplate problem by automating complex tasks with Artisan commands and lots of external tools, but we think removing the complexity in the first place is a better approach.</p><h2><strong>Uncomplicating MVC?</strong></h2><p>The first step in Leaf's journey to uncomplicate MVC is to rethink the folder structure. We're exploring ways to make it more intuitive, more flexible, and more in line with the way you think about your application but at the same time, we do not wish to change the structure so much that it becomes unrecognizable. It's a delicate balance, but we're confident we can strike it. How do we keep the same folder structure while making it more intuitive? The idea we're exploring right now is to make the folder structure more modular, allowing you to add or remove components as needed. This matches Leaf's philosophy of "use what you need, leave what you don't", except this time, it's about the folder structure. Let's take a look at what this might look like:</p><pre><code>&#9500;&#9472;&#9472;&#9472;app
&#9474;   &#9500;&#9472;&#9472; console
&#9474;   &#9500;&#9472;&#9472; controllers
&#9474;   &#9500;&#9472;&#9472; database
&#9474;   &#9474;   &#9500;&#9472;&#9472; factories
&#9474;   &#9474;   &#9500;&#9472;&#9472; migrations
&#9474;   &#9474;   &#9500;&#9472;&#9472; schema
&#9474;   &#9474;   &#9492;&#9472;&#9472; seeds
&#9474;   &#9500;&#9472;&#9472; helpers
&#9474;   &#9500;&#9472;&#9472; models
&#9474;   &#9500;&#9472;&#9472; routes
&#9474;   &#9492;&#9472;&#9472; views
&#9474;       &#9492;&#9472;&#9472; errors
&#9500;&#9472;&#9472;&#9472;config
&#9500;&#9472;&#9472;&#9472;public
&#9474;   &#9492;&#9472;&#9472;&#9472;assets
&#9474;       &#9500;&#9472;&#9472; css
&#9474;       &#9492;&#9472;&#9472; img
&#9500;&#9472;&#9472;&#9472;storage
&#9474;   &#9500;&#9472;&#9472;&#9472;app
&#9474;   &#9474;   &#9492;&#9472;&#9472;&#9472;public
&#9474;   &#9500;&#9472;&#9472;&#9472;framework
&#9474;   &#9474;   &#9492;&#9472;&#9472;&#9472;views
&#9474;   &#9492;&#9472;&#9472;&#9472;logs
&#9492;&#9472;&#9472;&#9472;vendor</code></pre><p>Leaf MVC currently includes a lot of folders, like helpers, factories, commands, and seeds&#8212;but many projects don&#8217;t use all of them. So why have folders you don&#8217;t need?</p><p>What if Leaf MVC only came with the essential folders, letting you add more as your project grows? As you need more functionality, you could add folders yourself&#8212;or use a simple command to generate them when needed. We are exploring this idea as our next release:</p><pre><code>&#9500;&#9472;&#9472;&#9472;app
&#9474;   &#9500;&#9472;&#9472; controllers
&#9474;   &#9500;&#9472;&#9472; database
&#9474;   &#9474;   &#9492;&#9472;&#9472; migrations
&#9474;   &#9500;&#9472;&#9472; models
&#9474;   &#9500;&#9472;&#9472; routes
&#9474;   &#9492;&#9472;&#9472; views
&#9474;       &#9492;&#9472;&#9472; errors
&#9500;&#9472;&#9472;&#9472;public
&#9474;   &#9492;&#9472;&#9472;&#9472;assets
&#9474;       &#9500;&#9472;&#9472; css
&#9474;       &#9492;&#9472;&#9472; img
&#9492;&#9472;&#9472;&#9472;vendor</code></pre><p>This new structure is more focused, more flexible, and more in line with the way you think about your application. It's a small change, but we believe it will make a big difference in how you work with Leaf MVC. We're excited to see how this change will impact your experience with Leaf, and we'd love to hear your thoughts on this new approach. It will not break your current applications, but it would make it easier for new developers to get started with Leaf.</p><h2><strong>Opt-in vs opt-out</strong></h2><p>The second step in our journey to uncomplicate MVC is to make everything opt-in. Once again, Leaf 3 was built around the idea of having only what you need, leaving all the bloat behind, but Leaf MVC doesn't quite follow this philosophy and we think it's time to change that. We want to make everything in Leaf MVC opt-in, meaning you only get what you ask for.</p><p>While everyone criticizes the JavaScript ecosystem for its "everything is a plugin" approach, it gives you the power to decide what you need and what you don't. This means you can start with a clean slate and add only the features you need as you go along. This greatly reduces the complexity of the framework and allows you to learn at your own pace instead of being bombarded with files, folders and features you don't understand.</p><h2><strong>Putting a bow on it</strong></h2><p>We're excited about the future of MVC in Leaf. Over the next couple of months, we are going to keep simplifying Leaf and Leaf MVC to make it more approachable, more intuitive, and more enjoyable to use. We're going to keep listening to your feedback, keep iterating on our ideas, and keep pushing the boundaries of what's possible with Leaf. We're excited to see where this journey takes us, and we're grateful to have you along for the ride &#128154;</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://leafphp.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Leaf Catch-up October!]]></title><description><![CDATA[Welcome to our October issue of the Leaf Catch-Up! This issue details what we've been up to and what we have lined up for November. We've got a lot of goodies lined up for you!]]></description><link>https://leafphp.substack.com/p/leaf-catch-up-september-b44</link><guid isPermaLink="false">https://leafphp.substack.com/p/leaf-catch-up-september-b44</guid><dc:creator><![CDATA[Michael Darko-Duodu]]></dc:creator><pubDate>Sun, 03 Nov 2024 15:08:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4947ee6-5fc9-4017-a2e4-2f2d6874c265_3468x1832.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Highlights &#10024;</h2><p>Happy new month folks! These are our highlights for October 2024.</p><ul><li><p>Following our RFCs, we&#8217;ve updated a lot of modules with new usability patches. Modules like fetch have been reworked to work more consistently in a more developer friendly way. We released new versions of Leaf MVC, logger, CLI, sessions, cookies and our fetch client.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Kf4G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18163bde-be9f-42d4-89ec-a026926e783a_1010x860.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Kf4G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18163bde-be9f-42d4-89ec-a026926e783a_1010x860.png 424w, https://substackcdn.com/image/fetch/$s_!Kf4G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18163bde-be9f-42d4-89ec-a026926e783a_1010x860.png 848w, https://substackcdn.com/image/fetch/$s_!Kf4G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18163bde-be9f-42d4-89ec-a026926e783a_1010x860.png 1272w, https://substackcdn.com/image/fetch/$s_!Kf4G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18163bde-be9f-42d4-89ec-a026926e783a_1010x860.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Kf4G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18163bde-be9f-42d4-89ec-a026926e783a_1010x860.png" width="1010" height="860" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/18163bde-be9f-42d4-89ec-a026926e783a_1010x860.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:860,&quot;width&quot;:1010,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:114075,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Kf4G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18163bde-be9f-42d4-89ec-a026926e783a_1010x860.png 424w, https://substackcdn.com/image/fetch/$s_!Kf4G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18163bde-be9f-42d4-89ec-a026926e783a_1010x860.png 848w, https://substackcdn.com/image/fetch/$s_!Kf4G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18163bde-be9f-42d4-89ec-a026926e783a_1010x860.png 1272w, https://substackcdn.com/image/fetch/$s_!Kf4G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18163bde-be9f-42d4-89ec-a026926e783a_1010x860.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ul><p></p><ul><li><p>On the draft PR front, October saw the completion of our new documentation but we could not launch it as we hoped because some modules like auth and alchemy are being updated to match the new documentation. We had new major versions planned for Alchemy, Auth and Leaf Form, but considering the changes that went into those and even the complete rewrite in the case of Leaf Auth, we have not spared any effort in our testing to make sure that the new versions work as expected. Testing takes a lot of time because these modules are designed to adapt to a wide range of scenarios without breaking. The good news is that this is done, and we should see these new versions this week.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YkM2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4947ee6-5fc9-4017-a2e4-2f2d6874c265_3468x1832.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YkM2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4947ee6-5fc9-4017-a2e4-2f2d6874c265_3468x1832.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YkM2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4947ee6-5fc9-4017-a2e4-2f2d6874c265_3468x1832.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YkM2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4947ee6-5fc9-4017-a2e4-2f2d6874c265_3468x1832.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YkM2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4947ee6-5fc9-4017-a2e4-2f2d6874c265_3468x1832.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YkM2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4947ee6-5fc9-4017-a2e4-2f2d6874c265_3468x1832.jpeg" width="1456" height="769" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4947ee6-5fc9-4017-a2e4-2f2d6874c265_3468x1832.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:769,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:844615,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YkM2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4947ee6-5fc9-4017-a2e4-2f2d6874c265_3468x1832.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YkM2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4947ee6-5fc9-4017-a2e4-2f2d6874c265_3468x1832.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YkM2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4947ee6-5fc9-4017-a2e4-2f2d6874c265_3468x1832.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YkM2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4947ee6-5fc9-4017-a2e4-2f2d6874c265_3468x1832.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ul><p></p><ul><li><p>In other news, we started seeing a rise in our downloads from PHP 7.4. What&#8217;s happening here? &#128514;<br>Our downloads from PHP 7.4 in August and September after the RFC hit a rock bottom value of just about 2-3% of all total downloads, but this number jumped back up in October to 9.1-11%. We are interested in all your theories for this jump. If you still use PHP 7, we&#8217;d love to hear from you or your team.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h4j5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8ea464-5ec7-44d6-963f-bea1f1eebd53_1044x810.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h4j5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8ea464-5ec7-44d6-963f-bea1f1eebd53_1044x810.png 424w, https://substackcdn.com/image/fetch/$s_!h4j5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8ea464-5ec7-44d6-963f-bea1f1eebd53_1044x810.png 848w, https://substackcdn.com/image/fetch/$s_!h4j5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8ea464-5ec7-44d6-963f-bea1f1eebd53_1044x810.png 1272w, https://substackcdn.com/image/fetch/$s_!h4j5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8ea464-5ec7-44d6-963f-bea1f1eebd53_1044x810.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h4j5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8ea464-5ec7-44d6-963f-bea1f1eebd53_1044x810.png" width="1044" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4e8ea464-5ec7-44d6-963f-bea1f1eebd53_1044x810.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1044,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:212122,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!h4j5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8ea464-5ec7-44d6-963f-bea1f1eebd53_1044x810.png 424w, https://substackcdn.com/image/fetch/$s_!h4j5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8ea464-5ec7-44d6-963f-bea1f1eebd53_1044x810.png 848w, https://substackcdn.com/image/fetch/$s_!h4j5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8ea464-5ec7-44d6-963f-bea1f1eebd53_1044x810.png 1272w, https://substackcdn.com/image/fetch/$s_!h4j5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e8ea464-5ec7-44d6-963f-bea1f1eebd53_1044x810.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><br></p></li></ul><h2>Upcoming events &#128640;</h2><p>We are hosting our third Leaf hang-out where we just chat with you, give you updates and build stuff for Leaf. Our last hangout was fun and we showcased our progress and some new things we plan to build. We also fixed a few issues people had reported.</p><p>If you can&#8217;t make it to our next hangout, the recordings will be up on YouTube so you can catch it later. We will hold this session every other week, so you can join us another time.</p><p>&#128198;&nbsp;Friday, November 8</p><p>&#9200;&nbsp;5 pm (GMT)</p><p>&#128205;&nbsp;<a href="http://youtube.com/@leafphp">youtube.com/@leafphp</a><br><br></p><h2>Finances &#128181;</h2><p>Our September saw us rake in $50 in donations with no new contributors which is down $55 from September.</p><p>As Leaf is currently not funded by any external investors, we solely rely on your donations to support our full-time maintainers to keep Leaf and all our libraries running. We require your help to keep Leaf&#8217;s development ongoing. You can contribute to our <a href="https://github.com/sponsors/leafsphp">GitHub Sponsors</a> or <a href="https://opencollective.com/leaf">OpenCollective</a>.</p><p>You can find our full financial report on <a href="https://finance.leafphp.dev/">finance.leafphp.dev</a>.</p><h2><br>Support Leaf &#127775;</h2><p>You can help Leaf out by</p><ul><li><p>Following @leafphp on X and YouTube</p></li><li><p>Donating on <a href="https://leafphp.dev/support/">OpenCollective or GitHub sponsors</a></p></li></ul><p>Don&#8217;t forget to Join our Discord and share your feedback.</p><p>Warm Regards &#128522;&#10084;&#65039;</p><p>Michael and the Leaf team<br><br></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://leafphp.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Leaf Catch-up September!]]></title><description><![CDATA[Welcome to our September issue of the Leaf Catch-Up! Let's take a look at the progress on implementing some of our RFCs and the cool stuff the team has done since our last catch-up. Let's do this!]]></description><link>https://leafphp.substack.com/p/leaf-catch-up-september</link><guid isPermaLink="false">https://leafphp.substack.com/p/leaf-catch-up-september</guid><dc:creator><![CDATA[Michael Darko-Duodu]]></dc:creator><pubDate>Sat, 05 Oct 2024 21:20:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!T4hf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F405112b8-d963-45aa-b9c1-799ea32b2cbe_2488x1416.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Highlights &#10024;</h2><p>Happy new month folks! These are our highlights for September 2024.</p><ul><li><p>Following the result of our RFC to <a href="https://github.com/orgs/leafsphp/discussions/250">merge the router into Leaf</a>, we have actually gone ahead to implement this change. The new code is available on GitHub although we are yet to release a new version. We initially thought the changes would add just a little bit of performance goodness to the already fast core, but to our horror (just being dramatic &#129325;), we saw a 5x performance improvement which is absolutely insane.<br><br>We have a few more tests to run because we rewrote the entire middleware implementation and the core route registration section of the router, but we hope to get this out within the next week. You can find the updated code on the &#8220;<a href="https://github.com/leafsphp/leaf/tree/next">next&#8221; branch</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T4hf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F405112b8-d963-45aa-b9c1-799ea32b2cbe_2488x1416.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T4hf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F405112b8-d963-45aa-b9c1-799ea32b2cbe_2488x1416.png 424w, https://substackcdn.com/image/fetch/$s_!T4hf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F405112b8-d963-45aa-b9c1-799ea32b2cbe_2488x1416.png 848w, https://substackcdn.com/image/fetch/$s_!T4hf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F405112b8-d963-45aa-b9c1-799ea32b2cbe_2488x1416.png 1272w, https://substackcdn.com/image/fetch/$s_!T4hf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F405112b8-d963-45aa-b9c1-799ea32b2cbe_2488x1416.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T4hf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F405112b8-d963-45aa-b9c1-799ea32b2cbe_2488x1416.png" width="1456" height="829" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/405112b8-d963-45aa-b9c1-799ea32b2cbe_2488x1416.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:829,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:432592,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!T4hf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F405112b8-d963-45aa-b9c1-799ea32b2cbe_2488x1416.png 424w, https://substackcdn.com/image/fetch/$s_!T4hf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F405112b8-d963-45aa-b9c1-799ea32b2cbe_2488x1416.png 848w, https://substackcdn.com/image/fetch/$s_!T4hf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F405112b8-d963-45aa-b9c1-799ea32b2cbe_2488x1416.png 1272w, https://substackcdn.com/image/fetch/$s_!T4hf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F405112b8-d963-45aa-b9c1-799ea32b2cbe_2488x1416.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p></li><li><p>The updated documentation has been the biggest headache over the past 3 weeks. Luckily, we are about halfway through what we can consider to be our initial release. The new documentation is a complete rewrite and approaches the documentation from a feature standpoint instead of an API reference standpoint as we did in the current documentation.<br><br>This means it will have more visuals, it will be easier to read and understand and also navigate. We have published our latest commit to <a href="https://beta.leafphp.dev">beta.leafphp.dev</a> you can check this out and share your feedback. We have opened new <a href="https://github.com/leafsphp/docs/pull/94">pull-request</a> under which you can share all your feedback.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6xhk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb04431-db73-4630-954e-438130f23d88_2916x1980.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6xhk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb04431-db73-4630-954e-438130f23d88_2916x1980.png 424w, https://substackcdn.com/image/fetch/$s_!6xhk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb04431-db73-4630-954e-438130f23d88_2916x1980.png 848w, https://substackcdn.com/image/fetch/$s_!6xhk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb04431-db73-4630-954e-438130f23d88_2916x1980.png 1272w, https://substackcdn.com/image/fetch/$s_!6xhk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb04431-db73-4630-954e-438130f23d88_2916x1980.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6xhk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb04431-db73-4630-954e-438130f23d88_2916x1980.png" width="1456" height="989" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0fb04431-db73-4630-954e-438130f23d88_2916x1980.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:989,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:611567,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6xhk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb04431-db73-4630-954e-438130f23d88_2916x1980.png 424w, https://substackcdn.com/image/fetch/$s_!6xhk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb04431-db73-4630-954e-438130f23d88_2916x1980.png 848w, https://substackcdn.com/image/fetch/$s_!6xhk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb04431-db73-4630-954e-438130f23d88_2916x1980.png 1272w, https://substackcdn.com/image/fetch/$s_!6xhk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fb04431-db73-4630-954e-438130f23d88_2916x1980.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p></li><li><p>External contributor-fest &#129325;<br>We&#8217;ve had lots of releases over the past few weeks that were authored by folks outside the Leaf team and we&#8217;re extremely happy about this uptrend. We&#8217;ve had 7 external contributors make fixes and add some new relevant features to Leaf and it&#8217;s modules.<br><br>If you&#8217;re interested in contributing to anything Leaf, don&#8217;t hold back. Our <a href="https://leafphp.dev/community/contributing/">contribution guide</a> details what you need to setup and how to proceed. We&#8217;d love to have you.</p></li></ul><p></p><h2>Upcoming events &#128640;</h2><p>We are hosting our second Leaf hang-out where we just chat with you, give you updates and build stuff for Leaf. Our last hangout was fun and we showcased our progress and some new things we plan to build. We also fixed a few issues people had reported.</p><p>If you can&#8217;t make it to our next hangout, the recordings will be up on YouTube so you can catch it later. We will hold this session every other week, so you can join us another time.</p><p>&#128198;&nbsp;Friday, October 11</p><p>&#9200;&nbsp;5 pm (GMT)</p><p>&#128205;&nbsp;<a href="http://youtube.com/@leafphp">youtube.com/@leafphp</a></p><p></p><h2>Finances &#128181;</h2><p>Our September saw us rake in $105 in donations with no new contributors &#129401;</p><p>As Leaf is currently not funded by any external investors, we solely rely on your donations to support our full-time maintainers to keep Leaf and all our libraries running. We require your help to keep Leaf&#8217;s development ongoing. You can contribute to our <a href="https://github.com/sponsors/leafsphp">GitHub Sponsors</a> or <a href="https://opencollective.com/leaf">OpenCollective</a>.</p><p>You can find our full financial report on <a href="https://finance.leafphp.dev">finance.leafphp.dev</a>.</p><p></p><h2>Support Leaf &#127775;</h2><p>You can help Leaf out by</p><ul><li><p>Following @leafphp on X and YouTube</p></li><li><p>Donating on <a href="https://leafphp.dev/support/">OpenCollective or GitHub sponsors</a></p></li></ul><p>Don&#8217;t forget to Join our Discord and share your feedback.</p><p>Warm Regards &#128522;&#10084;&#65039;</p><p>Michael and the Leaf team</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://leafphp.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Leaf Catch-up!]]></title><description><![CDATA[In this issue, the team discusses what we've done over the last month and some things you can expect before the end of this year. Sit back and enjoy!]]></description><link>https://leafphp.substack.com/p/leaf-catch-up</link><guid isPermaLink="false">https://leafphp.substack.com/p/leaf-catch-up</guid><dc:creator><![CDATA[Michael Darko-Duodu]]></dc:creator><pubDate>Thu, 19 Sep 2024 19:28:23 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/71aab419-37e8-47b5-b4c0-63f2fb88fbb3_1959x1102.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Highlights &#10024;</h2><p>Here&#8217;s a list of our top highlights for August and September</p><ul><li><p>We published RFCs to get community feedback for decisions on <a href="https://github.com/orgs/leafsphp/discussions/246">merging Leaf API into Leaf MVC</a> and <a href="https://github.com/orgs/leafsphp/discussions/245">making PHP 8.2 the minimum requirement</a> which the community agreed to almost unanimously. We have already started taking the steps to implement these changes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9xVn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c5e09a-af59-491c-945f-f1c977bb3244_5106x1730.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9xVn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c5e09a-af59-491c-945f-f1c977bb3244_5106x1730.png 424w, https://substackcdn.com/image/fetch/$s_!9xVn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c5e09a-af59-491c-945f-f1c977bb3244_5106x1730.png 848w, https://substackcdn.com/image/fetch/$s_!9xVn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c5e09a-af59-491c-945f-f1c977bb3244_5106x1730.png 1272w, https://substackcdn.com/image/fetch/$s_!9xVn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c5e09a-af59-491c-945f-f1c977bb3244_5106x1730.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9xVn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c5e09a-af59-491c-945f-f1c977bb3244_5106x1730.png" width="1456" height="493" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/34c5e09a-af59-491c-945f-f1c977bb3244_5106x1730.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:493,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1006592,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9xVn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c5e09a-af59-491c-945f-f1c977bb3244_5106x1730.png 424w, https://substackcdn.com/image/fetch/$s_!9xVn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c5e09a-af59-491c-945f-f1c977bb3244_5106x1730.png 848w, https://substackcdn.com/image/fetch/$s_!9xVn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c5e09a-af59-491c-945f-f1c977bb3244_5106x1730.png 1272w, https://substackcdn.com/image/fetch/$s_!9xVn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34c5e09a-af59-491c-945f-f1c977bb3244_5106x1730.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p></li><li><p>We started re-writing the documentation for Leaf all over. Our goal this time is to take everything from the basics, not overcomplicate processes and make everything easier to work with while we fix some bugs that currently exist on our documentation site. The community is entirely on-board with this, and continues to share ideas on how we can further improve the documentation to make it even better than it currently is.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JHAH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F524af42b-173c-44f8-8eb2-39bbf1e9359d_5096x1984.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JHAH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F524af42b-173c-44f8-8eb2-39bbf1e9359d_5096x1984.png 424w, https://substackcdn.com/image/fetch/$s_!JHAH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F524af42b-173c-44f8-8eb2-39bbf1e9359d_5096x1984.png 848w, https://substackcdn.com/image/fetch/$s_!JHAH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F524af42b-173c-44f8-8eb2-39bbf1e9359d_5096x1984.png 1272w, https://substackcdn.com/image/fetch/$s_!JHAH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F524af42b-173c-44f8-8eb2-39bbf1e9359d_5096x1984.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JHAH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F524af42b-173c-44f8-8eb2-39bbf1e9359d_5096x1984.png" width="1456" height="567" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/524af42b-173c-44f8-8eb2-39bbf1e9359d_5096x1984.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:567,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:581671,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JHAH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F524af42b-173c-44f8-8eb2-39bbf1e9359d_5096x1984.png 424w, https://substackcdn.com/image/fetch/$s_!JHAH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F524af42b-173c-44f8-8eb2-39bbf1e9359d_5096x1984.png 848w, https://substackcdn.com/image/fetch/$s_!JHAH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F524af42b-173c-44f8-8eb2-39bbf1e9359d_5096x1984.png 1272w, https://substackcdn.com/image/fetch/$s_!JHAH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F524af42b-173c-44f8-8eb2-39bbf1e9359d_5096x1984.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p></li><li><p>We've closed out most of the issues that were reported last year and earlier this year with only feature requests left in the works. As we are currently busy with implementing the RFCs and the new documentation, we&#8217;ll have to put implementing new features on a little pause. But not for long: we hope to have our new documentation on by the end of October this year. Reach out on the <a href="https://discord.gg/Pkrm9NJPE3">Leaf World &#127809; discord server</a> you have any ideas you&#8217;d like to share.</p></li></ul><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://leafphp.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Leaf PHP! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Upcoming events &#128640;</h2><p>Come hang out with the team and build stuff for Leaf. We&#8217;ll address your issues and answer your questions in real-time. If you can&#8217;t make it, the recordings will be up on YouTube so you can catch it later. We will hold this session every other week, so you can join us another time.</p><p>&#128198;&nbsp;Friday, September 28</p><p>&#9200;&nbsp;5 pm (GMT)</p><p>&#128205;&nbsp;<a href="http://youtube.com/@leafphp">youtube.com/@leafphp</a></p><p></p><h2>Community Spotlight &#127940;&#8205;&#9792;&#65039;</h2><p>Our spotlight showcases the top 3 projects made by our community. Add your submissions on our Discord server.</p><ul><li><p><a href="https://github.com/ibnsultan/flow">Flow</a> by <a href="https://github.com/ibnsultan">@ibsultan</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PuaR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88918616-d1db-43de-bf4c-80f151bdee30_1200x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PuaR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88918616-d1db-43de-bf4c-80f151bdee30_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!PuaR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88918616-d1db-43de-bf4c-80f151bdee30_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!PuaR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88918616-d1db-43de-bf4c-80f151bdee30_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!PuaR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88918616-d1db-43de-bf4c-80f151bdee30_1200x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PuaR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88918616-d1db-43de-bf4c-80f151bdee30_1200x600.png" width="1200" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88918616-d1db-43de-bf4c-80f151bdee30_1200x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PuaR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88918616-d1db-43de-bf4c-80f151bdee30_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!PuaR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88918616-d1db-43de-bf4c-80f151bdee30_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!PuaR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88918616-d1db-43de-bf4c-80f151bdee30_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!PuaR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88918616-d1db-43de-bf4c-80f151bdee30_1200x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Flow is a comprehensive web application development starter kit designed to accelerate the process of building modern and feature-rich web applications. With a focus on simplicity, flexibility, and efficiency, Flow provides developers with a robust set of tools and features to kickstart their projects. From secure authentication and seamless API integration to beautifully designed UI/UX components and powerful admin tools.</p><p></p></li><li><p><a href="https://github.com/crosa7/leaf-omniglot">Leaf Omniglot</a> by <a href="https://github.com/crosa7/">@crosa7</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lfT0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F048599ab-ec81-487c-a916-2984c28fffb8_1200x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lfT0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F048599ab-ec81-487c-a916-2984c28fffb8_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!lfT0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F048599ab-ec81-487c-a916-2984c28fffb8_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!lfT0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F048599ab-ec81-487c-a916-2984c28fffb8_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!lfT0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F048599ab-ec81-487c-a916-2984c28fffb8_1200x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lfT0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F048599ab-ec81-487c-a916-2984c28fffb8_1200x600.png" width="1200" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/048599ab-ec81-487c-a916-2984c28fffb8_1200x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:101528,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lfT0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F048599ab-ec81-487c-a916-2984c28fffb8_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!lfT0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F048599ab-ec81-487c-a916-2984c28fffb8_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!lfT0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F048599ab-ec81-487c-a916-2984c28fffb8_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!lfT0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F048599ab-ec81-487c-a916-2984c28fffb8_1200x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Leaf Omniglot is a simple but powerful module that adds multi language capabilities to your leaf applications.</p></li><li><p><a href="https://github.com/DevCycleHQ-Sandbox/devcycle-leaf-plugin">DevCycle Leaf Module</a> by <a href="https://github.com/andrewdmaclean">@andremaclean</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WE4t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe898d33f-18d3-43df-9fd6-2028aec6948f_1200x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WE4t!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe898d33f-18d3-43df-9fd6-2028aec6948f_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!WE4t!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe898d33f-18d3-43df-9fd6-2028aec6948f_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!WE4t!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe898d33f-18d3-43df-9fd6-2028aec6948f_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!WE4t!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe898d33f-18d3-43df-9fd6-2028aec6948f_1200x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WE4t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe898d33f-18d3-43df-9fd6-2028aec6948f_1200x600.png" width="1200" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e898d33f-18d3-43df-9fd6-2028aec6948f_1200x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WE4t!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe898d33f-18d3-43df-9fd6-2028aec6948f_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!WE4t!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe898d33f-18d3-43df-9fd6-2028aec6948f_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!WE4t!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe898d33f-18d3-43df-9fd6-2028aec6948f_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!WE4t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe898d33f-18d3-43df-9fd6-2028aec6948f_1200x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This repository provides an extension for the Leaf PHP framework that integrates DevCycle, a comprehensive feature management platform. This extension simplifies the process of managing feature flags and configurations through DevCycle by wrapping the DevCycle API with a convenient PHP class.</p></li></ul><p></p><h2>Support Leaf &#127775;</h2><p>You can help Leaf out by</p><ul><li><p>Following @leafphp on X and YouTube</p></li><li><p>Donating on <a href="https://leafphp.dev/support/">OpenCollective or GitHub sponsors</a></p></li></ul><p></p><p>Don&#8217;t forget to Join our Discord and share your feedback.</p><p></p><p>Warm Regards &#128522;&#10084;&#65039;</p><p>Michael and the Leaf team</p><p></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://leafphp.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Leaf PHP! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>