Fancy Node.js-based blogging app Ghost goes live to backers

We go hands-on with the app that aims to leave "old guard" PHP-based blogs in the past.

In the world of blogging, WordPress is the undisputed leader—the PHP-based application is everywhere. Once a light-weight blogging platform, WordPress has grown and mutated. It's now more properly a full-fledged content management system than a simple blog, and it's sprawled all over the Web. In fact, I guarantee you if you're reading these words then you've been exposed to WordPress (Ars Technica switched to it as our CMS a couple of years ago). In the world of Web-based blogging apps, WordPress is the unchallenged king—we even have instructions on how to set it up yourself if you want to take that plunge.

But WordPress draws fire for lots of reasons, not the least of which is the complexity that has come from attempting to be all things to all people. The WordPress dashboard is cluttered and can be extremely off-putting for a new user. Power users unconcerned about interface clutter are more likely to be put off by its PHP underpinning, because people love to hate PHP. There are alternatives—my own blog uses Octopress, a static site generator based on Jekyll—but they often require donning additional propeller-topped beanies to set up and maintain.

Enlarge/ Ghost's main window, showing posts on the left and a preview on the right. The two-pane layout extends to editing, too.

Lee Hutchinson

And then there's Ghost. Founded by ex-Wordpress UI Group deputy head John O'Nolan and WordPress developer Hannah Wolfe, Ghost is a new blogging platform that's just unleashed the first semi-public release of its application. Development so far has been funded by a successful Kickstarter, and the application is barreling toward a full public release in the near-future (currently, only Kickstarter backers have access to the code).

Ghost is coded in Node.js, a server-side Javascript execution engine that's all the rage these days. The Ghost developers characterize Ghost as a ground-up revisualization of how blogging works; it's intended to have a very light user interface with nothing separating the blogger from the words he's blogging. Ghost is also meant to present some extremely easy-to-grok analytics in a responsive dashboard so bloggers can keep track of who's reading about what.

The dashboard isn't really in yet, but Ghost is functional enough at this stage to use in production—so we're doing just that.

The UI

I backed the Kickstarter, and I've been playing with the application over the weekend. I haven't migrated anything from my primary blog over, but it's certainly been a fun experience to get going. The interface is sparse but refreshing—on logging in, the user is presented with a dual-pane view listing posts on the left and a preview of the selected post on the right. There's an obvious green "+" button to add a new post, and the default typography is light and clear without a serif typeface to be found. Across the LAN and on a lightly loaded server, all aspects of the UI are lightning-quick.

The dual-pane layout extends to editing, too. On creating a new post, the application presents the user with an edit pane on the left and a live preview window on the right. Markdown is the language of choice with Ghost, though the presence of a small "MARKDOWN" note above the text entry window hints that additional parsers might be offered via plug-in later.

The live preview is responsive and sprightly, quickly converting your Markdown text to pretty final text. It's an improvement over an older "WYSIWYG" editor, because it's easy sometimes to get trapped in complex layout loops with a WYSIWYG editor—things that should be simple result in stupid amounts of code and get worse the more you try to fix them. Here, you're writing the code directly and also seeing the result immediately. Markdown's extremely simple syntax keeps the code view almost as clean as the final view. And if you get lost on some Markdown that you don't often use, like double-nested lists or whatever, there's a nice Markdown help pop-up you can consult instead of having to hit Google. Posts can be tagged at the bottom of the edit window for categorization and searching. And, in a great boon for writers who care about their word count, Ghost displays a running tally of your wordiness above the preview window.

Enlarge/ Ghost's post editing window, showing a live preview of what you're typing.

Lee Hutchinson

The posting engine is currently a very simple one. Posts can be in draft or published. A published post can be un-published and turned back into a draft if needed, but there is no system of scheduling posts to publish at certain times. When creating a post, you have the option of specifying a custom URL. Otherwise, a URL generated from the post's title will be automatically used.

Adding images to posts is beautifully done—images can be dragged directly onto a target in the edit window. The application automatically uploads those images to a directory on the Web server and embeds the image into the post you're writing.

There currently aren't that many settings to tweak, since Ghost is still early in its development (the version released to backers is "0.3.0"). You can supply a custom title and title page image for your Ghost blog and do a small amount of customization on how the front page looks. You can also specify alternate themes, though the default theme, called "Casper," is the only one officially available right now.

