One of the things that we’ve been discussing more and more here on WP Daily – and in the rest of the WordPress community, for that matter – is viewing WordPress and a framework or platform for developing web applications.
Heck, we’ve even begun to share a few web applications that are built specifically using WordPress.
The thing is, we’ve not actually spent time talking about why WordPress is a viable application platform, how it compares to other frameworks that are already available, and how to actually being using WordPress for Application Development.
Admittedly, articles about WordPress as a framework have a tendency to get a bit, ahem, wordy so if you’re not interested in reading the entire article, I’ll go ahead and share the bottom line here.
WordPress is a viable option for developing web applications because:
- It provides a lot of boilerplate functionality out-of-the-box
- It has a rich set of API’s that make modifying and/or extending functionality relatively easy
- It provides a logical way of separating presentation from functionality, if done correctly
- It’s under constant development with an active community
- It has significant familiarity and adoption among web property owners and end-users
Of course, we’ll be discussing this in more detail, and though I think that developers and designers will tend to resonante with this article more than anyone, hopefully it’ll spark the interest of those of you who are on the fence.
But before talking about why it is viable platform, we need to talk about why it’s not viewed as such.
“WordPress isn’t an Application Framework”

“Application Framework? No it’s not.”
This is relatively common to hear from people who are skeptical about building applications using WordPress. I don’t think we can blame them, though, and there’s a couple of reasons why.
- The branding of WordPress sounds like a publishing platform – not a development platform.
- For many, WordPress is used as a way to blog, not to build software
Compare this to frameworks such as, say, Ruby on Rails, ASP.NET MVC, or CakePHP, the branding is vastly different. On top of that, WordPress itself is an application where the aforementioned frameworks are just that – they are foundations for building software and nothing else.
As such, it’s very easy to dismiss WordPress as an application and nothing more. But I’d argue that if an application has an API, then it’s clearly supporting development – it’s asking for others to build things on top of it.
The WordPress Application Framework
As mentioned, WordPress is a viable option for developing web applications. This is not only evident by some of the sites that we’ve shared, some of the things that those of us in the community have built, but based on a lot of the boilerplate functionality that WordPress provides.

Think of aa framework as scaffolding for building software.
Boilerplate Functionality
Out of the box, we’re given:
- Authentication. That is, session management for users logging in and out of the system.
- User Levels which make it easy to grant new and existing users varying degrees of access throughout the system.
- Presentation functionality via themes and templates.
- Extensibility through the Widget API and the Plugin API.
- …and more
On top of that, we have the ability to customize almost anything in the dashboard. Not only can we add new menu options, but we have the ability to completely remove (or limit, based on user roles) options for users.
Rich API’s
Of course, building web applications consists of far more then being able to simply manage users and sessions (assuming your app even offers those features).
It also includes being able to easily introduce new functionality for certain situations. This can be anything associated with saving custom information related to any model-type aspect of WordPress (think User, Post, Page, etc), or introducing new ways to associate data and models with one another (think categories, tags, or taxonomies).
But part of being able to think creatively using the available API’s is to shift your thinking from WordPress’ native features to more general abstractions.
For example, Pages, Posts, and Custom Post Types are all native to WordPress. In the database, they are all stored in the `wp_posts` table, but from a development standpoint, it’s much easier to think about them as models.
Or, more simply, a way to represent your data.
For example: A model for a post would include the attributes of a title, content, and a date of publication. Similarly, custom post types essentially afford us the ability to create our own models. Couple that with custom post meta and the ability to create absolutely unique representations of data is easily doable.
Separation of Concerns
For a while, MVC was all the rage. Then it was MVVM. I don’t know what’s next, but I do know that as much as I’m a fan of MVC, it’s not the holy grail of application development. Instead, it just happens to be a popular design pattern that works well for web applications.
But WordPress follows its own model through hooks – specifically actions and filters – that not allow us to hook into the page lifecycle and manage data prior to being send to the user.
Secondly, I believe that WordPress does a relatively good job of making it easy to separate design from functionality. Specifically, themes should be responsible for rendering and styling the data and plugins should be responsible for adding functionality.
The thing is, developers often mix the two – that is, they implement both functionality and presentation into themes ultimately blurring the lines between what a theme really is.
But if you’re looking to build web applications with WordPress, then it’s completely possible to have manageable code base permitting that you make sure to properly take advantage of actions and filters and logically separate your design from your functionality.
Active Development
Finally, WordPress is not stagnant. In fact, it’s far from it. Where as certain development frameworks will undergo years of silence before the next version is released, WordPress is released and updated several times a year (and people still complain!).
Although I’d argue that frameworks such as Ruby on Rails are more opinionated in the various dependencies they include (and I’m not saying that’s bad), WordPress does good job of making the changes and discussion apparent on Trac and allow other developers to discuss it, implement, commit changes, and more.
Granted, this requires that developers stay on top of the changes and the API’s to make sure future versions don’t break compatibility with their existing software, but this isn’t something isolated to WordPress.
Above all else, WordPress is growing, maturing, and continually offering better API’s and functionality that not only enhance the lives of digital publishers, but increase the possibilities of what developers are able to build using the system.
Build It With WordPress
By trade, I’m a developer and for the past couple of years I’ve built applications and projects almost exclusively in WordPress so this particular topic is near and dear to me, so I clearly love discussing it – heck, I’d consider myself someone who evangelizes it.
On top of that, Matt mentioned that WordPress is headed in this direction in this latest State of the Word.
But I don’t want the discussion to stop with this post – I’d dig hearing you guys’ thoughts and opinions, praises and criticisms, and struggles and wins with building things with WordPress.
So have at it – the comments are all yours.








