Scott Keck-Warren
0:05
Hello developers, and welcome to the PHP Architect Community Corner, where we have conversations with members of the web development community. I'm your host, Scott Keck Warren, and today we're talking with Jameson Bryant about CakePHP. Jameson Bryant is VP of Platform at TicketSauce, a ticketing platform, and a member of the CakePHP core team. He's been writing PHP professionally for over a decade, including a stint as a CTO. And most recently led TicketSauce's upgrade from CakePHP 2 all the way to 5.4 on a live production app. He contributed to the CakePHP 5.4 release and wrote about building a CakePHP plugin from his phone in the August 2026 issue of PHP Architect. He's based in the Baltimore area and blogs at Serious Semicolons. Thank you so much, uh, Jameson, for finding some time to talk to us today.
Jamison Bryant
0:53
Thanks for having me on, Scott. I enjoy this podcast very much, and I really enjoy getting the chance to talk to you.
Scott Keck-Warren
1:00
Well, that's all, all good to hear. So can we kind of start out and talk about, like, for those of us who have not heard it, what is, uh, heard of it, what is CakePHP?
Jamison Bryant
1:10
Absolutely. CakePHP is definitely not the first thing that comes to mind in the PHP zeitgeist, but it is the first PHP framework that I got to play around with back when I was a baby developer. CakePHP is an MVC framework, not unlike Symfony or Laravel. It focuses on convention over configuration and rapid development and deployment. You might hear me talk a couple of times about the Bake tool, which is a tool that ships with CakePHP that lets you very quickly scaffold controllers, tables, models, and a variety of other classes, and it just makes it really easy to do that. It has a really healthy ecosystem of plugins and a really active developer community, and I've always found it an absolute pleasure to work with. And I've built, I don't even know how many apps off of it, and I continue to recommend it to everyone that I talk to.
Scott Keck-Warren
2:06
Yeah, that's really, really, it's really great. And, and so like, is it, is it kind of a one-for-one replacement for some of the larger frameworks that exist within the ecosystem, or is there something like, what makes CakePHP unique against like its competitors, I guess is what I'm trying to ask.
Jamison Bryant
2:25
Well, in the beginning, CakePHP was very heavily focused around, like I said, rapid development and was one of the first tools or frameworks to offer rapid deployment tools that were out there because at the time you had Joomla, you had WordPress, and No frameworks really offers you the ability to set up your database a certain way using third normal form, for example, where you have your articles table and your leads table, and to be able to jump into a CLI and run bin/cake bake articles, bin/cake bake articles leads, and just get so much code out of that without having to really lift a finger. That's the convention. aspect to it. If you build your database, what is considered to be the best practices way, you can get a lot of code out of that for free. Now, later on, frameworks like Laravel came along and offered many of this kind of functionality, like artisan, I believe, is the similar command. And that is a very similar concept. I haven't used Laravel too much to really compare them directly. But it is the same concept under the hood. Symfony is a bit of a different beast. I tend to think of Symfony as more of a bucket of building blocks, whereas CakePHP is instructions to rapidly build things, templates, if you will. Symfony is a great framework and a lot of CakePHP is built on top of those base Symfony components. But when you're reaching for Symfony to build your app, it means you want to get down to the really nitty-gritty stuff. And really customize the low-level functionality of your platform. Whereas CakePHP is more focused on, well, I kind of know how I want it to work and don't really care about the inner details. I'm going to leave that to the framework maintainers to guide me in the right direction. And it includes tests too, by the way, when you bake a model or a controller, you're going to get tests out of that for free. And as a junior developer, first learning the framework. I couldn't ask for a better setup.
Scott Keck-Warren
4:31
Yeah. And so I'm, um, I'm, I'm primarily a, like a Laravel developer. Like we use, I use Laravel at work. I use Laravel for my side projects. Uh, um, excuse me. And I kind of like, and I, at one point we, we were at work, we were kind of looking at like, well, what framework do we like? And like, so the big, the, we, we ended up looking at Cake, Laravel, and Symfony as, as kind of our, our or basis points. And I don't, this was years ago, so I don't even remember. I bet you it was like 7 years ago. And we just like couldn't quite mesh with Cake for some reason. And I don't even really remember what it was, but that's why we ended up going with Laravel. And, but I was going through the documentation this morning in preparation for this interview, and it's really kind of shocking, like how similar, like you guys have very similar, like approaches to how to, how to fix the problem. And I honestly feel like I could just start working on a CakePHP project today based on like what I, what I've seen. 'Cause it has like the same thing. Like there's the Cake. No, I'm sorry. Bake? Cake, bake. What's the command line? Cake.
Jamison Bryant
5:37
Bake.
Scott Keck-Warren
5:37
Cake.
Jamison Bryant
5:38
Yeah.
Scott Keck-Warren
5:38
Bake. Okay. I also got really hungry while I was reading the documentation. I should, I should say, 'cause it's—
Jamison Bryant
5:42
That'll, that's been known to happen. Yeah.
Scott Keck-Warren
5:45
Uh, I did go get, I did go get a snack after, after I read it. Um, So there's, there's like the very, it's very similar where you go, like you run a command line and it helps you to set up all the scaffolding, but it seems like there's even like a little more to it than what like Artisan will do. 'Cause like Artisan doesn't build, um, the, the, the tests for you automatically. Like you have to like manually build those as well, which is always like a sticking point for me and, and some of the people I talk to. Um, so it's, it is really like, seems like it's a really powerful. rapid application development system. So is it, and so I guess I don't have another question. It's just, it's interesting. Like, it's interesting to me that you guys have kind of converged upon the same thing. Is that, is that, do you know if that— sorry, go ahead.
Jamison Bryant
6:29
I was going to say, uh, yeah, absolutely. Uh, the, the problem space is the problem space. Um, these are all web frameworks, also CLI frameworks a little bit too. I can and have built some pretty cool complex CLI applications in CakePHP, just like you can do with Laravel. In fact, I think there's lots of tools out there that are built on top of the CLI interface that just use PHP's input and output layers. It's by no means limited to just the web, which is one of the things that I think it's, it's really great about it. But you have these core problems that need solved, like the need to authenticate users, the need to authorize users. The need to have read and write only database connections, the need to talk to a caching engine. I could go on and on and on about all the problems that CakePHP solves. What's great about it is that so much of this stuff is baked in and ready to go. And oftentimes you just have to reach out to a built-in component or a community-made plugin. As a plugin developer myself, I've been very pleased and how easy it was to integrate with the Cake ecosystem, as well as the breadth of the ecosystem overall. We have the awesome list and we have plugins.cakephp.org, which lists a ton of available plugins for CakePHP that people can just go out and choose and basically take them off the shelf and slot them in again, because of that convention-based approach.
Scott Keck-Warren
7:58
Yeah, that's really interesting. And so can you kind of like talk to us a little bit about like, what does a plugin do and like, within the CakePHP ecosystem?
Jamison Bryant
8:07
Absolutely. Plugins are just extensions to the CakePHP core code that are built in a very simple way to extend or add additional behaviors to the core. I'll give you an example. The first plugin I ever made for the CakePHP ecosystem was back when Mailchimp got rid of their transactional email API. And it was very popular at the time because it had a very generous free tier. I wasn't using it for anything production related at the time, maybe some password reset emails, but when they got rid of it overnight and moved to a paid one, I and many other developers were a little bit left in the lurch. So their competitor at the time was SparkPost. So I developed a CakePHP plugin. for SparkPost. And all I had to do was go to the CakePHP docs, find their mailer class, create the SparkPostMailer class, sub in the API keys and config reads where necessary. And all of a sudden, anybody in the world that was using that plugin could easily load the SparkPost component and begin sending transactional email with a totally different API. without actually changing their business logic code, except for changing MailChimp to SparkPost. And I got some recognition from SparkPost for that. The community really loved it. SparkPost isn't around or nearly as popular anymore, but it was a really great introduction to plugin development for CakePHP.
Scott Keck-Warren
9:41
I got bit by that MailChimp thing too. That was really kind of frustrating for, I think for everybody. Um, so, and, and so like, Is the, the plugins are fairly powerful then? 'Cause like you were talking about kind of hooking into like the email notification, like emails essentially. Could, could you also do something more with like a plugin, like access an external service, like a database, or does it have to fit into like existing, um, I don't know, like hooks that, that exist already for CakePHP?
Jamison Bryant
10:06
It can, there are so many plugins, Scott, out there that do so many crazy different things. I mean, It is not, to answer your question, it is not limited to just a small set of functionality. I use a plugin at work that scans all of our controllers and builds the swagger.json file that all the API clients read to understand how our API works. There's another plugin that generates, uh, uh, uh, just a plain old PHP file that tells OPCache how to prime itself to load the application even faster. They're the authorization and authentication plugins, which are the official plugins, by the way, are extremely powerful and integrate with the dependency injection system really well. And that's just 2 of the official plugins that are available. There are probably at least a dozen. I don't have the number off the top of my head, but there are a load of really great official plugins in addition to all the awesome plugins that the community has contributed. And again, plugins.cakephp.org has all the info you could want in addition to packages, in addition to GitHub. You can find all the information on utilizing those plugins right there.
Scott Keck-Warren
11:19
Yeah, so that's definitely like a really cool functionality within it as well. And then so going back to like your bio, you were talking about how you took Ticket Sauce from CakePHP 2 all the way to 5.4. And so what, what was like the upgrade process for that? Like, what is it like if I'm using, so I'm, if I'm, I'm integrated into your framework, right into CakePHP, and what is, what is the upgrade path that I'm going to have to take as new versions come out?
Jamison Bryant
11:48
Well, it is a long and ongoing process. I'll tell you that. What my boss likes to say is it's never truly done. There will always be one more thing to port over, right? But For a production-critical application like what we're talking about, the most important thing is transparency. We have to be able to make this, uh, transition without the end users knowing, because they don't care what version of CakePHP you're on. You also have to understand the urgency of keeping your stuff up to date if you have to undergo a security audit. CakePHP 2 has lots of CVEs and dependencies on packages that have CVEs that really can't be resolved without an immense Herculean effort. So really that is the motivating factor behind getting things upgraded and up to date on the latest version of CakePHP. So to answer your question, how did we start it? I can't get too much into internals, but I could sketch it out. We decided from the jump we wanted to be API first. So we started a brand new CakePHP 5 project using the app template. which allowed us to bootstrap a whole bunch of stuff all at once. And we started out with the basics. We need, we know we need authentication, we know we need authorization, we know we need that swagger.json, just including that community plugin. We know we needed caching. So once we had all of those basics more or less handled, we then had to turn our attention to, okay, how do we actually start porting over the logic? The more research we did, The more we realized that the strangler fig pattern was a great selection for us. And for those who aren't familiar, the strangler fig pattern works by having your old code and your new code essentially run side by side. And you have a switch in between them that you control and you decide based on a variety of factors, whether you want your users to hit the old path or the new path. And it's on you to ensure that the workflow is not disrupted based on Whether they're on the old path, the new path, or a mix of the two. What that allows you to do is to deploy the new code to production over time, slowly integrating, and as things stabilize and stay stable, then you can permanently make that switch to the new code for a specific module, class, or method, and delete that old code from your codebase. It's based off of a plant called the strangler fig. Which surrounds trees and strangles them to death. That tree is your old code and you're strangling it out, out of existence to be replaced by your new beautiful code. So that is a high-level overview of how we got from CakePHP 2 to CakePHP 5. API-first was a big part of it. Tools like static analysis and linting were also a really big part of it. And the strangler pattern, the strangler fig pattern, was chef's kiss, exactly what we needed to maintain that transparency to the end users that is so critical for pulling off a gigantic migration like this without disrupting the end users and without disrupting the business.
Scott Keck-Warren
14:56
And we'll be back after this word from our partners. If you ship software at a small company or an agency, security and DevOps are probably hats you put on between features. Not a team down the hall. Nobody hired you to read CVE feeds, chase Dependabot PRs, or wonder whether that staging box is 3 Ubuntu versions out of date. Hundreds of CVEs ship every week. Almost none of them are about you until one is. CVEs and security newsletters aren't all that useful if you don't know what you're actually running. Install our GitHub app on your repos and our sensor on your servers, and we know exactly what you run everywhere and exactly what's vulnerable. Our CVEs takes a full inventory of everything in your stack and makes it available to your coding agent via an MCP server. Your coding agent and our MCP server help you switch on unattended upgrades, auto-merge dependency bumps, and schedule reboots that clear the everyday CVEs on their own. Then we monitor those automations to ensure that they're actually doing their job and pull you in only when something drifts or a CVE generally needs a human. Once you are automating as much of your security posture as possible, we keep an eye on those automations to ensure that they are working as expected and are sufficient to keep you safe. When something does need your attention, we notify you and your coding agent using our MCP server to help you get through things that can be tracked quickly. Check out ourcves.com. I upgrade from, so like if I'm at PHP, CakePHP 4 right now, and I need to upgrade to CakePHP 5. Or like, let's say 5 to 5.1, like what is, what is the process for that? Like, how do I upgrade? Like the— Yeah.
Jamison Bryant
16:37
You're talking about baby steps. I went ahead and did a long jump, an Olympian long jump. That's okay. So the answer is still very simple. Uh, one of the things that we really prioritize as members of the Cake Core team are really high quality migration guides. So if you're going from Cake 4 to Cake 5, You can find a migration guide on our docs. It's more than just a changelog, although we do have changelogs as well. It tells you exactly what's changing and what's breaking between 4 and 5, and 5 and 5.1, and so on and so forth, so that you can have this reference handy for when you're performing your upgrade. There's no automated upgrade tool. Actually, that's not true. I got to take that back a little bit. We have lately been using Rector more and more to help our users perform automated upgrades. And that's been really, really handy. Not everybody uses Rector, and it can definitely be a very powerful deep cutting tool. So between those 2, I would say a developer has a great series of tools to perform a smaller major version upgrade or minor version upgrade with relatively little difficulty.
Scott Keck-Warren
17:52
Hmm. That's always good to hear. We, look, we are, 'cause we use Laravel and Laravel has kind of a rough upgrade process. Um, it doesn't have like the, the Rector tools. It does have like the, the migration thing. And, um, but we end up having to use like a third-party tool to do the upgrades most of the time, 'cause there's just so many pieces that it touches. So that's, that's always good to hear that, that there's, you guys have thought of those kinds of things with Rector, which I'm also a big fan of. Like we use that heavily everywhere. Um, And then so, um, like, like how was the, the CakePHP, is it like, what is the structure of like the CakePHP project itself? Like, are you guys a foundation or are you just like a loose-knit group of people that are coming together to work on this?
Jamison Bryant
18:32
A little column A, a little column B. Um, CakePHP is operated by the Cake Software Foundation, which was founded many years ago, and it's maintained by that organization in cooperation with partners like CakeDC. And as well as the broad open source community, including contributions from me working at TicketSauce, and Passbolt is another partner that has employees that make contributions to the framework, and the list goes on and on. It is really a melting pot of developers from all over the world and companies of all types that are maintaining and making contributions to the platform. And it results in such a healthy, variegated framework that is something that really makes CakePHP very special to me because someone might say, oh, well, my company needs this. So let me figure out how to make this a valuable contribution to the framework that benefits the entire community. And you can substitute that for any company you can think of, any business case you could think of. And it'll result in a better framework overall. So the contributions that I've seen everywhere from job queues to Swagger.json docs generators to healthy authentication and authorization plugins and beyond, there's so many contributions from different companies coming into CakePHP from all over the world and a ton of different business use cases.
Scott Keck-Warren
20:05
Hmm. That's really kind of interesting. I, I, I, I appreciate that there's like an organization behind it and not, it's not just like, 'cause sometimes we have a lot of these projects, right? Where in open source where it's just like some person like in Nebraska, like there's that, that XKCD thing where it's like the, and, um, so it's nice to hear that there are, there's an organization of some sort supporting all of this thing. Um, so how can our listeners support CakePHP? Like what is a, what is it that, that CakePHP needs from the community most? Yeah.
Jamison Bryant
20:37
Well, uh, we're always in need of translations help. We just redid our docs on VeepPress and those are brand spanking new and, uh, not every page is translated to every language. So if you speak a foreign language and would like to help translate the documentation, that would be wonderful. Uh, we are also in the process of getting ready to start thinking about getting ready to prepare to release CakePHP 6. So there are numerous features on the roadmap for CakePHP 6 that if you wanted to go take a look, all of our work is of course open source and public on the CakePHP GitHub. If you see something there that intrigues you, by all means, jump in. That's how I got my start in the CakePHP community was making small docs tweaks. And then I developed a plugin and then I developed a couple of tweaks for problems in the core. And eventually I was invited to join the core team. That could be the pathway that you follow too, out there, random developer, and we welcome you with open arms. We are a very wide group of people from all different backgrounds, and we welcome contributions from absolutely everybody.
Scott Keck-Warren
21:46
That's good to hear. I got my start, like my first open source commission or like commits essentially, were docs. Like they are an amazing way, 'cause like, Docs are the hard part in a lot of software development to make them like clean and clear and understandable. And like just fixing, you know, just like this sentence doesn't make sense problems is a huge benefit to everyone. So unfortunately, I do have to draw this conversation to a close. Is there any way you want to direct our listeners to before I let you go for today?
Jamison Bryant
22:16
Sure thing. So I blog on my website at blog.bryant.ai. I haven't been as active lately as I should be because I'm super busy, but I do Also post on Mastodon at S;Semicolons, S-S-E-M-I-C-O-L-O-N-S. And I do keep that up to date because I really vibe with the homies on Mastodon. I'll be attending Longhorn PHP here in about a month, mid-October, and I'm really excited for that. It's the first time I'm going in person. I've been attending virtually for the past couple of years. I'm friends with the organizers and it's always a really good time and I'm really excited to go out there. And hopefully I'll also be able to attend PHP Tech next year. I went this past June. Scott, I believe you were there too. And there's always a really ton, a ton of great information at these conferences in addition to the hallway tracks, just talking to people and learning more about them. So I want to invite everybody to come to the conference nearest you, or maybe it's not that close to you because I probably will be there because I love conferences and I love talking to people.
Scott Keck-Warren
23:22
Yeah. And I will be at Longhorn too. So I look forward to seeing you there. So thank you again for all of your time.
Jamison Bryant
23:26
Thank you, Scott.
Scott Keck-Warren
23:29
Yeah, absolutely. I had to say another heartfelt thank you to Jameson for all of his time, as well as for you for listening. If you're not already a subscriber, make sure you subscribe with whatever your preferred method is. This is available both in an audio version on our website, as well as a video version on our YouTube channel. And maybe share this with a coworker who's interested in trying different frameworks. This is Scott Cech Warren for the PHP Architect Community Corner, signing off and reminding you to keep listening, keep coding, and keep reading.