Another thing currently missing is multiuser support. The 0.3.0 launch version of Ghost allows you to create a single user when you log onto the system for the first time. That's it—for now anyway. The Ghost team will be adding support for multiple users (and, presumably, some role-based security to go along with that support) in the future.

The big missing feature, of course, is the heavily touted dashboard. It looks nice, and it certainly has some fancy animation effects on it. However, in the interest of getting a functional release out the door to the Kickstarter backers, it's not yet implemented.

Responsive by design

Enlarge/ The responsive design alters elements of its layout to fit narrower—or mobile—screens.

Lee Hutchinson

The Ghost editor window and the publicly visible reading interface both eschew dedicated mobile themes in favor of responsive design. For those not totally up on the lingo, this means that as the browser window gets narrower, the page elements resize and rearrange themselves to fit. This allows a single, well-planned layout to look good on anything from a smartphone to a wall-sized screen. When editing posts on a small-screened device, the editor window goes from two panes to a tabbed layout. You lose the live preview but keep screen real estate for editing.

Published posts have some nice, understated chrome added to them. RSS is automatically generated, and posts have Twitter, Facebook, and G+ share buttons automatically appended to them for easy sharing. Plus, the buttons rearrange themselves appropriately as the page dimensions change, just as responsive elements should.

A word on setup and the hosted future

There are lots of things that early adopters will want to jump in and start tweaking. For now, getting at all but the most basic settings requires digging into the code yourself. There's no easy option to modify Ghost's visual elements, nor is there an interface-driven way to add or remove plug-ins. Themes, too, must be manually installed and removed via the command line rather than through a GUI.

Right now, Ghost must be run on your own, but the Ghost designers have positioned their hosted offering as being a major portion of the Ghost experience. According to the Kickstarter and the features page, the hosted version will be "the most powerful way of running Ghost." We'll keep tabs on it, but in the spirit of our past coverage, we'll focus a lot more on actually setting up and running self-hosted Ghost once the platform reaches maturity.

Seeing for yourself

Though there's only a single post to poke at, you're welcome to check out my self-hosted Ghost set-up for yourself—it's at ghost.bigdinosaur.org. I'm currently reverse-proxying the actual Node.js application behind Nginx, and static assets are served via Varnish (check the headers). Responsiveness with a single post is obviously quite nice. And keep in mind that the Web server is being used to host several other production sites, including a Ruby-based Discourse forum.

For only being a semi-public beta release, the software is extremely polished. For a single-user site that doesn't need post scheduling, Ghost is already perfectly functional and eminently usable. Folks leaning on WordPress for light personal blogging would do well to consider Ghost—it's nice, it's light, and it's a lot more suited to the task.

These newer lightweight blogging platforms seem like a step backwards to me. I've used WordPress on and off again for years ("Hmm, maybe I should create a blog?"). The early days of wordpress required the propeller beanies, and I would always drool over the cool integrated gallery, blog, and regular websites that others would hack together. Today's wordpress does quite a bit for the casual blogger without needing to edit code. It even supports in-app upgrading and backups. Software like Ghost just seems like saying, "well we've finally finished WordPress to a good place, let's start over and do it again."

Just one thought: many people who turn their noses up at php may not be particularly fond of JavaScript either.

JavaScript has some strange design choices, but it's hardly comparable to the slow, broken, insecure mess that is PHP. I do find it interesting that they didn't use CoffeeScript, but JavaScript isn't really a bad language, it's just unusual.

Looks very promising. I hate WYSIWYG editors and end up constantly pushing a preview out to see what it looks like. Having the preview automatically update is a killer feature. I'll definitely be looking out for the final release.

I think that the reason that Node.js has taken off is because it marries a relatively easy to understand and learn language with a fast runtime and a highly asynchronous API. While this certainly isn't everyone's cup of tea, it solves certain classes of problems very well. Not having to thread your application because you're stuck waiting for some blocking call to finish is very compelling. Also, I think that a lot of people tend to look down on JavaScript because of the difficulties/limitations found in the browser. You have to worry about cross-engine compatibility and backwards compatibility in the browser, which makes web-dev more frustrating than it could be otherwise. However, Node.js doesn't suffer from this because it's running on a single JavaScript engine that is kept really up to date. I tend to think of Node.js as JavaScript as it should be.

For the record, I'm a Node.js developer by profession.

OT: I'm really excited about this...I'm definitely going to play with it tonight, and I may even consider moving my personal blog over to it.