This is something I’ve been pondering, especially now that I’m expanding into app development. Is anyone out there already doing this? I know there’s some books about it (I’ve got a couple in my reading queue), but with some of my upcoming projects I’ve laid out this year I may consider implementing this method.
Doing it. I’ve got a client project that I’ve been working on for 2 years of analysis/design, development, and testing and just just getting ready to come out of beta. It’s a fairly extensive/complex online application (freemium SaaS business model) built on multisite. Have not once been sorry for making that recommendation at the outset — WP has given us a huge development boost, and the development direction WP has taken over that time (including the upcoming 3.6) has only reinforced that decision.
I’ve done a couple of applications recently. One was very small scale; however, the other reached a very wide audience sustaining a load of several thousand per hour.
Obviously, a lot of this has to do with server configuration, but it also depends on your ability to write well-crafted queries using the built-in API’s (such as
WP_QueryandWP_User_Queryand so on).In my opinion, it’s also worth thinking about posts, pages, and custom post types as models and the associated templates as views.
That’s what helped me begin thinking about developing true apps with WordPress – not just, say, themes or plugins (although I do more of those, of course).
I think WordPress as an application engine works great when you are creating a distributed application. It has solid well defined apis, nice distribution channel plus all the advantages you listed.
When building a hosted application and given the choice I’ve opted for a non WordPress solution. and don’t get me wrong , WordPress could do it, but not as easily.
Here are some of the disadvantages I encountered.
Lack of proper relationship modeling, though you can use this as a work around
http://wordpress.org/extend/plugins/posts-to-posts/
Lack of a proper validation class. I know there are functions and you can create callbacks on the validation or build a custom one, but most frameworks have this built into form submissions.
Custom Post Type create their data as meta. Querying this data can become quite complex multiple queries. When giving the choice to store my data as a CPT or flat table, I prefer a flat table.
No proper routing api. Yes I know you can use the rewrite api but it just not as easy as an established framework.
So while yes it can be done I’m not sure it always easier or more efficient. In the end choose the right tools for the job.
Anyone know if VaultPress is built on WP?
You bring up some good points. It seems like your bottom line is that it’s always best to use the most appropriate tool for the job.
The challenge is that sometimes we – as developers – aren’t aware or don’t know another platform with which to use, so there’s always the [fun] learning curve of picking up something new.
To all of your other points about functionality that isn’t truly wrapped in an API (such as rewriting), I think you’re spot on. It’s possible to do a lot more with WordPress than some of what the API offers.
Case in point: I’ve been working on one app that’s using RESTful routes using the WordPress rewriting mechanism. It’s had a steep learning curve, but it’s possible.
As far as VaultPress is concerned, not sure. Seems like it’s more of an app for WP ala a plugin.
Great points. We’ve built an SaaS type app using wordpress as a framework (it’s a registration and constituent management system tied to the clients’ front end website). Yes, you do get a lot for free, such as custom post types, but as soon as you start to deviate from what comes out-of-the-box you’ll get headaches. For example customizing the custom post listings or edit screen. One of the biggest hassles, which John mentions is the poor storage of meta data for posts. Everyone says “use taxonomies” but that does not cover all use cases – such as custom date storage. Querying on meta data is really really slow and forces us to write extra caching to get around it.
Hi,
now that we have Backbone.js within WordPress core, we have no limits to use WP as an application framework anymore, IMHO. So now, with backbone.js the MVC can happens easily inside plugins and themes, for example. I started a sample project that is not finished, but there you can find the famous ToDo application sample. Now I just need some time to make models talking with a WordPress model (custom post type, for example). I think this little application will be finished and ready for anyone to fork and start their own applications.
https://github.com/trsenna/zoobie
Please, continue walking about WP as application framework. I really appreciate this and I’d love to see more guys experimenting this and sharing their ideas!
Bye,
Thiago
Love it, Thago. Thanks for sharing this and dig hearing your interest.
The thing about Backbone being included in WordPress that it’s also included along side jQuery so full adoption of MVC – at least on the client side – probably won’t happen for a long time.
Personally, I’m still a fan of using jQuery, though Backbone.js is on my list of things to do (always an ever growing list, right)?
Even still I’m not implying MVC or MVVM or any other pattern is the way to go – embrace what the application provides – but always aim to improve.
*Sighs* it does not need complex explaining such as this which does nothing but sound confusing. I’m an innovator not necessarily a hardcore developer who codes from scratch.
WordPress and its dashboard can be themed and coded to manage inventories, staff, create social networks on the front end and back end, and beyond.
http://www.oxvodesign.com/nosneb
This is a work in progress project I consider a web app. It is simply a theme coded to operate as an mp3 player for the music project. Yes it is a website and WordPress but that is not its intended purpose. Its purpose is to be used as an easy way to share, stream, and download the music release. NO WAY IS IT INTENDES FOR PUBLISHING CONTENT. In no way is the client interested in blogging. We are simply utilizing WordPress for its functionality and the fact that we can easily share the project via giving out a a simple .com
My clients aren’t interested in publishing content. And personally were more interested in creating innovative new uses with WordPress rather than simply always focusing on publishing. So I love the fact that you guys are starting to expand on this topic.
Thanks !
http://oxvodesign.com/nosneb – working link
Love the feedback! Of course, the post content wasn’t meant to be as confusing as it was comprehensive.
The thing is, there are a lot of developers that are beginning to look at WordPress as a viable platform for application development, but it’s approach to doing tasks that we’re do used to doing in other languages in other ways is quite different, so it’s worth touching on all of those options.
That’s not to say that you can’t build in app in the way that you’re sharing, either – there’s no single way to build an app, and there’s no right way to do everything.
instead, there’s a variety of different ways. It’s becoming exceptionally easy to do “plugin and play” apps; however, it comes to code, although there is no right way, there are often significantly more correct ways.
Definitely difficult to convey that in all of the above, but that’s what comments are for, I suppose
IMPOSSIBLE! for that puzzle piece to fit together
Haha thanks for hearing me out Jared, Chris, Tom, and John ! Really interested in getting the community to see outside the WordPress “box” what should be done and what shouldn’t.
When building for clients, not everything is needed at a massive scalable level.
Straight up – we love hearing others’ opinions outside the box. In fact, we love hearing opinions that are in line with a post, and those that aren’t.
And you’re 100% right – not everything is needed at a massive scalable level. I just think things should be done at a massive level of quality
.
I do agree with you guys though at the same time which is the reason I love coming back here now. I know I come from a different background and a style of “winging it” rather than by the book and “what should be done” … And that is the beauty of it, theirs is no right or wrong way per say. Trust me, their are a lot more like me who are new to wordpress but not necessarily new to creating, building, and profiting. WordPress is a web development platform in my eyes and my small team (recent college graduates) has already begun to profit from building solutions with WordPress.
I didn’t use the image so blame the editor of this post. I think he’s a blonde headed wonder.
I’ve been waiting so long to read a post as comprehensive as this one.
Every single written word is so true that it hurts!
I also very much agree with your point that WordPress is branded as a blogging platform (since some people tend to confuse WordPress with WordPress.com which is mostly about blogging) and that it causes people to question what WordPress can do.
Maor – appreciate this comment! Very glad to be able to provide such a comprehensie post.
Always dig your thoughts, as well.
Speaking of which, feel free to write for us sometime. It’d be a shame not to have you espouse some wisdom to the readers..!
So TRUE !
Hi Tom,
Loved your article. I had this idea for quite a few times back. I was just getting started with PHP and WordPress a few months ago.( I am a newbie here.). Two of my close friends wanted to open up a restaurant in our hometown and they wanted a website for the same. I came forward with the idea to develop a custom CMS to handle their website and their business transactions for the restaurant. Just like a hybrid of a CMS and Accounting app.
It’s around half a year from that decision and I’ve spent every single week, I can remember, in researching various frameworks, languages, libraries etc. I had considered to built on top of WP, as I love the way WP works and everything about it. But got confused at start, so I moved to other options. But after reading this article, I am now confirmed that no framework, but WP, can give me a great foundation. Its rich set of API and excellent documentation can give me a head start. But as I’ve mentioned, I am a total newbie here, so I would like some assistance in this topic from guys like you, who have already used WP as an App Framework. Meanwhile I’ll try my best to understand WP and its functions. Lastly this was a truly inspiring article, thank you so much.
Sameer,
Thanks so much for the comment – love hearing that kind of stuff and that’s exactly what the team at WP Daily is aiming to achieve.
As far as your friend’s restaurant site is concerned, I dunno if you’ve already setup a site but be sure to check out Happy Tables – it’s a WordPress application specifically for that.
Also, although we may talk some tech and code here on the blog, I highly recommend checking out a few other blogs that focus specifically on writing code for WordPress (such as WPTuts+.
Stick around, though. We’ve got lots of cool ideas planned for the site
.
Thanks for the response Tom.
I didn’t know about Happy Tables, thanks for sharing. I’ve got my hands on it, and it’s looking cool. For my friend’s website, it’ll definitely be useful for him. It looks like Happy Tables have everything we need for a restaurant site and is pretty good actually. But we have some custom features in mind. I’ve started conceptualizing our requirements and will start developing the app soon.
I’m also spending a good amount of time in both Codex and Settings API Series from WPTuts+. I’ve got everything good so far and will soon be kicking some code. Looking forward for your new ideas for the site and further discussion on this topic.
Perfect – it sounds like you’re doing exactly what you should be to up your game!
One point to consider: Happy Tables is WordPress, so any functionality that you’d like to add could be done as a plugin that you just install alongside core.
Either way, good luck with it!
It’s extremely strange that I’ve been reading an article, using the techniques, following various steps from the article, but did not notice who wrote that. Thanks for the Settings API series at WPTuts+, Tom. It’s very helpful and well written.
Thank you, sir
It’s not hosted WordPress, like WPEngine, it’s WodPress Multisite like WordPress.com so you can’t use any custom plugins like you can’t on WordPress.com
Tom, thanks for writing this. I’ve been doing a lot of thinking about this topic (building web apps with WordPress) lately and will be getting much more public about some other efforts around this soon.
You covered things really well in this article.
The main difference I see between using a “traditional” MVC PHP framework vs. WordPress is that with the traditional frameworks you typically start with a blank slate and build things up module by module as needed.
With WordPress, you start with a very simple app (the blog basically – with authentication, a dashboard, pages, etc), then add AND REMOVE things until you get the app you want.
Besides not knowing what modern day WP is capable of, I think this removing things step is what many of the “WP is not a framework” people are really reacting negatively to.
Maybe this analogy works: Using traditional frameworks is like using Lego blocks. Using WordPress is like sculpting a block of clay.
Education and more real life examples will help with the perception of WP as a framework. Also, listening to the critics and selectively tackling some of the updates to core that will make WP a better framework will help.
Another thought I had was to show some bare bones applications built using WP in the “ground up” manner. So hide the admin dashboard and deactivate WP_USE_THEMES and just start with some code. Maybe selectively load WP classes and helper files.
However, this is like putting a square peg in a round hole. WP isn’t really built to be used that way, and it’s not smart to try to use WP that way. The only purpose really would be to try to validate WP for the traditional framework guys. Buy instead of wasting energy doing that, let’s just build cool stuff to convince them that the WP way is a good, viable way of doing things.
Agreed! Very True.
Jason – you’re not alone. I think that a lot of people who have been active in the development space for sometime are beginning to take notice at what’s possible with WordPress.
Or they are, at least, considering what’s possible.
Personally, I’ve been building all of my work on it for the past year or so and it’s performed very well.
And I agree with you in that the difference in WordPress and other frameworks is that we don’t have to start with a blank slate. Technically speaking, WordPress isn’t a framework. It’s a foundation. Rails or CakePHP are frameworks.
But even in those cases, you’re able to put together some relatively powerful boilerplate code (such as user authentication) for Rails using gems like Devise.
Regardless, half of working with WordPress is taking some of the things away – or at least making them inaccessible – to the end user, so it does feel a little funny to start building an application from the position of taking things away.
^ Amen to this.
Hey Tom!
“And you’re 100% right – not everything is needed at a massive scalable level. I just think things should be done at a massive level of quality”
So true! And it is going to be very interesting to see how WordPress based apps work and evolve with fast growing traffic.
Agreed. Personally, this is still an area that myself and the rest of the team are exploring.
We’re currently tinkering with our own WordPress-based application and scaling is just one component of it – and I’m not talking about doing the usual plugin configuration. I’m talking about tweaking servers and modules before you even get to the “application layer” that is WordPress.
It’s been an adventure, for sure, but I’ve been really happy with how it’s gone so far.
OMG heck yeah WordPress is an application platform. I’m starting to build an application that I plan to distribute to anyone who wants so they can run it on their own website. I love seeing the things the WordPress community comes up with like this Basecamp clone that runs within WordPress -> http://wordpress.org/extend/plugins/wedevs-project-manager/
Dude, nice find. Thanks for sharing this!
It will be interesting to see how WordPress develops as an application development platform, looking forward to see how people use it and what can be built.
Same – we’ll cover them as much as possible here, as well.
Also check out WP Remote. I’m a developer who works on it (its developed by the company I work for – we also build Happy Tables)
Killer work, dude. Went ahead and covered it, too.
This is a amazing time and market for WordPress designers all over the globe. This is because of the need for WordPress application and also WordPress is well-known as a impressive device to increase the success of a web page so it is recommended by many site entrepreneurs in comparison to other writing a blog systems and resources on the internet.
Well put, Tom. I have been developing on WordPress for quite some time, but was wondering if it was viable as an Application framework. If anyone questions that notion, I can just refer to this post for reasons why. Thanks!
Thanks a lot, Jeff! That’s been the goal of this post all along. Very glad to have it serving its purpose!