Table of Contents
Yes, effective immediately (Friday 16th February 2024), I am no longer part of the CakePHP core team.
Why? Well, as always, it’s complicated.
Be aware, that this whole post goes from the very beginning to the very end – where I started CakePHP, how it grew on me, getting to join the core team and the end – so just skip specific sections if you don’t care about them.
What is CakePHP?
It’s an MVC framework like any other out there, so you can build exactly the software you need without the need to go too deep into (database) specifics. But database knowledge – or more specific database designing – and at least some basic SQL knowledge is highly recommended.
The beginnings of CakePHP
First, let me explain how I got into CakePHP and learned to love it.
As pretty much always, it’s work related. We had to build a custom backend for a customer of ours to manage an already existing, ancient, very badly designed database. But we managed to get it working, and I got my first experience with CakePHP 3.5 around 2017.
The bake tool was by far the most magical part of the framework for me. Just by defining a database schema with a predefined naming schema, one can easily generate a working CRUD app with just one command. It was insane.
I didn’t really understand the difference between table and entity classes, put all my custom logic into controller components and all sorts of other shenanigans – but I had fun learning something different, since all I was used to at this point was WordPress and Drupal.
The main protagonist – “Alfred”
Shortly after that project was done I tackled a rather annoying problem we had inside our own company – managing server login data inside a custom CakePHP backend.
Till that moment, we had a simple confluence text page where everyone just copy-pasted the login data we received from our customers and that’s it. No filtering, no advanced searching other than Ctrl/Cmd + F, no regular checking if the login data was still valid or not – nothing.
Well, it just started with that mentioned login data management but expanded to management for projects, staff members, meal orders, parking slots, automatic deployment of code changes of a configured domain (aka a self built continuous deployment system) and much, much more. While all this continuous adding of features was done, we decided to give this tool a name – Alfred.
While doing all this development work I of course helped out many others in the community via our discord/slack channel as well as the discourse forum.
My first CakeFest talk
In 2021 Amanda (Community Manager at CakePHP) contacted me if I wanted to do a 30min talk at the next online CakeFest which is the annual CakePHP conference. I was thrilled and gladly accepted the offer, which resulted in the following CakeFest talk:
I was pretty happy with what I was able to show the community, since utility/service classes are to this day a very vital part of how one should structure their code.
Joining the core team
Then, at the end of 2021 the lead developer Mark Story contacted me and offered me to join the core team. It was a dream come true since I definitely had the plan to do so in the future but – at least for me – I didn’t feel like I knew everything what CakePHP has to offer.
So I gladly agreed and was promptly added to the CakePHP Github Group as well as the Discord core chat. I was kind of nervous since I didn’t know what was expected and/or how things are done in “the core”.
2 years of learning
I quickly realized that all the “everything is planned out and everyone has tasks assigned” idea I had of the core team was bogus. Don’t know why I had this kind of “organizational structure” in mind but well, I adjusted to what was present. So just like “normal” open source development everyone just does tasks if they feel attached to them and they have time for it.
Having a chat with “purely dedicated” CakePHP developers was kind of nice though since we could have some deeper discussions if going into a certain direction is good or not.
Over the next 2 years I was able to get to know more of the open source workflow, deprecating code, bringing in a few new features and cleaning stuff up which hasn’t aged well. I’m just gonna link a few PR’s which are related to this topic:
- https://github.com/cakephp/debug_kit/pull/851 Filter routes in DebugKit via plugin
- https://github.com/cakephp/debug_kit/pull/878 Refactor old JS&CSS in DebugKit into a more modern approach
- https://github.com/cakephp/cakephp/pull/16227 Show route collision in routes command
- https://github.com/cakephp/cakephp/pull/16676 & https://github.com/cakephp/cakephp/pull/16705 add the new EnumType
- https://github.com/cakephp/cakephp/pull/16992 and a bunch of other PR’s related to PHPUnit 10 Upgrade for CakePHP 5
- https://github.com/cakephp/upgrade/pull/235 update rector tool to latest version
- https://github.com/cakephp/cakephp/pull/17169 add command events
- https://github.com/cakephp/cakephp/pull/17457 add cell events
The CakePHP Tutorial Series
I was so motivated to help the community and especially newbies that I even started creating a tutorial series on Youtube in May 2022.
Getting access to the official CakePHP Youtube channel was very straight forward and I want to thank Amanda and Larry Masters (aka phpnut) for trusting me with this.
In total I released 18 videos over the span of a year related to the most important stuff that you need to know to get started with CakePHP. But the frequency definitely went down when CakeFest 2023 drew near.
CakePHP 5
The 5.x branch was already a thing when I joined in 2021 since – at that time – the latest CakePHP version was 4.3.3 and major changes were pretty much discussed/decided.
I only remember at the very beginning, that I was asked if there was anything specific in Cake4 that I would like to change for the next major version. But I was already very happy with the state of Cake4 so besides the usually PHP language improvements nothing really stood out to me to suggest.
As time went on we finalized all the things that were “planned” for Cake5 but at some point in late 2022 we reached a point where nothing major really happened in the 5.x branch (and its related upgrade docs). I first thought “Maybe its time for an alpha release and see what the community says” but this didn’t really happen.
After numerous mentions of a Cake5 beta we finally did release of CakePHP 5.0.0-beta1 on 19th of December 2022. All the plugins were already updated to PHPUnit 10 and ready to get installed and tested by the community since we just did a quick sanitization install if there were any obvious issues.
But as beta releases go no real feedback was received and barely anyone tested it either via a new prototype project or even update their own app to Cake5.
At this moment (or probaly earlier, don’t really remember anymore) it was also decided, that CakeFest 2023 will be a in person event in Los Angeles from 28th of September 2023 to 30th of September 2023. So one would maybe argue that releasing CakePHP 5 before that would be a good idea so that we can ask the community what they think of CakePHP 5.
beta-2 was released 5 months later on 8th of April 2023 which some may say is quite the long time to test a beta but sure, lets just make sure everything is 100% fine.
RC1 was released 2 months later on 7th of June 2023 and RC2 another month later on 15th of July 2023, so yea… we really made sure everything was working as intended.
CakeFest was drawing nearer and we still didn’t make the final 5.0.0 released. It felt to me like I was forcing my fellow core devs to finally get the 5.0.0 release out there.
I am not really going into the whole major release process but lets just say I was expecting a bit of a “recipe” or “checklist” to be present beforehand. But since there was none I did my own in Github Pages with the expectation, that we can split up tasks in the core team so that everyone can have a piece of the release cake party.
But the anticipation from the other core devs (besides Mark Story) was basically not existent. So in the end I communicated with Mark Story who takes care of which parts and on the 10th of September 2023 (2 weeks before CakeFest) it finally happened – 5.0.0 released.
CakeFest 2023
CakeFest 2023 was the first (and currently only) reason why I wanted to visit the US. I was excited to see my fellow CakePHP devs, the CakeDC team which invited me there in the first place (and offered me a generous compensation for the fact, that I traveled from Europe to LA and held a 3h workshop) and especially Mark Story in person, since we just did the CakePHP 5 release.
Of course the fact, that there were like actual 15 participants at max was a bit of a let down, but it wasn’t much of a deal for me. I had a great time with everyone in LA or more general in the US since I traveled with my brother to LA, San Francisco and Las Vegas.
We did have a “core/CakeDC internal” event at the last day which was also very nice and had some quality time together to get to know each other a bit more and talk a bit about the future of CakePHP. And this is the moment where we agreed upon the fact, that CakePHP activity in general is continuously going down. We tried to come up with some solutions to change that fact, but nothing concise was found at the end of the night.
This of course was not the first time I noticed this but I’d say every core dev noticed, that over the last few years contributions, new plugin ideas and general support questions have gone down.
The aftermath
Its been 5 months since CakeFest 2023. Nothing really has changed from the core internal communication or incoming ideas which could help us grow or reverse going down that hill.
But a specific message in core chat (not gonna name any names here of course) sparked this whole conversion again:
How many active core devs do we have these days anyway? Feels like not much, looking at the (open) PRs in github^^
Besides the fact that numbers of core devs doesn’t really mean anything – but it lead me into asking the following statement:
I can definitely agree that If we want to accumulate more devs we need to go into at least having some sort client library for modern reactivity.
As --redacted-- said people don't want to have the burden of choosing what they want, they want a predefined system which they can then fiddle around to achieve whatever system they need.
But - at least for me - this means to re-imagine most of the FormHelper and the default bake template which is quite the task to do. I'd love to get rid of Miligram CSS and go with a Tailwind based system.
This of course requires at least NodeJS and a build step besides the normal PHP Server which some of you are not very fond of as I know from past discussions
And the general response to this was: I am not the right person to do this
That’s fine of course and not everyone is happy to dabble around in the modern JS craziness that is going on right now. But this doesn’t change the fact, that this would still be a valid way to attract more developers to the framework and maybe get a bit more activity going.
The default bake template and all its related logic hasn’t changed since like 2017 (or even earlier, I don’t know since I just started using Cake at that time). Thats 7 years! But no one wants to change this since the general mentality seems to be it’s always been this way, so it will stay this way.
The decision
I have never liked this kind of mentality/way of thinking. Yes, its a valid choice one/a group can make and I can respect that. But I don’t want to be part of that anymore since this won’t last long. And I still have many years of developing to do so I don’t want to waste my time on a framework which is unable to advance or even requires me to do all the advancing I want/need. Yes of course I could just solo handle all this modern JS stuff but whats the point of being in a group if no one else has interest or shares support in what you are doing.
Thats why effictive Friday 16th February 2024 I have left the CakePHP organization on github and will communicate to my fellow core devs, that I will no longer be participating in any CakePHP related open source coding or support questions.
What does this mean for my CakePHP plugins?
I do have some CakePHP related plugins, which you can see here:
- https://github.com/LordSimal/cakephp-sentry
- https://github.com/LordSimal/cakephp-dump-sql
- https://github.com/LordSimal/cakephp-scheduler
- https://github.com/LordSimal/cakephp-psalm
- https://github.com/LordSimal/cakephp-dbml
The most “important” one is the sentry integration with around 80k downloads right now.
In general I will of course try to review Pull Requests but I will not tackle any issues that will be made in those repositories. If anyone wants to take over these repositories I am glad to transfer them. Just contact me on via E-Mail or on Slack/Discord.
Resume
CakePHP is a long standing, solid framework if you want to stay in the old multi page application paradigm, want access to a really awesome ORM and have second to none plugin code separation.
But the moment you want to make specific template changes, create your own bake theme or simply just want to change the HTML structure of a generated HTML wrapper for a input it gets so complicated and convoluted due to the fact, that everything is based around the CakePHP Naming Conventions, that you will have a bad time in the long run.
Yes, you can just throw away the whole V part of the MVC and build your own template logic but this isn’t really what a framework should be doing in my honest opinion.
I really appreciate all the discussions and lessons learned from everyone in the CakePHP Community, the core team and CakeDC, but I just have to move on to something that is more fitting to what I and my company’s customers desire in a modern PHP framework.
Awww I missed this blog post but yeah I can totally see the parts of this. Truly the work you have put in is impressive and instrumental in so many ways. The visible work in making the videos and countless hours with people on Slack, let alone the releases and code work, are much appreciated by users of CakePHP like me.
Also it was awesome to meet with you in person!
I’ll keep following your blog and would love to keep in touch 🙂 .