I recently switched from Wordpress to Pelican (a python based static website generator) and couldn't be happier. The site is served from a ram disk, and since it's just HTML, can easily be moved to other servers. The content is stored on GitHub, so adding multiple users is as simple as the other users cloning the repo and submitting pull requests.

If Ghost would create a static website, I could see a reason for it, but as a hosted blog site I don't know why I'd use this over Wordpress.

I love to see this take off but all the cheap hosting sites don't offer node.js and are unlikely too anytime soon. That's the niche PHP fills and why it's on every cheap ISP.

cgi is bad because it launches a new process for each request. It's very heavy and kills the server

python and node.js based servers are bad (for hosting sites) because they require a dedicated server (or virtual server) per website.

PHP is the only solution that offers tons of independent websites running on one server (virtual or not) without being too heavy like CGI. That's the niche it fills and it's not likely to be replaced until something better fills the same niche

The first link is mostly hyperbole without mentioning any problems explicitly, but I do recognize some of the complaints in the second link! :-)

I'm not here to defend php, but I do have a soft spot for it. It was that or aspx.

Jeff may not mention any problems explicitly, but I think he still makes his point: there are so many problems that are so systemic that trying to talk about it in specifics is difficult.

Also, a lot of people hold web forms (aspx) in pretty low regard as well, and for similar reasons. When you make programming tools for non-programmers end up sacrificing consistency and sanity for simplicity. You give people power without responsibility. Uncle Ben would not approve.

Fancy Node.js? WordPress, the unchallanged king? How marketroid. Drupal and Joomla! immediately come to mind as more-than-worthy challengers. I'd hardly call a framework that has yet to abstract database support a "king."

Looks great. Like the nice clean layout and the fact that they eschew WYSIWYG editing in favour for Markdown.

Just wondering if they support any of the Markdown extensions, like using pipe characters for tables or tilde characters for code blocks. I've used a few web-based Markdown editors and it does get a little irritating having to add four spaces for every line in a code block, particularly when the Tab key is used to move to the next field.

Software like Ghost just seems like saying, "well we've finally finished WordPress to a good place, let's start over and do it again."

I feel like that's always the temptation when learning a new language or piece of software. However, there are often specific use cases for specific languages, and I think it's generally constructive to evaluate each language's strengths and weaknesses before committing to using it throughout your entire platform.

With that said, I'm not sure something like Ghost takes advantage of the areas where NodeJS really shines. I could understand if this was a live / real-time / collaborative blogging platform, or if the UI elements were the most stressed part of the system, but that doesn't seem to be the case here. It seems like the only parts where using NodeJS would really matter are limited to being used by a single user (the author).

Of course, it's completely understandable that a developer who spent considerable amount of time working on the Wordpress editor UI would only primarily concern himself with the tangible benefits that NodeJS would bring to bring to his own project's UI. I guess it all depends on where your priorities and personal preferences lie...

I love to see this take off but all the cheap hosting sites don't offer node.js and are unlikely too anytime soon. That's the niche PHP fills and why it's on every cheap ISP.

cgi is bad because it launches a new process for each request. It's very heavy and kills the server

python and node.js based servers are bad (for hosting sites) because they require a dedicated server (or virtual server) per website.

PHP is the only solution that offers tons of independent websites running on one server (virtual or not) without being too heavy like CGI. That's the niche it fills and it's not likely to be replaced until something better fills the same niche

free as long as your not using much cpuherokucloudbeescan run nodejs on your free starter - micro (for the first year anyway) on amazon ecs

I've been writing in languages from raw machine code to Python for 30+ years. Probably the majority of that was C and C++.

Done a LOT of PHP. Done a LOT of JavaScript.

Neither one of them is anywhere near ideal, for a number of reasons, but there ain't no such thing as an ideal language.

Just the best tool for the job at hand.

I use PHP because of the near-universal support on hosting servers. I use JS, because it gives me a pretty powerful client-side capability. Most of my work marries the two. PHP on the server end, combined with JS and CSS on the client end.

It's not a religion. Folks who don't like the languages aren't heretics, and no language is so good that it can be used in all contexts.

For example; every couple of years or so, someone comes up with a language that will "end the tyranny of C++."

As Dr. Phil likes to say, "So, how's that workin' for ya?" HINT: Google "Herb Sutter," and see where he works.

I'll be interested in seeing how this does. Even if it doesn't take off, then maybe node.js will become more ubiquitous.

I love the idea and am kicking myself for not knowing about it and backing it... I can't wait to play with it. But there is one caveat!

