For almost two years, I’ve been quietly working on a new content management system for Ruby on Rails, called PushType. Apart from some scribbles on the open-source whiteboard at Bath Ruby, back in March, PushType has been kept under wraps. The time has come for that to change. It’s time to announce PushType and release it into the Rails ecosystem.
What is PushType?
PushType is a brand new content management system for Ruby on Rails. It is designed for developers and every design decision has been made so that the process of actually building sites is made easier.
PushType takes advantage of the
jsonb datatype in PostgreSQL to manage content models in a unique way. It offers the flexibility of a schema-less database, without throwing away the conveniences and familiarity of ActiveRecord. (Postgres 9.4+ is a requirement)
PushType puts content front and centre (it is a content management system after all). It doesn’t assume anything about your content - in fact you can’t even create any content until you’ve started defining how the content is structured and modelled, and how different types of content are related. It’s an approach that will sit well with design and development teams that treat content as a first class citizen. If you value creating content models and designing reusable content patterns, then this is the kind of thing PushType excels at.
PushType is a Rails Engine (in fact, it’s a few different engines) so can integrate with existing apps or be used as the basis for a whole site. It doesn’t overtake your app or force you to think in different ways. Because you have the convenience of Rails at your fingertips, PushType knows when to get out of the way and let you build features and functionality the way you’d expect to.
Why do this and why now?
I started working on PushType because I had an itch to scratch. Whilst the majority of Push Code’s client work is Ruby-based, we’ve never been satisfied with the choice of content management systems available in the Ruby ecosystem. Consequently, we’ve often ended up turning to PHP-land for projects that require relatively small content based sites or blogs.
It was a desire to wash our hands of PHP that led to PushType’s inception, but as the project has evolved and its purpose has matured, I now find myself viewing the PHP landscape as something to try and emulate.
PHP has no shortage of good content management systems - WordPress being the obvious shining example. For many people - myself included - WordPress has been a gateway to working on the web. Anyone with a little bit of knowledge can get a WordPress site up and running, and begin playing with code, experimenting and tinkering. It’s the first port of call on a well-trodden path into the web industry.
Whatever you think of PHP as a language, it thrives because of WordPress and the influx of enthusiastic minds, eager to learn, that it draws in. That’s a fantastic thing. The industry needs these kinds of channels, and it’s obviously a great thing for the PHP community.
Ruby’s gateway is Rails, but Rails is a completely different beast. You’d learn Rails to build a complex application, not build a simple website. Rails will never be a first port of call to the industry - it’s perhaps a third or fourth step in someone's journey, and at that level there are other competing platforms jostling for developers’ attention.
This is a shame because the Ruby language is a joy to work with, and a fantastic language to learn for people new to the web and programming. This is where I see PushType fitting in. A simple way to get up and running building websites in Ruby. And a tool that allows people to learn about Ruby and Rails, by encouraging experimentation, hacking and tinkering with code. All while being a very capable CMS in its own right.
At Push Code we’ve been using PushType in client projects for over a year. It’s working well, our clients seem to like it, and it fits perfectly with our design and development processes.
It’s now time to expose this project to the wider community.
I’ll warn you, PushType probably doesn’t have all the features you want, it probably has bugs I’m not aware of, and there’s a long way to go in terms of documentation and creating learning resources. But one thing I can assure you it has is promise, and a big positive vision for Ruby.
At this point I want to invite you to get involved. There’s a long way to go before PushType can achieve what I want it to, and only with the support and contributions of the Ruby community is it going to get there.