I wouldn't recommend Nodejs to a beginning programer! It's kind of like sticking a new driver in a race car... nodejs deployment (while a walk in the park compared to Ruby) is not immediately as easy as copying files from localhost to server, it depends on a different hosting paradigm (almost universally cloud based AFAIK), and there is just a bit too much power readily available.

So, that all said... why? I'm not a Nodejs wizard but I could put together a basic CMS in about two days.... and I'd know the codebase and be better equipped to support. I feel like the people interested in this are also the people able to build it themselves.

I think that the reason that Node.js has taken off is because it marries a relatively easy to understand and learn language with a fast runtime and a highly asynchronous API. While this certainly isn't everyone's cup of tea, it solves certain classes of problems very well. Not having to thread your application because you're stuck waiting for some blocking call to finish is very compelling. Also, I think that a lot of people tend to look down on JavaScript because of the difficulties/limitations found in the browser. You have to worry about cross-engine compatibility and backwards compatibility in the browser, which makes web-dev more frustrating than it could be otherwise. However, Node.js doesn't suffer from this because it's running on a single JavaScript engine that is kept really up to date. I tend to think of Node.js as JavaScript as it should be.

For the record, I'm a Node.js developer by profession.

OT: I'm really excited about this...I'm definitely going to play with it tonight, and I may even consider moving my personal blog over to it.

EDIT: Oh yeah, and markdown FTW!

Nodejs is NOT easy to learn. It's easy to mess with, but effective use requires a good understanding of closures, CPS, and other functional concepts. These are fairly advanced concepts that the majority of programmers (good or bad) don't know well and they can seem counter-intuitive if you've spent your life in a proceedural world. Not everyone thinks functionally like you and I.

Despite all my time programming in JS, I still find myself wishing Brendan Eich had been allowed to use pure scheme instead (maybe with M-expressions and a prototype object system). JS would be a generation ahead if this had happened.

I hate WYSIWYG editors and end up constantly pushing a preview out to see what it looks like.

Around a decade ago, I blogged daily through a Movable Type installation, which was also non-WYSIWYG -- and I ended up, as you put it, constantly pushing out a preview to see what it looked like. When I eventually moved over to a platform that used WYSIWYG, it was a huge relief to actually focus on the content, style & quality of my writing the entire time and be able to see instantly if I forgot to italicize or center some text.

Finally a CMS with native Markdown support. WYSIWYG is not a curse, but for bloggers who regularly mix code samples or write Math equations in MathJax, WYSIWG is infuriatingly over smart.

On my Wordpress I use WP-Markdown plugin. This has the best implementation, with one caveat. It does not store the Markdown code. Instead converts that to HTML. On edit it converts the HTML back to Markdown, with sometimes unexpected results.

The general public opinion of server-side JS is still quite impressive to me. People have very strong feelings about it, most of which I think are rooted in having worked with JS exclusively in the browser - an environment which has sucked for many years.

Node.js just doesn't suffer from that downside. It's always running a very current version of Google's V8 javascript VM, and the core node.js team is extremely open about their thought processes and advancement plans. They're people who are living in the trenches with the rest of us web devs, and donating their time to creating something new, wonderful, and powerful for all of us.

All of the new deployments I have done in the past year and a half have been node.js. Everything prior to that was PHP. My experience has been that maintaining and debugging PHP applications is considerably more time consuming than with node.js. That said, the two technologies are not 1:1 comparable, and they do not solve all of the same problems. Furthermore, naïveté of the way JS really works can get you into serious trouble, particularly in the performance category. I'll echo what others have said above: learning how to code in node.js is not easy. Javascript is deceptively approachable, but it's important to get past the knowing just enough to be dangerous threshold as a developer.

If you take the time to really hone your skills, understand the language, and apply good practices, the power that node.js brings to the table as an application engine is pretty breathtaking. Myself, and my team, will never look back.

Looks like a great piece of software! Like others though, I really wish it wasn't written in JavaScript. Like it or not, JavaScript is very unstructured and not comparable to languages like Ruby, Python, and PHP when it comes to server-side website development. Besides threading the initial HTTP requests, there is not much need for asynchronous behavior on the server-side of things for most websites. So unless I'm making a chat server, I think I'll pass on the JavaScript. Even then I would probably use Go.

I think that the reason that Node.js has taken off is because it marries a relatively easy to understand and learn language with a fast runtime and a highly asynchronous API. While this certainly isn't everyone's cup of tea, it solves certain classes of problems very well. Not having to thread your application because you're stuck waiting for some blocking call to finish is very compelling. Also, I think that a lot of people tend to look down on JavaScript because of the difficulties/limitations found in the browser. You have to worry about cross-engine compatibility and backwards compatibility in the browser, which makes web-dev more frustrating than it could be otherwise. However, Node.js doesn't suffer from this because it's running on a single JavaScript engine that is kept really up to date. I tend to think of Node.js as JavaScript as it should be.

For the record, I'm a Node.js developer by profession.

OT: I'm really excited about this...I'm definitely going to play with it tonight, and I may even consider moving my personal blog over to it.

EDIT: Oh yeah, and markdown FTW!

Nodejs is NOT easy to learn. It's easy to mess with, but effective use requires a good understanding of closures, CPS, and other functional concepts. These are fairly advanced concepts that the majority of programmers (good or bad) don't know well and they can seem counter-intuitive if you've spent your life in a proceedural world. Not everyone thinks functionally like you and I.

Despite all my time programming in JS, I still find myself wishing Brendan Eich had been allowed to use pure scheme instead (maybe with M-expressions and a prototype object system). JS would be a generation ahead if this had happened.

Oh yeah I completely agree. Just like the web, it's easy to write a Node.js app, but it's pretty hard to write a good one. I'm mixed on going with pure Scheme instead of the inspired by Scheme language we got though. Scheme can be pretty intimidating to new users due to its heavy use of lambda calculus, and JavaScript's low barrier to entry is one of its greatest strengths IMO, even if it's simply due to JavaScript being relatively good at hiding it's complexity at first glance. That said, there is much to be said about how much the language has lagged behind in terms of how slowly it's been advancing. I do have hope that this is changing though...ECMAScript 5 is only 4 years old and ECMAScript 6 is about to land. I've talked with a few people on the TC39 board who all say that they are trying to move to a more rapid-release style of spec changes, with a new version coming out every few years. Here's hoping they can do it.

Despite all my time programming in JS, I still find myself wishing Brendan Eich had been allowed to use pure scheme instead (maybe with M-expressions and a prototype object system). JS would be a generation ahead if this had happened.

I really wish this as well. I remember back when I taught myself to program in QBasic that I wanted to be able to program code that made writing code easier. I kept observing these repetitive tasks that I was doing in the editor that were the very bread and butter of computation. I wanted to write code writing code.

I get that a lot of people don't either because it is complicated or they can't or both. But I think it is where programming is going and has been going since the beginning. Can't wait till everyone catches up.

I learned php years ago when I wanted to do more than just html. It seemed both powerful and simple, and I made my low-maintenace web page with it. Why is it not good?

PHP is not "not good." PHP is easy to learn. Because of that you get a lot of people who learn/use it outside of classic computer science training, which results in a lot of really bad code. You get things like unsafe queries, poorly optimized and/or structured code, etc. Basically, you get the same crap that shows up in every other language. But, PHP's popularity makes it an easy target.

That said, the PHP haters do you favor when the bark and howl on Ars, because it allows you to readily identify people who you absolutely do not want to take programming advice from, in the same way that you don't take advice from a "carpenter" who tells you that 2x4s suck and that 2x6s and 2x12s are far superior.

Umm... this "new format" looks to be just old-school wiki with some drag-and-drop for images. And putting a Node.js backend seems irrelevant - could be XML files, really (there are some pretty slick XML databases still about).

While I fully appreciate simplifying blog-platforms, I really don't want to go back to wikis. Honestly, this seems more like a combination of hot-technologies to accomplish what has been easily been done before. Not sure it's really worthy of a Kickstart. But that's just me.

This is a big NO for me as a personal platform as a job recruiter for the IT field told me that he laughed a candidate out of the room for using WordPress. ANYONE CAN DO IT.

Building it yourself at least shows you understand basic/intermediate web design when you have a professional site all done from scratch. Even more kudos if you host your web server yourself.

Edit: I should clarify that I've never really worked with node.js and have no ill will towards it (I just use HTML/CSS, JScript on the front end marred with PHP and SQLite on the back like a lot of traditional developers I've found) I just hate WordPress from a design perspective as I can damn near always tell when a site uses it and it looks a little generic to me; especially with the default white templates.

Lee Hutchinson / Lee is the Senior Reviews Editor at Ars and is responsible for the product news and reviews section. He also knows stuff about enterprise storage, security, and manned space flight. Lee is based in Houston, TX.