<![CDATA[Ghost]]>https://ghost.org/changelog/https://ghost.org/favicon.pngGhosthttps://ghost.org/changelog/Ghost 2.9Wed, 04 Nov 2020 12:21:56 GMT60<![CDATA[Ghost + IVEEL]]>https://ghost.org/changelog/iveelGhost__Post__5f86a5892dc4980039cd94c8Tue, 20 Oct 2020 04:34:53 GMT

Ghost has acquired IVEEL, one of the most popular premium theme companies making beautiful templates for Ghost. With this acquisition IVEEL founder Sodbileg Gansukh has joined to lead our brand new theme-team.

All IVEEL themes have been updated, optimised, and are being released today as free and open source under the MIT license. This includes the extremely popular Dawn theme, for newsletter authors.

These beautiful themes are designed to support modern publishing, including dedicated themes for paid newsletters, podcasts, photography, and fashion.

All are available today on our Marketplace, and the source is on GitHub.


Ghost + IVEEL
Dawndemo / download
Ghost + IVEEL
Altodemo / download
Ghost + IVEEL
Edgedemo / download
Ghost + IVEEL
Easedemo / download
Ghost + IVEEL
Rubydemo / download
Ghost + IVEEL
Dopedemo / download
Ghost + IVEEL
Wavedemo / download

We're very excited to see what you build with these new designs, and can't wait to show you some of the other projects that we have coming up.

Questions & answers

Here are some extra details to go with this announcement:

How do I download/install one of these themes?

Click on the "download" link under any of the themes above, then download the zip file from the green button on GitHub, and upload the zip to Ghost in the Design area in Ghost Admin.

Ghost + IVEEL

Do these themes work with Ghost memberships/subscriptions

All IVEEL themes are optimised to work with upcoming Ghost memberships and subscriptions functionality.

At present this requires some code knowledge, however in the next few weeks we'll be launching some changes that will mean all of these themes will work automatically with members/subscriptions without any code required.

I'm an IVEEL customer, what does this mean for me?

The themes released today are new, open source versions of the premium themes sold previously — with fewer options and customisations compared to their premium counterparts.

If you purchased an IVEEL theme previously, you can continue to use and enjoy it under the terms of your original license. There won't be further updates to the premium version of these themes, but they will continue to be supported alongside all other themes in Ghost.

There are no other changes.

]]>
<![CDATA[New member importer]]>https://ghost.org/changelog/new-member-importerGhost__Post__5f86a5722dc4980039cd94c2Wed, 14 Oct 2020 10:18:09 GMTThe new member importer allows you to match your CSV data to the correct fields, and review your import before you run it. You can also add tags to imports with ease!

]]>
<![CDATA[Member support]]>https://ghost.org/changelog/member-supportGhost__Post__5f86a64a2dc4980039cd94d0Wed, 14 Oct 2020 10:16:05 GMT

Support your members with ease using the impersonation feature. Authentication links are now single-use, and have been extended to 24 hours validity. They can be shared directly with any members who are having login issues, or trouble receiving emails.

]]>
<![CDATA[June Updates: What's New]]>https://ghost.org/changelog/updates-june-2020Ghost__Post__5ee356cac6ced6004508a852Mon, 29 Jun 2020 16:11:36 GMT

We've been hard at work during lockdown, updating Ghost and working on many of your most requested features ✨

Custom from-addresses for email newsletters

When we first launched Beta email newsletters in Ghost, it was only possible to change the first part of the from address - the bit before the @ - to prevent Ghost being used for spam / with unauthorised domains.

Now, after verifying your email, you can send newsletters from any address!

June Updates: What's New

Improved content organisation

You can now filter posts by access level, to browse and edit content that has been created for different segments of your audience.

June Updates: What's New

This unlocks custom views based on access level too, to create quick links in the sidebar that your team can use to navigate content quickly.

June Updates: What's New

INR currency support

You can also now sell premium subscriptions to membership sites in Indian Rupees (INR), as well as USD, GBP, EUR, AUD and CAD. More currencies are coming soon 💸

June Updates: What's New

Select your currency from the dropdown menu in Members settings – Ghost takes care of the rest by automatically creating those pricing plans in your Stripe account. Yep, still no extra transaction fees. None!


Membership referral programs

We heard from people running membership businesses about how important referral program are – so we've developed an integration with FirstPromoter.

Now you can ask your biggest fans to promote your work to other people in return for rewards, commissions or payouts, using a custom welcome page on your Ghost site to track referrals.

June Updates: What's New

Automatic responsive images

Ghost now generates automatic responsive assets for images in your post content, which means image-heavy posts now load much faster!

June Updates: What's New

Buffer is now powered by Ghost

We just finished helping the world's most popular startup blog migrate to Ghost! All of Buffer's different blogs and resources are now faster and more beautiful than ever. We've always been big fans of Buffer, and it's been great to get a chance to work with them for the last few months.

June Updates: What's New

Buffer are the latest in a growing list of independent companies, creators, journalists and publishers who are all using Ghost to power their content.

]]>
<![CDATA[Personalise newsletters with email cards]]>https://ghost.org/changelog/email-cardsGhost__Post__5ea6c6e963b96900442476caTue, 28 Apr 2020 09:42:46 GMT

Ghost makes it possible to deliver new posts directly to your subscribed members inboxes in a couple of clicks. But what about when you want to personalise your email with unique content that doesn't appear in your published post?

That's where email cards come in! Quickly add content directly to the editor that will only be visible in emails, unlocking the ability to add a personal touch, or share unique email specific content.

Personalise newsletters with email cards

Email is still the most effective method for engaging your audience and now you can personalise your emails and improve your members' experience. Read more about email cards in our members user guide.


Ghost(Pro) users can start using email cards right away! Self-hosted developers can use Ghost-CLI to update to the latest version.

]]>
<![CDATA[Members now supports 5 currencies]]>https://ghost.org/changelog/supported-currenciesGhost__Post__5e567f3a2a718900389ac60fThu, 02 Apr 2020 08:54:47 GMT

The Members feature in Ghost launched with support for USD. We've now added support for four additional currencies: CAD, AUD, GBP, EUR.

Select your chosen currency for your subscriptions from the Members Settings, and set your pricing tiers:

Members now supports 5 currencies

Then you're all set. When you enter your currency and pricing in Ghost, it automatically creates those plans in Stripe in the correct currency. Now your readers can support your work with monthly or annual subscriptions in your chosen currency.


For more information about outputting currencies and price in your theme, check out our documentation.

]]>
<![CDATA[Improved member accounts]]>https://ghost.org/changelog/member-account-pageGhost__Post__5e561b7f2a718900389ac58dTue, 03 Mar 2020 15:46:26 GMTMember GravatarsImproved member accounts

We've now added support to be able to add Gravatars into your Ghost theme, to provide a more personalised experience when people are logged in to your membership publication, or visit their account page.

Edit billing info

We also rolled out support for editing billing information directly from a member account page, to make it easier for your members to manage their subscriptions to your content.

This feature has already been added to our Members theme Lyra with an "Edit billing info" button that opens Stripe checkout. If you're using the Lyra theme, update it to access all of the latest features.


To find out more about implementing a personalised account page for your members within a custom theme, check out our documentation.

]]>
<![CDATA[Member impersonation]]>https://ghost.org/changelog/member-impersonationGhost__Post__5e564e1e2a718900389ac5f3Tue, 03 Mar 2020 15:32:05 GMT

It's now possible to log in to your membership publication as one of your members. This means you can provide better support if your member is facing any technical issues, or test the design implementation of your member-only content without having to log in manually.

Member impersonation
]]>
<![CDATA[Member location in Ghost Admin]]>https://ghost.org/changelog/member-locationGhost__Post__5e57563e2a718900389ac68aTue, 03 Mar 2020 14:36:42 GMTGhost now registers the location your members sign up from, so you can see your members location on their member profile page in Ghost Admin.

Understand your audience better, segment your members using member labels and build more relevant content for your readers!

]]>
<![CDATA[Segment subscribers with member labels]]>https://ghost.org/changelog/member-labelsGhost__Post__5e466ae04315570038a57ed0Fri, 14 Feb 2020 12:51:53 GMT

This gives you even more options to manage your members effectively. You can use member labels in a number of ways:

  • Manually apply a label to your members directly from the member dashboard
  • Apply labels to imported members automatically via our Zapier integration
  • Apply labels automatically via the API in your themes signup form, for example, you could apply a label to members who sign up from a specific landing page.

Labels unlocks the ability to keep track of your VIP members, imported members from other platforms, or members who signed up from a specific marketing promotion, and much more!

Ghost(Pro) users already have access to member labels. Self-hosted developers can use Ghost-CLI to install the latest version.

]]>
<![CDATA[Filter posts with sidebar views]]>https://ghost.org/changelog/sidebar-views-filterGhost__Post__5e40daeccddc150038d5f288Mon, 10 Feb 2020 08:12:48 GMT

The default views appear under Posts which include Drafts, Scheduled and Published - and it's possible to create custom views using any combination of post filters and saving it with a name and colour. For example, you can create a view based on an author or a tag:

Filter posts with sidebar views

Ghost(Pro) users have access to sidebar views already. Self-hosted users can access this feature by installing the latest version.

]]>
<![CDATA[Complimentary premium plans]]>https://ghost.org/changelog/complimentary-subscriptionsGhost__Post__5e3117ebdea54f004446cde7Mon, 03 Feb 2020 13:42:18 GMTIt's now possible to offer complimentary subscriptions to your members in a couple of clicks. This means you can give your colleagues, friends or family access to paid-member only content in Ghost, without them needing to sign up or enter any credit card details.

Simply navigate to the member profile you'd like to provide free access to, and toggle "Complimentary premium plan"

]]>
<![CDATA[Improved members dashboard]]>https://ghost.org/changelog/member-managementGhost__Post__5dee183643357b0044661630Tue, 07 Jan 2020 07:56:34 GMTWe introduced some improvements to the member management dashboard to make it easier to manage your members, and keep track of how your membership business is growing over time 📈

  • It's now possible to add members individually directly from the member dashboard, making it easy to add colleagues, friends or people you meet in person as a member of your site
  • You can now see Gravatars for your member list when available, so you can put names to faces
  • A new member growth chart shows your membership growth at a glance within a selected timeframe
]]>
<![CDATA[Subscription management for members]]>https://ghost.org/changelog/subscription-managementGhost__Post__5df38a4643357b004466177cWed, 18 Dec 2019 00:16:52 GMTYour members can now self-manage subscriptions for any membership publication built with Ghost, with a new helper to cancel or continue billing for any plan.



To find out how to introduce subscription management to your Ghost site, check out the members docs. If you're using the members-enabled theme, Lyra, you can install the latest version of this theme to get access to this feature.

]]>
<![CDATA[Ghost + Pico]]>https://ghost.org/changelog/acquiring-picoGhost__Post__5df0ec8643357b00446616b6Wed, 11 Dec 2019 18:17:46 GMT

Last year our good friends Paul and Jack started working on a new personal publishing platform called Pico. Today I'm pleased to share the Ghost has acquired Pico, and releasing it as open source.

You might know Paul Jarvis for his bestselling book, Company of One, his wildly popular MailChimp course, or the independent analytics platform he created with co-conspirator Jack Ellis: Fathom Analytics.

Fathom, simple analytics for bloggers & businesses
Simple, GDPR compliant website analytics, no cookie notice required. No tracking or storing personal data of your users.
Ghost + Pico

Paul is a prolific newsletter writer and blogger, so many people were excited when last year he announced a new project to build a minimal publishing platform with memberships and subscriptions built in at the core to help writers fund their work.

The anticipation was palpable!

Real example! Copy/paste to test for yourself

Ghost on the JAMstack

Official Gatsby.js Source Plugin + Starter

We started rebuilding our Ghost Docs site at the end of last year we set out to use Ghost as a headless CMS, along with a front-end written in Gatsby.js. We fell in love hard and fast, and have been building new things with Gatsby ever since. So we're thrilled to announce:

🚢 NEW: gatsby-source-ghost plugin

A straightforward Gatsby source plugin which wraps the Ghost API and makes it compatible with Gatsby and GraphQL, so it's quick and easy to load all your Ghost data into any Gatsby project.

🚢NEW: Advanced sitemap plugin for Gatsby

We wanted to emulate the advanced sitemap structure that we use on all Ghost publications by default for Gatsby, so we created this SEO friendly open source plugin which is available for anyone to use!

🚢 NEW: gatsby-starter-ghost

We've also created an official Gatsby starter repository, similar to our starter theme, pre-configured to get content from Ghost and output it in a clean, blog-style design. The fastest way to get up and running with Gatsby and Ghost is to fork this repository, and check out our Gatsby docs.

Ghost on the JAMstack
Demo: gatsby.ghost.org — It's fast. Really, really fast.
Ghost on the JAMstack

Ghost on the JAMstack

Official Netlify Support

Deploying all of this should be easy, and it is! Our Gatsby starter is fully set up to deploy to Netlify, which is the same setup we use for Ghost Docs. On top of that, we've created:

🚢 NEW: Netlify integration for Ghost

The official integration guide for Netlify explains how to set up outgoing webhooks in Ghost to trigger a site rebuild on Netlify. This means that any time you publish, update or remove any content in Ghost, the front end will automatically update.

Ghost on the JAMstack

Front-end frameworks

Since the latest Ghost API updates mean you can bring your own front-end and build entirely custom publications, we've also added new documentation for some of the most popular static site generators around. Find out how to get started using Ghost as a Headless CMS with:

🚢Eleventy
🚢Next.js
🚢Gridsome
🚢Nuxt.js
🚢Hexo
🚢VuePress


Future-proof publishing

What we like most about these emerging development workflows is how they reduce vendor lock-in. Converging disparate technologies under a single front-end centralises otherwise decentralised services in a way which caters predominantly to the needs of the site owner, rather than the platform.

Making Ghost work as a headless CMS in this new paradigm feels like it's good for users, and good for the web as a whole. So we're really excited about it!

If you're still curious about the rise of the JAMstack, check out this excellent talk by Netlify co-founder Matt Biilmann:

And finally, thanks for being a Ghost blog reader! Grab me in the comments if you have any feedback or questions.

]]><![CDATA[Public Dev Meeting September 15th]]>https://ghost.org/changelog/public-dev-meeting-september-15thGhost__Post__5cf5f94b3a5f1b0038cc70a8Tue, 15 Sep 2015 16:04:49 GMT

Quick Summary

Public Dev Meeting September 15th

Fixing a few bugs, getting issues raised, and deciding what needs to be in the next release as fixes.

Progress Report

  • More improved test coverage - #5814, #5802
  • Fix shortcut keys sometimes not being cleared on scope changes - #5826

Priority Issues

  • Iron out other issues with 0.7

Discussion

We are hoping to have the blockers fixed and 0.7.1 released before the next meeting, but it may take a little more time.

If anyone is looking for anything to work on, the issues in the Post-Zelda milestone are things that would be great to get started on - https://github.com/TryGhost/Ghost/milestones/Post-Zelda

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 22st September, 5:30pm London time.

]]>
<![CDATA[Public Ghost Meeting September 8th]]>https://ghost.org/changelog/public-ghost-meeting-september-8thGhost__Post__5cf5f94b3a5f1b0038cc70a7Thu, 10 Sep 2015 03:34:20 GMT

Quick Summary

Public Ghost Meeting September 8th

0.7 was released. A few people are having trouble migrating, but bugs are being worked on.

Progress Report

  • A bunch of last minute PR's for 0.7
  • A fix for those having MySQL database migration issues - #5805
  • Issue for SQLite migration issues - #5810

Priority Issues

  • Iron out other issues with 0.7
    • validation is too strict for slugs (no issue yet)
    • slug validation failing is returning the wrong sort of error - #5808
    • handling of dashes in slugs has changed - #5812
    • Editor pane issue Firefox/IE 11 - #5804

Discussion

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 15th September, 5:30pm London time.

]]>
<![CDATA[New design, better mobile support, admin search and more!]]>https://ghost.org/changelog/new-design-better-mobile-support-admin-search-and-moreGhost__Post__5cf5f94b3a5f1b0038cc715bMon, 07 Sep 2015 09:16:09 GMT

Today is an exciting day! After about two years and three hundred thousand users, we've learned a tremendous amount about how people have been using Ghost. As a result, we've just shipped our first major user interface update.

Here it is:

New Design

This project has been a work in progress since the end of last year, and we're very excited to see it being used out in the wild.

The biggest change has been to the main structure and navigation within Ghost's admin. We were fast hitting the limits on the old top-nav placement. The new side-menu placement should provide some familiarity to most desktop applications, works better on mobile and, significantly, gives us a lot more space and flexibility to introduce upcoming new features. Winky face.

BTW it's also easier to find old posts now

After talking to hundreds of you recently, one of the most common frustrations mentioned in the old admin was that finding old posts was a real pain. To remedy this, we've added a magical new search box which will help you find any post in your archive in a matter of seconds.


Search


Oh also, ProTip: If you're reading a post on your blog some time and you're all like "damn there's a typo!" – try throwing /edit on the end of the URL. Yep, that works.

Ghost(Pro) users already have access to all of this right now, log in to your blog and have a look! Users running Ghost on their own servers can grab this feature by upgrading to Ghost 0.7.

]]>
<![CDATA[Ghost 0.7.0]]>https://ghost.org/changelog/ghost-0-7-0Ghost__Post__5cf5f94b3a5f1b0038cc70a6Thu, 03 Sep 2015 14:36:25 GMTGhost 0.7.0

Ghost 0.7.0 is now available on GitHub, npm and Ghost.org. This version largely comprises a rework of the admin UI, including a redesign and significant changes to the underlying functionality. 0.7.0 also lays much ground work for API features which are coming soon.

Highlights

  • [New] New admin interface design
  • [New] Admin search for posts & users
  • [New] On-boarding flow (for new blogs)
  • [Improved] jQuery not included in {{ghost_foot}}
  • [Improved] Tags respect the order they are added to a post
  • [Improved] {{foreach}} helper upgraded
  • [Fixed] {{tags}} & {{author}} not working in next/prev post helpers
  • [Fixed] Various RSS url issues
  • [Fixed] Upgrade path for very old blogs

You can see the full change log for the full details of every change included in this release.

In Detail

The majority of the 585 changes made to Ghost since the last release revolve around the total overhaul of the admin interface. As well as changing the design, we've switched from using Sass for the CSS, to using Myth. Myth uses a different approach to other preprocessors - instead of writing an abstraction, you write pure spec-compliant CSS & Myth will polyfill features that aren't fully supported yet.

There have also been significant changes to the underlying API & workings of Ghost. If you're already hacking on top of the unofficial JSON API you'll find we've made some improvements, particularly around validation & error handling. It will continue to evolve rapidly as we iterate towards our first official, public & documented version of the API with OAuth support.

Theme API Changes

The theme API has had a number of updates in this release. Most significantly, jQuery is no longer included by Ghost via the {{ghost_foot}} helper. A full explanation of this change can be found in the no more jQuery post we published several months ago. In short if you have an existing Ghost blog you are unaffected, if you are a theme developer, you need to update your themes accordingly.

The {{next_post}} & {{prev_post}} helpers have been fixed to allow you to output {{author}} and {{tags}}. The {{foreach}} helper has been upgraded to support block params the same as the native {{each}} helper, and also now has a @number variable. Finally, we've improved {{tags}} so that it will now respect the order that tags are added to a post. These changes will all be useful in conjunction with the {{#get}} helper we're working on for a near-future release*.

See the theme API docs for more details of what changed in Ghost 0.7.0. The theme documentation is frequently updated with more details and better examples. Please also use the suggest edits feature if you see something that is missing.

* If you're waiting for the {{#get}} helper, you can help us to get it ready by testing it & providing feedback. Details are here, please also drop by the #themes channel in slack to ask any questions about this :)

How to Upgrade

All Ghost(Pro) users are being automatically updated and will be running Ghost 0.7.0 shortly. You're welcome :)

For people running Ghost on their own servers, you can download Ghost 0.7.0 and then check out the upgrade documentation over on our support site. If you've missed out a version or two, don't worry you can upgrade directly from any version as far back as 0.4.2 :)

Enjoy!

Credits

This release was lovingly crafted by John O'Nolan, Hannah Wolfe, Kevin Ansfield, cobbspur, Austin Burdine, Jason Williams, Fabian Becker, Sebastian Gierlinger, John O'Mahoney, Matt Enlow, Alex Kleissner, Joe Wegner, Kowsheek Mahmood, Rem Zolotykh, Robert Jackson, Maurice Williams, Łukasz Kliś, Michael Auer, Nazar Gargol, Rafael Corrêa Gomes, hwdsl2, Roy van Kaathoven, Samuel Goodwin, BlueHatbRit, Sem, Augustus Yuan, Joe Cannatti, David Balderston, hoxoa, Clay Diffrient and Chris Maddox.

]]>
<![CDATA[Public Ghost Meeting September 1st]]>https://ghost.org/changelog/public-ghost-meeting-september-1stGhost__Post__5cf5f94b3a5f1b0038cc70a5Wed, 02 Sep 2015 03:57:00 GMT

Quick Summary

Public Ghost Meeting September 1st

Lots of final prep for the Ghost 0.7 release.

Progress Report

Non-Zelda:

  • Fix authentication refresh failing - #5756
  • Field parameter added to the API endpoints - #5518

Zelda:

Priority Issues

  • Testing
  • Testing
  • Oh and also more testing

Discussion

Once the 004 Data Migration PR is merged in, your local install gets upgraded, and there is no downgrade path. Things like this are one of the main reasons why it is not a good idea to run a production blog on the Master branch.

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 8th September, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting August 25th]]>https://ghost.org/changelog/public-dev-meeting-august-25thGhost__Post__5cf5f94b3a5f1b0038cc70a4Wed, 26 Aug 2015 03:48:43 GMT

Quick Summary

Public Dev Meeting August 25th

Finishing touches and bug fixes for upcoming 0.7.0 release.

Progress Report

Non-Zelda:

Zelda:

Priority Issues

  • Testing!
  • Bugs that arise in testing for 0.7 release

Discussion

  • Test Ghost if you can. It is a great way to contribute.
  • Themes have to update since jQuery will no longer be auto included - more info

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 1st September, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting August 18th]]>https://ghost.org/changelog/public-dev-meeting-august-18thGhost__Post__5cf5f94b3a5f1b0038cc70a3Wed, 19 Aug 2015 01:03:43 GMT

Quick Summary

Lots of fixes being put in getting ready for the release hopefully this week.

Progress Report

Non-Zelda:

  • Signup screen using new profile image upload component - #5672
  • Fix email address already in use bug - #5654
  • Ghost will now say it has started in production on command line - #5651

Zelda:

  • Work being done on the Zelda audit bugs/changes - #5652, #5660
  • Tag component bug fixes - #5658
  • Spinner bug fix - #5656

Priority Issues

Discussion

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 25th August, 5:30pm London time.

]]>
<![CDATA[Ghost August update: $500k annual revenue, doubled cashflow, new UI on the way]]>https://ghost.org/changelog/august-2015-updateGhost__Post__5cf5f94b3a5f1b0038cc7156Tue, 18 Aug 2015 10:54:00 GMTGhost August update: $500k annual revenue, doubled cashflow, new UI on the way

It's been a while since we last did a proper update on revenue and progress at Ghost. Last week we passed the $500,000 mark, and I thought it was about time to do a progress review.

Here's an update on our numbers since the April report

  • Monthly recurring revenue (MRR): $41,714 (+22%)
  • Annual recurring revenue (ARR): $500,569 (+22%)
  • Ghost(Pro) subscribers: 4,139 (+10%)
  • Average revenue per user: $9.10 (+15%)
  • Churn rate: 6% (-19%)
  • Total downloads: 755,574 (+35%)
  • Total users: 363,051 (+26%)
  • Team size: 7 people across 4 continents

All of our numbers are pretty healthy at the moment. Growth is slower than we'd like, but we are now into our 8th straight month of profitability. As a result, we're in really great shape financially, and we've started growing the team again more aggressively.

We added two new people (Belle Beth Cooper & Kevin Ansfield) in the last month, and we're still looking for several more—especially Node.js developers.

Fixing our two biggest mistakes

We made two enormous mistakes at the beginning of Ghost's life which have crippled us for a very long time. We've finally gotten out from under them, and I think it's worth talking about.

Doing Stripe Properly

The first mistake was to implement Stripe as a payment processor, while building a custom plan system and billing management. In short, this backed us into a tight, uncomfortable corner filled with edge-case stumbling blocks. Want to integrate with other Stripe apps (like Baremetrics)? No dice. Want to offer annual billing and a referral program? Spend 3 months rewriting everything. Repeat.

This was an unmitigated disaster. At the start of this year, we spent 2 months rewriting our entire billing system to use the Stripe Plans API. In April, as a result, we were able to offer Annual Billing for the first time. Here's the impact it had on cashflow by the end of May:

Ghost August update: $500k annual revenue, doubled cashflow, new UI on the way

Annual customers pay 20% less, but they pay in advance, which provides additional revenue which can be used on acquiring new customers, who pay in advance, which provides additional revenue which can be used on acquiring new customers, and so on. About 50% of new customers select annual plans, so it works out to approximately -10% Monthly Recurring Revenue in return for +100% monthly net revenue.

Annual billing has single-handedly transformed Ghost as a business more than anything else we've ever done. We should have done this much sooner. And we would have, if we hadn't implemented Stripe the wrong way to begin with.

Aside: Using the Stripe Plans API is still far from perfect. For all the love the Stripe API gets, there are still a boatload of edge cases to handle which catch us out regularly. Knowing what we know now, if we were going to start over with a small, bootstrapped team, we would use Recurly to manage our billing with Stripe. It's expensive, but (as we now know) probably worth it.

Moving to DigitalOcean

Problem number two was that we built the first version of Ghost(Pro) on our own dedicated infrastructure, which was a bit too clever for its own good, and that came back to bite us.

The good: We got everything setup in a couple of months to work at a scale where we could (relatively) flawlessly host tens of thousands of blogs on just 3 application servers.

The bad: After 18 months our hardware was about to become obsolete. Scaling our systems had a ~60 day lead time and long-term contract requirements. We'd written the service in such a way that we were unable to ship some of the most requested features in Ghost itself (eg. Scheduled posts).

In short: It performed really well for us for the first year, but we could see that in another 12 months we were going to be pretty screwed.

Ghost August update: $500k annual revenue, doubled cashflow, new UI on the way

It took about 3 months of organising, planning and implementing—but a few weeks ago we complete our full infrastructure migration to DigitalOcean.

These two areas comprised a sum total of a good 6 months of tiring, thankless behind-the-scenes work which was done almost entirely by Sebastian—who is an absolute hero.

We're now in a place where we're finally unblocked from some of our biggest hurdles to building things for Ghost. It feels good.

What else

At the end of September we're doing our second team retreat and flying everyone over to where I live, in Egypt. And if you're wondering – as most people do – "omgwtf why do you live in Egypt?"click here.

Proportionally to existing-user-base, Ghost was one of the fastest growing platforms in the world in July, growing by a full 17% compared to June. We're hoping to see this grow even further soon as BuiltWith expands tracking to subdomains, which is where most people install Ghost.

Perhaps most excitingly of all, we're about to launch Ghost's first major user interface update. More on that later, but here's a sneak preview:

Ghost August update: $500k annual revenue, doubled cashflow, new UI on the way

A small favour

Honestly, the biggest thing that helps us both as a business and as an open source community is helping more people find out about Ghost. We'd be tremendously grateful for your help in sharing our progress!

Here’s a simple copy/paste status, to make it super easy:

The non-profit with $500,000 ARR and counting. How @TryGhost doubled cashflow and is about to launch a new design: http://blog.ghost.org/august-2015-update/

or use 1-click links for Ultimate Efficiency TM: or

We'll be hanging out in the comments if you have any questions or thoughts!

]]>
<![CDATA[Kevin Ansfield is a Ghost]]>https://ghost.org/changelog/kevin-ansfieldGhost__Post__5cf5f94b3a5f1b0038cc7158Mon, 17 Aug 2015 11:08:18 GMTKevin Ansfield is a Ghost

Our next team member has arrived! Kevin Ansfield is our very first (and much needed) full-time Ember.js developer.

Based in the UK, Kevin joins us from our friends over at Simple as Milk who helped us architect the first version of Ghost.org. Kevin has been working with Ember.js since its inception and will be now be leading our front-end efforts on both Ghost core as well as Ghost.org!

You can follow Kevin's work on Twitter and (of course) on Github.

Our team is now at 7 people spread across 4 continents and 5 countries. Perhaps the best thing about being remote is that we can hire anybody from anywhere in the world! We've got quite a few open positions at the moment.

]]>
<![CDATA[Public Dev Meeting August 11th]]>https://ghost.org/changelog/public-dev-meeting-august-11thGhost__Post__5cf5f94b3a5f1b0038cc70a2Wed, 12 Aug 2015 02:31:13 GMT

Quick Summary

Public Dev Meeting August 11th

Middleware refactor done and some setup bugs fixed. Audits are being performed to finalize the list of todos for the next release hopefully in 2 weeks.

Progress Report

Non-Zelda:

  • Middleware refactor completely merged in - #5566
  • Bug fix for {{author}} & {{tags}} not showing up - #5646
  • Pipeline added to notifications section of the API - #5639
  • Fixed signup bugs - #5643, #5634, #5649

Zelda:

  • Spin buttons have been added - #5633
  • The tag component has been re-implemented - #5553

Priority Issues

  • Everything in the Zelda milestone is considered a priority for the next release - #5314
  • Completing the signup screen to using the new profile image upload component - #5544

Discussion

  • Envato is giving away $7,500 to people who develop Ghost themes during the next 60 days - Details

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 18th August, 5:30pm London time.

]]>
<![CDATA[Envato offering $7,500 to anyone who builds a Ghost theme in the next 60 days]]>https://ghost.org/changelog/envato-ghost-themesGhost__Post__5cf5f94b3a5f1b0038cc7153Tue, 11 Aug 2015 15:45:09 GMTEnvato offering $7,500 to anyone who builds a Ghost theme in the next 60 days

When Ghost launched back at the end of 2013, Envato put up a $5,000 cash prize for developers creating Ghost themes and adding them to the ThemeForest marketplace. This week, they've launched a brand new "Most Wanted" competition with a whopping $7,500 up for grabs.

What You Can Win

  • The 5 best Ghost themes win $1,000 each
  • $1,500 bonus prize for the best editorial experience + a featured slot on the Ghost Marketplace.
  • $1,000 bonus prize for the most submitted/approved Themes

This means that a single Ghost theme author could win up to $3,500!

What is all this anyway?

Themeforest is a premium marketplace where you can sell digital items, so occasionally they run competitions like this to build up their catalogue of products in various categories and attract more customers. So, even if you don't win any prizes, you can still earn revenue for all your hard work just by selling your item!

There's a strong focus (just like last time) on really high quality themes which make use of all Ghost's features, while presenting a well considered, beautiful editorial experience.

Best of all, we helped Envato put all of this together and we're keeping a very close eye on the theme submissions which get approved! We'll be helping to promote as many of the best designed themes as we can throughout the competition.

Click here to read all the details about the competition and find out how you can get involved. Yes, this is the world's longest descriptive link text. I mean, hey, I could probably stop at this point but why kill a good thing? Ok but SERIOUSLY go check out the details because this is pretty cool.

The competition runs through to October 16th, so get moving!

]]>
<![CDATA[Ghost monthly blog report: July 2015]]>https://ghost.org/changelog/blog-report-july-2015Ghost__Post__5cf5f94b3a5f1b0038cc714fMon, 10 Aug 2015 09:58:57 GMTGhost monthly blog report: July 2015

At the end of July I joined the Ghost team for a two-week trial and subsequently came on board full-time as their first content crafter. (yay!) If you've seen my writing on the web before, you might remember me as Buffer's first content crafter, or from my freelance content writing for companies like Zapier and Crew.

At Ghost, we're just getting started on what's going to be a very fun, very intense journey into content marketing. Initially I'm going to be coming at you three days a week (ideally—things might be a little slower as I settle in) on this very blog with research, ideas, and advice about writing, building your blog, and finding new ideas to write about.

Later on we've got some exciting plans to explore other content formats, and making related content easier to find when you're on the blog.

To keep me on track with my plans for the Ghost blog and to help me figure out what's working and what's not, I'm going to write up a report every month like this one. The metrics might change over time as our strategy evolves, but if I miss anything you're curious about let me know in the comments.

We're learning as we go, and sharing whatever we find in the hopes you might find it useful too.


So here's our inaugural content report. This covers my two-week trial period, but the rest of the month we didn't have a full-time content crafter on board. All numbers are compared to the previous calendar month—in this case, June 2015.

How much work did we get done?

Posts published: 5 (3 more than last month)

As we try new experiments in the future I'll be detailing those in this section, too.

How many people cared?

Uniques: 34,561 (+8%)
Page views: 41,821 (+10%)
Time on page: 2' 6" (+15%)

Top referrals: Twitter, inbound.org, Hacker News

Blog newsletter subscribers: total 2,242, +6% (new: 122)

Top 3 posts:

Next month - August 2015

August's focus is mainly on increasing content production and finding a rhythm in my workflows. I'm starting to settle into a routine and John, who'd previously been handling all content production, has been helping me tie down some of the smaller, fiddly parts of getting posts ready to publish so I can speed that part of the process up.

My aim is to publish 3 posts/week throughout August.


Anything I missed that you'd like to know? Leave me a comment and I'll do my best to answer it!

]]>
<![CDATA[Public Dev Meeting August 4th]]>https://ghost.org/changelog/public-dev-meeting-august-4thGhost__Post__5cf5f94b3a5f1b0038cc70a0Wed, 05 Aug 2015 01:24:40 GMT

Quick Summary

Public Dev Meeting August 4th

Progress on the two major blockers (tag component, and notifications refactor).

Progress Report

Non-Zelda:

  • Added permissions handling for the public API - #5496
  • Added test coverage for the posts API - #5610

Zelda:

  • Enter key submits step 2 of the setup form - #5628
  • Notifications refactor merged in, just a couple little things need to be finished in seporate pr's which will be raised during the audit - #5458
  • Tag component getting close to being ready - #5553

Priority Issues

  • Everything in the Zelda milestone is considered a priority for the next release - #5314
  • The finishing of the tag component
  • Fix any issues raised as the audit is performed

Discussion

John and Hannah will be doing an audit of the notifications/validators and will create issues to be grabbed this week.

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 11th August, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting July 28th]]>https://ghost.org/changelog/public-dev-meeting-july-28thGhost__Post__5cf5f94b3a5f1b0038cc709fWed, 29 Jul 2015 01:44:31 GMT

Quick Summary

Public Dev Meeting July 28th

Progress being made on the {{get}} helper and the filter API as well as the usual bug fixes and Zelda.

Progress Report

Non-Zelda:

  • Fix password unable to be reset bug - #5570
  • Foundation for i18n support (issues to share out the string harvesting work will be created for others to jump in) - #5600
  • API Filter Spec'd - #5604

Zelda:

  • Fixing missing code injection redirect - #5596
  • Fix Gravatar being requested on every email keystroke - #5565
  • Updated user onboard navigation to now allow going back - #5556

Priority Issues

  • Tag component - #5553
  • Notifications (will be merged in and then cleaned up with smaller issues) - #5458
  • Everything in the Zelda milestone is considered a blocker for the next release - #5314

Discussion

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 4th August, 5:30pm London time.

]]>
<![CDATA[Belle Beth Cooper is a Ghost]]>https://ghost.org/changelog/belle-beth-cooperGhost__Post__5cf5f94b3a5f1b0038cc714bMon, 27 Jul 2015 10:34:27 GMTBelle Beth Cooper is a Ghost

We're thrilled to welcome Belle Beth Cooper to the Ghost team as our first full-time content crafter!

Our very first team member from Australia, Belle is probably best known on The Internet (TM) for building up Buffer's blog as their first content crafter – but she's since gone on to write for just about every startup on the planet! It's immensely exciting having her on the team and, as you should be able to see from her first two posts, she's going to make a big difference to our content efforts.

Our full-time team is now 6 people across 4 continents, and hiring!

You can also find Belle on Twitter, as well as her personal site.

]]>
<![CDATA[Public Dev Meeting July 21st]]>https://ghost.org/changelog/public-dev-meeting-july-21stGhost__Post__5cf5f94b3a5f1b0038cc709eWed, 22 Jul 2015 03:51:10 GMT

Quick Summary

Public Dev Meeting July 21st

Numerous bug fixes, improvements to the user experience, and progress towards getting the API ready.

Progress Report

Non-Zelda:

  • Numerous bug fixes - #5559, #5554, #5581, #5590, #5577, #5558
  • API option handling - #5516
  • Additional attributes to the {{foreach}} helper - #5497
  • Update to the contributers list for the releases to be top contributers the last 90 days rather than all time - #5562

Zelda:

  • Update a few page styles/layouts - #5555, #5542
  • Onboard flow allows edit of blog details - #5543
  • Don't allow image upload on setup if using non-persistant storage - #5575

Priority Issues

Discussion

  • A PR is in progress to complete the middleware refactor that has been a priority for the last few weeks - #5566
  • Ghost is hiring! - https://ghost.org/careers/

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 28th July, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting July 14th]]>https://ghost.org/changelog/public-dev-meeting-july-14thGhost__Post__5cf5f94b3a5f1b0038cc709dWed, 15 Jul 2015 03:45:38 GMT

Quick Summary

Public Dev Meeting July 14th

More work done on the initial blog setup and continued progress towards 0.7.

Progress Report

Non-Zelda:

  • The tests that were constantly failing have been fixed - #5541
  • io.js has been removed from the build matrix - #5547
  • Owners are now only editable by themselves #5539
  • New rss item filter has been added - #5538

Zelda:

  • Fixed invited users not being able to sign up bug - #5534
  • New image upload component/gravatar image pull as a part of the initial setup - #5355, #5531

Priority Issues

  • Pagination with offset instead of page - #5093
  • No more staticPages parameter and better pages support - #5151

Both of the issues above are needed for the get helper and to move the public API forward

Discussion

  • An update was pushed to #5516 that sanitizes any API options that are not recognized or, if the option is valid, it checks for known datatypes and returns an error if they are incorrect. This is based on the spec laid out in #2758
  • Ghost is hiring! - https://ghost.org/careers/

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 21st July, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting July 7th]]>https://ghost.org/changelog/public-dev-meeting-july-7thGhost__Post__5cf5f94b3a5f1b0038cc709cWed, 08 Jul 2015 13:36:12 GMT

Quick Summary

Public Dev Meeting July 7th

Continued progress on Zelda and issues relating to the upcoming Ghost 0.7 release.

Progress Report

Non-Zelda:

  • Travis and Code Climate updates - #5511, #5493
  • Multiline place holder for the user invites on initial setup - #5506
  • Add pipeline roles - #5510
  • Fixed issue with user roles not being able to be access after import - #5514

Zelda:

  • Setup of permissions for the team area - #5453
  • Add inline errors for the setup process - #5399

Priority Issues

  • Everything in the Zelda milestone is considered a blocker for the next release - #5314
  • The middleware refactor issue has a full list of all the middleware that needs to be split. This has been a priority for a number of weeks. We would love to see this finished if there are a couple people willing to tackle it - #5286

Discussion

  • Ghost is hiring! - https://ghost.org/careers/
  • Lots of big zelda PR's are getting merged, so keep an eye out for lots of small issues that will need to be tackled.

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 14th July, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting June 30th]]>https://ghost.org/changelog/public-dev-meeting-june-30thGhost__Post__5cf5f94b3a5f1b0038cc709bWed, 01 Jul 2015 03:55:24 GMT

Quick Summary

Public Dev Meeting June 30th

Similar to last few weeks with continued progress on Zelda and progressing towards future features like channels and the get helper.

Progress Report

Non-Zelda:

  • Startup checks and error handling improvement - #5473
  • Fix blog title not updating when you change the name of your blog without refresh - #5477
  • Updated to Ember 1.13 - #5468
  • Refactored API to use pipeline - #5467
  • The get helper has been updated and has screenshots of a working example below. This is not merged in yet as there is still some work to be done - #4439

Public Dev Meeting June 30th
Public Dev Meeting June 30th

Zelda:

Priority Issues

  • Everything in the Zelda milestone is considered a blocker for the next release - #5314
  • The middleware refactor issue has a full list of all the middleware that needs to be split. Currently authenticate.js is the biggest priority in the list - #5286

Discussion

  • An issue was created detailing everything that we would like to get done for the upcoming Ghost 0.7 release! - #5503
  • With the Ghost 0.7 release, the plan is to make the Ghost API public. For this release, it will be read-only. This allows the get helper and ajax in a theme to work. After this release, extending the API's functionality will be looked into.

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 7th July, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 23rd June]]>https://ghost.org/changelog/public-dev-meeting-23rd-juneGhost__Post__5cf5f94b3a5f1b0038cc709aWed, 24 Jun 2015 12:56:05 GMT

Quick Summary

Public Dev Meeting 23rd June

Continuation of progress on the Zelda front and general refactoring/bug fixes.

Progress Report

Non-Zelda:

  • More meaningful error messages for sign in and missing email- #5447
  • Refactor of the pagination query - #5432
  • Fix sqlite database lock on import (which also fixed a lot of travis failures) - #5449

Zelda:

  • Continuation of layout design/fixes - #5442
  • Updating some user permissions - #5445, #5451

Priority Issues

  • Everything in the Zelda milestone is considered a blocker for the next release - #5314
  • Research the ember side of the autocomplete search bar - #5343
  • Looking at the tag editing component - #3800

Discussion

  • API design and using a filter paramater is something Hannah has been discussing and thinking about. She put it all together in #5463 and would love any feedback if you have some.
  • A PR was also put together as an example of how an api method method could be refactored using a pipeline (#5467). Any feedback on this would also be great.
  • A lot of comments are also being added to the code to make sure it is well documented. The command grunt docs can now be run to create documentation that looks like the picture below. The plan is to have these docs hosted on code.ghost.org and update them with every release.

Public Dev Meeting 23rd June

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 30th June, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 15th June]]>https://ghost.org/changelog/public-dev-meeting-15th-juneGhost__Post__5cf5f94b3a5f1b0038cc7098Wed, 17 Jun 2015 12:51:15 GMT

Quick Summary

Public Dev Meeting 15th June

Continued progress in getting Zelda ready to ship and code optimization throughout the code base.

Progress Report

Non-Zelda:

  • Continuation of Middleware Refactor - #5415, #5420
  • Other code optimization and test coverage - #5417, #5428, #5381
  • New api endpoints for the new tag component and auto-complete being worked on - #3800, #5343

Zelda:

  • Continued style fixing and optimization for Zelda - #5414, #5408, #5435, #5419
  • The bugs, regressions and todos issue has been updated showing everything that needs to be done before the next release - #5314
  • The navigation is ready pending a few tweaks

Priority Issues

Discussion

The reason for the middleware being split out into different files has never really been explained. Hannah explained that with split middleware files, it is easier to see what middleware Ghost has (and how well it is tested), and also gives Ghost the ability to move the middleware around because it is not all in one large file. There was some discussion on whether people liked this approach or not, and everyone seemed to agree that it was best to split the middleware up.

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 23rd June, 5:30pm London time.

]]>
<![CDATA[Ghost’s Official Blog Theme is Now Open Source]]>https://ghost.org/changelog/blog-themeGhost__Post__5cf5f94b3a5f1b0038cc7099Wed, 17 Jun 2015 09:52:03 GMTGhost’s Official Blog Theme is Now Open Source

We’ve just released the theme for this blog, and the main blog, as open source. You can now download and hack away to your heart’s content over on Github!

Many people have asked us what theme we’re using for this blog and why it wasn’t shared openly. It was really a very simple reason: Prior to the introduction of code injection we had all of our analytics tracking hard-coded into the theme, and we didn’t want people accidentally skewing our stats without even realising.

Over the last few days we’ve cleaned up a little bit of the code and added an MIT license so that it’s now free and open for everyone.

Enjoy!

]]>
<![CDATA[Ghost Moves to DigitalOcean Global Infrastructure]]>https://ghost.org/changelog/digitaloceanGhost__Post__5cf5f94b3a5f1b0038cc7145Tue, 16 Jun 2015 12:50:43 GMTGhost Moves to DigitalOcean Global Infrastructure

A little over a year ago we pulled together a couple of Dell servers in a UK data centre and launched the first version of Ghost(Pro) — our hosted infrastructure which allows anyone to deploy a new Ghost blog in the space of a few clicks.

We started out by hosting a few hundred Ghost blogs, then a few thousand, and today we host tens of thousands of blogs (and tens of millions of requests) on the very same infrastructure, which has gone above and beyond to get us to where we are now.

Since Ghost launched, DigitalOcean has been (by far) the most popular choice for our developer community who choose to host the software by themselves. The Ghost droplet image has made getting up and running remarkably easy, and has had a considerable uptake as a result.

Ghost Moves to DigitalOcean Global Infrastructure

Back in January I visited DigitalOcean HQ in New York to meet some of the brains behind the web’s fastest growing hosting company. A little later we started discussing the possibility of a long term relationship to support the Ghost project and our ever growing infrastructure needs.

Today, we’re very proud to announce a partnership that will see the entire Ghost(Pro) service move to a new, more robust home up in The Cloud (TM) — on top of DigitalOcean’s global infrastructure.

The transition, happening over the next couple of months, will mean that all Ghost(Pro) customers will enjoy better performance and more stability from their blogs running on far more sophisticated hardware and a wider network. It will also allow us to work towards providing HTTPS support for all customers, which is one of the most common requests we get.

A new location for customer data

As a part of this change we’ve elected to move the default location for all customer data from the UK to DigitalOcean’s AMS data centre. The Netherlands is ranked #2 in the world for Freedom of Press, and has a long history of liberal institutions, laws and funds designed to support and defend independent journalism.

Ghost Moves to DigitalOcean Global Infrastructure

The UK’s newly elected Conservative government recently pledged to scrap the Human Rights Act - which includes trivial rights such as “respect for your private and family life” and “freedom of expression”. The Netherlands, by contrast, has some of the strongest privacy laws in the world, with real precedents of hosting companies successfully rejecting government requests for data without full and legal paperwork.

Ghost stands for freedom of speech and independent publishing. In addition to the big upgrade in performance with this move, we’re also incredibly excited about the greater privacy and legal protection which this new location is going to provide to all of our customers and users.

How does Ghost(Pro) work, anyway?

Over the coming months we’ll be sharing more details about the technical aspects of the move and how all the pieces of our infrastructure puzzle fit together. For those interested in what it takes to host sophisticated clusters of Node.js applications at scale: Keep an eye on the Ghost development blog, and subscribe by email if you’d like to stay in the loop.

Onwards!

]]>
<![CDATA[Public Dev Meeting June 9th]]>https://ghost.org/changelog/public-dev-meeting-june-9thGhost__Post__5cf5f94b3a5f1b0038cc7097Wed, 10 Jun 2015 04:05:23 GMT

Quick Summary

Public Dev Meeting June 9th

Dependency and Ember updates have been made, but Zelda is still the main focus with continued refactors and styling changes being made to bring the code to be production ready.

Progress Report

Non-Zelda:

Zelda:

Priority Issues

  • Move tags to psm/ember cleanup - #3800
  • Everything in the Zelda milestone is considered a blocker for the next release
  • Picking up the rest of the middleware refactor - #5286

Beginner Issues

  • Zelda nav permissions - #5403
  • Zelda settings routes don't redirect to signin - #5412

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 16th June, 5:30pm London time.

]]>
<![CDATA[No more jQuery in {{ghost_foot}}]]>https://ghost.org/changelog/no-more-jqueryGhost__Post__5cf5f94b3a5f1b0038cc7093Mon, 08 Jun 2015 15:23:05 GMT

The time has come to remove jQuery from the {{ghost_foot}} helper.

Ghost's {{ghost_foot}} helper has provided a local copy of jQuery since the very first release of Ghost. At the time, it seemed like having easy access to jQuery would be beneficial for the majority of theme developers - making it something worth adding to core. However it has since become clear that this wasn't a great decision - it not being possible to customise this means many theme developers have been excluding the required {{ghost_foot}} helper.

In a near-future the next (0.7) version of Ghost, jQuery will be removed.

To mitigate the fact that many, many themes depend on jQuery and simply removing it would break countless blogs, we're going to remove it in such a way that only new blogs are affected. Existing blogs will have the <script> tag moved to the ghost_foot section of the Code Injection screen in Ghost.

If you're interested in following along with the technical whys and hows this will be done, you can follow along with the issue issue on GitHub. We'll make a further announcement here on the blog to let you know which version of Ghost will contain the switch.

How to Update Your Theme to be Forwards-Compatible

If you make and distribute themes for Ghost that depend on jQuery to function, you'll need to update them so that they become forwards compatible.

There is no harm in including jQuery twice (beyond the waste of resources), but it is possible to conditionally load jQuery if it doesn't exist already with a snippet like this:

<script type="text/javascript">
  if (typeof jQuery == 'undefined') {
    document.write('<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"></'+'script>');
  }
</script>

We highly recommend updating your themes to include jQuery themselves as soon as you can. Additionally, if you're a developer who has been dropping {{ghost_foot}} because of jQuery, please add it back! We'll soon be displaying warnings and errors for themes which fail to include the required helpers.

If you need any help or would like to chat about updating your themes, please drop by the #themes channel on our Slack community.

Update 24th Aug: jQuery will be removed from the next version of Ghost, which will be 0.7, and will be released VERY soon.

]]>
<![CDATA[Public Dev Meeting June 2nd]]>https://ghost.org/changelog/public-dev-meeting-june-2ndGhost__Post__5cf5f94b3a5f1b0038cc7096Wed, 03 Jun 2015 16:06:57 GMT

Quick Summary

Public Dev Meeting June 2nd

Our focus is still on Zelda, with some refactoring work ongoing on the server side to improve the codebase & get ready for things like channels, apps & better theme handling.

Progress Report

Non-Zelda:

  • Server-side cleanup, ongoing work on splitting out middleware - thanks to @hex337 and @morficus for getting stuck in. There is plenty more to do in this issue, so feel free to grab one and use their PR's as an example of how to do it.
  • @jaswilli has been working on optimizing & cleaning up Ember - 5340, 5348, 5351

Zelda:

  • New screens mocked up in HTML for Apps & Themes. There will be issues for these once they're ready to code up in Ember.
  • Lots of things are blocked by inline validation. This is a high priority issue as it is the biggest blocker we have right now
  • User onboarding (a new setup process) is in progress with an open PR for user invites. This is currently blocked by inline validation.

Priority Issues

  • As stated above, by far and away the most important issue we need fixed is inline validation, as that is a dependency for several other changes.

  • All Zelda issues are a priority and have been moved to the Zelda milestone. Feel free to grab any open issues as these all need to be resolved before the next release can happen.

  • Please keep picking up bits of the middleware refactor, as that is super helpful.

  • Autocomplete search is another issue that is a priority and has been assigned to @acburdine and @morficus to tag team.

  • There are plenty of beginners issues right now, and a few more are going to be raised. If you are looking for a good way to start contributing, these issues are a great place to start getting involved.

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 9th June, 5:30pm London time.

]]>
<![CDATA[Private Blogs]]>https://ghost.org/changelog/private-blogsGhost__Post__5cf5f94b3a5f1b0038cc7144Mon, 01 Jun 2015 12:33:19 GMTPrivate Blogs

You can now run a private (password protected) blog with Ghost.

Private blogs are great for when you just want your friends and family to have access to your posts, you want to run an internal company blog to share information between team members, or you're just in the pre-launch phase.

Private Blogs

When you enable password protection for your blog all social and search engine optimisation features are disabled, and visitors must enter the password to be able view your content.

This is a simple implementation designed for the most common use-case of a simple restricted access blog with a shared password. If you're storing highly sensitive content you should use robust security & authentication!

Ghost(Pro) users already have access to this feature right now, there’s nothing you need to do! Users running Ghost on their own servers can grab this feature by upgrading to Ghost 0.6.3.

]]>
<![CDATA[Public Dev Meeting May 26th]]>https://ghost.org/changelog/public-dev-meeting-may-26thGhost__Post__5cf5f94b3a5f1b0038cc7095Wed, 27 May 2015 02:41:34 GMTPublic Dev Meeting May 26th

Two big events took place in the last week. The first being the release of 0.6.4. This release consisted mostly of bug fixes from the 0.6.3 release the week before.

A couple of notable bugs that were fixed were a problem where, on import, multiple owners could be created (#5260). That would leave people stuck because the system is only supposed to have one owner. Now, if an owner is already in the system, it will demote anyone else it believes to be an owner, down to an admin.

There was also a caching issue that was causing problems with the password protection as well as the post previews. That was solved in #5302 and #5292.

The other big ticket item from this week is that a new admin UI (nicknamed Zelda) was merged in! This new UI allows for the admin to be much more extensible and flexible for future features. Hannah has created a bunch of issues that need to be taken care of in regards to the new admin and put them into the current backlog. This is definitely a place of need for anyone who is looking for a place to contribute. Hannah wrote a good post on why she is so excited for the new admin :).

One large topic of discussion during the meeting was whether or not redirects should be added inside the admin when url's are changed to specific areas. The conclusion that was decided on, was to not add any redirects for now, and see if people complain. It would be good not have this bloat in the codebase, so we are taking a wait and see approach to see if anyone complains when it's not there.

Need Help

  • Implementing search - If you, or anyone you know, has any experience with search, that is an area that is up for discussion. We are trying to figure out the best way to move forward in this respect, and would love some help figuring out the best way to do this.

  • Middleware Refactor - A task list was added to the middleware refactor issue to help split apart that issue. If you are looking for a place to start contributing with Ghost, this issue may be a good one. One PR was already merged that can be used as guidance (#5287)

  • Current Backlog - As was stated above, these are all important issues to help with the new admin. If there are any other issues you find with "Zelda", feel free to comment on them on #5314 as it is serving as the place to keep track of Zelda issues for now.

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 2nd June, 5:30pm London time.

]]>
<![CDATA[Post Previews]]>https://ghost.org/changelog/post-previewsGhost__Post__5cf5f94b3a5f1b0038cc7143Mon, 25 May 2015 13:03:13 GMTPost Previews

Having a Markdown preview in the editor is great, but what about when you want to see how your post is going to look in the context of your theme?

Now, you can open the post settings menu and hit the post preview link to see exactly what your post is going to look like before you publish it. If you need some proof-reading or feedback before going live, you can also send the link to other people and see what they think.

Post Previews

Snazzy.

Ghost(Pro) users already have access to this feature right now, there’s nothing you need to do! Users running Ghost on their own servers can grab this feature by upgrading to Ghost 0.6.3.

]]>
<![CDATA[Ghost 0.6.4]]>https://ghost.org/changelog/ghost-0-6-4Ghost__Post__5cf5f94b3a5f1b0038cc7094Thu, 21 May 2015 17:52:53 GMT

Ghost 0.6.4 is now available on GitHub, npm and Ghost.org. 0.6.4 contains a number of bug fixes, largely for features released in 0.6.3.

Highlights

  • [Fixed] Caching issues with previews
  • [Fixed] Password protection not redirecting to blog
  • [Fixed] Multiple owners after import
  • [Fixed] Ghost logo linking to wrong URL
  • [Fixed] Invite email missing contact email address

You can see the full change log for the full details of every change included in this release.

How to Upgrade

All Ghost(Pro) users are being automatically updated and will be running Ghost 0.6.4 shortly. You're welcome :)

For people running Ghost on their own servers, you can download Ghost 0.6.4 and then check out the upgrade documentation over on our support site. If you've missed out a version or two, don't worry you can upgrade directly from any 0.5.x version straight to 0.6.4.

Enjoy!

Credits

This release was lovingly crafted by Hannah Wolfe, cobbspur, Emerson Keenan, Joe Wegner, John Nguyen and Tushar Bhushan.

]]>
<![CDATA[Public Dev Meeting May 19th]]>https://ghost.org/changelog/public-dev-meeting-may-19thGhost__Post__5cf5f94b3a5f1b0038cc7092Wed, 20 May 2015 04:29:56 GMTPublic Dev Meeting May 19th

Since our last meeting, Ghost 0.6.3 was released! With this release comes two great new features, blog password protection and post previews. Post previews are definitely a nice feature to have and a very welcome addition to Ghost. Here is the full change log for anyone interested in knowing exactly what has changed from 0.6.2 to 0.6.3 :).

There has been a little bit of a caching problem with the latest release and the password protection that some people may have experienced. Some maintenance fixes are being put into place that should fix the problem shortly.

There were a lot of little PR's this week to get everything ready for the release, but there were also a couple of others worth mentioning. As part of a larger front-end refactor, a PR was merged to pull away each middleware function into its own file (#5287). All of the other functions need to be pulled out of the middleware.js file and moved into their own functions as well. If you are a beginner looking to get one of your first PR's merged into Ghost, this is a great place to start. Just take a look at the example PR above that has already been done and take a crack at one of the other functions :).

For anyone who develops on Ghost, some changes were made so that grunt clean will now wipe out all the node_modules and bower_components. This will help if your grunt dev breaks for any reason.

One other PR that we wanted to mention was an optimization to the password protection url (#5278). This PR just removed some of the bloat from the url to make it a cleaner and nicer experience.

One large change coming down the pipeline is a new admin interface, nicknamed Zelda (#5273). This new admin will allow Ghost to continue to grow and evolve without having to figure out where to place new features into the existing framework. There will be more details on this in the coming weeks, but feel free to checkout that PR and take it for a spin :).

Public Dev Meeting May 19th

Thanks for hanging out, see you next week :D.

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 26th May, 5:30pm London time.

]]>
<![CDATA[Ghost 0.6.3]]>https://ghost.org/changelog/ghost-0-6-3Ghost__Post__5cf5f94b3a5f1b0038cc7091Thu, 14 May 2015 15:01:00 GMT

Ghost 0.6.3 is now available on GitHub, npm and Ghost.org. 0.6.3 includes some bug fixes and a couple of nice new features, including post previews :)

Highlights

  • [New] Post previews
  • [New] Password protected blogs
  • [New] Custom author templates
  • [Improved] Session length is now 7 days
  • [Fixed] Word count in editor not counting non-latin chars
  • [Fixed] Secure URLs in RSS when accessed via HTTPS
  • [Fixed] Autosave causing post to be published
  • [Fixed] Admin app errors when active theme missing

You can see the full change log for the full details of every change included in this release.

In Detail

In recent weeks, we've started to focus on refactoring the code which renders blog pages. This part of the codebase has been left unloved whilst we focused on the admin UI, and it's time to give it some much needed attention. The ongoing work is the first step towards making Channels a possibility.

By unifying the code that renders the index, tag and author 'channels' which exist in Ghost, we are reducing duplication as well as ensuring they all work consistently. As a result of this work, Ghost 0.6.3 adds the ability to specify a custom template for each author, as can already be done with tags.

Theme API Changes

There are two major additions to the theme API in Ghost 0.6.3.

The first is the addition of the custom author templates. Meaning that you can now add, for example, a author-hannah.hbs template to your theme and this will be used to render the author page if the author's slug matches hannah. This can be used to create individual author pages.

Secondly, Ghost 0.6.3 adds the new password protected blogs feature, which allows you to hide your blog behind a shared password - very useful whilst your blog is under construction etc. When this page is enabled, all visitors to your blog get sent to /private/ and shown a password form.

The new private page is treated as its own context. It can be customised by including a private.hbs template in your theme. {{#is 'private'}} will be true, and the {{body_class}} helper will output private-template. Full details can be found in the theme documentation.

See the theme API docs for more details of what changed in Ghost 0.6.3. The theme documentation is frequently updated with more details and better examples. Please also use the suggest edits feature if you see something that is missing.

How to Upgrade

All Ghost(Pro) users are being automatically updated and will be running Ghost 0.6.3 shortly. You're welcome :)

For people running Ghost on their own servers, you can download Ghost 0.6.3 and then check out the upgrade documentation over on our support site. If you've missed out a version or two, don't worry you can upgrade directly from any 0.5.x version straight to 0.6.3.

Enjoy!

Credits

This release was lovingly crafted by Jason Williams, Hannah Wolfe, Austin Burdine, John O'Nolan, Paul Adam Davis, Robert Jackson, Matt Enlow, Sebastian Gierlinger, Wilhansen Li, Adrian Estrada, lmoe, Alex Kleissner, Artyom Fedenko, David Balderston, Fabian Miiro and Harry Hope.

]]>
<![CDATA[Public Dev Meeting May 12]]>https://ghost.org/changelog/public-dev-meeting-may-12Ghost__Post__5cf5f94b3a5f1b0038cc7090Wed, 13 May 2015 00:08:34 GMTPublic Dev Meeting May 12

This week was filled mostly with bug fixes and maintenance gearing up towards the release of 0.6.3. Hopefully this release will be coming next week or so and will have some great new features along with it.

Bug Fixes

There was a bug found that would cause the auto save to change the post status from draft to published. A pull request was merged in (#5244) that makes it so auto save isn't able to change the status of the post, just save in its current state.

Also, there was an issue with the email validator that was fixed in #5243.

Maintenance

A number of the dependencies for Ghost were updated (#5225 and #5226), and some updates were made to ember (#5222 and #5221) to keep it updated and get it ready for the new versions of ember that are coming shortly.

A new editor config file was added that makes it easier for contributors to keep all of the code styling the same (#5244).

And lastly, some updates were made to help reduce the payload of storing and using the password to protect the front end of the blog (#5232).

Coming Up

Front end password protection is currently under the 'Labs' section in the Ghost admin. It will be moved into full production for the upcoming release.

As we are coming up on the next release, we could definitely use some help picking up any lingering bug issues, or having some QA testing done to make sure any new bugs are fixed. Thanks, and see you again next week :).

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 19th May, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting May 5]]>https://ghost.org/changelog/public-dev-meeting-may-5Ghost__Post__5cf5f94b3a5f1b0038cc708fWed, 06 May 2015 01:28:44 GMTPublic Dev Meeting May 5

Each of the past few weeks, the Ghost Slack community has continued to grow. This has been great to see and really benefits the community as a whole. There are a lot of people are stepping in to help others with problems and no one is left hanging waiting to see if anyone is around, which would sometimes happen in the irc. If you haven't yet joined, feel free to join our Slack channel and say hi!

New Features

As for Ghost itself, two major additions were merged in this week. One is the long awaited post preview (#5200). You can now view your post as you're writing, the same way that you would see it on your blog once the post is published. Definitely a good, and much needed, feature.

Public Dev Meeting May 5

The ability to password protect your blog has also been merged in (#5103). This allows admins the ability to protect the entire blog with a password to let specific people view it without opening it up to the general public.

Public Dev Meeting May 5
Public Dev Meeting May 5

Minor Changes/Bug Fixes

Some of the code injection styles were a little hard to read, so some changes were made to the styling to make it easier to read, and fit the overall style better (#5196).

A few of the bower dependencies were also updated, partially because a lot of repos are now adopting bower as a standard, so the full git links are no longer needed (#5198).

A bug was also fixed that would not update the word count for not ASCII characters (#5208). A new library was added to Ghost which will fix this problem, and any similar problems that might have crept up in the future.

Progress for Future Features

One other pull request was merged in this week that was a refactor of the front end controller (#5129). This refactored the code that generates the list of posts for the index, tag, and author pages so that it is now one function. This is very important, and a great first step towards creating Channels.

Morficus has also created a proof of concept for multi-language in the admin panel. Definitely give that a look if you have some time and provide any feedback you have as multi-language is a feature that has been wanted for quite some time.

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 12th May, 5:30pm London time.

]]>
<![CDATA[Two Years in: How we Spent The Kickstarter Money, where we are now, and what’s next for Ghost]]>https://ghost.org/changelog/year-2Ghost__Post__5cf5f94b3a5f1b0038cc713dWed, 29 Apr 2015 12:37:20 GMTTwo Years in: How we Spent The Kickstarter Money, where we are now,  and what’s next for Ghost

April 29th is a very special day for us. It’s the day on which, two years ago, Ghost launched on Kickstarter and went on to raise $300,000. It’s the reason we’re here today!

To celebrate, we’ve got an enormous post in store for you, sharing exactly how we spent the Kickstarter money[1], where we've gotten to so far, and what's coming up next for Ghost.

Kickstarter

Two Years in: How we Spent The Kickstarter Money, where we are now,  and what’s next for Ghost

On April 29th, 2013 - Ghost launched on Kickstarter with an idea for a brand new blogging platform. Just 29 days later it had blown away its fundraising goal by more than 800% and raised $300,000 in the process.

Today we're back to tell you exactly where all that money went and what we've been working on ever since. Strap yourself in!

Funding breakdown

Here's the breakdown of funding as Kickstarter sent it to us:

Two Years in: How we Spent The Kickstarter Money, where we are now,  and what’s next for Ghost

  • Total pledges: $296,743.12
  • Dropped pledges: $13,212.84
  • Kickstarter fees: $14,176.51
  • Payment processing fees: $10,033.70
  • Value Added Tax (VAT): $4,842.04

Total Kickstarter funds received: $254,478.03

After the campaign ended, we were very fortunate that several more large companies were interested in sponsoring Ghost - and we were very pleased to welcome their support.

  • Additional sponsorships: $60,448.00

Total funding received: $314,926.03

Startup cost breakdown

This is everything we spent to get Ghost up and running as a company, broken down into individual categories.

  • Ghost.org development - $50,977.36
  • Ghost.org domain: $33,300.00
  • Servers / hardware: $30,839.58
  • Ghost(Pro) development - $19,930.53
  • Logo / identity: $10,000
  • Launch event: $9,385.79
  • Trademark: $2,501.51

Total startup costs: $156,934.77

Remaining budget: $157,991.26

Running cost breakdown

Once we were up and running, these were our averaged out monthly expenses to keep the business running.

  • Salaries (4 people): $18,000/month
  • Hosting: $3,042.68/month
  • Software: $534.98/month

Total monthly costs: $21,577.66

Summary & Highlights

Our total startup costs came in at $156,934.77 - leaving a remaining operating budget of $157,991.26 to support ongoing running costs. Employing a team of 4, plus hosting and overheads came in at $21,566.66/month, meaning the remaining funding supported just over 7 months of business operation and development.

A few notes on individual items:

Kickstarter inefficiency

As you can see, we actually paid about 15% of what we raised on Kickstarter straight away to fees, dropped pledges and taxes. This is a monumental amount. We weren’t prepared for just how high this would be by any stretch of the imagination. This was a tough lesson which was only offset by the fact that we did an extra round of private sponsorships which made up the difference.

One of the best decisions we made was not to have any physical rewards. There are too many stories of projects who spend 3 months and 50% of their funding making tshirts and dealing with shipping problems instead of working on their project. Avoiding this pitfall was important.

The only exception where our rewards included something that was not the product itself, was the launch event. This was explicitly included in all rewards over $1,000 (which is to say: it was something which people deliberately backed and paid for to happen). As backers at this level made up $85,000 of the total funding, the $9,300 launch event expense was easily paid for and also generated great launch PR including national media coverage.

Investing in assets

Two Years in: How we Spent The Kickstarter Money, where we are now,  and what’s next for Ghost

We spent $66,641.09 on capital assets (servers, domain name and trademark). Assets are things which have and hold explicit monetary value, which is to say: You can sell them at any time and get some (or all) of your money back. So this money isn’t “gone” - it’s simply tied up. The servers depreciate in value as they get older (they’re worth less and less), but the domain and trademark appreciate in value as the brand grows (they’re worth more and more).

By spending ~$30,000 on servers up front, we reduced our monthly infrastructure costs from about ~$20,000 to ~$3,000. We host 16,000-20,000 full stack Node.js applications at any given time. The high resources required here are the trade-off which comes with hosting independent managed apps vs a single large multi-tenant install: You get much more freedom to allow people to write 3rd party code and run an independent site - but - the baseline cost for each of those sites is much higher.

The Ghost.org domain was a far more contentious matter. Owning ghost.org vs tryghost.org wouldn’t increase our income at all. If we had only received income from Kickstarter backers, who expected us to spend their hard-earned money on what we’d promised to deliver, we would have let this one go. Fortunately for us, we had additional sponsorship capital to work with following the Kickstarter campaign which gave us some added flexibility. So we decided to go for it.

Originally, the gentleman who owned Ghost.org wanted close to $100,000 for it. After a long negotiation we managed to get him down to $33,300 and we felt that price was only ever going to go up as Ghost became bigger and more well-known.

It was a really hard decision to let go of such a large sum at such an early stage, but we felt that the long term investment in the brand was ultimately worth it. Looking back now and imagining what the price might be if we tried to get the domain 2 years later, we're very, very happy we did this back then.

Ghost.org & Ghost(Pro)

We spent $70,907.89 on subcontracting to build Ghost.org and Ghost(Pro). The vast majority of this went to our friends at aTech Media, who were one of the first companies who stepped up to back Ghost’s Kickstarter campaign at the partner level. They gave us incredible development rates to build a platform whose size and complexity should have cost many times more.

Two Years in: How we Spent The Kickstarter Money, where we are now,  and what’s next for Ghost

As the vast majority of our Kickstarter reward deliverables comprised of Ghost(Pro) hosting credit - we absolutely had to get this right.

Having an incredible second team building our infrastructure meant that our tiny team of just two full-time developers could devote all of their time to building Ghost itself.

All of this happened in an absolutely break-neck timeframe. From June to September 2013 (4 months), Hannah and a small team of contributors built Ghost 0.3 while aTech built Ghost.org. Then from October to January (4 months), Hannah, Sebastian and a slightly larger group of contributors built Ghost 0.4 while aTech set up 11 servers, 2 switches, and an enormous system to deploy and manage thousands of Ghost(Pro) blogs.

It was a race to get everything up and running as quickly as possible so that we could start generating income to support the long-term future of Ghost with healthy, recurring revenue. As a non-profit organisation, there was no possibility to raise a round of venture capital when the money ran out.

We had a hard deadline with a short runway & just one chance to do it right.

Nothing can prepare you for that sort of pressure. You throw all of your time and energy at an idea which you think will work, and you hope will work, but of course there is no guarantee that it actually will work.

Commence: Blood, sweat, tears.

We would have hit profitability right on target at 7 months, but we decided to grow the team by 2 more people in the summer - meaning we eventually hit profitability at the 11 month mark in December 2014.

At this milestone, the Kickstarter campaign and everything around it became an official success. We hadn't just built one product and delivered it to our backers, we'd managed to create a sustainable open source business which would keep on going and last for years to come.

Where we are now, and what’s next for Ghost

Two years ago I laid out a plan for what we were going to build that was based on my very first blog post about the idea of Ghost. Now seems like a good time to take stock of how much progress we’ve made towards that initial vision.

Ideas evolve and grow as you work on them, so the longer you spend refining and exploring them - the more they change in shape and scope.

In short, there are some things which were never in the original plan which have turned out to be a dramatic success: Using JavaScript, killer automation for Ghost(Pro), having a free worldwide Content Delivery Network, acquiring Roon.io, incredibly sophisticated built-in SEO, structured data support, dynamic navigation menus and great mobile support.

There are also some things which were in the original plan which have turned out to be a dramatic failure. This list is shorter, but far more painful. The long-promised and long-awaited dashboard - and of course: apps for 3rd party integrations. It’s been two years and we’ve failed to deliver - so it’s time to hold ourselves accountable and explain why:

Both apps and the dashboard are massive (extraordinarily large) projects, and we just haven’t had the resources to build them. Our team still comprises of just 3 full time developers, 1 support, 1 ops, and 1 designer running the entire open source project as well as the enormous infrastructure that powers Ghost.org and Ghost(Pro). We bit off a big challenge and we’re chewing like crazy, but these two projects have (so far) proved to be too much for us.

Our biggest failure has been to keep on promising that they’re coming “soon” and not being honest about this. That ends today.

Here’s the skinny on each of them:

Apps

The scope for apps is BIG and, in short, we’ve been floored with its complexity. When you’re writing code for a single product it’s relatively easy to ship something small and then iterate upon it. But, when you’re writing code to be used by hundreds (or thousands) of 3rd party developers - it comes with a lot of baggage.

Whatever we build is something that people will depend on: we can’t just change whatever we like. This means that we have to spend a very long time considering all the possibilities so that we don’t build the wrong thing and back ourselves into a corner further down the line.

One might argue, however, that it’s better to build something and have it break later - than to build nothing at all.

And one would be correct.

Two Years in: How we Spent The Kickstarter Money, where we are now,  and what’s next for Ghost

We are going to deliver the first iteration of apps this year. No more waiting around and no more excuses. We're going to start out with a new approach very similar to how Atom built their own package manager. Initially it will only support free (not paid) themes and apps. After that we'll see where we can take it.

The Dashboard

This is a difficult conversation to have. When I first came up with the idea for the dashboard it was fresh and exciting. Oh how we frolicked together, flirting with the idea of beautiful stats right in your blog’s admin area. Taking long walks on the beach, imagining all of the possibilities.

But, as time went on, the relationship started to lose its spark. Doing third party analytics integration is a mammoth task with an infinite number of pitfalls and complexities. The best scenario is that you simply have duplicated set of data to what you already have in other places. The worst case scenario is that the whole thing breaks in any number of ways, and it’s of no use at all. It’s an obscenely large amount of work for very little payoff.

The writing has been on the wall for a while now, and I’m afraid it’s not you - dear dashboard - it’s us. We’re breaking up with you.

We are going to do a lot of work on integrated post analytics in future. Allowing you to see who is visiting your blog, what they're reading, for how long, and what they do afterwards are all of massive value and importance. But we're no longer going to pursue the idea of pulling in 3rd party services onto a unified visual dashboard.

Two Years in: How we Spent The Kickstarter Money, where we are now,  and what’s next for Ghost

If you still want a dashboard like the the original concept for your blog right now, there is a pretty awesome solution already available: Geckoboard have been offering this for years (that's where the original dashboard idea came from!) - and they do an incredible job. We can’t recommend them highly enough.

We’re deeply sorry that we took so long to admit that this concept was out of reach for us. We’ve learned a great deal in the process, and we’re working hard to improve how we communicate planned features in Ghost to make sure this doesn’t happen again.

Year 3

Today is Ghost’s 2nd birthday, and the start of its 3rd year of life. In the last year alone so many incredible people have started using Ghost for their blogs: Sky News, Square, NASA, The Bitcoin Foundation, Graze, CodeStarter, Coinbase and Layer to name just a few.

Two Years in: How we Spent The Kickstarter Money, where we are now,  and what’s next for Ghost

If there’s anything that the last 2 years have taught us, it’s that it’s impossible to predict everything that’s going to happen in the next 12 months - so (for a change) I’m not going to try.

But, I will share what our main focuses for this year are. The main areas where we hope to make the most progress:

  • The Ghost JSON API & Apps
  • Big improvements to our admin UI
  • A significant upgrade of Ghost(Pro)

If you want to keep track of progress, we have an open ideas page where you can submit (and vote on) your ideas for Ghost - as well as a public roadmap showing the exact things we’re working on now and next.

Our biggest challenge, as ever, is doing a very large amount with a very small team. To that end, we always welcome more contributors to help us build Ghost for everyone.

If you want to help, the most amazingly useful thing you can do is to choose to run your blog on Ghost(Pro).

Our hosted platform is what funds the entire Ghost Foundation, and the more it succeeds, the more developers we’re able to hire full time to work on Ghost. You can see every single bit of revenue coming in from Ghost(Pro) on our public revenue dashboard. This is the biggest contributing factor to how fast we’re able to grow and how much we’re able to accomplish.

Thanks for joining us for the first 2 years, and here's to the next 2.

A small favour

We’d love your help to share our birthday celebrations, accomplishments and plans for the future!

Here’s a pre-written status, to make it extra simple:

2 years old and @TryGhost just did a $314,926 transparent Kickstarter funding breakdown to celebrate! http://blog.ghost.org/year-2/

or use 1-click links for Ultimate Efficiency TM: or

We'll be hanging out in the comments if you have any questions or thoughts! We're also having a party in our Slack Team which you're welcome to join!

Footnotes


  1. We do business in GBP, USD and EUR, so all figures in this post are approximated USD equivalents based on exchange rates at the time of the transactions. We’ve tried to be as precise and accurate as possible in all areas, but it’s near impossible to be exact. ↩︎

]]>
<![CDATA[Public Dev Meeting April 28]]>https://ghost.org/changelog/public-dev-meeting-april-28Ghost__Post__5cf5f94b3a5f1b0038cc708eWed, 29 Apr 2015 11:15:49 GMTPublic Dev Meeting April 28

Yesterday's meeting had really great attendance. I'm really enjoying having the meetings in slack with a broader section of our community joining in. Please come hang out in our slack channel on Tuesdays around 5:30pm UK time, the more the merrier!

This week saw 2 releases of Ghost land just 5 hours apart. 0.6.1 was a bug clean up release for 0.6.0, and 0.6.2 fixed a major issue where the new previous and next posts links did a disappearing act in what was a truly beautiful bug. Big thanks to the people who reported the issue so quickly and enabled us to get it fixed in a timely fashion. We did also squeeze a few other small bits into 0.6.2, but nothing that should affect the majority of people.

Since 0.6.2 we've gotten a few other things merged into master as well:

  • When an active theme has gone missing, the users will now be able to select a correct theme instead of Ghost being broken (#5191) (was a regression that was fixed)
  • When accessing rss through ssl, send all assets like images over https as well (#5189) (regression as well)
  • a small change for people who are playing with the very very limited app capabilities (#5184)
  • A few test optimisation PR's were merged in (#5182, #5176, #5161)

The test improvements allow you to run grunt test-all to run just the tests without linting, as linting can be quite slow. Also grunt coverage now generates a lovely coverage report in core/test/coverage that we can use to improve test coverage in a couple of key areas, namely middleware, url generation, and the frontend controllers when they get refactored.

Also this week, @novaugust and I met up and hacked on the preview feature. We've got a PR that's almost ready to merge with the exception of needing a few tests. @acburdine has also completed his work on password protected blogs and so it's looking like 0.6.3 will land within the next 2 weeks with at least one, if not both of these features.

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 5th May, 5:30pm London time.

]]>
<![CDATA[Upgrading The Editor]]>https://ghost.org/changelog/ghost-spellcheckGhost__Post__5cf5f94b3a5f1b0038cc7141Thu, 23 Apr 2015 09:01:39 GMTUpgrading The Editor

From the beginning of Ghost’s life, there has always been one very common complaint from users: Why, oh why is there no spell-check?

*looks around uncomfortably*

We wanted to fix this one sooner, we really did, but the underlying code for our editor was preventing us from being able to do anything about it. Thankfully, we’ve managed to completely overhaul the editor and – while it looks largely the same – under the hood, it’s a whole new beast.

Now: Your browser’s built-in spell check function works (wohoo!).

Also: You can do mobile image uploads... and the scrolling doesn’t slow down any more with lots of text... and the scroll-position sync works better... and the cursor doesn’t get lost any more when navigating with keyboard arrows.

Phew.

Basically it’s the same editor that you’re used to writing with, it just sucks a lot less. Which is a step in the right direction.

Ghost(Pro) users already have access to this feature right now, there’s nothing you need to do! Users running Ghost on their own servers can grab this feature by upgrading to Ghost 0.6.

]]>
<![CDATA[Ghost 0.6.2]]>https://ghost.org/changelog/ghost-0-6-2Ghost__Post__5cf5f94b3a5f1b0038cc708dWed, 22 Apr 2015 21:01:49 GMT

Ghost 0.6.2 is now available on GitHub, npm and Ghost.org. Whew, that was a bit embarrassing! Shortly after the release of Ghost 0.6.1 an eagle-eyed user noticed their next & previous post links had gone missing. We've gotten that fixed up in 0.6.2, and squished couple of other minor fixes in too.

Highlights

  • [Fixed] Next and previous post helpers gone missing
  • [Fixed] Casper: text styling issues

You can see the full change log for the full details of every change included in this release.

How to Upgrade

All Ghost(Pro) users are being automatically updated and will be running Ghost 0.6.2 shortly. You're welcome :)

For people running Ghost on their own servers, you can download Ghost 0.6.2 and then check out the upgrade documentation over on our support site. If you've missed out a version or two, don't worry you can upgrade directly from any 0.5.x or 0.6.xˆ
Enjoy!

Credits

This release was speedily crafted by Hannah Wolfe & Sebastian Gierlinger

]]>
<![CDATA[Ghost 0.6.1]]>https://ghost.org/changelog/ghost-0-6-1Ghost__Post__5cf5f94b3a5f1b0038cc708cWed, 22 Apr 2015 15:07:32 GMT

Ghost 0.6.1 is now available on GitHub, npm and Ghost.org. 0.6.1 is an incremental improvement to Ghost containing bug fixes for 0.6.0, along with an updated version of Casper also containing bug fixes.

Highlights

  • [Fixed] Authors unable to access their profiles in the Ghost admin
  • [Fixed] {{ghost_head}} causing an error on custom error pages
  • [Fixed] Published button not updating to say "post" or "page" correctly
  • [Fixed] {{author.email}} being incorrectly available in certain contexts
  • [Fixed] Casper: layout problems with copyright & next/previous posts
  • [Fixed] Casper: icon font caching

You can see the full change log for the full details of every change included in this release.

How to Upgrade

All Ghost(Pro) users are being automatically updated and will be running Ghost 0.6.1 shortly. You're welcome :)

For people running Ghost on their own servers, you can download Ghost 0.6.1 and then check out the upgrade documentation over on our support site. If you've missed out a version or two, don't worry you can upgrade directly from any 0.5.x version straight to 0.6.1.

Enjoy!

Credits

This release was lovingly crafted by Hannah Wolfe, John O'Nolan, Paul Adam Davis and cobbspur.

]]>
<![CDATA[Public Dev Meeting April 21]]>https://ghost.org/changelog/public-dev-meeting-april-21Ghost__Post__5cf5f94b3a5f1b0038cc708bWed, 22 Apr 2015 01:05:00 GMTPublic Dev Meeting April 21

Last week, our Slack team was made available to the public, and it has been a great success! There are more people in the Slack channels now than there ever were in our IRC. This has definitely been a great win for the Ghost community. If you have not signed up for our Slack channel, John created a blog post last week with more details on why we switched, and how to access the channel.

Two more features were also announced on the blog. The first being code injection and the other being the prev and next post helper. Both of these features were highly sought after and have received a great response from the community. Code injection is going to make it much easier for everyone to get code into their blog without having to make any edits to the theme. This can be used for something as simple as adding google analytics, or it can be used to add whole javascript libraries. Definitely a great addition to Ghost.

Most of the PR's over the last week were minor bug fixes:

  • #5143 - Fixes a problem where authors were unable to access their profiles in the Ghost admin
  • #5149 - Fixes an error being thrown from {{ghost_head}} on custom 404 pages
  • #5140 - Fixes the publish button not updating to say "post" or "page" depending on the context
  • #5159 - Fixes author.email property being incorrectly available in certain contexts
  • Casper (#159, #157) - Fixes a footer bug and icon font caching problems.

Novaugust has created a proof of concept PR in regards to creating post previews (#5158). This is available for anyone (including beginners) to pick up and continue on with. This is a good opportunity for someone to become familiar with the Ghost codebase and get a great feature in at the same time.

Lastly, escaping markdown has been a bit of problem for a long time. Hannah has been working to fix these problems once and for all. If you get a chance, take her PR for a spin and try to see if you can break it (#5167).

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 28st April, 5:30pm London time.

]]>
<![CDATA[Code Injection]]>https://ghost.org/changelog/code-injectionGhost__Post__5cf5f94b3a5f1b0038cc7142Mon, 20 Apr 2015 09:04:31 GMTCode Injection

What do you do when you need to inject a small snippet into your Ghost blog, like an analytics tracking code or a simple meta tag?

Before: you had to laboriously edit your theme files in order to get those common snippets into your blog. Functional, but not very convenient.

Now: you can use the new code injection feature, which allows you to inject code snippets into the {{ghost_head}} and {{ghost_foot}} helpers of your theme, without ever needing to edit it. It also means you can change themes without losing these snippets!

It’s a small thing, but a very helpful one. We’ve been testing it inside Ghost Labs for a few months, and now it’s ready for prime-time!

Got ideas for more features that should be in Ghost? Don’t forget to vote on our feature wishlist.

Ghost(Pro) users already have access to this feature right now, there’s nothing you need to do! Users running Ghost on their own servers can grab this feature by upgrading to Ghost 0.6.

]]>
<![CDATA[Public Dev Meeting 14th Apr]]>https://ghost.org/changelog/public-dev-meeting-14th-aprGhost__Post__5cf5f94b3a5f1b0038cc708aWed, 15 Apr 2015 11:19:36 GMTPublic Dev Meeting 14th Apr

Today we made our slack team available publicly and held our meeting in the #ghost channel on slack for the first time. It was awesome to see so many people turn up and join in! Our meetings will continue to be held in slack at 5:30PM UK time every Tuesday, and if you miss it, we always write up what happens here :)

This week's major development news is the release of Ghost 0.6.0, which had changes in roughly 50% of the codebase. It's packed full of new features as well as big changes for contributors. Here's a few of the changes from last week that made it into 0.6.0:

  • Code Injection no longer behind a feature flag (#5125)
  • Improved Structured Data (#4891)
  • RSS now includes post images (#5108) and is cached (#5128)

In light of such extensive changes, bugs were expected (and found) and so this week we really want to push to fix as many bugs as we can. All of the open bugs can be found here. If you'd like to help testing out the new features, looking for regressions and raising bugs if you find them is also SUPER helpful as well as bug-fixing. If you'd like to start contributing but don't know how, testing the master branch or testing pull requests is a great way to get stuck in.

We are still on the look out for developers to lead translation development efforts. This is happening in the #i18n channel on slack. This is not doing translations - but making translations possible by implementing the dev tools to allow people to translate. (JS skills required) - if anyone is interested, it'd be super helpful to make some progress there.

Full details:

The full logs of the meeting can be found in our Slack logs.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on Ghost's slack. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 21st April, 5:30pm London time.

]]>
<![CDATA[Previous & Next Post Links]]>https://ghost.org/changelog/previous-next-post-linksGhost__Post__5cf5f94b3a5f1b0038cc7140Wed, 15 Apr 2015 09:15:55 GMTPrevious & Next Post Links

Keeping readers engaged on your blog is vital, and one of the easiest ways to get people reading more posts is to show them more posts at the end of each article!

You can now add {{prev_post}} and {{next_post}} helpers to your theme so that your audience will always have more great content to read. Developer documentation is here, and you can see an example of how we’ve implemented this in the default Casper theme over on http://demo.ghost.io/i-have-a-dream/ (scroll to the bottom!)

Have fun with this one, there are lots of cool design possibilities!

Ghost(Pro) users already have access to this feature right now, there’s nothing you need to do! Users running Ghost on their own servers can grab this feature by upgrading to Ghost 0.6.

]]>
<![CDATA[Making Our Slack Team Public, The New Ghost Community Hub]]>https://ghost.org/changelog/ghost-slackGhost__Post__5cf5f94b3a5f1b0038cc713fTue, 14 Apr 2015 11:00:48 GMT

Just last week we announced that we’ve made all of our revenue figures public in an effort towards more transparency as a business. Today we’re taking another step in that direction by making our Slack team public.

Last year, Slack took the world by storm as it exploded onto the internet with its simple but powerful group messaging application. We’ve been using it internally at the Ghost Foundation since the day of its public launch. But, it hasn’t been accessible to any of the wider Ghost community, who have been largely split between IRC and our forums.

We’re going to try a new approach: Inviting our entire community into Slack and centralising it in one simple place where you know that there will always be someone around to help, chat to, or offer insights. From developer chats and meetings to support request and theme discussion; it’s all going to be under one roof.

Ghost Slack

Making it all work

This is a bit of an experiment! A few other open source projects have transitioned to Slack recently and it has worked very well. There are also wider Slack-only communities popping up all the time, like #nomads, who have proved that you can made it work with an incredibly large and diverse group of people.

The prospect of opening up our office, as we consider it, is slightly daunting - but kind of cool.

Join The Ghost Slack Team

We’d love to chat with you! We hang out in Slack all day every day (and we're online right now!), so come say hi :)

]]>
<![CDATA[Ghost 0.6.0]]>https://ghost.org/changelog/ghost-0-6-0Ghost__Post__5cf5f94b3a5f1b0038cc7089Mon, 13 Apr 2015 20:42:55 GMTGhost 0.6.0

Ghost 0.6.0 is now available on GitHub, npm and Ghost.org. Ghost 0.6.0 represents numerous changes to the codebase as well as many new features, improvements and bug fixes. It's been a busy month!

Highlights

  • [New] Spellcheck in the editor
  • [New] Mobile uploads in the editor
  • [New] Next & previous post helpers
  • [New] Code injection
  • [New] Customisable image storage
  • [Improved] RSS Feeds
  • [Improved] Structured data
  • [Fixed] Subdomains break in navigation
  • [Fixed] Meta title & description helpers output wrong value for posts
  • [Fixed] @blog globals missing from helper templates

You can see the full change log for the full details of every change included in this release.

In Detail

Since Ghost 0.5.10 there have been significant changes to how the Ghost admin panel is built, as we switched from using the now deprecated Ember App Kit in favour of the shiny new Ember CLI. We also updated to using Ember 1.11, meaning we no longer need to use {{bind-attr}} in our Ember templates. These changes are huge, but they should only affect developers.

If you're building Ghost from the source code in the git repository, rather than using one of the release zips, you'll still need to follow the same steps. However, you may find you need to do the following after a pull and before grunt init to clear dead code from your existing repository:

  • rm -rf bower_components
  • rm -rf node_modules
  • rm -rf core/client
  • git checkout -- core/client

If you are on a Mac, and run into EMFILE errors when running grunt dev, please see details of the fix in the grunt-contrib-watch README and also further information in this PR.

Custom Storage

It is now possible to replace the image storage layer in Ghost with a custom storage module. This will allow users without a persistent filesystem (e.g. Heroku) to send images elsewhere for safe keeping. Custom storage is currently a very beta feature, but we encourage you to try it out and give us some feedback on how we can improve.

Documentation on how to setup & create custom storage modules can be found on the Ghost wiki.

Theme API Changes

Ghost 0.6.0 brings with it the long-awaited {{#next_post}} and {{#prev_post}} helpers. These new helpers are the first of their kind, as they make additional requests to the API to fetch next and previous post data only if they are included within a theme. This is a departure from the existing data in Ghost, which is all pre-fetched based on the current page context.

The next & previous post helpers are block helpers, and inside their opening and closing tags all of the existing post helpers will work to output the details of the requested post. Full details and examples of how this works can be found in the theme documentation, and you can also see how this feature is used in the latest version of Casper.

As well as this addition, the @blog globals have been made available in the helper templates navigation.hbs and pagination.hbs, fixing a bug with the RSS url in Casper if your blog runs on a subdirectory. Additionally, the {{meta_title}} and {{meta_description}} helpers have be overhauled and now work properly for posts as well as in the document head.

See the theme API docs for more details of what changed in Ghost 0.6.0. The theme documentation is frequently updated with more details and better examples. Please also use the suggest edits feature if you see something that is missing.

How to Upgrade

All Ghost(Pro) users are being automatically updated and will be running Ghost 0.6.0 shortly. You're welcome :)

For people running Ghost on their own servers, you can download Ghost 0.6.0 and then check out the upgrade documentation over on our support site. If you've missed out a version or two, don't worry you can upgrade directly from any 0.5.x version straight to 0.6.0.

Please note: there is a minor change in the upgrade process in 0.6.0, in that the npm-shrinkwrap.json also needs replacing. If your Ghost zip file is missing that file, you need to re-download the zip.

Enjoy!

Credits

This release was lovingly crafted by Hannah Wolfe, Matt Enlow, Jason Williams, John O'Nolan, Paul Adam Davis, cobbspur, Felix Rieseberg, baogechen, JonathanKryza, Blaine Bublitz, Ian Lopshire, Austin Burdine, Katie Fenn, Markus Siemens and Pascal Borreli.

]]>
<![CDATA[The 30 Minute Change That Made 25% More People Try Ghost: Telling Them what To Click]]>https://ghost.org/changelog/welcome-message-onboardingGhost__Post__5cf5f94b3a5f1b0038cc713eMon, 13 Apr 2015 10:26:42 GMT

Sometimes little things have a disproportionately large impact. I’m not sure why this seems to surprise me, at this point, but it never fails. Every time one of these rolls around I’m left going “Really? THAT did it?” - weird.

The last big measured improvement in Ghost’s onboarding process that we talked about was detecting events which improved conversion process the most - and then using targeted emails to drive more people to those “aha” moments. We found one event in particular which improved conversion rate by 1,000%.

Today’s change isn’t nearly as dramatic - but it’s also not nearly as complex. While the last test took a good 40-50 hours of design, development and extensive testing. This time we spent 30 minutes on adding one <div> to one page, and it gave us 25% bump in how many people try Ghost every day.

The Little Change That Could

Hannah and I sat down a couple of weeks ago to have a look at any quick wins we could make in helping new Ghost users get up to speed faster. We’ve played with various points in the conversion funnel, but on this occasion there was one which was bothering Hannah in particular.

97% of people who sign up on Ghost.org start a Ghost(Pro) trial, but only 60% of those people are then logging into their blog. This makes no sense.

I agreed with her.

We have a technical issue here which makes things extra complicated. Every Ghost blog on Ghost(Pro) is an individual install of Ghost. On the plus side, this gives you tons of freedom and control over how your blog runs. On the down side, it makes things a little more complex for the user.

One of the biggest challenges we have is guiding users through this process without - to be frank - confusing the shit out of them.

The Onboarding Steps

Here’s how the process looks:

GhostPro Flow diagram

  1. Visit Ghost.org
  2. Sign up
  3. Create a blog
  4. Set up that blog

Down to the 3rd screen, the conversion rate is 97%. Pretty good. However, only 60% of people ever made it to the 4th screen. A clear indication of a problem, and one which had been bothering Hannah for a long while.

Now, the “proper” solution to this problem is quite clear: Use Single-Sign-On between Ghost.org and Ghost blogs, so that you can authenticate between the two without the need for these extra screens in the middle. A totally seamless experience. This is the right way to do it. The only problem with that is that it’s a lot of work that needs to happen in Ghost, Ghost.org and Ghost(Pro) to make all the different pieces talk to each other. It's not a small piece of work.

We wanted to do something now to try and improve it, so we decided to do the most obvious thing possible: Tell people what to do next.

The Old Ghost(Pro) Manager

Old GhostPro blog management screen

This was the old blog management screen on Ghost.org. Once you understand it, it makes sense: It’s a list of all your blogs, and this is the place where you can setup/shutdown and manage them. But when you’ve just started a new trial and all you see is one little list item… it’s not really clear what this is or what you’re supposed to do with it.

So, in the space of 30 minutes Hannah coded up a re-usable welcome message component for new users, while I designed and marked up the welcome message itself.

The New Ghost(Pro) Manager

New GhostPro blog management screen

Now, when you visit the dashboard for the first time, it looks like this. There’s a message telling you what’s going on, the blog is highlighted, and the next action we want you to take is literally throbbing in anticipation.

No A/B Testing - JFDI

At the beginning of the year I read a post by David Kadavy which systematically destroyed my faith in A/B testing in the space of about 900 words.

A/A Testing: How I increased conversions 300% by doing absolutely nothing

It’s a great read, and it made me question the statistical significance a lot of the A/B tests we’ve run. As a result, I’ve started thinking differently about how we run our conversion experiments.

In this instance, we had months worth of data showing consistent conversion at a rate of about 60% between starting a trial and setting up a blog. Here’s the week before we tried out the new welcome message, which is consistent with the overall historical rates:

Conversion rate for week prior to experiment

There was really no point in running a side-by-side A/B sample. We already had A, so we just went ahead and shipped B to see what would happen.

Hypothesis: To establish statistical significance, we would want to see the conversion rate be at least 10% higher than the previous average, consistently (every single day).

The week after adding the new welcome message:

Conversion rate for week following experiment

The first week showed 7 consecutive days of improvement at an average of 76%, some 25% higher than the original average. This streak has continued to 20 days now, and is showing no signs of changing.

If you think 25% doesn’t sound like anything to get excited about, let’s look at how a small change compounds over time with some projected numbers:

The funnel

This improvement gets us an extra 0.84 customers per day, and our average Ghost(Pro) customer Lifetime Value is currently about $200. Basic napkin maths – 365 days * ($200 * 0.84) – says that this change will be worth $61,000 in additional customers each year.

Not bad, for 30 minutes work.

For a non-profit organisation like Ghost, 100% of that extra revenue goes back into the business and makes a massive difference to how much good we’re able to do.

Dat Low Hanging Fruit

When people talk about making better software, they often mention “low hanging fruit”. Do the easy things first! They say. Find the small changes which will have the most impact, and save the complicated stuff until later.

The problem with this advice is that it’s really not always obvious what the low hanging fruit is. Much like I mentioned in the last onboarding post: If you don’t know what the “aha” moments are, you can’t optimise for them.

So the biggest lesson from this post, I think, is simple: When it comes the UX of completing a task; test the most basic thing. Spell out (use your words!) what you want the user to do next.

Compounding returns mean that a small change can make a very significant difference over time.

]]>
<![CDATA[Public Dev Meeting 7th Apr]]>https://ghost.org/changelog/public-dev-meeting-7th-aprGhost__Post__5cf5f94b3a5f1b0038cc7087Wed, 08 Apr 2015 11:26:59 GMTPublic Dev Meeting 7th Apr

We begin with big news from team Ghost this week. As we announced on the main blog, we've launched a new public revenue dashboard as part of our big push towards being more transparent. Read the April update post for more details.

This week in Ghost land, we've seen a few interesting PRs land in master. Code injection got syntax highlighting & line numbers (#5016), and is now awaiting a last pass over the UI before having it's labs training wheels removed.

Ember was updated to 1.11.1 (#5094), which means we no longer need {{bind-attr}}, making the code significantly neater. There are a couple of gotchas to be aware of, which novaugust explained:

  • the first is that style and script contexts are vulnerable to xss via {{}} - ember does not know how to escape in those contexts (unlike with html), so we need to take extra care here for a little while
  • the second thing was whether you should wrap an attribute in quotes or not, ie foo={{bar}} vs foo="{{bar}}". Essentially, wrapping in quotes forces toString(), whereas bar puts the raw type in, which is useful in html5 for things like data-count=5 disabled=false.

More info about the changes in Ember 1.11 can be found on the Ember blog.

There have also been a number of PRs raised/merged, which fix bugs with and improve the output from our RSS feeds. This includes moving the full content to the proper <content:encoded> element, using <description> properly, using the <media:content> for cover images, changing the mime type, fixing some issues with bad URLs, and soon we hope to also be changing the RSS feeds so they aren't generated on every request, meaning ETAGs will work properly. Hopefully these changes will help to make our RSS feeds more useful.

During this week's meeting there was some discussion around the Ghost-Vagrant setup. This has been somewhat unloved for a time, and needs a little work. There is a renewed push from our community to improve it, which should help more people get involved developing for and with Ghost.

The next release of Ghost is scheduled to happen before the next meeting, and will be Ghost 0.6.0!

A note on contributing

One of the best, and easiest ways to get involved contributing to Ghost, is to help us get PRs merged. If you have a few minutes spare, check out a pull request, take it for a spin and let us know what you found. Did it work OK or was there a problem?

Not only does this help us to merge changes faster, and keep Ghost moving forward, but tracking changes & how they affect Ghost is a fantastic way to get to know pieces of the codebase.

Check out this little guide on how to setup your environment so that checking out a pull request is as easy as pr 1234, and then try one out!

Full details:

The full logs of the meeting in our IRC logs, which are looked after by the lovely folks at botbot.me.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 14th April, 5:30pm London time.

]]>
<![CDATA[Ghost April Update: $411k Annual Revenue, Introducing the Public Revenue Dashboard]]>https://ghost.org/changelog/april-2015-updateGhost__Post__5cf5f94b3a5f1b0038cc713cTue, 07 Apr 2015 10:10:39 GMTGhost April Update: $411k Annual Revenue, Introducing the Public Revenue Dashboard

In January we announced a big focus on transparency for 2015, and today I’m very pleased to be able to share a big achievement to that effect.

[Update:] Our latest revenue figures (Aug 2015) are here.


First, here are our numbers after the first 3 months of 2015:

  • Monthly recurring revenue (MRR): $34,252 (+17%)
  • Annual recurring revenue (ARR): $411,027 (+17%)
  • Ghost(Pro) subscribers: 3,764 (+2%)
  • Average revenue per user: $9.10 (+15%)
  • Churn rate: 7.38% (+52%)
  • Total downloads: 560,583 (+11%)
  • Total users: 288,485 (+12%)
  • Team size: 6 people across 3 continents

We had a slow start to the year, with January and February, in particular, being really killer months for our churn rate as people who backed the Kickstarter campaign came to the end of their 12-months coupons - triggering a high level of cancellations. This has started to recover to more normal levels again in March.

It’s nice to see our revenue figures every once in a while when we share an update post like this, but wouldn’t it be cool if you could just see them all the time; with live data showing all our transactions, as they happen?

Introducing the Public Revenue Dashboard

As our friends at Buffer did just under a year ago, today we’re opening up our real-time, streaming Baremetrics dashboard.

Transparency and integrity are the two most important values to us both in software and in business - as they are in journalism itself. It’s a very natural thing for us to want to share this data as openly and objectively as possible.

As of today you — and everyone else — have access to a live-stream of our transactions as and when they take place on Ghost.org as well as a big list of all our most important key metrics, including:

  • Monthly Recurring Revenue (MRR)
  • Annual Recurring Revenue (ARR)
  • Net revenue
  • Fees
  • Average revenue per user
  • Lifetime value
  • User churn
  • Revenue churn
  • Number of customers
  • Upgrades
  • Downgrades
  • Cancellations
  • Failed charges

[Update, April 2017]: We've now moved to our own simpler Dashboard right on our own about page.

In truth, we wanted to do this much sooner but we weren’t able to because of how we’d implemented our billing. Previously: We used Stripe to handle payments, but all recurring-billing and management was done within our own systems. Now: We use the full Stripe Plans API - which is what Baremetrics hooks into.

Ghost April Update: $411k Annual Revenue, Introducing the Public Revenue Dashboard

Using the Net Revenue detail view it is possible to scroll through our transaction history all the way back to the launch of Ghost(Pro) in January 2014, as this view includes all Stripe charges (even ones outside of the Plans API).

More on the way

As a non-profit foundation building open source tools for journalism, doing things like this is central to everything we care deeply about.

Opening up our revenue publicly is just the beginning. In the coming months we're going to continue to release valuable data about Ghost as an organisation (as well as a product) to everyone who is interested in hearing about it.

We hope that those of you interested can learn from our successes and failures. More importantly, we hope that this type of post gives you a clear view of Ghost as an organisation and the things we believe in.

A small favour

We’d love your help to share the news of our new progress and our new public dashboard. Getting Ghost in front of more people makes more of a difference than pretty much anything else!

Here’s a pre-written status, to make it extra simple:

$411k in ARR and @TryGhost just made all of their revenue metrics completely public: http://blog.ghost.org/april-2015-update/

or use 1-click links for Ultimate Efficiency TM: or

We'll be hanging out in the comments if you have any questions or thoughts!

]]>
<![CDATA[Public Dev Meeting March 31st]]>https://ghost.org/changelog/public-dev-meeting-march-31stGhost__Post__5cf5f94b3a5f1b0038cc7086Thu, 02 Apr 2015 16:23:12 GMTPublic Dev Meeting March 31st

One of the big issues that was created this week was a work in progress regarding channels. Channels are essentially a way to to create lists of posts or group certain posts together. Hannah created a huge writeup in the wiki called Channels 101 that explains what the vision of channels is and how it will work. This will take a few steps to complete, but will be a great way to help authors organize and publish their content.

Last week we talked about the Prev/Next Post helper being worked on. That feature has now been merged into master and will be a part of the next release.

There were two bugs in the 0.5.10 release that seemed to keep popping up for people. The first was images either not show up, or showing up wrong when someone would update, and the second was that some of the @blog global attributes were not showing any information. Both of these bugs have now been fixed (image caching, global partials). The image problem was essentially a browser caching problem, but now there is going to be a unique url for each release which will prevent this from happening in the future.

There are also two new WIP's that have to do with user onboarding that are currently in progress. The first is a new experience to help set up the initial blog.

Public Dev Meeting March 31st

The users will be able to create their own account, as well as invite other team members as part of the initial setup, meaning they no longer have to setup the blog and then go to settings and make further adjustments.

There is also going to be a quick tour for brand new blogs showing the users different areas and aspects to give them an overview of the Ghost admin.

Hopefully both of these features should greatly increase the user experience when first setting up their Ghost blog.

As always, if you have any new ideas, or features you would like to see added to Ghost, check out our wishlist page and either vote or create a new item.

Full details:

The full logs of the meeting in our IRC logs, which are looked after by the lovely folks at botbot.me.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 7th April, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting March 24th]]>https://ghost.org/changelog/public-dev-meeting-march-24Ghost__Post__5cf5f94b3a5f1b0038cc7085Wed, 25 Mar 2015 09:56:25 GMTPublic Dev Meeting March 24th

A little over a week ago, the ember-cli switch and the removal of codemirror were merged into master. There were a lot of changes and many files touched in that merge, so this is great news! The removal of codemirror not only closed a number of small bug issues with the Ghost editor, but it also introduced a feature that has been asked for for quite a long time (and rightfully so), spellcheck!

Spellcheck is not currently part of the latest release, but it has been merged into master. This definitely needs be tested, so feel free to grab the latest master, take it for a spin, and open any issues you see with it.

There is currently an open issue about updates to the {{excerpt}} helper. This will allow for excerpts to be chosen by paragraph rather than relying on words or characters. This will also keep all text styling instead of smashing all the content into one paragraph. The excerpt helper will provide much greater control on how much, and what kind of content is shown on the home page. Definitely a big improvement on what is currently available, so if you're interested in helping us build this, let us know!

The ability to define where images are stored was also merged in this week. This is a huge win for those who host Ghost on services like Heroku, because, now images can be stored on services like Amazon S3 while Ghost itself runs on Heroku. Documentation on how to do this will be made available with the next release.

The showdown extensions were removed from Ghost and now live in Hannah's fork. This removed some code duplication and allows Ghost to use it as a dependency rather than native code. This also allows other people to use this module outside of Ghost, which in turn, may bring in more contributors and help keep it maintained.

Frontend route customization is also a large refactor that has been merged in. This will eventually allow for current routes like /tag/ to be customized. This is needed for Ghost to be multi-language, but also a good feature for if someone wants to use /category/ instead of /tag/ or something similar.

The previous/next post and query helpers are currently being worked on and are much closer to being finalized. The previous/next post helpers will allow you to link to the next post in chronological order from a post page. The query helper, is going to allow you to query certain tags, posts, pages, and many other attributes making your ability to customize what posts or data that is shown much greater than what it is now.

As always, if you have any new ideas, or features you would like to see added to Ghost, check out our wishlist page and either vote or create a new item.

Thanks for another awesome meeting! We are very excited about the current progress and the future of Ghost. :)

Full details:

The full logs of the meeting in our IRC logs, which are looked after by the lovely folks at botbot.me.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 31st March, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 17th March]]>https://ghost.org/changelog/public-dev-meeting-17th-marchGhost__Post__5cf5f94b3a5f1b0038cc7084Tue, 17 Mar 2015 19:26:15 GMTPublic Dev Meeting 17th March

Last week we were talking about merging in two major PRs: the Ember CLI PR, and the No more CodeMirror PR. Both of these are now merged in master, and represent an enormous amount of change and improvement in the Ghost code base. With this we also get spellcheck and mobile uploads.

This means that master is considered less stable than usual at present - there is a lot of testing to be done and no doubt some bug fixing. If you're updating your local repository you'll likely need to remove your node_modules, and bower_components directories entirely, and do a fresh npm install && grunt init to get your codebase back in sync.

The next release is a couple of weeks away, so there is plenty of time to iron out issues, as well as deliver even more features. We're hoping to have the new {{#get}} helper ready, and we're also looking for someone to work on the newly spec'd password protected blogs feature.

We've been keeping an eye on the new wishlist, and it's very interesting to see which features are tearing off into the distance in terms of most votes. In the next week or so, the GitHub repo will be getting a bit more attention than it has for a while, I hope to get more open PRs merged, issues triaged, and introduce a bit of organisation for the now much needed permissions + API + OAuth project, so that we can make the API public and make some serious progress towards Apps 0.1 :)

Full details:

The full logs of the meeting in our IRC logs, which are looked after by the lovely folks at botbot.me.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 24th March, 5:30pm London time.

]]>
<![CDATA[How to Write Faster, Better & Longer: The Ultimate Guide to Markdown]]>https://ghost.org/changelog/markdownGhost__Post__5cf5f94b3a5f1b0038cc713bMon, 16 Mar 2015 13:31:00 GMTHow to Write Faster, Better & Longer: The Ultimate Guide to Markdown

It’s no secret that we’re big fans of Markdown at Ghost. We built our editor to work with Markdown directly!

Once you get the hang of Markdown, it’s an incredibly powerful writing tool which will allow you to write rich content for the web far faster than almost any other method. To get to that point, however, there’s a little bit of a learning curve. We thought we’d put together an all inclusive guide to make that curve a little bit shorter, and potentially teach you a few super-user tricks to Markdown that you might not have known.

What is Markdown

Markdown is a plain text formatting syntax for writers. It allows you to quickly write structured content for the web, and have it seamlessly converted to clean, structured HTML.

Back in 2004, Apple pundit John Gruber came up with the idea after becoming frustrated by writing long, laborious HTML tags to properly format his content. He devised a simple writing system which would make web based documents both easier to write, and easier to read in their raw state.

Here’s a quick example of Markdown in action:

The *quick* brown fox, jumped **over** the lazy [dog](https://en.wikipedia.org/wiki/Dog).

becomes

The quick brown fox, jumped over the lazy dog.

With just a couple of extra characters, Markdown makes rich document formatting quick and beautiful.

Why do Writers Love Markdown so Much?

“Is that it?” - I hear you ask - “I could just click on a few formatting buttons in most editors and achieve the same thing!”

Very true! But we’re only just getting started. The range of formatting tools has come a very long way since Markdown’s inception in 2004, so you’d be forgiven for wondering what advantages it holds over, say, the “Bold” button in Microsoft Word.

While most novice users do indeed find buttons a bit easier to use, advanced writers often swear by Markdown and nothing else. Why? The biggest reason is writing flow.

Using a traditional writing user interface you have to pause your writing every few minutes (or sometimes seconds) and reach for the mouse in order to click, highlight, click a formatting button, and then click back to where you left off in order to continue. This process creates a tiresome, disjointed experience when all you want to do is get the words out of your head and onto the screen.

Markdown allows you to keep your fingers firmly planted on the keyboard as you apply formatting on the fly. In short: You never have to stop typing or think about anything else in order to apply your styles.

It might seem like a small detail, but it can have a really big effect. Once you start writing in Markdown, it’s really hard to back to the click-fest of the past.

Basic Markdown Formatting

Ok! You’re sold. So how does this work? Let’s dive in:

Markdown was designed with the explicit intention to be easily readable by humans. You should find that most of the syntax is pretty simple and intuitive.

Here are the elements you’ll use most often:

Headings

# Heading 1
## Heading 2
### Heading 3

Headings in Markdown are any line which is prefixed with a # symbol. The number of hashes indicates the level of the heading. One hash is converted to an h1, two hashes to an h2 and so on. There are a total of 6 levels which you can make use of - but for most writing, you’ll rarely ever need more than 3.

Text

*italic*
**bold**
***bold-italic***
[link](https://example.com)

If you want to emphasise a word a little bit, wrap it in asterisks. For something that needs more emphasis: double asterisks. If you really want to drive the point home, use triple asterisks. If you prefer, you can also use underscores - they’re completely interchangeable.

To add a link: wrap the text which you want to be linked in square brackets, followed by the URL to be linked to in parenthesis. An easy way to remember this one is to think of it like turning a word into a button. [button] and (place to go when the button is clicked) combine to form a link.

Images

![m'lady](https://i.imgur.com/v8IVDka.jpg)

Markdown images have exactly the same formatting as a link, except they’re prefixed with a !. This time, the text in brackets is the alt text - or the descriptive text for the image.

How to Write Faster, Better & Longer: The Ultimate Guide to Markdown

In most Markdown editors, you don’t have to write this code out. They will provide a tool to allow you to upload an image and insert this code automatically. After that, it will appear in your document.

Lists

* Milk
* Bread
    * Wholegrain
* Butter
1. Tidy the kitchen
2. Prepare ingredients
3. Cook delicious things

Lists are a formatting nightmare in HTML, but Markdown lists are incredibly easy to manage. For a bullet list, just prefix each like with a * - or - or + and they will be converted to dots. You can also create nested lists; just indent a line with 4 spaces and it will be nested under the line above.

  • Milk
  • Bread
    • Wholegrain
  • Butter

For numbered lists, do exactly the same thing - but use numbers!

Quotes

> To be or not to be, that is the question.

When you want to add a quote in Markdown, it’s exactly the same as the formatting which you may already be familiar with from your email app of choice when you reply to someone.

To be or not to be, that is the question.

Prefixing the line with a > converts it into a block-quote.

How can I remember all the Markdown syntax?!

It seems a little daunting at first, but you might be surprised how naturally it comes to you after a couple of posts written in Markdown. Most good Markdown editors come with a built-in cheat sheet to make it a little easier to learn.

How to Write Faster, Better & Longer: The Ultimate Guide to Markdown

Here’s the one you can pull up from the Ghost editor at any time if you get stuck.

Intermediate Markdown Formatting

So you’ve got the Markdown basics nailed and you want to move on to bigger and better things? Excellent. There’s much more we can do.

Horizontal Rules

---

Want to throw-down a quick divider in your article to denote a visual separation between different sections of text? No problem. 3 dashes produce:


A sleek <hr> element.

Code Snippets

Some text with an inline `code` snippet
    .my-link {
        text-decoration: underline;
    }

If you’re a technical writer, you may want to use example snippets of code to teach your readers a particular syntax (like I’m doing, with this very blog post). Using a single back-tick around a word in a sentence, you can show a quick code snippet.

Indenting by 4 spaces will turn an entire paragraph into a code-block.

Reference Lists & Titles

**The quick brown [fox][1], jumped over the lazy [dog][2].**

[1]: https://en.wikipedia.org/wiki/Fox "Wikipedia: Fox"
[2]: https://en.wikipedia.org/wiki/Dog "Wikipedia: Dog"

If you prefer to use reference lists for your attribution, Markdown can handle this, too. In the above example, all of the links are kept separate in Markdown (so it's easy to read even in its raw format), and then inserted directly as normal links when converted to HTML.

The quick brown fox, jumped over the lazy dog.

You'll also notice that we've added a title attribute to the links by adding a "word" in quote marks just after the URL. Anywhere you use a URL, you can follow it with a "title in quotation marks" to generate a title attribute.

[Dog](https://en.wikipedia.org/wiki/Dog "Wikipedia: Dog")

Escaping

\*literally\*

What if you literally want to type *literally* - without it appearing in italics? Escaping Markdown characters with a back-slash \ allows you to use any characters which might be getting accidentally converted into HTML.

Embedding HTML

<button class="button-save large">Big Fat Button</button>

Possibly the coolest feature of Markdown is that it also just supports plain old HTML. If you find yourself stuck and unable to do what you want in Markdown - you can simply write in regular HTML and it will work just fine.

In the above example, I know that within this blog's stylesheet is the CSS to style a nice button that with a class attribute.

So you can drop in any HTML, sharing button, JavaScript snippet or iFrame you like and it will work on the page just as normal.

Advanced Markdown

Ok, you want the big guns. Every example so far has been vanilla, normal Markdown. Those code snippets will work absolutely anywhere which supports Markdown syntax.

Now we're going to look at some syntax which is not standard to native Markdown. They're extensions of the language. All of these things work in Ghost, but they may not work in other editors.

Here are some nice advanced things you can do with Markdown in Ghost:

Strike-throughs

\~\~deleted words\~\~

deleted words

Highlights

==oooh fancy==

oooh fancy

https://ghost.org

https://ghost.org

Markdown Footnotes

The quick brown fox[^1] jumped over the lazy dog[^2].

[^1]: Foxes are red
[^2]: Dogs are usually not red

The quick brown fox[1] jumped over the lazy dog[2].

Syntax Highlighting

```javascript
   [...]
```

Combined with Prism.js in the Ghost theme:

// # Notifications API
// RESTful API for creating notifications
var Promise            = require('bluebird'),
    _                  = require('lodash'),
    canThis            = require('../permissions').canThis,
    errors             = require('../errors'),
    utils              = require('./utils'),

    // Holds the persistent notifications
    notificationsStore = [],
    // Holds the last used id
    notificationCounter = 0,
    notifications;

Speed up Your Workflow with Markdown Keyboard Shortcuts

Writing Markdown is pretty quick right out of the box, but you can speed it up even further by getting to know the keyboard shortcuts in your editor of choice. These all tend to be a little different, but in Ghost you can access some on-the-fly formatting very easily:

  • Ctrl + B for Bold
  • Ctrl + I for Italic
  • Ctrl + K for a link
  • Tap Ctrl + H multiple times for the most common H2 and H3

There are lots more included in the Markdown Help overlay in the editor. Regardless of which app you use to write, it's work figuring out the Markdown keyboard shortcuts available to speed up your workflow.

Converting HTML to Markdown

If you're just getting into Markdown and you've found yourself with a massive back-log of old files which are written in HTML, you might want to convert them to Markdown to make them easier to work with in future.

Here's a handy tool by Dom Christie which lets you do exactly that.

Best Markdown Apps

As well as using Markdown in the Ghost editor, you might also want to use it in the formatting of your day-to-day documents. Lots of people enjoy writing in Markdown and then exporting later to HTML, PDF, or a wide variety of document types.

Here are some of our favourite Markdown editors for Mac, PC, desktop and mobile.

Mac OSX Markdown Editors

How to Write Faster, Better & Longer: The Ultimate Guide to Markdown

The Mac is graced with a large selection of Markdown apps to choose from! The very first one, Mou, is what the Ghost editor was originally based on.

Windows PC Markdown Editors

How to Write Faster, Better & Longer: The Ultimate Guide to Markdown

Competition on Windows seems to be pretty sparse in the Markdown world, but most seem to agree that MarkdownPad is the tool of choice.

Apple iOS Markdown Apps

How to Write Faster, Better & Longer: The Ultimate Guide to Markdown

The best Markdown apps for iOS don't come cheap! On the plus side, most of them do offer extremely nice cloud-sync functionality which makes a big difference if you use the same app across multiple devices.

Google Android Markdown Apps

How to Write Faster, Better & Longer: The Ultimate Guide to Markdown

Markdown apps on the Google Play Store couldn't be any cheaper if they tried! This is just a small selection of a large number of apps that are out there. The quality seems to be decidedly lower overall than the iOS store, so it may take a little digging to find a good Android Markdown app.

Publishing Online with Markdown

How to Write Faster, Better & Longer: The Ultimate Guide to Markdown

Markdown based blogging is kind of what we specialise in! If you're looking for a blog with a comprehensive Markdown editor. Ghost might be exactly what you need for beautiful, simple publishing.

It works across any device, and any platform.

What to do next

After just a couple of hours with Markdown, we’re certain that your fingers will be flying across the keys as you pen your latest and greatest post.

Practice these steps to become a pro:

  1. Start with writing your first Markdown document and get a feel for the basics. It comes more quickly than you might think!
  2. Don't forget keyboard shortcuts for instant time-saving and much faster writing.
  3. Use HTML whenever you want advanced formatting, having this power available to you means you can really do (almost) anything.

We’ve been writing in Markdown for quite a while now, but we’re always learning new and amazing ways of using it. Got any tips that we’ve missed?

Footnotes


  1. Foxes are red ↩︎

  2. Dogs are usually not red ↩︎

]]>
<![CDATA[Public Dev Meeting 10th March]]>https://ghost.org/changelog/public-dev-meeting-10th-marchGhost__Post__5cf5f94b3a5f1b0038cc7083Wed, 11 Mar 2015 10:09:34 GMTPublic Dev Meeting 10th March

Just 10 days after 0.5.9 we've shipped 0.5.10 with several important bug fixes. A couple of small issues in 0.5.9 were having a big impact on our users, so we felt it was important to get those fixes out quickly.

0.5.10 also brings with it Node v0.12 support and a new user help menu. As well as providing easier access to our documentation, the new menu features our all new wishlist, where users can suggest and vote on new features. We'll be using this to drive the development roadmap from now on.

A big announcement this week is that our core team is getting a brand new member. David Balderston is joining the team as our Community Lead. David has been part of the Ghost community since day one, putting enormous time and effort into writing documentation and helping pretty much everyone get going with Ghost. He also literally wrote the book on Ghost. We're really pleased that he has agreed to make his role an official one.

Moving forward, we're planning to merge some major PRs including the ember cli switchover and the editor without CodeMirror this week. There will then be a couple of weeks of testing and ironing out issues before we ship this, most likely as Ghost 0.6 somewhere around the end of March/beginning of April.

Full details:

The full logs of the meeting in our IRC logs, which are looked after by the lovely folks at botbot.me.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 17th March, 5:30pm London time.

]]>
<![CDATA[Send us Your Requests]]>https://ghost.org/changelog/wishlistGhost__Post__5cf5f94b3a5f1b0038cc713aTue, 10 Mar 2015 13:31:26 GMTSend us Your Requests

We've just added a brand new user help menu to Ghost with quick, direct links to the best places to get support. There's also a shiny new item at the bottom of this menu: Wishlist.

Creating the world's greatest (and most modest, obviously) publishing platform is no small task. We have more plans for Ghost than a hipster at a typewriter convention. But sometimes we wonder: What's the most important thing that we should be working on next?

For the last few months, we've published a public roadmap of the things we're working on, and allowed people to vote for the things they care about the most. There have been two shortcomings though:

  1. Most people don't know that it exists
  2. You can only vote on the features which are already there. If you have a request that's not on the list already... well... you're stuck.

Send us Your Requests

The wishlist menu item now will take you over to our new Uservoice feedback forum where you can submit as well as vote on the features and ideas which you would like to see in Ghost. Much simpler.

So, we're listening:

Send us Your Requests

Ghost(Pro) users already have access to the new help menu right now, there's nothing you need to do! Users running Ghost on their own servers can grab this feature by upgrading to Ghost 0.5.10.

]]>
<![CDATA[Ghost 0.5.10]]>https://ghost.org/changelog/ghost-0-5-10Ghost__Post__5cf5f94b3a5f1b0038cc7082Tue, 10 Mar 2015 10:48:15 GMT

Ghost 0.5.10 is now available on GitHub, npm and Ghost.org. We're back to our shorter release cycles, Ghost 0.5.10 is an incremental update containing several small improvements and fixes as well as tentative support for Node v0.12 and io.js-v1.2.

Highlights

  • [New] User help menu
  • [New] Support for Node v0.12 & io.js-v1.2
  • [Fixed] Trailing slashes added to images in RSS feed
  • [Fixed] Navigation menu display issue in Firefox and IE
  • [Fixed] Navigation menu support for mailto links
  • [Fixed] Emoji appearing instead of icons on iPad

You can see the full change log for the full details of every change included in this release.

Node v0.12 and io.js-v1.2 Support

The pre-built Ghost zips will now install and run on Node v0.12 and io.js-v1.2. Ghost may install on other versions of io.js if the sqlite3 binaries are available, but only v1.2 is officially tested.

If you are attempting to build Ghost from source rather than using the prebuilt zip files, you are more likely to run into install problems if you are using Node v0.12 or io.js. Ghost depends on node-sass, which only has binaries available for io.js v1.2. In the event that you do run into issues, please use our support forum to seek help.

How to Upgrade

All Ghost(Pro) users are being automatically updated and will be running Ghost 0.5.10 shortly. You're welcome :)

For people running Ghost on their own servers, you can download Ghost 0.5.10 and then check out the upgrade documentation over on our support site. If you've missed out a version or two, don't worry you can upgrade directly from any 0.5.x version straight to 0.5.10.

Enjoy!

Credits

This release was lovingly crafted by Hannah Wolfe, Paul Adam Davis, Felix Rieseberg, Fabian Becker and (last but not least) John O'Nolan.

]]>
<![CDATA[Public Dev Meeting 3rd March]]>https://ghost.org/changelog/public-dev-meeting-3rd-marchGhost__Post__5cf5f94b3a5f1b0038cc7081Wed, 04 Mar 2015 19:05:00 GMTPublic Dev Meeting 3rd March

This week we are celebrating having delivered the long awaited navigation feature and all of the positive feedback it has brought with it.

The plan for the coming week is to fixup a few issues our users have found with navigation, to try to get the Ember CLI switch-over pull request merged, and to set to work getting ready to deliver more new features to our users.

There are two really important strands of work that will be ongoing over the next month. 1) Shipping new isolated features like navigation, code injection, permalinks UI and other visible improvements 2) overhauling our permissions system which has become a major blocker for things like the API, additional user roles and delivering apps.

We're looking for contributors to grab features and champion their development. There will be more issues cropping up in the coming weeks around new features and the theme API as well as some discussions on how to move forward with permissions. If you're interested, even in an advisory capacity, come chat to us in IRC :)

Full details:

The full logs of the meeting in our IRC logs, which are looked after by the lovely folks at botbot.me.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 10th March, 5:30pm London time.

]]>
<![CDATA[Custom Navigation]]>https://ghost.org/changelog/navigationGhost__Post__5cf5f94b3a5f1b0038cc7139Mon, 02 Mar 2015 15:34:00 GMTCustom Navigation

It's hard to build a publication without a good site navigation structure. Until now, you had to code navigation menus for Ghost directly into your theme - which was kind of a pain.

We've just added support for custom navigation within Ghost so that you can create a simple menu for your blog with a few clicks from your settings area.

Custom Navigation

Themes can add support for these navigation menus with the all new {{navigation}} helper. Full documentation is here. You can check out an example implementation of custom navigation in the newly updated Casper theme, over on http://demo.ghost.io.

Hopefully this new addition will make themes more powerful and blogger lives more pleasurable!

Ghost(Pro) users already have access to this feature right now, there's nothing you need to do! Users running Ghost on their own servers can grab this feature by upgrading to Ghost 0.5.9.

]]>
<![CDATA[Ghost 0.5.9]]>https://ghost.org/changelog/ghost-0-5-9Ghost__Post__5cf5f94b3a5f1b0038cc7080Sat, 28 Feb 2015 20:37:00 GMT

Ghost 0.5.9 is now available on GitHub, npm and Ghost.org. Ghost 0.5.9 is an incremental update to Ghost containing the new Navigation feature, several minor security fixes and many other improvements.

Ghost 0.5.9 is compatible with Node v0.10.x only, and does not add support for Node v0.12 or io.js, support for these is coming soon.

Highlights

  • [New] Navigation builder
  • [New] {{navigation}} helper
  • [New] Image in RSS feed
  • [Fixed] Incorrect user role shown on profile
  • [Fixed] Re-authentication modal not accepting passwords
  • [Fixed] Post published_by can be overridden via the API
  • [Security] Users can edit objects they don't have permissions for via the API
  • [Security] XSS vulnerability when deleting tags
  • [Security] XSS vulnerability when using URLs for blog & user images

You can see the full change log for the full details of every change included in this release.

Security Fixes

Ghost 0.5.9 contains several minor fixes for security issues affecting authenticated users on multi-user blogs. This includes two potential XSS vulnerabilities in the admin UI and two privilege issues where the API allowed users to change data they should not be able to change. Thanks to Matteo Beccaro & Abdel Adim Oisif for discovering & responsibly reporting these issues.

Theme API Changes

Ghost 0.5.9 delivers the long awaited navigation interface. This allows users to specify a set of URLs and labels they wish to have displayed as a menu in their theme. This is output using a new {{navigation}} helper. Theme developers are encouraged to update their themes to use the new {{navigation}} feature.

The {{navigation}} helper works in much the same way as the {{pagination}} helper - it outputs a block of HTML which can be customised by specifying a navigation.hbs partial template in the partials folder of your theme. The default template can be found here.

See the theme API changelog, and particularly the navigation helper documentation for further information.

How to Upgrade

All Ghost(Pro) users are being automatically updated and will be running Ghost 0.5.9 shortly. You're welcome :)

For people running Ghost on their own servers, you can download Ghost 0.5.9 and then check out the upgrade documentation over on our support site. If you've missed out a version or two, don't worry you can upgrade directly from any 0.5.x version straight to 0.5.9.

Enjoy!

Credits

This release was lovingly crafted by Jason Williams, Hannah Wolfe, Paul Adam Davis, Fabian Becker, Andrew Chilton, Matt Enlow, Marcos Ojeda, David Balderston, 1Pete, rmfx, Eugene Kulabuhov, Felix Rieseberg, Harry Hope, Ivan Votti, Jimmy Hsu, Josh Vanderwillik and Mark Stosberg.

]]>
<![CDATA[Public Dev Meeting 24th Feb]]>https://ghost.org/changelog/public-dev-meeting-24th-febGhost__Post__5cf5f94b3a5f1b0038cc707fTue, 24 Feb 2015 20:47:51 GMTPublic Dev Meeting 24th Feb

Today's meeting was a very quick catch up on navigation. There have been a number of blocking bugs which are all fixed as of the meeting, meaning we're now ready to take the config flag away from navigation.

Meanwhile work is ongoing with adding navigation to Casper so that an updated version can ship with the release.

The completed release, with navigation, is expected to ship this week.

Full details:

The full logs of the meeting in our IRC logs, which are looked after by the lovely folks at botbot.me.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 3rd March, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 17th Feb]]>https://ghost.org/changelog/public-dev-meeting-17th-febGhost__Post__5cf5f94b3a5f1b0038cc707eTue, 17 Feb 2015 20:13:00 GMTPublic Dev Meeting 17th Feb

After a few quiet weeks, things are picking up again in Ghost land. We've been talking for a while about shipping our new navigation feature and in the meeting today we discussed the last few details. Those have now been listed on the main issue, as a countdown to releasing the feature.

One of the main things left to decide is whether or not to include a default value (a link to home) or whether to leave the default blank and use a placeholder. Apart from this we're just wrapping up final details & testing.

During today's meeting we discussed and shelved a proposal to add a way to determine single vs multiple author blogs via the theme API.

There is now an open & working PR which switches the Ghost build system over to using Ember-CLI, rather than the now deprecated Ember App Kit. This has a significant impact on our build steps like grunt init and we'd really appreciate getting people to test it out and let us know if it's working as expected on various setups.

Full details:

The full logs of the meeting in our IRC logs, which are looked after by the lovely folks at botbot.me.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 24th February, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 10th Feb]]>https://ghost.org/changelog/public-dev-meeting-10th-febGhost__Post__5cf5f94b3a5f1b0038cc707dWed, 11 Feb 2015 15:53:00 GMTPublic Dev Meeting 10th Feb

This week we switched over to Ember 1.10, so the Ghost admin now runs on HTMLbars rather than Handlebars.

It's been another relatively quiet week where I've been (unfortunately) internally focused. However, this week we've seen PRs land for both of the major remaining parts of navigation, and we're hoping to get them merged asap so that we can test the whole feature in the wild.

There were a few minor updates to the {{navigation}} helper discussed in the meeting, but these are expected to land very quickly.

Implementation of the {{#get}} helper is currently stuck due express-hbs's async helpers not working properly for block helpers. A fix is being worked on, as this is also blocking the next and prev post helpers.

Support for node v0.12 was briefly discussed during the meeting, we're still waiting for some of our dependencies to add support. Ghost itself should not need changes to support it, so once our dependencies are ready our next release will support it.

Full details:

The full logs of the meeting in our IRC logs, which are looked after by the lovely folks at botbot.me.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 17th February, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 3rd Feb]]>https://ghost.org/changelog/public-dev-meeting-3rd-febGhost__Post__5cf5f94b3a5f1b0038cc707cTue, 03 Feb 2015 19:06:56 GMTPublic Dev Meeting 3rd Feb

We had a very brief meeting this week to cover the main ongoing projects. At the moment, the Ghost project hasn't as much planning & management as usual going on, because I (Hannah) have been focused on wrapping up an internal project. This is coming to an end in the next week or so.

In Ghost land, we're still looking to wrap up the new Navigation feature in the next few weeks, progress on it is steady. The Permalinks UI is also still in progress, and an overhaul of the uploader is being worked on. Meanwhile there are lots of background changes, bug fixes and work towards using Ember CLI going on that are less obvious to users of Ghost, but ensure that we are able to continue making more visible improvements.

The big question on everyone's lips is still - when is the API going to be available to the public? The current state of this is that all of the OAuth issues in GitHub need to be worked on. The plan at present is that our resident OAuth expert Sebastian will be starting work on these at some point in the next few weeks - with me as wingman, and any contributors who'd like to help us get it done.

Full details:

The full logs of the meeting are available in our IRC logs, which are now looked after by the lovely folks at botbot.me.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 10th February, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 27th Jan]]>https://ghost.org/changelog/public-dev-meeting-27th-janGhost__Post__5cf5f94b3a5f1b0038cc707bTue, 27 Jan 2015 18:50:00 GMTPublic Dev Meeting 27th Jan

It's been a quiet week in Ghostland, however there has been major progress on the navigation feature. The UI has seen many improvements and the theme helper has also been worked on this week. Short of ironing out a few issues that were discussed during the meeting, we're almost ready to ship!

Aside from this the week has mostly been cleanup, updates and bug fixes. Matt/Novaugust dropped a work-in-progress PR moving our Ember app over to use ember-cli as the build tool, rather than a combination of grunt and the now deprecated Ember App Kit. This will likely have a big impact on how Ghost is built, but we don't know what it's going to look like yet.

As a result of changes both to add the navigation helper, and to add more flexibility to the URLs in Ghost (i.e for translations) we're getting to the point where we need to revisit the concept of the {{url}} helper and what it can do. For example, how to output the url for the RSS feed of a specific tag?? In the near future there'll be an issue opened to collect use-cases and ideas for how it might look, so if you're a theme developer - keep your eyes peeled for that!

Full details:

The full logs of the meeting are available in our IRC logs, which are now looked after by the lovely folks at botbot.me.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 3rd February, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 13th Jan]]>https://ghost.org/changelog/public-dev-meeting-13th-janGhost__Post__5cf5f94b3a5f1b0038cc707aTue, 13 Jan 2015 21:03:13 GMTPublic Dev Meeting 13th Jan

Although it's been a quiet week for Ghost, 0.5.8 has been released with the awesome new tag management feature, and it is being well received by our users. We're aiming for another release in about 3 weeks time - roughly 2nd Feb.

There are many more advanced features to come with tag management. As pointed out during the meeting, we still don't have any concept of order with tags, as the API doesn't support it. The API is lacking many such ordering and filtering abilities at the moment (example), and we hope that developers will add these features as they find they need them. We are hoping to add a helper to the theme API in the very near future as a first way to make direct use of the API and start locating and adding these missing features.

High priority features that need contributors are navigation and permalinks. The editor updates are planned to land in master very soon, and there is also an open PR to add the facility for fetching next and previous posts from the API - something that has been in extremely high demand.

We're looking to ship as many of these features (and more) as soon as possible, so if you're able to help we want to hear from you. Many of the items on our roadmap aren't fully spec'd out yet, but if you're interesting in working on something, let us know so we know which items are worth focusing on :)

Full details:

The full logs of the meeting are available in our IRC logs, which are now looked after by the lovely folks at botbot.me.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 20th January, 5:30pm London time.

]]>
<![CDATA[Tag Management]]>https://ghost.org/changelog/tag-managementGhost__Post__5cf5f94b3a5f1b0038cc7138Tue, 13 Jan 2015 13:50:33 GMTTag Management

As of today, you can edit and delete your tags in Ghost - perfect for cleaning up those typos! Additionally you can personalise your tag archives by adding cover images and meta data to your tags.

For anyone who is using the default theme, your tag archives will use the new data right away. If you're using a custom theme, you can output tag cover images inside tag.hbs using the {{image}} helper. Simple :)

Tag Management

Developers can find out about the updates made to theme helpers in the Theme API Changelog.

We're looking forward to seeing even more beautiful tag archives!

Ghost(Pro) users can start using this feature immediately. Users running Ghost on their own servers can grab this feature by upgrading to Ghost 0.5.8.

]]>
<![CDATA[Ghost 0.5.8]]>https://ghost.org/changelog/ghost-0-5-8Ghost__Post__5cf5f94b3a5f1b0038cc7079Mon, 12 Jan 2015 20:17:00 GMT

Ghost 0.5.8 is now available on GitHub, npm and Ghost.org. 0.5.8 is an incremental update to Ghost containing several new features as well as numerous bug fixes.

Highlights

  • [New] Tag Management UI
  • [New] Labs options for WIP features
  • [New] Importer handles images and markdown files
  • [New] Socket permissions can be set from config
  • [Fixed] Custom favicons not working correctly
  • [Fixed] New posts added to bottom of list in admin
  • [Fixed] Has helper tag matching bug
  • [Fixed] Email sending issue when blog title has a comma
  • [Fixed] Issues with fetching a Gravatar
  • [Fixed] Various admin UI issues

You can see the full change log for the full details of every change included in this release.

In Detail

The first iteration of tag management which arrives in 0.5.8 is just part of the big picture vision for tags. This brings with it several updates to the API, and there are several more to come. We're making progress towards that all important v1.0 for the API.

Providing options for enabling work in progress features on the Labs page gives us a new way to ship features to users a little bit earlier than we usually would. This ties in with our faster releases to get more feedback from users as we build new stuff. It also gives us a safe place to try out features we aren't certain about shipping.

Updates to the importer in 0.5.8 provide a number of new opportunities for anyone building tools to migrate from other platforms to Ghost. The importer now takes a zip file which can contain either a Ghost JSON file or a set of markdown files, plus accompanying images. More information can be found in the import format guide.

Theme API Changes

There are no major theme API changes in Ghost 0.5.8, but there are a number of bug fixes and improvements to the existing set of helpers.

  • The {{has}} helper was incorrectly matching partial tags.
  • {{image}}, {{meta_title}} and {{meta_description}} have all been updated to use the properties which can be set in the tag management UI.
  • {{excerpt}} helper now does a better job at handling footnotes
  • {{url}} and {{image}} are no longer async meaning they'll work in conjunction with the {{encode}} helper.

See the theme API docs for more details.

How to Upgrade

All Ghost(Pro) users are being automatically updated and will be running Ghost 0.5.8 shortly. You're welcome :)

For people running Ghost on their own servers, you can download Ghost 0.5.8 and then check out the upgrade documentation over on our support site. If you've missed out a version or two, don't worry you can upgrade directly from any 0.5.x version straight to 0.5.8.

Enjoy!

Credits

This release was lovingly crafted by Jason Williams, Hannah Wolfe, Paul Adam Davis, Robert Jackson, cobbspur, Felix Rieseberg, John O'Nolan, Eugene Kulabuhov, Jeremiah Hoyet, Delgermurun, Ilya Radchenko, Jason Friedrich, Daniel Tsui, Martin H. Normark, Matt Enlow and Mikael Brockman.

]]>
<![CDATA[Lessons Learned Building an Open Source Product from $0 to $350,000/year in 12 months]]>https://ghost.org/changelog/2014-reportGhost__Post__5cf5f94b3a5f1b0038cc7137Wed, 07 Jan 2015 22:47:21 GMTLessons Learned Building an Open Source Product from $0 to $350,000/year in 12 months

Just a year ago we launched our Ghost(Pro) hosted platform to allow people to easily deploy and run Ghost blogs.

We’ve come a long way.

From the very beginning, during the Kickstarter Campaign, we put forward the idea of a hosted platform for an Open Source project as a means to make it both sustainable and profitable.

At that point it was really just a theory and a dream. No Open Source project had ever done anything quite like it before.

Today, the Ghost Foundation turns over $350,000 and, even more significantly: is profitable.

2014 was a pretty incredible year. It’s surreal to look back at just how far we’ve come. 2015 is set to be even bigger.

A Bigger Focus on Transparency

For the last year we’ve realised that a lot of things we’re passionate about are symptoms of something larger. Ghost is Open Source because we believe in free and open software which is available to everyone to use, hack and redistribute as they see fit. Ghost is not-for-profit because we believe in building an incredible company which is dedicated to its users, rather than creating wealth for its founders.

We’ve realised the larger umbrella that embodies all of these elements that ties them all together is quite simple: Transparency.

What we’re really excited about is building a company with integrity that’s completely open about what it does and why.

This year we’re going to place a much bigger focus on being even more aggressive about the number of things which we open up to the public. We’ve learned a lot from our friends over at Buffer and we’re going to be taking a leaf out of their book in several ways.

We’ve got tons of exciting things planned around this, and we’re starting out with a very simple one: Revenue reports.

Ghost 2014 Revenue Report

We’re going to try and do these every month from now on, but to start with here’s a roundup of how we did last year:

Lessons Learned Building an Open Source Product from $0 to $350,000/year in 12 months

  • Unique visitors: 3,284,749
  • Total downloads: 504,949
  • Total users: 257,307
  • Ghost(Pro) subscribers: 3,675
  • Monthly recurring revenue (MRR): $29,177
  • Annual recurring revenue (ARR): $350,124
  • Average revenue per user: $7.94
  • Churn rate: 4.87%
  • Team size: 6 people across 3 continents

The overwhelming majority of our internal focus last year was on getting MRR up to make us profitable. Ghost Foundation being profitable makes it a sustainable business that can keep on going without outside investment. We prioritised high-traction features and did a lot of work on our pricing to reach this point.

We could have hit profitability in June, had we kept the team smaller - but we expanded to 6 full time people in order to be able to keep shipping new features in line with demand, so we eventually hit this milestone in December.

MRR is currently growing at around 8% month on month, which is definitely something we’d like to improve - but the pressure in 2015 is much lower than it was last year. Which is great!

Lesson 1: Getting Pricing Right is Critical

Launching one of the world’s first consumer Node.js apps was like diving into a black-hole when it came to setting up a hosted infrastructure. We had almost no idea how much it was going to cost, what the margins would be like, or where we should even begin with charging.

We started out with a base $5/month plan with a few higher options, all the way up to $80/month for the highest plan.

After spending a lot of time doing customer development, we worked on a new plan structure with new pricing. The base plan would now be $10/month and range all the way up to $250/month for business users.

Lessons Learned Building an Open Source Product from $0 to $350,000/year in 12 months

Having run a 33 day A/B test on the new pricing prior to changing it, we found that the price change actually lead to an increase in conversion rate. So, 2x the revenue and more customers than before. Despite a little negative feedback when we announced it at the end of September, the data told us that the new pricing was clearly the right way to go.

Pricing is something that’s never “finished” - and we’re planning to do more experiments in 2015 to optimise this further. The goal is always to give as much value to customers as we can, while creating a healthy business.

The most important lesson we learned here was that it’s really, really hard to build a viable business with $5/month plans. We’ve seen several other “Ghost hosting” companies enter and subsequently exit the market with price ranges from $2.99 to $5.99 - which isn’t a big surprise. Increasing our average revenue per user has been an enormous weight off our shoulders, and given us a lot more room to work with.

If you’re interested in anything to do with product pricing: I really recommend running your own experiments to find out what works for you. It's very easy to get distracted by blog posts which sound sensible but turn out not to be.

Lesson 2: A Small Change at The Start of The Funnel Has a Massive Impact at The End

We refer to the “funnel” as the process of moving a customer through the various stages of the onboarding process. Usually it looks something like this:

  • User signs up [10,000 people]
  • User starts trial [4,000 people]
  • User sets up product for first time [2,000 people]
  • User becomes a subscriber [400 people]

At each stage of the funnel there’s a conversion rate which can be worked on as you try to nudge users toward completing your desired goal: eg. becoming a subscriber.

The interesting thing is that each step of the funnel impacts every step of the funnel below it (but not above). So, while it can be tempting to just work on the conversion rate of your end-of-trial page at the very end… it can actually have a far larger impact to just get a 1% increase in the number of people who are starting trials right at the start of the funnel.

Lessons Learned Building an Open Source Product from $0 to $350,000/year in 12 months

We figured out what caused users to be 1,000% more likely to convert to paying customers. When we applied this learning, we were immediately able to see a 370% conversion rate increase further down the funnel. There was no way we could have gotten a 370% increase in conversions just by working on A/B testing to improve that one particular page. To improve one action, we had to look upstream first.

This was a super interesting lesson.

A tangential lesson here, too: Make sure your analytics actually work correctly. There’s nothing worse than finding out you implemented a piece of tracking very slightly wrong, and now your last 6 months of data is totally meaningless and can’t be used for any kind of segmentation or analysis. Sounds obvious - but we’ve found flaws in our tracking implementations over and over and over again. It’s way easier to screw up than you might imagine.

Lesson 3: If Something Feels Weird and Broken, it Probably is

For the first half of the year or so, we did a big-bang release of Ghost every few months. We named each version and made a big fuss about what version number it was. We included details of all the things that had been worked on since the last release, and provided instructions on how to update.

This is how almost every single Open Source project in the world works, but after a while, it started to feel pretty weird and broken.

Why, in 2014, would you only release software a few times a year? Why do people constantly have to update? How can developers ever learn from user behaviour or improve on their work, when there’s a 6 month gap between usage and iteration?

Lessons Learned Building an Open Source Product from $0 to $350,000/year in 12 months

In August we announced Ghost 0.5, and noted that it would be the last release in this format.

Since then, we’ve moved to an agile release process - shipping new things every 2-4 weeks. In the last 4 months of 2014 we released 7 different versions of Ghost. In 2015 that number is only going to increase as we automate more of the process.

Best of all - we automatically push these updates out to all Ghost(Pro) customers in the background. This isn’t just a better experience all round for everyone, but it also added a significant extra feature/benefit to using our hosted platform which would drive more people to using it.

Looking back, it seems insane that we ever did releases any other way. If you’re doing something because “that’s the way it’s always been done” - it might be time to try something new.

So What’s Coming in 2015?

Lots.

Lessons Learned Building an Open Source Product from $0 to $350,000/year in 12 months

The Ghost Roadmap is pretty full right now, and we’re incredibly motivated to ship the things which are in high demand, especially:

  • Editor improvements (Spellcheck!)
  • Tag management
  • Navigation menus
  • Code injection
  • Post scheduling

A major focus for the rest of the year is going to be around Apps and the Ghost Marketplace.

We’ve been talking about this for a long time, and haven’t made much progress because it’s such a major project. This year we’re hoping to finally make some serious progress on allowing other apps and services to integrate with Ghost, and vice versa.

We know there are multiple issues with the current marketplace (which is really just a placeholder showcase gallery), and that’s something we’re going to be looking to completely overhaul in 2015. The long term plan is to have it look and feel a lot more like an Apple App Store or Google Play Store type experience. Shopify have done a pretty great job with their marketplace, which should give some indication of things we’d like to do.

There’s also going to be an increased focus on content for this blog (we’re going to share lots more), as well as work towards making Ghost and Ghost.org much more friendly for translation into other languages.

If there’s anything you’d like to see us writing about, sharing, or doing - or if you have any questions about what else we did in 2014: Let us know in the comments.

Thanks for being a part of this journey and making it all possible. Without you, we’d be absolutely nowhere.

]]>
<![CDATA[Public Dev Meeting 6th Jan]]>https://ghost.org/changelog/public-dev-meeting-6th-janGhost__Post__5cf5f94b3a5f1b0038cc7078Tue, 06 Jan 2015 20:00:31 GMTPublic Dev Meeting 6th Jan

The festive season has meant we haven't had a proper meeting for a couple of weeks. There was a very brief one last week, but this week we were back in full swing with the first meeting of the new year.

As you would expect, the majority of people take a break from code over the holiday period, meaning work on Ghost has slowed. However there has been a steady stream of small fixes and updates, particularly with regard to keeping the Ember client up-to-date with changes to Ember.

The two major projects that are wrapping up prior to the next release are tag management and the importer improvements, and both of these have made steady progress towards being ready. The current plan is simply that a release will happen when both are ready to ship.

Slightly longer term, the focus for the start of 2015 is still on delivering user-facing features, as set out in the road to 0.6 post. We're hoping to ship the new editor with spellcheck, navigation and custom permalinks over the next few releases.

However, with the dawning of a new year, we're starting to think even longer term about what to focus on this year, and the general idea at present is to focus on building the features and tools that allow for extending and customising Ghost: that is adding OAuth to the API so that external apps can hook in, and also getting a first version of apps out there in the wild. Alongside making apps a reality comes support projects like ensuring we have adequate documentation and, of course, rebuilding the marketplace into something useful for both themes and apps.

Plans for how to get to a minimum shippable version of Apps will be created discussed in future meetings whilst the existing projects are wrapping up.

Full details:

The full logs of the meeting are available in our IRC logs, which are now looked after by the lovely folks at botbot.me.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 13th January, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 16th December]]>https://ghost.org/changelog/public-dev-meeting-16th-decemberGhost__Post__5cf5f94b3a5f1b0038cc7077Tue, 16 Dec 2014 22:21:40 GMTPublic Dev Meeting 16th December

Yesterday, we released 0.5.7 with some important bug fixes and nice UI improvements. We're successfully managing to release much more often. 0.5.8 is planned for early next week.

One question raise during the meeting, which I've seen elsewhere is if we're going to focus on shipping an auto or easy update feature soon now that we're releasing so frequently. Although it is on our roadmap, I don't expect it to land for a while due to the level of complexity. In the short term it's more likely that we will make better external tools available rather than shipping something in Ghost itself. However, as always anyone with ideas for how to do this are welcome to get the conversation going in #1260.

Lead contributors

We've added a new section to the Ghost.org contributors page to advertise for lead contributors to help us get two major projects off the ground: Search and i18n. We feel strongly that Ghost would benefit from having people with particular experience at the helm of these two major features. If you or someone you know are able to help, we'd love to hear from you.

Progress on features

The last week or so has seen a lot of progress around the tag management UI, with PRs for the API updates, delete flow and URL preview, which leaves adding the post count, testing and cleanup. As the UI can be accessed by setting a config flag, we've already seen a couple of positive comments from users around this feature.

As well as the new Tag Management UI, there are 3 other big UI-based features in the pipeline: Code Injection, Permalinks and Navigation. Code Injection is currently behind a config flag and requires a few improvements before we ship, and the other two are ready to take focus once Tag Management is done.

As always, the progress we make on one issue also moves us forwards on others. The API improvements being made for tag management also make it possible for us to improve sitemaps, and bring us closer from being able to make a usable query helper for theme developers to use to make things like tag clouds.

Full details:

The full logs of the meeting are available in our IRC logs, which are now looked after by the lovely folks at botbot.me.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 23rd December, 5:30pm London time.

]]>
<![CDATA[XML Sitemaps]]>https://ghost.org/changelog/xml-sitemapsGhost__Post__5cf5f94b3a5f1b0038cc7136Tue, 16 Dec 2014 12:54:11 GMTXML Sitemaps

One of the most important aspects of any blog is its discoverability. When you write a post, it's usually because you want someone to read it! For this reason, making your content search engine and social network friendly is extremely important.

Two months ago we added custom post meta to Ghost by default so that you can customise the data which you send to these places. A month ago, we added structured data support, so that social networks and search engines are able to read your custom post meta more easily.

Today, we're introducing automatic XML sitemaps as core functionality within Ghost to take this another step further.

An XML sitemap is a complete list of all the pages on your site, in a format which can be easily consumed by search engines. In short, it's a page which tells Google where all your content lives that it should crawl and place in its search results.

You can see an example of the sitemap for our own blog right here: http://blog.ghost.org/sitemap.xml

We've also updated Ghost's robots.txt with a link to your sitemap, so that search engines are able to discover it automatically even if you don't go through a manual submission process via something like Google WebMaster Tools.

This feature is a major step forward in Ghost's native SEO support. Enjoy your new and improved rankings!

Ghost(Pro) users already have sitemaps running right now, there's nothing you need to do! Users running Ghost on their own servers can grab this feature by upgrading to Ghost 0.5.7.

]]>
<![CDATA[Ghost 0.5.7]]>https://ghost.org/changelog/ghost-0-5-7Ghost__Post__5cf5f94b3a5f1b0038cc7076Mon, 15 Dec 2014 20:17:11 GMT

Ghost 0.5.7 is now available on GitHub, npm and Ghost.org. 0.5.7 is an incremental update to Ghost containing lots of bug fixes and small UI improvements.

Highlights

  • [New] Login via editor modal if session expires
  • [New] View post link in notification when publishing/updating a post
  • [Fixed] Clearer user deletion warning
  • [Fixed] Change password form allows for updating password of other user
  • [Fixed] Sitemap handling of draft posts and images
  • [Fixed] Invite user token verification failing

You can see the full change log for the full details of every change included in this release.

In Detail

Behind the scenes tag management is getting closer to being ready to ship, with just a few more pieces left to output the number of posts each tag has, and to add some user-facing & theme features. You can check the progress of the new UI by adding tagsUI:true to your config.js file.

Improvements to ember-simple-auth and subsequent work on Ghost means that we now have much better session handling. If a session ends whilst you're writing a post, Ghost will now prompt you to log in again.

Additionally we've made some changes to the Post API so that it returns the pre-calculated URL for a post. This allows us to more easily place links in the editor so that you can view a post and will also mean that 3rd party apps won't need to duplicate the code to figure out the URL from the permalink setting. In the future we may roll this to users and tags as well.

How to Upgrade

All Ghost(Pro) users are being automatically updated and will be running Ghost 0.5.7 shortly. You're welcome :)

For people running Ghost on their own servers, you can download Ghost 0.5.7 and then check out the upgrade documentation over on our support site. If you've missed out a version or two, don't worry you can upgrade directly from any 0.5.x version straight to 0.5.7.

Enjoy!

Credits

This release was lovingly crafted by Jason Williams, Hannah Wolfe, cobbspur, Paul Adam Davis, Matt Enlow, Sebastian Gierlinger, Nazar Gargol, Paul Davis, Richard King, Vikhyat Korrapati, David Balderston, zethraeus, Felix Rieseberg, Ihab Khattab, Jacob Gable, Katie Fenn and Marco Otte-Witte.

]]>
<![CDATA[11 Tools That Allow us to Work from Anywhere on Earth as a Distributed Company]]>https://ghost.org/changelog/distributed-team-toolsGhost__Post__5cf5f94b3a5f1b0038cc7135Mon, 15 Dec 2014 14:09:18 GMT11 Tools That Allow us to Work from Anywhere on Earth as a Distributed Company

Open source, not-for-profit, and distributed. Sometimes I think we really are the black sheep of startups.

As is becoming more and more common these days, Ghost is a fully distributed team. We have no office, no headquarters, and no fixed working hours. Our registered business address is a virtual office in central London. Nobody works there. Instead: We're all over the world.

The freedom is awesome, but it's also challenging.

Running a remote startup is very different to working together with a team in person. That sounds a like an obvious statement, but it's really a far larger paradigm shift than most people appreciate when they go into it.

The most significant difference is in the value of the tools you use, and I think it's important to explain why:

When you're co-habiting the same physical location with your colleagues, you have a human connection to them. When you work remotely, you do not. If you're anything like me, your reaction to that is probably slightly underwhelmed, because it's something that doesn't seem like a big deal. But it is.

A lot of people like to talk about "water-cooler conversations" and impromptu chats that occur in an office. This, I believe, is dumbing down the subject to its most superficial symptom. It really has nothing to do with water-cooler conversations, it has to do with the reason those conversations happen.

Why do you have a random chat with someone about the weekend when you go into the office? Or, conversely, why would you not speak to someone when you passed them in the office? How would you know when to do either one of those? In simplistic terms, it's contextual awareness.

You can see if Ben is in a bad mood because his headphones are on and he's looking at his monitor like he wants to kill it - so you know not to disturb him. You can hear that Mary is humming a Christmas song quietly at her desk, so maybe she's cheerful at this time of year. You can see, without question, that Luke is hungover - he probably isn't fully conscious yet.

As a species, humans are social by nature. Millions of years of evolution have caused us to develop awareness of each other using our senses. We have 21 different facial expressions, and multiple studies have shown that emotions are contagious - spreading throughout groups of people and influencing others.

But - when you're working with people on opposite sides of the world, all of this contextual awareness vanishes.

In an office, the collaboration tools you use are akin to a simple device like a screwdriver. They assist with difficult tasks and lessen the amount of effort required to complete them. In a distributed team, the tools you use are more like life-support. Everything to do with distributed team tools is about clawing back some of that contextual awareness which you've lost by not being in the same space.

The biggest benefit of a tool to a remote team isn't in the tangible - it's in the intangible. The best tools for remote teams bring you closer together as people.

Right now the Ghost Foundation is a team of 6 people spread across 4 countries and 3 continents. We have an extended team of open source contributors who do a tremendous amount of work, too - but for the purposes of this post I'm mainly going to talk about the Foundation team who work together on a full time basis.

Our 11 Most Important Remote Team Tools

So, here are the most significant things that we use on a day-to-day basis to function productively:

#1. Slack - The virtual office

11 Tools That Allow us to Work from Anywhere on Earth as a Distributed Company

Some people refer to Slack as a team-chat app, but really it's so much more than that. Slack is our remote office. If you're on Slack: You're at work. It doesn't just allow us to talk to each other easily, it also pipes in feeds of all activity happening in our other tools. We see when new commits go in via Github, when goals are updated on Trello, when Pingdom tells us one of our servers is down, or when a new Ghost(Pro) customer converts.

Slack is at the heart of the entire company. If there was one remote-team tool that we physically could not live without: It's this one. I don't even remember what we did before Slack.

#2. Sqwiggle - See everyone

11 Tools That Allow us to Work from Anywhere on Earth as a Distributed Company

Sqwiggle is an app that snaps a photo of you via your webcam every 1-5minutes and allows you to see photos of the rest of your team doing the same. Initially, it sounds totally weird. A common reaction to Sqwiggle is not wanting to feel like you're being watched all day. In reality, it's a lot like Twitter. You don't really get it until you use it; at which point the value becomes clear.

It has very little to do with people seeing you. That part is almost inconsequential, in reality. The real value is in being able to see everyone else. Being able to tell who is happy, who is concentrated, who is making a silly face. Rather than just typing to a username in Slack, it has a really strong impact when you can see the person you're typing to.

Update, 2019: Sqwiggle is no more.

#3. Trello - Organise the things

11 Tools That Allow us to Work from Anywhere on Earth as a Distributed Company

We use Trello to organise our medium to long-term plans. The Ghost public roadmap is one example of this. We also use a few other boards internally to keep track of progress on larger projects.

#4. iDoneThis - Work log

11 Tools That Allow us to Work from Anywhere on Earth as a Distributed Company

A companion to Trello, iDoneThis handles our short-term plans. At the beginning of the week we all make a short list of the things we want to get done, and then as the week progresses we log all the things we actually get done. It's a simple way for everyone to share what they're working on. And it integrates nicely with Slack.

We tried lots of alternatives prior to iDoneThis. From WordPress/P2 logs to dedicated Slack Channels. Nothing worked quite as well.

#5. Github - Development collaboration

11 Tools That Allow us to Work from Anywhere on Earth as a Distributed Company

Almost goes without saying that this is where we do all our code collaboration, but it's still worth mentioning. Everything that we build goes through Github, which ensures that we're always keeping track of issues. We've got about 11 open source repositories and 18 private ones. All development work and discussion happens here. All code is reviewed by 2 sets of eyes before it goes into master.

#6. LICEcap - Visual bug reports

11 Tools That Allow us to Work from Anywhere on Earth as a Distributed Company

Hands down one of the most underrated little tools out there. LICEcap allows you to record animated gif screencasts. This is our number 1 most important bug reporting tool. If a picture speaks a thousand words, an animated give speaks ten-thousand. Or something.

NB: Are you an app developer? Please: Make an updated version of LICEcap, this thing is so ancient. With some nice design and a couple of extra features, it could be be so awesome - and we would promote the hell out of it. Drop us a line if you want some ideas.

#7. Clocks - Timezone management

11 Tools That Allow us to Work from Anywhere on Earth as a Distributed Company

There are variations of this. Some people use Clocks, some Every Time Zone, some just check the timezone in Slack. All accomplish roughly the same task: Figure out whether the rest of the team is awake, or sleeping, or what time it would be best to schedule a catchup for.

#8. Google Hangouts - Team meetings

11 Tools That Allow us to Work from Anywhere on Earth as a Distributed Company

Every Friday we have a team videoconference to catch up on the week and see how everyone got on. Google Hangouts is the easiest way to do this. Just type /hangout in Slack and we're all set.

#9. Google Calendar - Shared schedules

11 Tools That Allow us to Work from Anywhere on Earth as a Distributed Company

A shared calendar allows us to keep track of where everyone is. We have a small feed so that it's possible to see when someone on the team is travelling to a conference, taking a day off, or has an appointment that means they're not going to be around for a while.

#10. aText - Typing utility

11 Tools That Allow us to Work from Anywhere on Earth as a Distributed Company

We type a lot. Like a lot a lot. A LOT. So, aText comes in handy by storing shortcut abbreviations to bits of text. For example, if I type rroadmap - it will automatically delete that text and replace it with https://github.com/TryGhost/Ghost/wiki/Roadmap. We have hundreds of these which come in handy for storing the most common snippets of text we use that would otherwise need to be looked up.

#11. Ventrilo - Asynchronous VOIP

11 Tools That Allow us to Work from Anywhere on Earth as a Distributed Company

Originally created for gamers to talk to each other while playing massively multiplayer online games, we're experimenting with Ventrilo for asynchronous voice communication. You hold down a keyboard button, and then speak to broadcast a voice message to the entire team. It's kind of like an audio-version of Sqwiggle.

Bonus #12. Coffitivity - Zen/Focus

11 Tools That Allow us to Work from Anywhere on Earth as a Distributed Company

I love working with light background noise. Something about it makes it much easier to focus. Coffitivity is a little Mac app which streams an infinite loop of ambient noise into your headphones. Well worth a try.

Getting Some Facetime

While all these tools do a great job of filling some of the contextual void, there's still really no replacing the real thing. No amount of video chats or cat gifs can replace sitting across the table from someone after a long day of work and sharing a deep sigh and a relaxing drink.

11 Tools That Allow us to Work from Anywhere on Earth as a Distributed Company

Earlier this year we managed to get the whole Ghost team together on a 10 day retreat in Egypt. We didn't really set a big schedule or make any grand plans - it was far more about simply getting to know each other as people, and discussing the future of Ghost in a relaxed setting.

As we're a young startup on a budget, we've only managed to do one full-team meet-up so far. Long term we'd love to be able to do things like this at least 3x a year.

Further Reading

You can check out our full list of tools over on this handy Product Hunt collection.

We're not the only ones doing this stuff, and we've been inspired by lots of other great remote teams and their tools. Have a read:

Do you have any other useful tools or experiences working in a distributed team? We're always on the look out for new things to try!

]]>
<![CDATA[Ghost Labs]]>https://ghost.org/changelog/labsGhost__Post__5cf5f94b3a5f1b0038cc7134Wed, 10 Dec 2014 14:25:18 GMTGhost Labs

Since we announced that we were going to be speeding up our release cycle back in August; we've released new stuff 7 times. We're also planning on 2 more releases coming before the end of the year.

Today we're adding a small feature that should let us move even faster: Ghost Labs.

Labs is a new settings page within Ghost which allows you to access bits of brand new Ghost functionality that we're still working on. The intention is to get real people testing new features as early as possible so that we can get lots of feedback about how well it is (or isn't) working before we roll it out to everyone.

Now you can access import/export features more easily (previously these were hidden on a debug page). As well as a couple of handy tools to reset your content or test that email-sending is working.

Much more is on the way!

Ghost(Pro) users can start using this feature immediately. Users running Ghost on their own servers can grab this feature by upgrading to Ghost 0.5.6.

]]>
<![CDATA[Public Dev Meeting 9th December]]>https://ghost.org/changelog/public-dev-meeting-9th-decemberGhost__Post__5cf5f94b3a5f1b0038cc7075Tue, 09 Dec 2014 19:35:56 GMTPublic Dev Meeting 9th December

Ghost 0.5.6 was released on Friday, after a week of squeezing in a great deal of bug fixes, improvements and new features. We've fully ramped up to regular releases now, and the next one will likely be this Friday again (12th) as there are yet more fixes that we want to get out there.

This week, we're already making massive progress towards finishing up tag management, with PRs for the meta data screen and cover images landing. I am really hoping we can get [#4409] (https://github.com/TryGhost/Ghost/issues/4409) wrapped up - adding a checkboxes to the labs page so that more users can start to play around with tag management (and code injection).

The main blocker to finishing up tag management is the API issue #4521, which is required in order to get a post count for each tag. Locking down the best way to do this, along with thinking about how to exclude tags that aren't associated with any posts from the browse response requires a discussion which started during the meeting and was continued shortly after. When we have a bit more clarity, #4521 will be updated and hopefully that will unblock the issue.

I have also raised a number of new issues around improving the Ghost importer, which is my current focus. For the wider project, the rest of this week will very much be spent pushing forward with tag management, fixing up as many small issues and bugs from the current backlog as we can and hopefully adding the checkboxes to the labs page ready for the release.

Full details:

The full logs of the meeting are available in our IRC logs, which are now looked after by the lovely folks at botbot.me.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 16th December, 5:30pm London time.

]]>
<![CDATA[Ghost 0.5.6]]>https://ghost.org/changelog/ghost-0-5-6Ghost__Post__5cf5f94b3a5f1b0038cc7074Fri, 05 Dec 2014 13:17:11 GMT

Ghost 0.5.6 is now available on GitHub, npm and Ghost.org. 0.5.6 is an incremental improvement to Ghost, adding bug fixes and new features, including... Sitemaps!

Highlights

  • [New] Sitemaps
  • [New] Footnotes & Highlight
  • [New] Labs page
  • [Fixed] Posts failing to save after an error
  • [Fixed] Password reset and invitation links not working with mailgun
  • [Fixed] Image helper not working correctly with subdirectories
  • [Fixed] RSS feed warning in Chrome

You can see the full change log for the full details of every change included in this release.

Labs Page & Hidden Features

The new labs page is intended as a way for us to showcase upcoming and experimental features to our users before they are officially ready for release. At the moment, it holds the import, export and other tools, which used to live at /ghost/debug/. These tools need an overhaul and will be worked on before finding a new home.

Soon we'll be adding options to this page so that users can enable in-development features which are normally only accessible via a config flag. For example, in 0.5.6 if you set tagsUI: true or codeInjectionUI: true in your config.js (just below url: a good spot) you'll be able to access the work-in-progress tag management and code injection features. The features are still being built, so use them at your own risk and if you do find any issues, please be sure to report them!

How to Upgrade

All Ghost(Pro) users are being automatically updated and will be running Ghost 0.5.6 shortly. You're welcome :)

For people running Ghost on their own servers, you can download Ghost 0.5.6 and then check out the upgrade documentation over on our support site. If you've missed out a version or two, don't worry you can upgrade directly from any 0.5.x version straight to 0.5.6.

Enjoy!

Credits

This release was lovingly crafted by Hannah Wolfe, Paul Adam Davis, Jason Williams, Felix Rieseberg, Nazar Gargol, Jacob Gable, cobbspur, John O'Nolan, Sebastian Gierlinger, Stefan Baumgartner, sanddudu, Harry V. Kiselev, Harry Wolff, Hugo Jobling, Jaiden Mispy, Matt Enlow, Paul Davis and Robert Jackson.

]]>
<![CDATA[Getting Started with Ghost: The Book]]>https://ghost.org/changelog/getting-started-with-ghostGhost__Post__5cf5f94b3a5f1b0038cc7133Wed, 03 Dec 2014 12:58:53 GMTGetting Started with Ghost: The Book

It happened at the beginning of this year, but feels like it was only yesterday that Packt Publishing reached out to let us know that they were looking to create the first book about Ghost.

Today, that book exists IRL! (and we've got copies to give away)

What's Inside

The book is a collaborative effort between 3 of Ghost's most active users and contributors since it first launched just over a year ago. Kezz Bracey, an Australian designer who has been making themes for Ghost since day 0. David Balderston, an IT professional and one half of the HowToInstallGhost tutorial team, and Andy Boutte - the other half of that team as well as one of our top QA contributors for the Ghost open source project.

Together they've put together a solid guide for any new users to Ghost, covering everything from installing and creating your first theme all the way through to deploying it on a VPS and launching an online publication.

The book launched last week and is available from a variety or retailers all over the place! Here are 4 quick options:

Get a free copy!

Thanks to the team at Packt Publishing - we've got 3 copies to give away. To win one, just leave us a comment below telling us what upcoming feature in Ghost you're most looking forward to seeing. Easy!

If you need some inspiration, here's the roadmap of things we're working on!

]]>
<![CDATA[Public Dev Meeting 2nd December]]>highlight) as one of the steps towards ensuring a smoot]]>https://ghost.org/changelog/public-dev-meeting-2nd-decemberGhost__Post__5cf5f94b3a5f1b0038cc7073Tue, 02 Dec 2014 19:20:16 GMTPublic Dev Meeting 2nd December

Today we announced the exciting news that Ghost has acquired Roon.io. You can read all about it in the official announcement post. We have already open sourced the Roon design as the Roon theme for Ghost, and more of the Roon codebase will see its way into Ghost in the near future :)

In the short term, we'll be adding ==highlight== syntax to Ghost (which outputs <mark>highlight</mark>) as one of the steps towards ensuring a smooth migration process for Roon users.

This week we received a number of bug reports around the editor failing to save posts. We take these bug reports very seriously, and a number of fixes have been made to resolve the problems users were having. As a result, we'll be releasing Ghost 0.5.6 this week with those fixes plus much more.

There have already been more than 60 commits since 0.5.5, with significant progress made towards the 0.6 features. Although we'll endeavour to get as much merged prior to this week's release a possible, with the current rate we're moving at we expect there to be enough further progress for another release before Christmas.

One feature which is currently in testing, is the updates to the editor which removes CodeMirror and enables browser spellcheck and mobile uploads. This week that PR was pushed up to a live demo in order to make it easy for testing on as many devices as possible. Please, please, please, if you have a moment, visit the demo and try out the new editor on your favourite device!

Full details:

The full logs of the meeting are available in our IRC logs, which are now looked after by the lovely folks at botbot.me.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 9th December, 5:30pm London time.

]]>
<![CDATA[Ghost Acquires Roon.io]]>https://ghost.org/changelog/roonGhost__Post__5cf5f94b3a5f1b0038cc7132Tue, 02 Dec 2014 12:18:00 GMTGhost Acquires Roon.io

Damn that’s beautiful. Where did this even come from?

Those were my thoughts last year when a new service called Roon.io popped up out of nowhere. It was only a few months before Ghost was going to be released for the first time. Sam Soffes and Drew Wilson had collaborated - seemingly overnight - and shipped a beautifully designed, Markdown powered, modern blogging platform.

It gave us a kick, at the time, and pushed us to improve. Ever since then we’ve kept a close eye on Roon and followed its progress alongside ours.

Fast forward a year, and we discovered last week that the project had hit a fork in the road. Drew had departed to work on new projects which were taking up all of his time, and Sam was deciding what to do next.

I reached out to Sam to see if we might be better off working together going into year 2.

What’s Happening Now

Today I’m thrilled to announce that we’ve acquired the Roon.io project, and Sam Soffes will be joining Ghost’s Board of Advisors. Together we’ll be working to take many of the best bits of Roon and integrate them into Ghost as completely open source components.

One of Roon’s biggest strengths as a product has always been its beautiful Markdown editor, which should come as no surprise given Sam’s background. His other main project is a beautiful desktop Markdown editor for OS X called Whiskey. We’re incredibly excited about making an even more functional, beautiful Ghost editor.

The Roon.io hosted platform will be closing its doors on December 31st, 2014. We will be providing full data exports as well as seamless migration options for all of Roon’s 100,000+ users to Ghost. Anyone who has paid for a premium Roon.io account will receive 12 months of Ghost(Pro) for free. We’re also going to extend a 3 month free trial to any other Roon users who would like to give Ghost(Pro) a try.

Finally, we’ve ported Roon’s front-end design as a brand new official theme for Ghost so that anyone wanting to carry across the Roon look to their Ghost blog is able to do so:

Here’s a DemoHere’s the Download

This is a wonderful milestone for us as Ghost passes a quarter of a million registered users, half a million downloads, and is still growing fast as ever. We’re incredibly excited to use this opportunity to make an even greater blogging platform and to welcome all migrating Roon users to the family.

We’ll be in contact with all Roon users in the coming weeks about data exports and migrations. If you have any problems or questions about your data - drop us a line on support@ghost.org.

Q&A

I'm a Roon user, what's happening to my stuff?

Right now: Nothing. All your data is safe. If you'd like, you can export it in zip format right now from your Roon Dashboard. Over the next couple of weeks we'll also be providing easy Ghost migration tools. We'll email you to let you know when these are ready.

Why not just Open Source the whole thing?

Roon was never designed or structured as an Open Source product. Unleashing the codebase in its current state would raise far more serious problems than useful solutions. Rather than allow the community and brand to fracture, Sam is working with us to open source all the best parts of Roon as a part of Ghost. We’re starting with an official open source Roon theme for Ghost which brings Roon’s front-end design to all Ghost users. Sam has also already open sourced an HTML to Markdown converter used in Roon. A lot more will be coming over the next few months.

Why isn’t Ghost free then? Roon was free!

The Ghost software is completely free of charge to download and run on your own computer or server, if you have some technical knowledge.

If you want us to handle all of those things for you, then our Ghost(Pro) service is available which requires no programming knowledge at all. This service is not free because it costs money to run. Having a sustainable business model means we can pay our expenses and our developers so that Ghost will be around (and improving) for years to come. We’re an independent not-for-profit organisation funding the world’s fastest growing Open Source publishing platform.

So, if you do decide to use Ghost(Pro), then not only do you get a blazing fast, shiny blog - but you also support free and open independent publishing, all over the world.

]]>
<![CDATA[Public Dev Meeting 25th November]]>https://ghost.org/changelog/public-dev-meeting-25th-novemberGhost__Post__5cf5f94b3a5f1b0038cc7072Tue, 25 Nov 2014 20:19:45 GMTpulse

First, some exciting news. We now have shiny new IRC channel logs from the wonderful people at botbot.me: https://botbot.me/freenode/ghost/. These logs are pretty, searchable, and realtime!

Also news this week, I published our new Road to 0.6 guide here on the dev blog. I'm really stoked about this short term roadmap and the focus it gives us on shipping some really awesome new features to users, end users and developers. Here's a quick list of the top 10 features we are focusing on shipping:

  1. Spell check
  2. Code Injection
  3. Sitemaps
  4. Post Scheduling
  5. Tag Management
  6. Next/Prev links (the query helper)
  7. Public API (OAuth)
  8. Navigation menu
  9. Custom Permalinks
  10. Post Filtering

Progress

We've made great progress on several of these features. Spell check and Sitemaps both have pull requests which are almost ready to merge. Next/Prev links and Post filtering are both waiting for someone to pick up the issues (please come help!). Custom Permalinks and Tag management are both in progress, with tag management not being too far from shippable.

Custom Permalinks and Tag management are both multi-issue projects, each with an 'Epic' or parent issue and several sub issues. Many of these sub issues are quite small, and with tag management require re-implementation of behaviour which already exists on the post settings menu - meaning these issues would be good for new comers. If you'd like a hand getting involved, find me on IRC (#ghost on freenode) and let me know :)

Full details:

The full logs of the meeting are available in our IRC logs, which are now looked after by the lovely folks at botbot.me.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 2nd December, 5:30pm London time.

]]>
<![CDATA[The Road to 0.6]]>https://ghost.org/changelog/road-to-0-6Ghost__Post__5cf5f94b3a5f1b0038cc7071Wed, 19 Nov 2014 13:39:34 GMT

Earlier this year we took the time to rewrite major parts of the codebase, which resulted in a big gap between releases. As a project, we need to make up for that by pushing to ship features and reach feature parity with other similar platforms. This guide aims to clarify the key features that are missing, their importance and current state as well as covering the infrastructure projects that we need to complete in order to ship future features.

The top 10 features we've gotta have...

  1. Spell check
  2. Code Injection
  3. Sitemaps
  4. Post Scheduling
  5. Tag Management
  6. Next/Prev links (the query helper)
  7. Public API (OAuth)
  8. Navigation menu
  9. Custom Permalinks
  10. Post Filtering

These are the top missing features, ordered by importance and determined by a mix of most requests / votes and the value of that feature vs its complexity. Varying technical complexity prevents us from shipping in exactly this order, however it is important to have clear priorities.

Each one of these items has at least one card on the public roadmap, which you can use to keep track of progress and find all of the related GitHub issues. Below is a quick run down of the state of each feature.

1. Spell check

This one has always been a bit of an embarrassment so we're super keen to ship it. It has been blocked on our use of CodeMirror in the editor, but recently we developed a plan to get it out the door. It's currently in testing and review, and is expected to ship very soon along with mobile uploads.

2. Code Injection

Code Injection provides users with a simple interface in the admin panel to paste code snippets into so they don't have to edit their theme to add things like Google Analytics. This feature is mostly ready, however it was important to test how it behaved with various code snippets and themes. As a result of testing, it seemed best to ship it with the ability to detect if, for example, the active theme has the {{ghost_head}} helper. Theme feature detection is tracked in issue #4319.

Moving forward, we should merge the PR with the feature behind a config flag and spec out a minimum shippable version of the theme feature detection concept.

3. Sitemaps

A small feature that's important for SEO and therefore key to being an awesome blogging platform. This feature is a WIP at present but is expected to land very soon.

4. Post Scheduling

It has become apparent that this feature is blocking bigger organisations from using Ghost. It will be technically challenging to solve in a way that suits the different kinds of environments that Ghost tends to run in. We're currently researching potential ways to solve it and speccing it out.

5. Tag Management

The interface for managing, editing and removing tags is going to provide for all kinds of interesting opportunities. It is currently partially implemented behind the config flag 'tagUI', and also requires several updates to the Tag and Post API to make all the features possible.

This is an ongoing WIP with quite a lot of scope, so we intend to focus on shipping a minimum version, as well as ensuring the full set of intended features is documented.

6. Next/Prev links (the query helper)

This is for including a link to the next or previous post at the bottom of a post. It depends on an API update (see issue #4262) and also the query helper.

The API work is planned and marked high priority but not yet in progress. The query helper is currently being discussed on GitHub and will be relatively straightforward to add once a decision is made on what it should look like.

7. Public API (OAuth)

Adding OAuth to the API so that external apps can access the API safely is receiving a lot of pressure from the community, therefore delivering this should add extra value by encouraging more contributions. It is currently blocked on a tree of dependencies stemming all the way back to permissions and database migrations.

First and foremost, we need to start unblocking progress. The first thing we need to solve is permissions migrations, which is currently a stalled issue. There are also several issues that could be worked on in parallel that will be highlighted in dev meetings.

8. Navigation menu

Similar to code injection, allowing users to build a simple navigation menu will help reduce the need to edit themes. The idea is to provide a simple UI to set the title and URL, add a new item and reorder items. The interface is currently being designed.

Ghost has supported all manner of different permalink formats for some time, but only by editing the setting directly in the DB. The UI for this has been designed and fleshed out in HTML/CSS, so it's ready to wire up in Ember. There is also some functional work needed to ensure all the permutations work 100% and are well-tested.

10. Post Filtering

For users with a lot of posts, the content screen doesn't currently cut the mustard. Adding a menu to allow users to filter this is a step in the right direction, but is intended as an intermediary step whilst we work on adding full search capabilities. Work on this has stalled and needs picking up again.

Infrastructure Projects

  1. Permissions Migration
  2. File System Abstraction
  3. Image Processing
  4. DB Migration Improvements

Each of these projects will help us to build out major features for Ghost. As they are not user-facing, they don't live on the roadmap, and instead have an issue on GitHub. Below is a quick description of each item.

1. Permissions Migration

Issue #3910

Currently we have a set of permissions fixtures which are loaded into the DB when Ghost is started. These have undergone one wholesale change in the past, so we were able to simply remove the old permissions and create new ones. Now we need to create a simple way to add new permissions for additional endpoints.

Presently, there's no clear plan for what this will look like. We need to research similar existing systems in order to get some inspiration and kickstart the improvement works.

2. File System Abstraction

Issue #2852

Assuming that it's ok to use fs, and that all the images, themes and other bits and pieces will be in the local file system is a bad thing. It makes it hard to use Ghost with a cdn and also has implications for hosts with a transient file system like Heroku.

This work is partly done, we have a storage abstraction for images, but it's not used for everything which it ought to be. We also need to make it pluggable in a simple way so that devs can provide a different storage layer with a simple config change. In order to move forward, the issue will be re-written and split up into smaller tasks.

3. Image Processing

Issue #4453

Adding Imagemagick as a dependency is too complicated, so we need a pure JS way to do resizing, cropping and removing of exif data for images uploaded to Ghost. At present the problem is being researched and discussed on GitHub, with a view to adding image optimisation as a first step.

4. DB Migration Improvements

Issue #4479

So far we're able to add, remove, rename and drop unique constraints on columns in Ghost. In order to make some improvements and build more features we also need to be able to change column types / sizes and we need to make the whole process tonnes easier. Updating the database currently includes a manual process of ensuring we can still import and export, and this complexity needs removing.

The future

There are obviously numerous other features and projects that we need to deliver, like search, i18n, post revisions and diffs, the app platform and tonnes more. After 0.6 the likely focus will be on building one or two bigger features with far-reaching implications like search & i18n. A 'Road to 0.7' issue will appear closer to the time.

]]>
<![CDATA[Public Dev Meeting 18th November]]>https://ghost.org/changelog/public-dev-meeting-18th-novemberGhost__Post__5cf5f94b3a5f1b0038cc7070Wed, 19 Nov 2014 12:32:25 GMTpulse

Today's meeting was largely interrupted by issues with the release of Ghost 0.5.4. Unfortunately I wasn't able to give it my full attention, but here's a quick overview of what we discussed:

Releasing Ghost 0.5.4 and 0.5.5

This week there was a big push to clean up more bugs and issues and release Ghost 0.5.4 as we wanted to get the memory leak fix out in the wild. Ghost 0.5.4 was released yesterday (18th Nov), but we quickly discovered there was a charset issue affecting MySQL blogs. As a result we took Ghost 0.5.4 down temporarily whilst we located the problem.

Further investigation has turned up a serious configuration issue between knex, the library we use to create SQL queries, and the node-mysql mysql driver module. To resolve this short term we have reverted node-mysql back to an earlier version and released Ghost 0.5.5. Long term we will need a more in-depth fix and there will be further details of this in due course.

Focus for 0.6

During the meeting I shared the 'Road to 0.6' write-up that is going to be published here on the blog shortly. This was digested and discussed by those present, and it was agreed that this helps to provide more focus and clarity around priority features that we want to ship to our users. We also believe our users will be happy to hear that so many big features, like post scheduling, are priority issues and will be shipping in the near future.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 25th November, 5:30pm London time.

]]>
<![CDATA[Ghost 0.5.5]]>https://ghost.org/changelog/ghost-0-5-5Ghost__Post__5cf5f94b3a5f1b0038cc706fWed, 19 Nov 2014 10:43:00 GMT

Ghost 0.5.5 is now available on GitHub, npm and Ghost.org.

Ghost 0.5.5 is a minor update to 0.5.4 which resolves an issue with character encoding for MySQL databases. If you're using MySQL and have upgraded to 0.5.4, please upgrade to 0.5.5. The extra fix can be found here.

Below is the original post about Ghost 0.5.4:

0.5.4 is a maintenance release featuring a very important fix for a memory leak affecting 0.5.3, which causes Ghost to become unstable and crash under heavy load. This update also includes a number of more minor improvements and bug fixes.

Due to the memory leak that has been fixed, this is a recommended upgrade.

Highlights

[New] Postgres is now officially supported
[New] Cmd/Ctrl + s now works on settings page
[Fixed] Memory leak causing instability under load
[Fixed] Autosave triggering 'do you want to leave' alert incorrectly
[Fixed] Issues with uppercase emails
[Fixed] Subdirectory output twice in image URLs
[Fixed] Incorrect twitter card data





As well as many other improvements. You can see the full change log for the full details of every change included in this release.

Credits

This release was lovingly crafted by Jason Williams, Paul Adam Davis, Hannah Wolfe, Matt Enlow, Felix Rieseberg, cobbspur, David Balderston, Robert Jackson, Jilles Soeters, Leonard Camacho, Jacob Gable, Mattias Cibien, Nazar Gargol, Harry Mills, surgesoft, Victor Szeto, Yury Michurin, David Robson, meowtec and John O'Nolan.

]]>
<![CDATA[Ghost 0.5.4]]>https://ghost.org/changelog/ghost-0-5-4Ghost__Post__5cf5f94b3a5f1b0038cc706eTue, 18 Nov 2014 14:58:44 GMT

Update: 0.5.4 has an issue which effects MySQL blogs only, and causes character encoding issues. If you're using MySQL, please upgrade straight to Ghost 0.5.5.

Ghost 0.5.4 is now available on GitHub, npm and Ghost.org. 0.5.4 is a maintenance release featuring a very important fix for a memory leak affecting 0.5.3, which causes Ghost to become unstable and crash under heavy load. This update also includes a number of more minor improvements and bug fixes.

Due to the memory leak that has been fixed, this is a recommended upgrade.

Highlights

[New] Postgres is now officially supported
[New] Cmd/Ctrl + s now works on settings page
[Fixed] Memory leak causing instability under load
[Fixed] Autosave triggering 'do you want to leave' alert incorrectly
[Fixed] Issues with uppercase emails
[Fixed] Subdirectory output twice in image URLs
[Fixed] Incorrect twitter card data





As well as many other improvements. You can see the full change log for the full details of every change included in this release.

Credits

This release was lovingly crafted by Jason Williams, Paul Adam Davis, Hannah Wolfe, Matt Enlow, Felix Rieseberg, cobbspur, David Balderston, Robert Jackson, Jilles Soeters, Leonard Camacho, Jacob Gable, Mattias Cibien, Nazar Gargol, Harry Mills, surgesoft, Victor Szeto, Yury Michurin, David Robson, meowtec and John O'Nolan.

]]>
<![CDATA[Public Dev Meeting 11th November]]>https://ghost.org/changelog/public-dev-meeting-11th-novemberGhost__Post__5cf5f94b3a5f1b0038cc706dWed, 12 Nov 2014 10:03:59 GMTpulse

This week I was away at Full Frontal speaking about managing open source projects. As a result I've got a lot of inspiration on how to improve our processes and be more open, but I'm also looking for feedback from our community members via issue #4396 - a discussion on improving our development process. Please get involved!

Progress towards 0.6

Since the release of 0.5, we've been working on releasing user-facing features to try to reach more of a feature parity with other publishing systems. We've been steadily releasing every time we have a few more feaures to offer, but what hasn't been clear is what the full set of features we want to have before we call Ghost 0.6 is, and what happens after that.

To try to resolve this, we're going to have a 'Road to 0.6' writeup either as an issue or on the wiki. This will detail both the features we need to build and the underlying infrastructure projects we need to do to build them well, and be ready for the next set of features. During the meeting we discussed which features those present felt were most obviously missing.

Some of the candidates include: tag management, previous and next post links, post filtering, shareable preview, a navigation builder tool and a query helper to give theme developers access to the API.

This will all be written up and shared on the dev blog when it's ready, so watch this space :)

Memory Leak and Maintenance Release

There have been several reports in the last week or two of a memory leak in Ghost 0.5.3. That memory leak has been confirmed as existing in 0.5.3 only, found, and fixed (big thanks to @jaswilli). There's one more small bug we'd like to fix before cutting a maintenance release: #4400 - autosave is causing some people to get 'Do you want to leave' nag warnings at the wrong times. 0.5.4 will likely land this week with several bug fixes and improvements.

Update: the memory leak fix is a single file patch, if you need it you can find it here. The fix will be released in 0.5.4 on Monday 17th.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 18th November, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 4th November]]>https://ghost.org/changelog/public-dev-meeting-4th-novemberGhost__Post__5cf5f94b3a5f1b0038cc706cTue, 04 Nov 2014 22:19:52 GMTpulse

The last two weeks have seen us steadily progress through the main issues in the current backlog, tackle bug fixes and test improvements and also hack away at bits of some bigger features like tag management and custom permalinks. There are still a few high priority bugs in the Current backlog that I'd really like to see go in before cutting a release, but otherwise I'm aiming to do a release in the next week or so.

I am hoping to drop a major feature in, like sitemaps if possible, but there are a number of quite important bug fixes that warrant a release of their own if nothing lands in time.

The majority of the meeting today was spent discussing the state of our development processes. We've made quite a few changes to remove the long term planning (which just caused disappointment), get more agile, and ship more features more often. It's been an interesting and largely successful process, so I wanted to pause to reflect on the changes see how we might improve them further.

Specifically I'm interested in how to make it clearer what the development priorities are (and why) and also to encourage more new contributors to get involved with developing Ghost. Questions like this always require a bit of reflection, so to get a bit more of a conversation going, I've raised a GitHub issue. Please drop by and let us know what your experiences of our process have been like :)

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 11th November, 5:30pm London time.

]]>
<![CDATA[How we do CSS at Ghost]]>https://ghost.org/changelog/css-at-ghostGhost__Post__5cf5f94b3a5f1b0038cc7067Tue, 04 Nov 2014 12:53:21 GMT

The CSS community is a wonderful thing to be part of. Everyone from GitHub to Lonely Planet has shared how they write CSS. Every time I read one of these posts, I learn something new; something I can use in my own day-to-day work.

The current state of CSS at Ghost is one of flux. We have rewritten Ghost's CSS a couple times to make it leaner and easier to learn. But there's more to the health of a code-base than it's quality. Comments and learnability are absolutely crucial to helping new contributors get involved and help Ghost grow more and more.

This post is a primer on how we do CSS at Ghost, and how parts will be done going forward. So, with all that said, let's dive in!

Contents

Introduction

As a rule, our CSS is purposefully kept as lean & clean as possible. We don't prefix properties, we don't nest deeply, and we don't use any pre-packaged libraries – if you exclude Normalize.

A quick note on browser support. We aim to target the last 2 versions of popular browsers. At the time of writing, that means IE 10 & IE 11. Other target browsers automatically update which makes them a non-issue.

Pre-Processor

We use Sass as our pre-processor. It is the most popular pre-processor around today and has the widest network of support and collective knowledge. We use Libsass via a node-sass Grunt task.

We use Libsass instead of Ruby-Sass, principally so we don't have a Ruby dependency. It's also much faster, taking an average of 3 seconds to generate 2 minified files and 2 source maps. One set for Ghost, the other for docs.

Prefixing is handled by Autoprefixer which is configured to only prefix the browsers we want to support. This means the only prefixed properties in the code are very specific to a particular browser; namely -webkit- stuff for a majority of mobile browsers.

Folder Architecture

The file structure we've adopted is simple but suits the reusability of various components very well.

core/client/assets/sass
|-- screen.scss
|-- vendor/
|-- modules/
|-- patterns/
|-- components/
|-- layouts/
  • screen.scss is where everything is @include'd, including Normalize from Bower
  • vendor/ is for CSS related to some JavaScript libraries
  • modules/ is for mixins, variables and utilities (such as icons)
  • patterns/ is for global styles, buttons, and forms
  • components/ is for groups of patterns with small bits of layout
  • layouts/ is where page layouts go and any page-specific changes to patterns and components

File Layout

Files have a strict layout, at least in terms of the way comments are written, blank lines added, and nesting is handled.

To help illustrate how, here's a full example showing every guideline and below is a list explaining each.

Note: This is not a real example, or well-crafted code. It's a guide to how code should be laid out and architected.

// ------------------------------------------------------------
// The Sass Example
//
// This is a brief example of how to structure a `.scss` file.
//
// * Define animations
// * Classed to use these animations
// ------------------------------------------------------------


//
// A wrapper for Element, extending %other-wrapper
// --------------------------------------------------

.element-wrapper {
    @extend &other-wrapper;

    padding: 15px 20px;
    border: 1px solid $lightbrown;

    @media (min-width: 801px) {
        margin: 10px;
        border-color: $midbrown;
    }

    // Variations
    &.darker {
        border-color: $midbrown;

        &.variation {
            padding-left: 10px;
            padding-right: 10px;
        }
    }

    .element-edit {
        border: 1px solid $lightbrown;
        border-radius: $rounded;

        @include icon($i-edit, 2rem, $lightbrown){
            transition: color linear 0.15s;
        };

        &:hover {
            border-color: $midbrown;

            &:before {
                color: $midbrown;
            }
        }
    }

}//.wide

//
// Another element
// --------------------------------------------------

.another-element {
    font-size: 1.6rem;
    line-height: 1.325;
    color: $darkgrey;
}
  • Every file has a title, and a slug it the file is specific to one place
  • Never style ID's and .js- classes
  • Use short-hand notation where possible
  • Blocks longer than 25 lines get a closing comment
  • Keep nesting to a minimum, and no deeper than 3 levels, including pseudo selectors (:nth-of-type and :after)
  • Group related properties together
  • Media queries always go after properties, in order of small to large width/height values
  • Don't be clever with selectors. Aim for readability over complexity

Naming Things

Variables

We've (rather unconventionally) decided not to use abstract variable names. As an example, we have $red instead of $error. It's much easier to understand and significantly lowers the barrier to entry.

Classes

We favour longer classes names and more of them over nesting selectors. So instead of a selector like .navigation ul li a, we would use a .navigation-link.

Files

If you stick to the rules explained in the folder architecture, the name for a new file should become fairly obvious. The name of the file should directly relate to its contents. If you find a single file has 2 very separate chunks of code in it, they should probably be abstract out into separate files.

Media Queries

In very rare cases we detect the type of device (desktop or touch device), but everything else is based on viewport width and sometimes feature availability. As such, there's plenty of media queries dotted around the code.

So far, we've chosen not to use variables in media queries in lieu of more readability. However - thinking forward - there are several places that would benefit from having a variable in the MQ.

Comments

Code Tells You How, Comments Tell You Why
Jeff Atwood - Coding Horror

There will be times when the code has to be complex, be it the necessary implementation, sheer complexity of properties, or inherited values.

If any CSS you write is not immediately obvious in context, it should be commented - not explaining how it works, but why its there in the first place.

.sample-component {
    @extend .other-component;

    transform: translate(0,0,0); // Resets `translate` inherited from `.other-component`
}

Linting

Currently, Ghost's Sass is not linted. That has to change. Linting the JavaScript of Ghost has helped keep the quality high before it even gets committed to the code base. Doing the same with CSS will ensure the code is consistent throughout.

Things that should be linted, include:

  • Levels of nesting & indentation
  • Flag uses of ID selectors and classes beginning with .js-
  • Spacing after selectors, properties, and values
  • Use of single & double quotes
  • Formatting and order of properties
  • Selector formatting, preferring all lowercase with hyphens
  • Null values with a unit (e.g. 0px should be 0 or none)
  • Use of colour names, preferring $red over red
  • Duplicate properties
  • Duplicate selectors on the same level

At the time of writing, there are no libraries that will lint .scss files that dont require a Ruby dependency, but this should serve as a list of requirements for tools that crop up in the mean time.

Documentation

We do have some documentation, but it's far from ideal. It's currently a Jekyll site deep in the folder structure core/client/docs. Right now, it houses examples of reusable components, or patterns in our terms.

I'm not convinced that having it auto-regenerate is the greatest of ideas, but it certainly needs some love.

You Can Help

We think (once all this is implemented), Ghost's CSS will be really easy to work on. However, there is always room to improve. If you want to help out or make the CSS even better, there's plenty of ways to talk to the awesome contributors.

]]>
<![CDATA[Structured Data for Your Posts]]>https://ghost.org/changelog/structured-dataGhost__Post__5cf5f94b3a5f1b0038cc7130Mon, 03 Nov 2014 12:50:35 GMT

As of today, Ghost automatically generates rich meta tags to allow your content to look fantastic when embedded within social networks.

We've added meta tag output for Schema.org, Twitter Cards, and Open Graph. This means that any of your posts shared on Facebook, Pinterest, Twitter or Google+ will now have rich content associated with them, allowing them to show up as beautiful embedded stories.

Rich embed on Facebook screenshot

Making your content look great on these networks generally leads to much higher engagement from readers, with more shares and mentions. It can frequently also lead to more people linking to your blog, which is (of course) very good for SEO purposes.

Ghost(Pro) users can start using this feature immediately. Users running Ghost on their own servers can grab this feature by upgrading to Ghost 0.5.3.

]]>
<![CDATA[No Public Meeting 28th October]]>https://ghost.org/changelog/no-public-meeting-28th-octoberGhost__Post__5cf5f94b3a5f1b0038cc706bTue, 28 Oct 2014 14:55:02 GMT

Unfortunately, I'm not able to do the public meeting this week. Apologies for the very late notice - the clock change in Europe over the weekend means the meeting will now clash with my flight home, which I wasn't aware of last week.

Instead, here's a little update / progress report for the week:

pulse

This week has been a productive one: we've seen some great pull requests with nice bug fixes and contributions towards new features get merged. Our new current backlog is currently sitting at 8 open, 3 closed issues, with 3 work in progress pull requests meaning we're making really nice progress towards having enough new features to warrant another release.

Help Wanted:

There are still two issues in the current backlog which are looking for someone to work on them. These are both API issues, one to add previous and next to the post API and the other is to finish the Tags API so that we can complete tag management. So if you're a developer with some spare time at the weekend - why not give us a hand?

Ghost as express middleware

There is currently a lot of interest in finishing up the work to make Ghost usable as express middleware. If you're interested, check out PR 4101 and join the discussion!

Next week

Next week's meeting will be on as per usual: Tuesday 4th November, 5:30pm London time.

]]>
<![CDATA[Auto-Save The Things!]]>https://ghost.org/changelog/auto-saveGhost__Post__5cf5f94b3a5f1b0038cc712fTue, 28 Oct 2014 12:39:59 GMT

Today we're introducing auto-save for Ghost. From now on your posts will always be automatically saved in the background while you're writing.

Saving occurs in 60 second intervals, or whenever you stop writing - whichever comes first. You won't notice anything happening, magic poltergeists take care of everything behind the scenes.

Auto-save screencast

Ghost(Pro) users can start using this feature immediately. Users running Ghost on their own servers can grab this feature by upgrading to Ghost 0.5.3.

]]>
<![CDATA[How we Figured Out What Makes People Love Ghost 1,000% More]]>https://ghost.org/changelog/ghost-onboardingGhost__Post__5cf5f94b3a5f1b0038cc7131Mon, 27 Oct 2014 11:49:46 GMT

That can’t be right… - I muttered.

+1,000% conversion

How could that possibly be right? A 4-digit increase?

I checked and re-checked the data; but there were no mistakes. Having read countless books and blog posts, I’d heard about the paradigm from other startup case-studies. This was the first time I was seeing it in person.

A unicorn!

What We’ve Learned from Onboarding Our Ghost Users

It all started with a very basic premise: Some of our users have a better initial experience than others and - as a result - they are more likely to convert into paying Ghost(Pro) subscribers.

The question was, how to quantify which parts of the experience were contributing to (or detracting from) the eventual outcome.

I enjoy reading case studies about how other companies give their users a good first impression. The general advice is always the same: You have to get users to the “aha!” moment. The point at which they start to get value from the product. For an accounting app, that might be when the user creates and sends their first invoice.

And you see - that’s the problem with most software books and blogs. They always make the same vague statement and give the same tired example about an accounting app and an invoice. What seems to be lacking, so often, is information on how to apply these lessons to what you’re doing.

The catastrophic assumption here is thinking you actually know what your software’s “aha!” moment even is. Or, perhaps even more fatally, that you think that there’s only 1 of them.

In reality, there are lots of little “aha!” moments throughout the onboarding experience - and one of the most important things you can do is learn what they are.

The 3 Key Moments which Matter

Had you asked me what the “Aha!” moment for a blogging platform would be a few months ago, I would’ve said “publishing a post”. That’s when you’ve set everything up, used the product, and completed your first piece of work.

After a couple of months of tracking various user actions, publishing a post did turn out to have some impact - but it was actually the lowest of all, compared to the other things we found.

Using events which are recorded in real-time on Ghost.org I was able to start comparing events and looking for correlation and causation. Do users who signed up today convert better than users who signed up a month ago? Are you more likely to subscribe for a Pro account if you’ve been contacted by our support team? Do people who publish more posts get more value? These were some of the questions we wanted to answer.

I looked at the baseline data from users starting a 14 day trial on Ghost(Pro), to signing up for a paid account. Next, I tested adding steps in between those two points, and re-evaluated the conversion data based on behaviour.

That’s roughly the moment at which I stopped in my tracks as the funnel in front of me showed a conversion increase of more than 1,000% for one particular group.

I wasn’t expecting such a massive result from this comparison.

Users who added a custom theme to their blog converted at just over 10% - more than 10x the rate of users who simply stayed with the default theme.

Conversion funnel

Very clearly, our users were experiencing a significant “Aha!” moment as they personalised Ghost and turned it into their own, custom space on the internet.

There were 3 events which affected the eventual subscription conversion rate most significantly:

  • Publishing a first post: 5% conversion
  • Uploading a custom theme: 10% conversion
  • Adding a custom domain: 8% conversion

Users who had not completed any of the above events converted at a vastly unimpressive 0.9%.

This is about as disparate as you will ever see a set of statistics for user onboarding, so we knew that we had a lot of work to do in order to make this better.

Creating a More Successful Onboarding Experience

Armed with this new data, we set out to create a better onboarding experience, focusing on improving the areas were we could see clear correlation in success rates.

The important thing to understand about user onboarding is that each step contains a bucket of users. Once you figure out what the buckets are, you can focus on improving each one individually and it will cascade down to the others.

We knew we had events which were affecting conversion the most. So how could we get more people to complete those events?

Ghost onboarding help screenshot

Taking a little gamification inspiration partially from LinkedIn but mainly from Intercom.io - we set out to create a “blog setup” progress meter. This would be a simple 5 step process to guide the user through the most important tasks to complete, including the ones which we knew would make them more likely to get value out of Ghost. Each step has a simple text or video user tutorial on how to complete it, and each step takes you closer to 100% on the red progress meter - which sticks in your Ghost.org navbar until you get there.

Ghost onboarding progress meter screenshot

The only flaw with this process is that it relies on the user being present on the site for them to know what the next step is. What happens if the user sets up a blog and then closes the window because they have to go out - forgetting to come back and do the next thing?

To tackle this problem, we used Intercom.io to send conditional emails depending on where in the chain you are.

This is set up to try to be as helpful as possible without being annoying.

Onboarding email

If a user has published their first post but we haven’t seen them in a couple of days, we send a 90 second instructional video on how to install a theme. If they’ve already done that step, we send instructions on how to set up a custom domain. Most importantly, we only ever send these emails if they haven’t been contacted in the last few days and if they haven’t opted out of any previous emails.

The results have been incredible to watch. While on average just 7% of users who start a trial will add a custom theme or domain name, that number jumps to 26% if they watch one of our tutorial videos and go through the onboarding progress steps.

Onboarding tutorial funnel

Quadruple the users entering this point of the conversion funnel, means a trickle-down effect as users with custom themes continue to convert better at the end of the funnel.

By helping users have a better initial experience, we’re able to show them why this is something worth their time and energy. This, in turn, leads to a greater positive emotional investment when it comes time to decide whether Ghost(Pro) is worth paying for.

From observing this in action and actively talking to our customers, we understand that customising the look and feel of Ghost is a major part of its appeal. The degree of control and independence which Ghost gives here is something that closed platforms simply aren’t able to match.

Where We Go From Here

Any good experiment generally leaves you with just as many questions as answers, and this one is no exception. From the lessons we’ve learned in figuring out what affects users most as they get familiar with Ghost for the first time - we now have many more things to test and think about:

  • How can we make discovering new themes easier?
  • How can we make installing and customising themes easier?
  • Can we reduce the steps needed to add a custom domain?
  • Is there a correlation between the number of posts a user publishes, and the average length of their subscription?
  • What events lead to an increase in publication frequency?
  • What events correlate with abandonment of the setup process?
  • What other moments are there that we are not yet measuring?

Perhaps the most significant piece of data that came to light throughout this process had nothing to with conversion to a Ghost(Pro). I was interested to see if these “Aha!” moments were purely a good onboarding experience, or if - in fact - they had a longer term effect on how much value people were getting from the software in general.

Blog posts published graph

The data, once again, was fascinating: Users with the default theme published an average of 2 posts per month, while users who had customised Ghost with their own design published an average of 4.4 posts per month. Usage more than doubled.

We don’t know the order of causation at this point. Does having a custom theme make you publish more posts? Or does publishing more posts make you want a custom theme? But we can say with relative certainty that the two are clearly correlated. People who are getting value from Ghost have a custom theme, and people who have a custom theme are getting value from Ghost.

This is important.

By understanding the impact of features on usage, we can filter this data back into the design and production of Ghost itself. We can create a tool which isn’t just satisfactory in its utility - but rather one which generates a real sense of pride and attachment to that which it is used to create. And that’s what we want to do; we want to make a tool which writers love to use.

While cookie-cutter advice about “aha!” moments is interesting - it doesn’t really mean anything until you apply it to your own users. Until you figure out what things are happening, what moments are taking place and which are significant.

Figure that out and - I believe - there’s no limit to the amount you can learn. We still have a long way to go, but we're enjoying the journey immensely.

Update: 13 Apr 2015

We spent 30 minutes on a single change to our onboarding after this which increased revenue by $60,000 a year. Check it out: The 30 Minute Change That Made 25% More People Try Ghost: Telling Them what To Click

]]>
<![CDATA[Public Dev Meeting 21st October]]>https://ghost.org/changelog/public-dev-meeting-21st-octoberGhost__Post__5cf5f94b3a5f1b0038cc706aWed, 22 Oct 2014 09:09:09 GMTpulse

This week we have successfully shipped Ghost 0.5.3, whoop! Please see the release blog post for more details on that.

In the meeting we introduced a minor update to our workflow, where we now have 3 milestones on GitHub, which roughly corrolate to the public roadmap:

  • Current Backlog - which contains ~10 high priority items that are currently being worked towards or are very much wanted for the next release
  • Next Backlog - other lower priority issues which are ready to be worked on and free to pickup
  • Future Backlog - issues which aren't ready to be worked on yet.

We placed 9 items into the Current Backlog for now - we want to keep it around ~10 and as features are completed, we'll add in bugs or amendments. This effectively acts like a monthly sprint with the aim being to release new features and refill the backlog every 4 weeks or so.

There are 2 items in the Current Backlog, #4262 and #4263 which need a champion to work on them. They are both updates to the API needed to ship important features. We'd love to see a new contributor come along and give us a hand with these!

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 28th October, 5:30pm London time.

]]>
<![CDATA[Ghost 0.5.3]]>https://ghost.org/changelog/ghost-0-5-3Ghost__Post__5cf5f94b3a5f1b0038cc7069Tue, 21 Oct 2014 15:03:15 GMT

Ghost 0.5.3 is now available on GitHub, npm and Ghost.org. 0.5.3 is an incremental improvement to Ghost, adding bug fixes and new features, including... Auto Save!

Highlights

[New] Post Auto Save
[New] Structured data (open graph, twitter cards)
[New] GMail-style shortcuts
[Fixed] Themes not working correctly with symlinks
[Fixed] User screen limited to 20 users
[Fixed] Next & prev meta links don't get HTTPS
[Fixed] Numerous UI bugs





You can see the full change log for the full details of every change included in this release.

In Detail

Power users will enjoy our new GMail style shortcuts. See the new shortcut guide on support.ghost.org for full details of all the keyboard shortcuts supported in the Ghost admin.

Configuration changes

The new privacy settings have been updated to add a new useStructuredData flag which enables blog owners to disable the new structured data feature.

Theme API changes

Ghost 0.5.3 includes the following additions and changes to the Theme API:

[New] Themes now work correctly when symlinked
[Changed] {{ghost_head}} outputs structured data for posts

For full details of what has changed and details on how to use the new features, please see the theme change log.

How to Upgrade

All Ghost(Pro) users are being automatically updated and will be running Ghost 0.5.3 shortly. You're welcome :)

For people running Ghost on their own servers, you can download Ghost 0.5.3 and then check out the upgrade documentation over on our support site.

Enjoy!

Credits

This release was lovingly crafted by Paul Adam Davis, Hannah Wolfe, Jason Williams, Matt Enlow, Fabian Becker, John O'Nolan, cobbspur, Gabor Javorszky, Felix Rieseberg, surgesoft, Ian Mitchell, Jilles Soeters, Mattias Cibien, NetPuter, Sebastian Gierlinger and Connor Tumbleson.

]]>
<![CDATA[Public Dev Meeting 14th October]]>https://ghost.org/changelog/public-dev-meeting-14th-octoberGhost__Post__5cf5f94b3a5f1b0038cc7068Tue, 14 Oct 2014 20:11:10 GMTpulse

We've now fixed and merged the majority of the UI issues that have been niggling us since releasing 0.5.2. We have just a couple of issue marked as blockers, and hope to get those resolved in the next couple of days so that we can cut the next release.

There are currently open PRs which add autosave and the majority of the work for adding structured data (open graph, twitter and other meta data) is also done, so we hope to wrap these up and get them into the release.

During the meeting we also discussed pushing forward the new tag management interface, as well as starting to plan adding post revisions. Adding post revisions is largely an exercise in database design, but also I hope we'll be able to simplify the current process for creating new data versions in Ghost (i.e. adding data migrations) by simplifying the importer and exporter.

One last note from the meeting - our tests are experiencing regular but random failures (again) which is really quite frustrating when we're trying to build out new features. Therefore there are major kudos (and potential doughnuts) for whoever submits a fix for #4277 Travis timeouts during integration tests!!!

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 21st October, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 7th October]]>https://ghost.org/changelog/public-dev-meeting-7th-octoberGhost__Post__5cf5f94b3a5f1b0038cc7066Wed, 08 Oct 2014 09:25:47 GMTpulse

It's been a quiet week at Ghost, so it's going to be a very quick meeting writeup.

This week my focus has been on relaunching the developer docs using readme.io. I'll publish a further update about this and what the future for it looks like, but in the meantime you can check them out over on http://docs.ghost.org.

We spent much of the meeting discussing how to approach a couple of issues that aren't 100% clear. There's still quite a lot of churn going on as UI bugs get fixed, one of the biggest of these being that the users page in settings is only listing 20 users as the infinite scroll has broken. Getting these sorts of things fixed is a priority, so we can push out updates to our users.

We also discussed how to request and receive the next and previous post in the chronological post list, via the post API. It's quite a common feature to display a link to the next post at the bottom of the current post, and our API doesn't yet support doing this. There are a number of additions and amendments like this that we want to make to the API as well as getting oAuth fully rolled out so that 3rd party clients are able to authenticate and work with the API.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 14th October, 5:30pm London time.

]]>
<![CDATA[Adding Custom Post Meta Data]]>https://ghost.org/changelog/post-metaGhost__Post__5cf5f94b3a5f1b0038cc712eTue, 07 Oct 2014 08:56:45 GMT

Today we're officially announcing support for custom post meta data! You can now add a custom meta title and description to all your posts and pages within Ghost. This allows for more fine-grained control over your search engine content targeting.

For anyone using the default theme, this will work straight away. If you're using a custom theme, this content will be inserted via the {{meta_title}} and {{meta_description}} helpers.

Custom post meta

Developers can find out more about how to use images and more recently released features in the Theme API Changelog.

Have fun improving your rankings across the board!

Users running Ghost on their own servers can grab this feature by upgrading to Ghost 0.5.2.

]]>
<![CDATA[Public Dev Meeting 30th September]]>https://ghost.org/changelog/public-dev-meeting-30th-septemberGhost__Post__5cf5f94b3a5f1b0038cc7065Wed, 01 Oct 2014 10:06:59 GMTpulse

Ghost 0.5.2 is out! We managed to turn it around in 6 weeks, which for us is pretty speedy, as well as cram in a heap of code base improvements along with the shiny new design and awesome new features. As always, I want to thank all the people who worked hard on making 0.5.2 happen :)

This week's meeting ended up being pretty long, as we reviewed the issues that we're looking to get closed in the near future as well as the long list of open PRs. During the meeting we also reviewed the public roadmap and renamed the columns to try to make it clearer that it reflects the progress of the project as opposed to being a clear plan of what will happen and when. As an open source project depending on contributions from volunteers it makes far more sense to focus on making it clear to developers what is ready to work on, and showing our users what features they're likely to see next.

What's next?

At the moment, there are quite a few open or PR'd UI issues as an (expected) result of the design refresh. Therefore the next time we cut master as a release, it's likely to be mostly full of UI bug fixes.

As well as the features on the roadmap, there are a number of high priority internal issues that need people working on them. In order to ship new features, we need to implement #3910 permissions migrations - specifically so that we can add new permissions for new parts of the API. There are also a number of missing column migrations that are needed in order to properly look at #4134 reviewing max lengths in the database schema.

We have had a couple of recent PRs looking to add new storage methods to Ghost, but the issue
#2852 More Filestorage Abstraction doesn't seem to get much love despite being a prerequisite to making this work. Additionally we have had quite a lot of interest in #827 Proposal: expose Ghost as reusable express middleware, but the discussion on how this should work never quite reaches conclusion - despite us being 90% of the way there. If these issues are interesting to you, come get involved!

I'm also looking to push forward on updating the admin functional tests with #3350 Create functional tests for MU as we've seen a couple of regressions in the UI which could have been prevented with testing. If you're looking to get started with contributing to Ghost, submitting PRs to improve the tests is often a great first step - and a guaranteed merge ;)

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 7th October, 5:30pm London time.

]]>
<![CDATA[New Ghost(Pro) Plans & Pricing]]>https://ghost.org/changelog/new-ghostpro-plansGhost__Post__5cf5f94b3a5f1b0038cc712bTue, 30 Sep 2014 12:05:15 GMT

Today we are announcing a new set of plans and pricing for our Ghost(Pro) service. I'd like to share some details of how and why we're doing this. Tl:dr; We're increasing plan prices and increasing the resources in each plan. It's a better model for us and more value for money for you. Also: No more penalities for traffic spikes.

How We Started Charging

When we launched Ghost(Pro) at the beginning of 2014, we took a giant leap into the unknown. With Ghost (and even Node.js) being so young, creating a hosted infrastructure to support thousands of instances of Ghost was a big challenge. In short: we actually had no idea how many instances of Ghost we could even fit on a server, because no one had ever done it before. This made working out the cost of hosting a Ghost blog relatively difficult.

The second biggest factor in our initial pricing was the fact that when we launched, Ghost was at version 0.3. It was a newborn baby with 3 features and a whole lot of ambition. There simply wasn't that much you could do with it, yet, so the initial value in subscribing to Ghost(Pro) was relatively low.

With those things in mind, we set our prices at a low barrier to entry, and with relatively conservative plan limits while we started benchmarking our infrastructure and working our tails off to build more features into Ghost itself.

What We've Learned Since Then

For a first attempt, we did quite a good job of positioning our pricing as an entry-level product. That being said, we quickly learned a great deal about where we were going wrong and what we could (and should) be doing better.

Lesson 1: We didn't ask for enough on price.

An entry level price point of $5 is a really good rate for a VPS hosting plan. But we're not offering a VPS! Ghost(Pro) is a fully managed service with automated installs, upgrades, backups, performance optimisations, and a content delivery network serving your blog from 27 different data centres around the world. This costs more time and money to run, and it also provides a lot more value in the time and money it saves users.

We're a not-for-profit organisation, so we can't take any venture capital or investment. Ghost(Pro) is what keeps the lights on the for entire Ghost project. While our current pricing has allowed us to create something sustainable, we need more revenue to grow our infrastructure and our team so we can compete with all the (very well funded) closed platforms out there.

Lesson 2: We didn't give enough on value.

The other big thing we learned was which things our users care about most. Initially we set quite high limits on number of blogs per plan, but we found most people didn't use more than 1. We also set quite low limits on views per plan, and we found that people were very nervous about having to try and keep their traffic within plan limits - which is something that's (of course) totally unpredictable.

The value that you get from a Ghost(Pro) blog is when you publish something and it manages to reach a large audience of people. That's what our users care about, and we didn't do a good job of aligning the value of plans with this. You shouldn't be penalised for publishing great content and getting a traffic spike.

What We're Doing Now

For the last few weeks, we've been rolling out new pricing for new customers. Effective today, our old plans will subsequently be discontinued for new users.

Screenshot of new plans

There are three main changes in our new plans:

1. Plan Prices Have Gone Up

Our entry level Ghost(Pro) plan is now $10, and we have new larger plans for users with a consistently high level of traffic. Increasing our minimum service level allows us to run a much more healthy business, and continue to hire great developers to work on Ghost and make it better for the entire world.

The Ghost software itself remains (and always will be) completely free of charge.

2. View Allocations Have Gone Up

We've more than doubled the view allowance in every plan. This means that relative to usage, prices have effectively gone down. Many customers will be able to downgrade plans and receive the same number of views. Bandwidth, storage, and all other things you would pay for on a traditional host remain unlimited.

3. No Suspensions When You Exceed Plan Limits

Previously if you went over your view count in a month, you would be asked to upgrade your plan or your blog would be suspended. Effective today, we are completely stopping this process. All Ghost(Pro) users will now be allowed to exceed plan view limits by any amount without penalty. If you hit the front page of Hacker News, your blog will stay online and we'll keep on serving it to all your readers.

If we notice that you've exceeded your plan limits for 3 consecutive months, we will send you an email to ask you to move to a higher plan. In short: All customers will now pay for usage based on their average traffic, and never be forced into a higher plan because they had a traffic spike in one particular month.

Q&A

How are existing users affected?

No changes. We will honour existing plans for all of our early users who made starting Ghost(Pro) possible. If you want to change over to our new plans, you'll actually get a lower price based on usage. Many users can now also downgrade to a cheaper plan with the same number of views, if they choose. But we'll leave that decision up to you.

If you do want to make the switch, just head over to your acount billing area.

Why these numbers?

We spent a long time crunching digits and analysing every possible similar service which people pay for. We sent out a survey to thousands of our existing users to ask the how they felt about our prices. The general consensus was that we were underpricing, and we could offer more value per plan.

Who can I talk to about this to learn more?

As always, you can reach us any time (day or night) on support@ghost.org. We'd love to hear your feedback, and help you with anything you might need.

It's been an incredible journey so far creating a service which people genuinely love, and we're only at the very beginning. We are proving a brand new, sustainable, open source business model to the world, and it's you – our users – who are making it possible.

]]>
<![CDATA[Post Cover Images]]>https://ghost.org/changelog/post-cover-imagesGhost__Post__5cf5f94b3a5f1b0038cc712dMon, 29 Sep 2014 13:52:46 GMT

Starting today, you can now add cover images to all of your posts. Open your post settings menu, drag and drop an image in, and you're all set!

For anyone who is using the default theme, this will work right away. If you're using a custom theme, you can output post cover images inside post.hbs using the new {{image}} helper. Easy :)

Cover image screencast

Developers can find out more about how to use images and more recently released features in the Theme API Changelog.

We're looking forward to seeing even more beautiful posts!

Users running Ghost on their own servers can grab this feature by upgrading to Ghost 0.5.2.

]]>
<![CDATA[Ghost 0.5.2]]>https://ghost.org/changelog/ghost-0-5-2Ghost__Post__5cf5f94b3a5f1b0038cc7064Thu, 25 Sep 2014 15:04:45 GMT

Ghost 0.5.2 contains several new features as well as a refresh of the admin design, important bug fixes, updates to the theme API, JSON API and importantly breaking changes to the way Ghost is started if you use it as an npm module.

Highlights

[New] Admin design refresh
[New] About Ghost page
[New] Post settings menu
[New] Meta data screen in post settings menu
[New] Post cover image option in post settings menu
[New] Privacy config flags
[New] Direct mail sends mail without config
[Improved] Error handling when starting Ghost
[Fixed] Request entity too large error
[Fixed] 'Post NOT saved' dialog keeps appearing on Safari
[Fixed] Author dropdown only shows 15 authors
[Fixed] Switching between blog and admin can cause blog to lose styling
[Fixed] UpdateCheck can prevent login
[Fixed] Login conflicts with multiple Ghost installs












Breaking Changes

[Changed] Ghost no longer starts automatically when used as an npm module
[Changed] Keyboard shortcut for headings is now Ctrl/⌘ + H

In Detail

Configuration changes

Ghost now supports direct mail. This means you no longer have to specify mail config for Ghost to be able to send emails. Direct mail is not as reliable as a 3rd party mail service, and emails may end up in spam, but you at least have a chance at getting the forgotten password email ;)

Additionally, we've improved the from address configuration. mail.fromaddress has been deprecated in favour of mail.from and now accepts either just an email address or a from address in the form: Custom name <mail@my-blog.com>. The default if left unset is Blog title <ghost@blog-url>, for more information see the mail guide on support.ghost.org.

Along with our new PRIVACY.md file, we've also added a new set of privacy config options to allow you to disable any of the features listed. In line with this, the updateCheck option has been deprecated in favour of privacy.useUpdateCheck. You can see all the new config options in the configuration guide on support.ghost.org.

For those of you keeping an eye on our JSON Data API, there's a shiny new configuration API endpoint which has been added to provide access to some of the configuration options. This was used to build the new about Ghost page which appears in settings.

Theme API changes

Ghost 0.5.2 includes the following additions and changes to the Theme API:

[New] {{is}} helper
[New] Custom tag templates
[New] {{image}} for posts
[Changed] {{body_classes}} outputs different classes
[Changed] {{ghost_head}} outputs pre & next links
[Changed] Meta title & description helpers




For full details of what has changed and details on how to use the new features, please see the theme change log.

Using Ghost as an npm module

If you've been using Ghost as an npm module, you'll need to update your custom code which requires ghost after upgrading to 0.5.2. You'll find instructions on how to this on the wiki page. Please also note that as we have switched our promise library from when to bluebird that you'll need to use catch for handling rejections rather than otherwise.

You can see the full change log for the full details of every change included in this release.

How to Upgrade

All Ghost(Pro) users are being automatically updated and will be running Ghost 0.5.2 shortly. You're welcome :)

For people running Ghost on their own servers, you can download Ghost 0.5.2 and then check out the upgrade documentation over on our support site.

Enjoy!

Credits

This release was lovingly crafted by John O'Nolan, Paul Adam Davis, Fabian Becker, Hannah Wolfe, Jason Williams, Felix Rieseberg, Matt Enlow, Harry Wolff, Gabor Javorszky, Robert Jackson, Jilles Soeters, Nicola Mustone, Maurice Williams, David Blurton, Sebastian Gierlinger, Thai Phan, cobbspur, Andrej Mlinarević, hiroshi kobayashi, Ashish Dixit, Chris Pearce, Jake Wright, Jamie Knight, Jay Beavers, Josh Vanderwillik, Julien Gilli, Kirill Yakovenko, Mattias Cibien, Mo Valipour, Pedro Teixeira, Robert Rhoades and Sarah.

]]>
<![CDATA[Public Dev Meeting 23rd September]]>https://ghost.org/changelog/public-dev-meeting-23rd-septemberGhost__Post__5cf5f94b3a5f1b0038cc7063Wed, 24 Sep 2014 10:36:48 GMTpulse

As of the meeting, we had all the intended features on the roadmap for this release sat ready and waiting to go. There are 7 major features in this release, which is a lot more than we expected to be packing for 0.5.2. All that's left now is to clean up the remaining bugs and blocker issues and we can push this out to the world.

Over the past few weeks, we've made a lot of progress not just on features, but also on cleaning up our backlog of issues on GitHub - even with the ongoing release-bug-finding madness, our issue count sits in the 160s, whereas two months ago that was well over 300. That's not just because we've been closing invalid issues, but because we've struck a great balance between working on issues from the backlog and developing new features. We're building new things and improving the code base and it's all very exciting.

The last week has seen a lot of outstanding UI bugs closed, as well as many more found and raised. We've also crammed in some refactoring and cleanup work to try to make the server side clearer and easier to work with as well as improve the Ghost start up sequence with much better error handling. We hope this will reduce some common difficulties with installing and upgrading by making them much easier to solve.

When do we release?

We're getting asked a lot of questions around when the code base is considered ready for release, when a release is done, and how to know it has been done or find the code in advance.

The first step in being ready for a release is that all the code we want in the release is merged into the codebase. The public roadmap lists the status of all the user-facing features that are intended to be in the release. Any issue or pull request that needs to be fixed or merged before the release is marked with the blocker label on GitHub.

As soon as everything is merged, you'll see a Release Candidate appear on the GitHub releases page. These are orange 'pre-releases', and are essentially the release minus any serious bugs that get found. The RC is created for testing purposes, it gives everyone a stable point to work from to check everything is a-ok.

Once we're happy that the RC is ok, or if there are bugs once they are resolved, the release will then happen at the next opportunity. At the moment, the process is pretty manual, long winded and done by me so it's always started in the morning UK time, this will change in future as we work on automating the release process.

If you're looking to see if the release has happened yet, the first place the release will appear will be on the GitHub releases page, followed by npm, the stable branch and Ghost.org. Meanwhile, Ghost(Pro) blogs are upgraded in the background.

After 0.5.2

With 0.5.2 nearly ready for release, it's time to start looking at what will make it into the next feature release. The roadmap is fully loaded, continuing the split focus between improving the admin panel to provide more features like auto save and the filter menu and adding enhancements to the theme API such as adding open graph tags and other structured data by default.

If there's a feature you'd like to help us build, come visit us in IRC and we'll give you a hand getting started!

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 30th September, 5:30pm London time.

]]>
<![CDATA[David Wolfe is a Ghost]]>https://ghost.org/changelog/david-wolfe-is-a-ghostGhost__Post__5cf5f94b3a5f1b0038cc712cWed, 17 Sep 2014 12:24:40 GMT

Another new member of the team, this month we're proud to welcome David Wolfe our latest addition. Many of you will already know him from the Ghost Forums; being Hannah's husband means he's been helping us in more ways than one since the very beginning.

Coming from a career as a department-head in the British NHS, David is returning to his more geeky roots full time and help us hack away on building Ghost. He's going to be heading up our VIP support and migration assistance for high-profile customers and blogs who are converting to Ghost.

Our third Ghost Foundation team member from the UK and our sixth in total. Onwards!

David Wolfe

Find David on Github and of course, all over the Ghost Forums.

]]>
<![CDATA[Public Dev Meeting 16th September]]>https://ghost.org/changelog/public-dev-meeting-16th-septemberGhost__Post__5cf5f94b3a5f1b0038cc7062Tue, 16 Sep 2014 17:34:08 GMTpulse

This week we've done a lot of work towards clearing up the user interface ready to do the next release. All the issues we absolutely need to resolve before we can release are now tagged with the next label. At the time of writing that's just 5 issues consisting of 3 bugs and 2 issues to do with the UI: #4047, #4031, #4016, #3810, #1961.

Ghost 0.5.2 is coming!

We have already fixed a number of important issues (like the post not saved and request entity too large bugs), and have new stuff ready to ship, so we're aiming to do a release early next week. Ghost 0.5.2 is set to include the design refresh, the about page, direct email (email without configuration), redesigned post settings menu which also adds support for post cover images and the {{#is}} helper.

Community Guidelines

A couple of weeks ago we finally published our community guidelines on Ghost.org. These guidelines are a statement of intent for how we want our community culture to grow and flourish - be that in IRC, on the forum, on GitHub and also in places like blog comments, our facebook page, and so on and so forth. These guidelines and all our public policies exist in our Policy repository.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 23rd September, 5:30pm London time.

]]>
<![CDATA[GIT Hack: Prevent pushing to master]]>https://ghost.org/changelog/prevent-master-pushGhost__Post__5cf5f94b3a5f1b0038cc705fWed, 10 Sep 2014 10:18:00 GMT

Git has this great feature whereby you can execute arbitrary scripts whenever something happens on your git repository. A common use case for this is a pre-receive hook on the remote repository which prevents people with access from doing destructive actions, like force pushing, which are incredibly easy to do by accident.

Many projects use GitHub as their remote repository, and as GitHub is a service, they do not permit you to upload arbitrary scripts to run on their servers. Makes sense, but how then can you protect your codebase?

Turns out, from version 1.8.2, Git has a new pre-push hook that lets you do the same thing on your local repository. It's not as handy as setting it up on the remote for all your users, but it does allow you the developer to protect yourself from... yourself.

Setup the hook

For any repository you want to protect, you need to create a new file called pre-push in the .git/hooks directory and make sure the file has permission to be executed. Inside the file, you'll add the script you want to run, here's the one I use:

#!/bin/bash

protected_branch='master'
current_branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')

if [ $protected_branch = $current_branch ]
then
    read -p "You're about to push master, is that what you intended? [y|n] " -n 1 -r < /dev/tty
    echo
    if echo $REPLY | grep -E '^[Yy]$' > /dev/null
    then
        exit 0 # push will execute
    fi
    exit 1 # push will not execute
else
    exit 0 # push will execute
fi

This checks if the current branch is master, and if so it will prompt you to confirm what you're doing. It doesn't detect whether you're doing a normal push, or a force push, as I prefer to have the confirmation on any push to master. This script is borrowed heavily from scripts by pixelhandler and Itty Bitty Labs. For anyone wondering, the weird use of grep is so that this works on Windows as well as *nix systems.

Once you've added this script to your .git/hooks/pre-push file, any push command which operates on the master branch will require confirmation. Simple, but very effective.

Note: If the confirmation doesn't appear for you, please check that you have a git version higher than 1.8.2 (run git --version on the command line) and also check that the pre-push file is executable (run chmod +x pre-push on the command line) and try again :)

]]>
<![CDATA[Public Dev Meeting 9th September]]>https://ghost.org/changelog/public-dev-meeting-9th-septemberGhost__Post__5cf5f94b3a5f1b0038cc7061Tue, 09 Sep 2014 18:10:30 GMTpulse

We kept this week's meeting super-short, due to a timing clash with a certain event in Cupertino where more interesting announcements were being made ;)

The introduction of the Core Team last week has had a real positive impact on the project as we're no longer dependent on me for progress. This means I don't have to spend quite so much time on GitHub and have a little more time to focus on bigger picture things like Ghost's memory usage, and long term planning.

This week however, I am on a mission to reduce the PR list back down to as few open items as possible. I'm also working on getting a better understanding of Ghost's memory usage, and seeing if we can put together some tooling so that we have memory usage information as part of our build.

Toward 0.5.2

We've now got open PRs for all the user interface issues which prevent us from doing a release. Once those are merged, there will be some minor items to clean up, but nothing release blocking.

In addition, there are a number of feature PRs that have been merged, or which will hopefully get merged this week, and a few more which should be relatively quick to cross off. This means that we will be able to do a release next week, although we may hold it an extra week to cram in some extra awesome.

An update on Apps

Since we shifted our focus to the API, Ember, and then Multi-User, the Apps project has had almost no movement. Over the next couple of weeks, the open issues for the App project are going to get a review and an overhaul, to make them more independent and easier to pick up. We'll then continue to work on apps behind a config flag, until we're confident we have a usable toolkit.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 16th September, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 2nd September]]>https://ghost.org/changelog/public-dev-meeting-2nd-septemberGhost__Post__5cf5f94b3a5f1b0038cc7060Tue, 02 Sep 2014 21:22:39 GMTpulse

Much of the progress this week has been around the merge of the Ghost-UI repo back into Ghost. The merge has been completed, along with the history, and transfer of all open issues. There has also been more refactoring work completed, and we've unstuck ourselves from being able to update our dependency on downsize, meaning that we can make progress on more advanced excerpts.

Core Team

In this week's meeting we have announced that we are kicking off our new Core Team with two people: Matt Enlow (@novaugust) and Jason Williams (@jaswilli). A big thank you to them for agreeing to take on these roles. Our hope is that this will allow us to ship a lot more awesome stuff, much quicker.

In addition @pauladamdavis will also be getting commit rights on the Ghost repository, so that he can continue his work on the UI now that it is all in one repo.

New Workflow

Since releasing 0.5, we've made a lot of changes to our workflow so that we can avoid doing such large releases, and instead release little and often. This switch towards a more agile workflow has included a number of changes, some of which require a little more explanation.

The Roadmap

We have a new public roadmap in Trello, which is much easier to keep up-to-date. As issues progress they move from left to right, starting off in the 'backlog column' - which is a big unsorted todo list and eventually landing in the right most 'recently released' column. They also have coloured labels to indicate their status. You can find out more by visiting the roadmap.

The roadmap only lists new features, and is intended to be user-facing. Bugs and technical improvements remain only on GitHub. Once a feature hits one of the middle two columns, it will have a spec and a related issue in GitHub which is marked with the feature tag.

GitHub Milestones

Related to the roadmap, there are then two milestones in GitHub. The current, or 0.5.x Backlog which contains all the isues that are ready to be worked on (includes any features from the middle two columns of the roadmap) and the Future backlog, which much like the backlog on the roadmap, contains things which we know about but which we aren't ready to do just yet.

Releases and Versioning

The aim is to keep doing rolling releases, every time we feel like we've completed a couple of features that warrant shipping. The hope is to release every 2-4 weeks, bumping the minor version number (so 0.5.2, 0.5.3, etc). Some larger features, like Apps, or a new Editor would be worked on behind a config flag until they are ready. Turning off the config flag for a large feature is the kind of thing we might do a major version bump for (i.e 0.6).

The overall aim is to be more flexible about what is available to be worked on rather than sticking to projects and hopefully ship features to our users much faster as a result.

Towards 0.5.2

In order to get ready to do another release, we need to get the admin UI back up to scratch. This means getting the sub items from #3810 polished off and at least the first part of the new post settings menu. Progress on these had been hindered by the Ghost/Ghost-UI split and merger, but are ready to be worked on now

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 9th September, 5:30pm London time.

]]>
<![CDATA[Ghost 0.5.1]]>https://ghost.org/changelog/ghost-0-5-1Ghost__Post__5cf5f94b3a5f1b0038cc705eThu, 28 Aug 2014 13:45:14 GMT

Ghost 0.5 was a landmark release, with large parts of the software almost entirely re-written. Inevitably with such a large release, we left a few bugs in. Ghost 0.5.1 contains fixes for those bugs that interfered with your ability to use Ghost's features.

Here's what's new:

  • [Fixed] Casper not working in IE
  • [Fixed] Cannot delete users on MySQL
  • [Fixed] Lost work if logged out while editing
  • [Fixed] Possible to downgrade Owner user
  • [Fixed] If author changes post author they lose access to post
  • [Fixed] Weird status code when authorising
  • [Fixed] Errors when uppercase used in /ghost/ URL
  • [Fixed] UUID validation error when importing
  • [Fixed] No notification for errors when sending mail

You can see the full changelog for more details.

How to Upgrade

All Ghost(Pro) users have been automatically updated and are already running Ghost 0.5.1. You're welcome :)

For people running Ghost on their own servers, you can download Ghost 0.5.1 and then check out the upgrade documentation over on our support site.

Enjoy!

Credits

This release was lovingly crafted by Hannah Wolfe, Felix Rieseberg, Jason Williams, Matt Enlow and Sebastian Gierlinger

]]>
<![CDATA[Public Dev Meeting 26th August]]>https://ghost.org/changelog/public-dev-meeting-26th-augustGhost__Post__5cf5f94b3a5f1b0038cc705dWed, 27 Aug 2014 10:22:13 GMTpulse

We've had a couple of interesting developments in the codebase this week. Firstly, @jaswilli did an epic PR to switch our promise library from when to Bluebird, which we hope will bring improvements to both performance, and reliability. Secondly, @JoshWillik has refactored the Ghost startup, such that requiring Ghost no longer results in the express server starting. This moves us much closer to being useful as a package to include in other software and to exposing Ghost as express middleware.

0.5.1 Maintenance release

Out on the next branch, all the critical bugs have been fixed, ready to ship as 0.5.1. This morning (since the meeting) the 0.5.1 release has been cut and pushed to GitHub, npm and the stable branch.

Triaging the backlog

Over the past couple of weeks, there's been an effort to triage and close as many old issues as possible and cleanup our backlog. Moving forward we want to be leaner and cleaner with what issues are open. Issues which are bugs and features or technical improvements we actively want to work on will live in the 0.5.x backlog. Bugs should be a priority, if they are true bugs we don't want them hanging around for longer than 1 release if possible.

Any longer term issues which are not actively ready to work on will live in the future backlog, this list will stay minimal and mostly be old issues with lots of history. Feature requests that aren't likely to be worked on in the near future will be closed in favour of a card on the public roadmap. The aim is to make it much, much clearer what issues are ready to be worked on and make the backlog much easier to digest and become familiar with.

Core Team

We've been talking for a while now about having a concept of a 'Core Team': a group of contributors who lead development and help us to regularly ship high quality code. I have published an overview of the Core Team on the wiki which covers what it means and what makes someone likely to be considered for the role. In next week's meeting we'll announce who the first members will be.

End of Ghost-UI

Back in March we moved all of Ghost's SASS over to the Ghost-UI repository so that we no longer had a ruby dependency in the main Ghost repo. We hoped to turn the code into a Bootstrap-esque framework with reusable generic components.

Unfortunately this hasn't worked out. Managing issues across the two repositories is an administrative nightmare, and the switch to Ember means there's not really a good way to build components in a separate repo. This week we'll be switching Ghost-UI to use libsass to remove the ruby dependeny, and then move the SASS back to the Ghost repo.

Towards 0.5.2

In order to ship another feature release, we need to clean up after the GUI 2.0 design refresh (see
#3810), which in turn depends on us moving Ghost-UI back to the Ghost repo. Once this is done we hope to bash out a couple of the features which are made possible by the new Post Settings Menu design. We'll release 0.5.2 as soon as the bugs are fixed and we have a couple of worthy features ready to go.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 2nd September, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 19th August]]>https://ghost.org/changelog/public-dev-meeting-19th-augustGhost__Post__5cf5f94b3a5f1b0038cc705cWed, 20 Aug 2014 07:17:53 GMTpulse

Following such a large release, we've had a somewhat quieter week mostly focused on cleaning up old GitHub issues and fixing bugs. There have been ~5 major issues reported with 0.5 which are either fixed or being fixed, and the next branch will be released as 0.5.1 with just these fixes in a week or so.

Meanwhile, master has had a makeover, with the new 'GUI2' design refresh being merged in this week. The refreshed design focuses mostly around navigation and settings, giving us more freedom to build out future features. There are still some Ember bits and pieces which need wiring up for the new design, these are detailed in #3810.

Ghost Design Refresh

Priorities for Ghost development are now:

  1. Fix the remaining 0.5 bugs marked next ready for a maintenance release
  2. Resolve issues with the new design so that we are ready to do a feature release again
  3. Get new features that are on the roadmap ready to ship
  4. Resolve as many of the bugs in the 0.5.x backlog as possible

With the new release cycle, development will continue this way. With the public roadmap determining which features will ship next, and the current backlog being kept full of other issues that we want to make progress with. Each month, we'll release a new version, perhaps with some in-progress features disabled by default. When major features land or feature sets are completed this will result in a minor version bump (i.e. to 0.6), but otherwise we'll keep incrementing 0.5 as and when we feel we have something worth releasing :)

Note on the npm package

Due to an inconsistency between grunt and npm's handling of file globbing, the original 0.5 npm package was missing the HTML email templates. Therefore the npm package is currently at 0.5.1-1, slightly ahead of everything else.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 26th August, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 12th August]]>https://ghost.org/changelog/public-dev-meeting-12th-augustGhost__Post__5cf5f94b3a5f1b0038cc705aWed, 13 Aug 2014 10:11:21 GMTpulse

After 5 months of hard work, resulting in 616 commits, we have successfully shipped Ghost 0.5 to a very excited and happy user base. When I say we in this context, I am referring to the 60+ wonderful people who contributed to Ghost since 0.4.2:

Jason Williams, Sebastian Gierlinger, Matt Enlow, Fabian Becker, Paul Adam Davis, David Arvelo, Jacob Gable, Maurice Williams, Harry Wolff, Andy Boutte, David Balderston, Robert Jackson, Felix Rieseberg, John O'Nolan, Gabor Javorszky, Steve Layton, Manuel Mitasch, Peter Szel, Lucas Holmquist, Ian Mitchell, Kevin Ansfield, Connor Tumbleson, Alan Richards, jomahoney, lennerd, Jason Sturges, Taras Mankovski, Martijn Swaagman, Marco Otte-Witte, Josh Kalderimis, Aia Patag, surgesoft, Andrew Schwartzmeyer, Brian White, David Blurton, Dmitry Mazuro, Erik Bryn, Glen E. Ivey, Hendrik Schaeidt, Jake Wright, Jarrett Cruger, Jarrod Mosen, Jesse Tane, Joel Fischer, Jordan Sexton, Justin Yek, Lev Gimelfarb, Luke Shiels, Nicola Mustone, Paul Connolley, Renyu Liu, Szél Péter, Tim Griesser, Waleed Ali, William Dibbern, Zach Schneider, cobbspur, fabfou, joeldrapper and sessa.

Each one of you is amazing, thank you! I cannot say this enough :)

What's next?

With a release as large and all-encompassing as 0.5, it was inevitable that we would need to do a maintenance release soon after. 0.5.1 will be released likely on 25th Aug, and contain a just a small set of bug fixes and minor tweaks to the functionality in 0.5.

In the meantime we're going to get to work on new features and functionality to ship in 0.5.2 sometime around 8th Sep. We'll continue working as we always do, with all the latest and greatest stuff going into the master branch. Any bug fixes which should go out in 0.5.1 will be cherry-picked by me out onto the next branch, from which the maintenance release will be cut.

With the new faster release process, we'll be working from the 0.5.x backlog, with a focus on the features outlined in the new public roadmap. The aim being to get at least 2 (but likely more) new features ready to ship as 0.5.2 in September alongside the general bug fixing and improvement work.

Earmarked for delivery in 0.5.2 are: a refresh of Ghost-Ui, about Ghost page, code injection, sitemaps and possibly more!

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 19th August, 5:30pm London time.

]]>
<![CDATA[Ghost 0.5 - MSR1]]>https://ghost.org/changelog/ghost-0-5Ghost__Post__5cf5f94b3a5f1b0038cc712aMon, 11 Aug 2014 08:52:38 GMT

Today we are releasing Ghost 0.5 - a massive technical progression and an exciting step forward for the Ghost blogging platform.

Team

This release represents a total of 616 commits across 471 issues from 61 incredible contributors all over the world.

CodeName: MSR1 - this is the second release named for one of our 3 Kickstarter backers who pledged £1,000 to making Ghost a reality last year. A big thank you goes out to the MSR Group for their support on this release.

What's in The Box

By far the biggest release we've ever done, Ghost 0.5 is absolutely packed with new things. Here are the highlights:

Multi-User Support

User Management Screen

This post, you may have noticed, is the first on the Ghost.org blog which is not written by John. Our flagship feature for this release is that Ghost now has support for multiple Authors, Editors and Administrators. Company, community and collaborative blogs are now all possible.

Public JSON API

Ghost is the first and only Open Source publishing platform to build a public JSON API. We're incredibly excited about the immense possibilities which this opens up for the future.

What does that mean, exactly? Just like Twitter and Pinterest have an API which developers can build apps on top of, Ghost has this power as well. This means that iOS, Android, Desktop and even Web Apps can now all be built on top of any Ghost blog.

Because Ghost is a self-consuming JSON API, every single feature which is in Ghost is available to 3rd party developers. Not just a subset; Everything.

In the very near future we'll be opening up authentication for the API via OAuth, In the meantime we'll be publishing documentation so that developers can start to get to grips with what's available.

Completely New Ember.js Admin

The Ghost admin area may look generally the same, but under the hood it is a brand new beast. In February of this year we made the decision to convert the Ghost web app (the admin app which consumes the JSON API) to use Ember.js.

What does that mean? Ghost is now a fully-featured client-side JavaScript application. Everything you do in the browser happens in real time. We're now able to start building user-interface components which look and feel like what you might expect from a desktop (or mobile) operating system.

A Bedrock for The Future

User Profile Page

These 3 flagship features cement the future of Ghost. We've spent a long time laying the foundations for a solid, stable application which can grow and scale effectively. Multi-user support has opened up an enormous amount of new use-cases for Ghost as a piece of software. The JSON API has infinitely expanded the possibilities for Ghost as a development platform. The Ember.js Admin is going to allow us to ship new features and functionality fast. Really fast.

A Whole 2nd Box of Things

As well as those three giants, there's practically a whole second box full of improvements and features which we're shipping today:

Casper Theme

  • Casper 1.0 - Our default theme has had massive update with beautiful new user profile pages, full-bleed homepage cover images, restructured navigation, improved mobile styles, and a massive improvement to typography contributed by Jake Giltsoff from Typekit.
  • Privacy.md - Ghost is leading the way with a new Open Source initiative called Privacy.md. We now ship a text file with a plain English description of every feature within the software which might affect user Privacy.
  • New Install Screen - A refined UI when installing a new Ghost blog.
  • OAuth Support - for extensible, secure authentication with less hassle.
  • Theme API improvements - New helpers, functionality, and tools for theme developers. More here.
  • Auto-GZip - Theme assets are now automatically GZipped in production environments. This makes your blog load faster.
  • Improved Keyboard Shortcuts - New navigational shortcuts and international (non-English) keyboard support.
  • Mobile Improvements - Better support on touch based devices.
  • HTML Emails - All system emails now sent in a beautiful HTML email template (with plaintext fallback).
  • Hundreds of bugfixes and minor improvements
  • Much, much more

New Install Screen

How to Upgrade

Gotcha! Ghost(Pro) subscribers have already been upgraded to 0.5. Enjoy it, and thank you so much for your support!

For people running Ghost on their own servers, you will need to download Ghost 0.5 and then check out the upgrade documentation. If you're using the default Casper theme without modifications, be sure to drop in a fresh copy of that - too!

A New Release Cycle

After a lot of consideration, we believe we've made significant error in how we do our releases. Until now we've blindly followed how other Open Source projects do software releases: 2-3 releases a year with fixed milestones and feature-sets. Each time a release comes around, it's a big event and everyone has to upgrade (like right now).

If you look at it objectively: this model is good for precisely nobody. Developers have to wait 3-6 months to see how users respond to their work, and then iterate on it another 3-6 months after that. For users who have to upgrade, the release cycle is always either too long or too short. Both are understandably frustrating.

All of this is also a pretty archaic way of working, for web based software development in 2014.

So we're going to change it up.

Ghost is about experimenting and doing things differently. It's about building the best possible product for writers and publishers. To do that, we need to build fast, ship fast, and learn fast.

Starting today, we're moving to a more agile release process. Every 2-4 weeks we're going to ship new features, improvements and bug-fixes to Ghost. There won't be any more big-bang events like this one. There will be smaller, more frequent announcements that we've released new features, fixes and improvements.

These releases will be rolled out automatically to all Ghost(Pro) users as and when they happen. No input required. We'll let you know when there's cool new stuff on your blog - and you concentrate on using it. Then, 2-4 weeks later we'll ship the next round of improvements based on your feedback.

For self hosted users, you can update any time you like. We'll also push update notifications 4x a year, or whenever there is a critical security update.

Want to know what's coming up next? Check out our new feature roadmap and follow along with progress as it happens.

Credits

This release was lovingly crafted by...

Hannah Wolfe, Jason Williams, Sebastian Gierlinger, Matt Enlow, Fabian Becker, Paul Adam Davis, David Arvelo, Jacob Gable, Maurice Williams, Harry Wolff, Andy Boutte, David Balderston, Robert Jackson, Felix Rieseberg, John O'Nolan, Gabor Javorszky, Steve Layton, Manuel Mitasch, Peter Szel, Lucas Holmquist, Ian Mitchell, Kevin Ansfield, Connor Tumbleson, Alan Richards, jomahoney, lennerd, Jason Sturges, Taras Mankovski, Martijn Swaagman, Marco Otte-Witte, Josh Kalderimis, Aia Patag, surgesoft, Andrew Schwartzmeyer, Brian White, David Blurton, Dmitry Mazuro, Erik Bryn, Glen E. Ivey, Hendrik Schaeidt, Jake Wright, Jarrett Cruger, Jarrod Mosen, Jesse Tane, Joel Fischer, Jordan Sexton, Justin Yek, Lev Gimelfarb, Luke Shiels, Nicola Mustone, Paul Connolley, Renyu Liu, Szél Péter, Tim Griesser, Waleed Ali, William Dibbern, Zach Schneider, cobbspur, fabfou, joeldrapper and sessa.

Thank you all!

Ghost 0.5 is available right now on Ghost.org. Ghost(Pro) subscribers have already been upgraded and can simply log in to check out the new features.

]]>
<![CDATA[Make Your Theme Multi-User Ready]]>https://ghost.org/changelog/themes-multi-user-readyGhost__Post__5cf5f94b3a5f1b0038cc705bWed, 06 Aug 2014 10:47:03 GMT

We're into the final stages of preparing for releasing Ghost 0.5. The second Release Candidate has been published, and we've announced our plan to release on Monday 11th August. Unlike the last major release, this time I wanted to give theme developers a heads-up on what's changing in advance.

Ghost 0.5 has largely been a refactoring project, finished off with the implementation of Multi-User. Although there haven't been many general improvements to the theme API, the additon of multiple user support to Ghost provides some new toys for theme developers to play with.

What is Multi-User?

Until now, Ghost has been a single-user blog. That meant that all the posts were always written by the same person - the blog owner. All that is about to change.

From 0.5, it will be possible to invite people to join your blog, so posts can have different authors. From a theming perspective, this has two main effects: first, a post's author has more significance if the blog is multi-user and second, the difference between blog settings such as the title, cover image and logo are now clearly different to a user's cover image and logo.

What's new?

Author Pages

Similar to the tag pages feature that was released in 0.4.2, Ghost 0.5 supports author pages. An author page contains a paginated list of posts for a specific author, and can be accessed by visiting the url: /author/author-slug/. Authors also have an RSS feed for their posts.

Author pages will be rendered by either the new author.hbs template, or default to index.hbs if author.hbs is not present. Similarly to tag pages, author pages have access to an author object as well as a posts object.

As usual, the {{url}} helper will generate a correct url for an author page, when in an author context:

{{#author}}
<a href="{{url}}">{{name}}</a>
{{/author}}

The {{author}} helper will now output this <a> tag structure, as opposed to just the author's name as it did in 0.4.2.

Note: there is a difference between the {{author}} helper, and the {{#author}}{{/author}} context block. You can see an example of these features in use in the updated Casper theme

The {{plural}} helper

The only non-multi-user specific new feature for themes in 0.5, the {{plural}} helper has been aded to make formatting meta information about posts, tags etc a little nicer.

{{plural pagination.total empty='No posts' singular='% post' plural='% posts'}}

The plural helper takes a number and three strings to output depending on whether the number is zero, singular or plural. The most common usecase for this is outputting information about how many posts there are in total in a collection. For example, themes have access to pagination.total on the homepage, a tag page or an author page.

New home.hbs and author.hbs templates

Author pages will be rendered with the new author.hbs if one is available, or alternatively fall back to index.hbs.

Similarly, there's a new template you can use to do something different with your homepage. If present, home.hbs will be used to render only the very first page of a blog. If it is not present index.hbs will be used, and index.hbs is still used for the second, and third etc pages of the blog.

Updates to the {{#has}} helper

The final new thing for 0.5, the {{#has}} helper has been updated to support an author attribute. This means you can check if a post is authored by a particular user:

{{#post}}
    {{#has author="Joe Bloggs"}}
        ...do something if the author is Joe Bloggs
    {{else}}
        ...do something if the author is not Joe bloggs
    {{/has}}
{{/post}}

See the 0.4.2 post or the documentation for more details of the {{#has}} helper.

Potentially breaking changes

{{author}} now outputs HTML

As explained above, prior to 0.5 the {{author}} helper would output the author's name in string form. In 0.5 this has been updated to output a link to the author page, the equivalent of doing:

{{#author}}
<a href="{{url}}">{{name}}</a>
{{/author}}

If you do not want the author tag to output a link you can use {{author autolink="false"}}.

{{author.email}} no longer accessible

It was felt that the author's email address being publicly available was a privacy violation. Rather than adding an option to enable or disable this, it has been removed. {{author.email}} will now output an empty a string.

Get ready for Multi-User

We recommend that all themes make the following three amends:

  1. Add a new author.hbs template for awesome author pages
  2. Ensure that your post output features the {{author}} tag so that readers can easily navigate to these pages
  3. Take this opportunity to check your theme is up-to-date with features from 0.4.0 and 0.4.2 as we are transitioning to a much faster release cycle, and deprecated features will be removed soon.

Although the changes required to support Multi-User are small and quick, Casper has had a significant upgrade for 0.5 to make authors more prominent in the design. We hope that many of you will also take this opportunity to upgrade your themes to help make Multi-User an awesome new feature for Ghost bloggers.

]]>
<![CDATA[Public Dev Meeting 5th August]]>https://ghost.org/changelog/public-dev-meeting-5th-augustGhost__Post__5cf5f94b3a5f1b0038cc7059Tue, 05 Aug 2014 21:03:30 GMTpulse

There has been significant progress towards releasing 0.5 since last week's meeting. All the remaining open issues for the Multi-User project were closed, the first Release Candidate was cut, and ~50 bugs were raised against it. Those bugs have all been triaged and assigned to either be closed before this release or punted to a later release. Already ~40 bugs have been fixed, we're back down to just a handful of bugs, and RC2 is expected to be cut shortly*.

From here, we'll run through testing again with RC2, find and fix any further bugs and hopefully deliver a final Release Candidate on Friday.

The official public release of Ghost 0.5 is scheduled to happen on Monday 11th August.

IT'S LESS THAN A WEEK AWAY FOLKS!

Between now and the release, we're hoping for lots more testing, particularly around the upgrade process. Test-only PRs are very, very welcome, as there's quite a lot of low coverage throughout the app. Additionally, we'd love suggestions on how to improve the upgrade and install documentation to make Monday's release as smooth as possible.

* Update: Release Candidate 2 has been published

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 12th August, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 29th July]]>https://ghost.org/changelog/public-dev-meeting-29th-julyGhost__Post__5cf5f94b3a5f1b0038cc7058Tue, 29 Jul 2014 20:04:44 GMTpulse

For the past 3 weeks, despite impressive progress, we've hovered at the ~40 open issue mark in the Multi-User backlog This week we're at less than 30 issues, and looking good to half that in the next 24-48 hours. With this in mind, we are aiming to ship the first RC for 0.5 on Thursday.

The largest part of what is left is cleaning up bits of the UI so that less privileged users don't see controls and resources that they aren't able to interact with. The API has a full suite of permissions controlling who can do what, but the admin UI needs to be updated to reflect some of that. Determining the best approach for some of this was a large part of today's meeting.

There is also a large amount of testing, both in terms of writing tests to ensure coverage, and physically testing out the code that needs to happen before we can be sure the code is ready to release. If you have some free time, please do check out master and take it for a test run!

At present, we don't have any contributors who are championing an effort to bring postgres support into line with our SQLite and MySQL support. As a result of this postgres support is falling behind rather than catching up. Currently the build fails, and it's quite likely that 0.5 won't work with postgres unless someone gives it some attention.

It usually takes 8-10 days to get from a first RC to a release, and we'll set a firm date for the release of MU in next week's meeting.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 5th August, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 22nd July]]>https://ghost.org/changelog/public-dev-meeting-22nd-julyGhost__Post__5cf5f94b3a5f1b0038cc7056Wed, 23 Jul 2014 10:30:49 GMTpulse

Multi-user remains the focus, as we work towards getting it ready to ship. There has been significant progress this week, as we move towards having a UI that reflects the role of the signed in user. We're punting unnecessary work whereever we can without impacting code quality. This week has seen major changes to the code base and test suites, such that the Travis-CI build runs significantly faster which should help to speed up development time.

Casper has had a major overhaul ready for Multi-User, anyone grabbing the latest master of Ghost or Casper will see the shiny new version. Please help us out by testing new Casper on your blogs!

After Multi-User has shipped, we're going to be making some pretty big changes to how we manage our releases. The aim will be to do a release with a couple of new features at least once a month. In between the main releases, we're going to move towards doing smaller 'optional' releases. Optional releases will be automatically shipped to Ghost(Pro), but will not trigger an update notification in self-hosted Ghost. We will provide an alternative method to subscribe for notifications of the optional releases.

We're also in the process of creating a new public roadmap where our users can find out what features are coming when. This new roadmap focuses more on features, and is designed to work with the new release cycle. The hope is that this will provide more visibility on which features are priority and when you can expect to see them on your blog.

In the short term, we continue to work torwards shipping MU as soon as possible. We rely on community contributions in order to deliver, so please help out if you can.

Want to help us ship?

There are a number of beginner issues in the backlog, and that will likely continue as finding small bugs and niggles is common as we move towards a release candidate. These issues are ideal for people new to the Ghost codebase.

If you're looking to help us ship Multi-User, both developers and non-developers can give us a hand by grabbing the latest master, testing it and raising any issues you come across.

Instructions for installing locally can be found in the contribution guide.

As always if you need a helping hand getting up and running, our developers hang out in the #ghost IRC channel on freenode and are always willing to help.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 29th July, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 15th July]]>https://ghost.org/changelog/public-dev-meeting-15th-julyGhost__Post__5cf5f94b3a5f1b0038cc7055Wed, 16 Jul 2014 07:51:25 GMTpulse

We have missed the deadline for delivering all the new features required to deliver multi-user. Issues like the permissions model being more complex than originally thought are causing things to take longer than expected. A revised deadline of Friday 18th July for all feature PRs was agreed during the meeting. Anyone & everyone with time to give us a hand delivering this milestone - please get involved!

One major development this week, was the discovery & implementation of the model-registry plugin for Bookshelf. This removes the circular dependency problem from our models which was hampering progress. Whilst having no visible effect, improvements like this significantly advance our ability to deliver new features quickly.

The Ghost admin client now authenticates with the server via oAuth. Shortly, we will also be adding oAuth to the API so that the API can be used externally to Ghost (help wanted). Sebgie has done an excellent write-up of how oAuth works in Ghost for those who are interested in this.

Ghostalk, the weekly Ghost podcast is about to publish it's 21st episode, and final installment in this season, so keep an eye out for that! We also recommend checking out episode 20 with John O'Nolan.

pulse

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 22nd July, 5:30pm London time.

]]>
<![CDATA[The Single Greatest Method for Immediately Increasing Your Blog Post Production Speed by 600%]]>https://ghost.org/changelog/fastest-way-to-blogGhost__Post__5cf5f94b3a5f1b0038cc7129Tue, 15 Jul 2014 14:00:21 GMT

Production line

So you're short on time. You've got a deadline, and you really need to get your post published. There's no flexibility for perfectionism, this time, there is simply point A, point B, and the chasm between the two.

Allow me to introduce you to the fastest way to put proverbial pen-to-paper and send that blockbuster post down the production line in the shortest time possible.

The drag

When I first started blogging, it was like torture. Even when I had a good idea for a blog post, I'd still sit there for hours wondering how best to put it together. Would it get read? Was it good enough?

There would be the inevitable research period of just gathering all the information needed for the post, followed by the cross-checking of every other possible angle of that research. Then the writing began. Sporadically. Stop, start, stop, start. Start again.

I was always trying to find a narrative, but failing to grasp where (if anywhere) the story was actually going.

It wasn't the best system. It wasn't really a system at all. I could burn through hours - if not days - just trying to write that one great post. Often, I never even made it to the end.

Here's what I changed

Once I realised (Thanks RescueTime) how many hours I was burning through in return for very little, I decided to make some changes to my workflow. The result was taking my content production time from 6 hours down to about 60 minutes.

Come up with ideas in advance

The worst thing about blogging is sitting around staring at a blank screen and trying to think of what to write about. You need to know exactly what you're going to write, before you sit down to start writing it. Come up with ideas for blog posts in advance, make a list, and then sit down and write.

Don't waste time wondering. This part should already be done.

Create an outline, every time

Got your idea? Good. Now instead of starting to write a big long meandering post that may or may not arrive at a conclusion, break it down into steps.

Outlines vary based on what kind of post you're writing, but ultimately - this is the one that I come back to again and again:

  1. Introduction of the thing
  2. Value of the thing
  3. The THING
  4. Case study of the thing
  5. Conclusion

Whatever your outline is: break it into bullet points that go sensibly from a beginning to a middle to an end. Getting these points written down is the catalyst for the rest of your post.

As Belle over at Buffer once said:

Something I’ve learned from experience and from reading advice from other writers is that there comes a point when you need to shake yourself out of research mode and force yourself to start writing. Getting words on the page is that huge push that it takes for a boulder to start moving. As soon as you get that done, you’ve got the momentum to keep going.

I've found that creating an outline is one of the best ways of doing this.

Check off the easy bits

Look at the steps in your outline. Now write 100-200 words for number 1 (introduction), number 5 (conclusion), number 2 (value), then number 4 (case study). Those are the easy parts.

Your introduction should grab people's attention and lure them in.

Your conclusion should summarise the most important things that you want people to take away from your post (if they skip the entire article and only read this paragraph, they should be able to get the gist of it).

Your value explanation should tell people why they should care about what you're about to say. What benefit will it have to their lives if they keep reading?

Your case study should give a concrete example of what you're saying in action. It can be a quote, a story, an experience or anything else that backs up your point and leads nicely into the conclusion.

Done all that? Awesome. You've covered roughly 700 words at this point, which means you're about half done. Try to aim for 1200-1500 words in a post whenever possible. This is the length that generally performs best both for humans as well as search engines.

Fill in the gaps

Now fill in the gaps by writing the actual body of your post. Keep it simple. Say what you want to say clearly and concisely.

Don't try to come up with complex theories or write about things you're not clear on. Stand on the shoulders of giants. The internet is full of incredible content which you can link to, quote, and reference.

Try to give the maximum value to your reader - not be a know-it-all. Sometimes that means sending your audience to other places.

Don't forget to use simple writing tools to keep the quality of your content high as you go along. Guide your reader through the story. Hold their hand. Make them feel warm and fuzzy and happy as they frolic from heading to heading.

Get checked

Write drunk, edit sober.

– Ernest Hemingway

One of the most liberating ways to speed up your writing is to absolve yourself from the responsibility of editing it.

Just write.

Get the words down onto "paper" as fast as you can. Allow the content to flow freely. There are going to be some good paragraphs and some bad paragraphs - but ideally - you're going to let someone else decide which those are.

Having an editor (or really, just a friend) to proof-read your content serves two purposes. First: It means you'll be less shy about getting words out, cause you don't have to "fix them all" later. Second, it gives you the point of view of someone else. Is everything clear? Is there an area that needs more detail? What does that mean, exactly? You can learn a tremendous amount from someone who isn't as close to the subject material as you are.

Getting your work checked by someone else is far less about grammar and spelling (really, some app on your computer should be able to handle that) and far more about input on the content itself.

Pull the trigger

Once it's all done - get it out there. That may be in the form of adding it to a publishing schedule, or it may simply be pulling the trigger on the publish button. The most important thing is not to wait. Sitting on content makes it go stale. The longer you wait, the less relevant it becomes.

(and, if you're anything like me, the more likely you are to hate it)

What to do next

Get off the procrastination bandwagon! Writing blog posts can be hard, but it doesn't have to be. It's a case of finding a system that works for you and then sticking to it. For me, writing an outline and then building it out, piece-by-piece, increased my writing speed by about 600%.

Give these steps a try and see how they work for you...

  1. Consult your list of blog post ideas and choose one indiscriminately.
  2. Bash out an outline as quickly as possible. Spend no more than 10 minutes on this.
  3. Fill out each section starting with the easiest bits. This creates writing momentum which will help you finish.
  4. Phone a friend for review and suggestions for improvement.
  5. Pull the publish trigger and set your content free.

Stop the clock.

How quickly did you manage to complete all the steps? There's nothing more motivating than working to a timed deadline!

Update: One more really obvious tip for writing faster is to use Markdown. Check out our full Markdown guide for the nitty gritty.

Photo by Alden Jewell

]]>
<![CDATA[13 Writing Tools To Instantly Enhance The Quality of Your Blog]]>https://ghost.org/changelog/writing-toolsGhost__Post__5cf5f94b3a5f1b0038cc7127Wed, 09 Jul 2014 12:39:22 GMT

Hipster tools

There's one thing that separates great blog posts from the rest: Giving the reader what they truly, deeply want.

If you find yourself writing post after post but being less than overwhelmed by the response, it might be time to sharpen up those blogging techniques and try something new.

No other format of writing is so diverse in its distribution, and no other format has such massive reach with such a low barrier to entry.

But that doesn't mean it's easy.

The internet is as busy and crowded as its ever been. There have never been more bloggers clamouring for attention than you will find today. Quality and credibility, now, are the driving differentiators.

So that's what these 12 tools are about. Helping you understand what factors make the difference between the viral blog and the single-celled internet Amoeba.

Tell your story

Your story is the thing that makes people care about what you're saying. Or not. It's the bit that makes it possible for your reader to relate to you. To become a part of it, rather than just a party to it. It is, in many ways, the magic that holds all written content together.

Blogging about business, Alex Turnbull found that almost 300% more people read to the end of a post on the GrooveHQ blog when he included conscious narrative elements in the introduction.

Thanks to science, our brains are hard-wired to relate to stories more than any other type of content. We don't just read and understand a story, we place ourselves into it and go along for the ride.

This is not the logical part of the brain, it's the emotional part. When it comes to decision-making, it's the emotions that win almost every time.

Be direct

The easiest type of writing, and the easiest type of speaking, is rambling. Run-on sentences and meandering paragraphs are sure to accomplish one thing very successfully: boring your reader.

Every year the average human attention span shortens. Online, this paradigm is magnified intensely. This year, the average attention span of a web user is down to just 8 seconds; roughly equivalent to a goldfish.

You have but a short window in which to capture the attention of your reader and communicate something important to them. Now, more than ever, is the time to be blunt about it.

Get to the point

They say the most important part of video editing is the first 10-seconds. The same is true for blogging, translated roughly to the first 3 sentences.

Before you can even start being direct, you have to get your reader past the first paragraph. Why should they bother to read any further if you can't capture their attention in the first place?

Try opening with your conclusion. Share the point of your post right up front, then the tell the story of how you got there. Surprise, intrigue and controversy are all things which keep people reading.

Show, don't tell

Use words to drive home the point you want to make. Back up those words with images which prove what you're saying is true.

It can be hard to find an image for every context, but when it's possible it has a significant effect. Humans (especially lazy humans, like us web users) are very visual creatures.

A study by Buffer found that Tweets with images received 150% more retweets than their counterparts without.

Jeff Bullas points out that (on average) articles with images get 94% more total views, press releases with images get 45% more views, and on Facebook stories with images are shared 37% more often.

Set the scene

Close your eyes for a moment and imagine this:

You're sat, quietly, watching your monitor in stunned disbelief. You didn't expect it. You didn't realise that this was going to happen to you today. Your hand shakes as you reach for the mouse and hit "Reply". Your server hiccups indignantly under the load of a million visitors. You only write two words: "Thanks, @aplusk."

Wouldn't that be nice?

Help your reader explore their imagination. Place them into the picture which you're painting and make them the main character. Be selfless to allow your reader to be selfish.

Arrange your words

One of the most common errors which newbie bloggers make is to ignore (or rather, not pay extra special attention to) formatting. Arguably, formatting has the largest influence of all on how much (and what parts) of your post are read.

If the user who spends 8 seconds on a page is our most common visitor, the second most common is the skim-reader.

You can complain about how unfair it is that nobody can be bothered to read properly any more, or you can see it as an opportunity and a challenge. Can you communicate the most important parts of your post to someone on a subway, looking at a tiny screen, in the space of just 1-2 minutes?

Break up your big blocks of text into manageable chunks. Use headings as a roadmap of where you're going. Try highlighting the most important passages which you would like people to notice.

It really works.

Reference the things

Just because it's written on the internet doesn't necessarily mean it's true. Why should I believe you?

Support your stories and opinions with facts. Call it "data driven" - call it "backed by science" - call it whatever you want. Reliable information is often hard to come by. Demonstrating that you are a credible authority on your subject of choice is a sure-fire way to dramatically up the quality of your posts.

Less hearsay. More juicy footnotes.

Social proof

Who else has talked about this subject? Surround yourself with people who are smart and if you're lucky you might be considered smart by association. Citing experts in the field which you're writing about indicates that you know who is worth citing.

All of this takes practice, of course, but the KISSmetrics blog has some great advice about how to ask influencers for killer quotes as just one example of how you can bolster your writing with credibility.

Because:

  1. you gain exposure to a new audience, and 2) your content becomes more reputable because you’re associating yourself with an influencer in your industry.

Compare & contrast

Occasionally the best way to communicate something new is to point out the similarities and differences between it and something old. Take a concept which is easy to relate to and subvert it.

You see this in startups all the time when they write elevator pitches to communicate what they do in the fastest way possible:

  • "It's basically Twitter, for photographs"
  • "Basecamp, for musicians"
  • "Paypal, but not shit"

Building on a reference point which is already known and understood can often cause an "aha" moment of understanding.

Summarise

Many of your readers are going to skim read, and some aren't going to read at all. Most people who do read anything, however, will read the first and the last paragraphs of your post.

Try to summarise all of your most important points in the introduction and the conclusion. Even if it's an abridged version, you should be able to cover all your bases.

Keep it succinct.

Call to action

Your call to action is the thing that you want people to do after having read your post. What is that?

Do you want them to read another post? Buy a product? Leave a review? Click on a link? Think about something important?

Your call to action should be crystal clear, and easy to find (regardless of what it is). Your post is effectively one big build up to the call to action. The thing that the reader should do next.

It often helps if there's a brightly coloured button.

Practice

As Brian Clark rightly points out, there are only 10 effective steps to becoming a better writer:

  1. Write.
  2. Write more.
  3. Write even more.
  4. Write even more than that.
  5. Write when you don’t want to.
  6. Write when you do.
  7. Write when you have something to say.
  8. Write when you don’t.
  9. Write every day.
  10. Keep writing.

What to do next

Probably not everything at the same time! It might be easier to focus on perfecting the use of these techniques one by one until you start to feel comfortable jumping between them. Give yourself time to get acquainted.

  1. Have a look at some of the blogs which you read every day. Can you spot any of these tools in action?
  2. Go back over one of your posts and see if you can revise any sections to be more clear and concise.
  3. Decide what you would like your readers to understand or accomplish as a result of reading your writing. Does the rest of your post reinforce that mission?

Update: Enjoy this post? You'll probably love our Ultimate Guide to Markdown to get the most out of your writing!

What other techniques have you found to be particularly effective for reader engagement when structuring your posts?

Photo by Rick Nunn

]]>
<![CDATA[Public Dev Meeting 8th July]]>https://ghost.org/changelog/public-dev-meeting-8th-julyGhost__Post__5cf5f94b3a5f1b0038cc7054Tue, 08 Jul 2014 20:25:18 GMTpulse

The pulse for the last week looks a little slower that the two weeks before. We have had less people working on the project, but also the pieces of the Multi-User project are much bigger than the small clean-up issues we have been working on for Ember. All that being said, we've delivered a few big and important pieces of Multi-User this week - it's now possible to invite a user to your blog!

During the meeting, we punted a number of issues over to a new 0.5.x Milestone. We're totally focused on delivering Multi-User, but once that milestone (and the enormous amount of refactoring that comes with it) is out of the way, we will start releasing more frequently. We're left with ~40 issues, most of which are assigned and expected to be finished within the next week. As always, we are still looking for more people to help us wrap this project up.

We also had a discussion around the proposed PRIVACY.md document. This is a new file, that will live in the root directory just like the popular SECURITY.md, which describes all of the features of Ghost which may be considered to have an effect on privacy, all the way down to the use of Google Fonts. This document provides absolute transparency as to what the Ghost software does, and we hope the concept will be adopted by the OS community.

Finally this week, we planned a core developer Google hangout for 6:30pm on Thursday.

Next week, we'll be putting together a plan for how to test the extensive changes coming in 0.5 ready to release it. Anyone willing to get involved with testing will be very much appreciated.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 15th July, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 1st July]]>https://ghost.org/changelog/public-dev-meeting-1st-julyGhost__Post__5cf5f94b3a5f1b0038cc7053Tue, 01 Jul 2014 17:47:47 GMTpulse

I thought I'd make these pulse screenshots a regular thing in the meeting write-ups. They're a great way to visualise and compare how active we've all been, and it gets the faces of our awesome contributors in the post. No so many different people this week, but we've closed the same number of issues. Awesome.

This week all of the major pieces of the Ember admin were completed. The Ember admin is now the admin. The old backbone admin has been removed, and the Ember.js version is now served from /ghost/ instead of /ghost/ember/. Whoohoo!

Fireworks

During this week's meeting I asked whether people wanted to continue having 2 open Milestones keeping Ember and MU issues separate, or move the final bits from the Ember.js milestone to the Multi-User milestone and move on. There was a pretty clear consensus, so the Ember.js milestone is now closed, and everyone is looking towards delivering Multi-User.

There are still 2 pretty big phases of MU to deliver, so we've updated our timelines. The first phase aims to make it possible to invite a user, accept an invite, and login as different users. The second phase aims to clean up the permissions around what each level of user (owner, admin, editor and author) can see and do. The first phase closes for PRs at the next meeting on the 8th of July. Phase 2 closes on the 15th of July. At that point we will go into a testing and release phase.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 8th July, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 24th June]]>https://ghost.org/changelog/public-dev-meeting-24th-juneGhost__Post__5cf5f94b3a5f1b0038cc7052Wed, 25 Jun 2014 10:14:26 GMT

This week has seen epic progress on the Ghost repo:

In fact, during yesterdays meetings these stats were even more epic, but I forgot to take a screenshot :(

Wrapping up Ember

I cannot thank our contributors enough for the hardwork they have put in to completing the Ember admin project. We've closed around 60 issues against the Ember milestone in the past week! At the time of writing, there are 15 issues remaining and we're set to be able to close the milestone shortly.

We've managed to push the Ember admin project so that we've not just built the same thing we had, but found ways to improve. Once the last couple of big pieces (OAuth and the forgotten password flow) land, it'll be time to switch the admin to the Ember admin completely. I'm hoping to get this done by the end of the weekend!

Moving on to Multi-User

The next project is an enormously important milestone for Ghost: shipping multi-user. This change will drive Ghost adoption by allowing more diverse user groups to switch to Ghost. I cannot wait to be able to offer this to people!

The Multi-User milestone has been populated with a set of around 40 issues, most of them quite small. They have also been split into two phases as described in the Multi-User Epic issue which should allow us to progress quickly towards having MU support working and then add MU features and clean up bits of permissions.

The first phase is intended to be done by the end of the weekend, and the second phase by Friday 4th July. This means that by the meeting after next, everything should be merged and we should be ready to start the pre-release testing & cleanup phase. This is a super tight deadline, but it ensures that we can deliver MU in the first half of July.

In order to meet the deadline, we're going to need to keep up our activity levels. If there's anyone out there looking to start contributing, please come by #ghost on freenode and we'll help you get stuck in.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 1st July, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 17th June]]>https://ghost.org/changelog/public-dev-meeting-17th-juneGhost__Post__5cf5f94b3a5f1b0038cc7051Wed, 18 Jun 2014 08:00:26 GMT

It's been 2 weeks since we had a meeting, but those two weeks have seen a flurry of activity. We're all pushing to wrap up the Ember admin and get it up to standard. We've got just a week left to wrap up the main pieces, but if things continue as we are, we might just make it:

Commit Activity June

There are a few big blockers left in the Ember admin:

  1. Validations - In progress by @darvelo
  2. Mobile Support - We need to determine a strategy for Ember #2333
  3. Keyboard Shortcuts - In progress by @novaugust
  4. Wiring in Ember Data - In progress by @jaswilli
  5. Tests - In progress by @erisds & @rjackson

Almost everything is in progress, with most pieces likely to land in the next couple of days. For more details of each of these items, including what's needed, why and the issues related and dependencies see the comment on #2271.

There are also a few big pieces of functionality which are still missing:

  1. OAuth #2759 - In progress by @sebgie
  2. Forgotten Password Flow #2843 In progress by @javorszky
  3. Mobile Editor #2957 - Needs assignee
  4. Debug Screen #2847 - Needs assignee
  5. Error Pages #2851 - Needs assignee

Aside from these things, the remaining issues in the Ember admin are all small bug fixes, tweaks and minor changes to make sure the new admin functions exactly as per the old admin. There is still plenty to do and room for more contributors to pick pieces up and get stuck in.

The deadline for PRs for the 10 items listed above is the next meeting (24th June). It's expected that there'll still be loose ends to tie up, but provided these major pieces are in we should be on track.

Multi-User

Next week, we'll be starting in earnest on multi-user. I've opened an Epic Issue which details the various pieces and also the flows we'll need to implement for MU. The issues outlined here will materialise over the coming week. Additonally, a roadmap for Ghost-Ui is currently being planned to ensure we get all the new pieces of interface on time. This will be published shortly for any one looking to get involved in the HTML & Sass side of things.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 24th June, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 3rd June]]>https://ghost.org/changelog/public-dev-meeting-3rd-juneGhost__Post__5cf5f94b3a5f1b0038cc7050Wed, 04 Jun 2014 10:40:26 GMT

It's been a short week this week, and also please note that next week there will not be a meeting. This week's meeting was mostly a very large and in depth catchup on all the various issues that are open in the Ember milestone.

There are ~48 open issues in the Ember milestone. At least a half of them are assigned and in progress, with a further 1/4 bugs and small related issues that will likely be resolved by one of the main issues. There are still a handful of unassigned open issues to grab and also no doubt countless small issues we've missed, and bits of cleanup or refactoring work that anyone is welcome to send us PRs for.

Roadmap Update

The Ghost Roadmap, and the milestones on GitHub have been updated with a new timeline, with an aim to ship Ghost 0.5 with multi-user support at the beginning of July. To that end, the aim is that all the currently open and assigned issues will have a PR in time for the next meeting in 2 weeks on 17th June. The following week will be spent wrapping up the final pieces of the Ember admin, which will close for PRs 23rd June.

We will then have one final week to focus on wrapping up the last pieces of Multi-User, which should be mostly complete by this time, with the Multi-User milestone closing to PRs on 1st July. At this point we will follow our standardrelease procedure, aiming to release the following week.

These timelines are incredibly ambitious, however it is already more than 2 months since our last release and we need to push forward and deliver something awesome to our users. We've recently gained a few new regular contributors, who are really helping us to push forward faster, so we are aiming high. I'm particularly excited about delivering the Ember admin, because of what it means in terms of delivering other features more quickly in future.

Wrapping up Ember

To help us get a bit of a booster on the Ember admin, we have @rjackson, a.k.a rwjblue on IRC, who is a member of the Ember core team helping us to get past some of the problems we've encountered. To that aim, he will be hosting a Google hangout on Wednesday at 5:30pm UK time, to go over some high level concepts and help shape some parts of the admin which are proving tricky. This is open to anyone who is or wants to work on the Ghost Ember admin.

Update: For details of what happened during the hangout see the IRC logs or @halfdan's write-up.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Note: There will not be a meeting next week,. Hope to see you at the next meeting: Tuesday 17th June, 5:30pm UK time.

]]>
<![CDATA[Public Dev Meeting 28th May]]>https://ghost.org/changelog/public-dev-meeting-28th-mayGhost__Post__5cf5f94b3a5f1b0038cc704fThu, 29 May 2014 10:41:11 GMT

This week's meeting was a shortened 'catchup' meeting held on Wednesday as we were unable to do a proper meeting on Tuesday.

Over the past week, I have been on a bit of a rampage on GitHub, trying to close as much stuff as I can, get the PR list back under one page (25 PRs) and attempting to reduce the open issues down as low as possible (aiming for ~200) to make things more manageable. After this, I'll start working on improving the roadmap, making it a bit clearer with milestones and deadlines fleshed out ready to discuss in next week's meeting.

There is now quite a bit of work going on towards shipping multi-user, as we're now far enough along with Ember to start on it and not everyone wants to work on Ember / frontend stuff. We hope to wrap up Ember and ship multi-user around the same sort of time as Ghost 0.5, hopefully pretty soon.

Two little bits of news: firstly, @pauladamdavis is now making a bit of a surge on Ghost-Ui. He has commit access and is pretty much taking the lead on that project. If there are any Ghost-Ui issues impeding the Ember migration project, please contact him for help. Secondly, @sebgie now has commit access to Ghost, he will be taking on a little bit more PR management, particularly whilst I am on holiday 6th-16th June.

There is still quite a lot of work outstanding on the Ember project, most notably that we need to complete the work to integrate Ember data so that the admin works with real blog data, and integrate all of the more complex bits and pieces around validation, progress, etc. In next weeks meeting, I hope to be able to set a firm deadline for when we will complete the work.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode (note that the UK has just moved onto Daylight Savings Time, so the meeting is an hour earlier than it was previously). In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 3rd June, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 20th May]]>https://ghost.org/changelog/public-dev-meeting-20th-mayGhost__Post__5cf5f94b3a5f1b0038cc704eWed, 21 May 2014 06:38:41 GMT

Ghost Team Egypt

This week's meeting was brought to you from the first official Ghost Team meetup in Egypt. This is the first time our distributed team has all been together in the same room (with the exception of Sarah, who is definitely here in spirit) and we are going to use this rare opportunity to put our heads together and hack on / spec out a few key Ghost features, including feature / cover images, multi-user, and the dashboard.

We won't be able to have all of these things completed by the time we leave, but we do want to ensure we have a clear plan for how to implement each of these features, as well as remove a few blockers. You will see issues popping up and being worked on over the course of the week.

We have also been discussing our wonderful open source community and what we can do to improve it, and recognise those people who are putting in a lot of work. One of the ideas we've been discussing is having an official 'Core Team' who will get extra responsibilities as well as recognition, access to a weekly meeting and eventually meet-ups. We'll post more details about this soon.

In addition to this, we have come up with several desirable improvements to Slimer - our IRC bot. I have opened up a few issues on the Slimer repo related to this - a couple are assigned, but the rest are very much up for grabs and we'd also like to hear any more suggestions people have for ways to make Slimer more useful.

Moving on to what's going on in the world of Ghost this week - we've seen a lot of activity on Ember since last week's meeting, long may it continue! Additionally, during the meeting we decided that as there has been no further discussion on the Ember Models vs Ember Data issue that we're going to plump for Ember Data. It's used in all the Ember docs, and seems like the most sensible choice.

There are still plenty of issues open in the Ember milestone with more to come, please grab anything that catches your eye by dropping a comment on the issue. There's tonnes to do, and we really want to do the official switch over as soon as possible!

Warning: there will not be a dev meeting on Tuesday next week, but instead we will have a brief catchup meeting on Wednesday at the same time.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Next week I will be travelling back from Egypt at the time we usually hold the meeting, so I will post an update blog post around the usual time, and we'll hold a shorter progress / catchup meeting on Wednesday at 5:30pm UK time instead of the normal Tuesday meeting.

]]>
<![CDATA[Public Dev Meeting 13th May]]>https://ghost.org/changelog/public-dev-meeting-13th-mayGhost__Post__5cf5f94b3a5f1b0038cc704dTue, 13 May 2014 21:24:38 GMT

This week's meeting kicked off a little differently - with a rough outline of the agenda for the meeting.

  • Meeting starts with a progress update covering what has happened over the last week, and catching up with any issues that are outstanding.
  • Next there is an opportunity for anyone to bring up anything they want to discuss - anything at all to do with Ghost development be it questions, comments, concerns etc.
  • Lastly I wanted to run through the ember admin and discuss where we are with it.

The day after the last meeting, all outstanding Ember PRs were merged, and the ember branch was merged into master. Both the original and ember admin now live side by side in master, the original admin at /ghost/ and the new ember admin at /ghost/ember/.

The past week has seen a lot of activity on GitHub, it's been one of the most active weeks we've seen in a while, with a lot of people picking up bugs and small issues that popped up as we have merged so many API refactors and other bits and pieces. Hopefully, this activity will continue on into next week and become much more focused on Ember.

One issue that is still poking around from the API project is #2601 which is all about non-RESTful endpoints and how they should work. @steveklabnik, one of the co-authors of the JSON-API format joined us for the meeting to help us decide what to do. The JSON-API standard is almost ready to be released as 1.0, and there have been some interesting changes and improvements as people have started hacking on it, one of which is the option to move the request/response formats to use data as a consistent key rather than a plural resource name like posts.

We still have an open discussion on whether we should use Ember Model, Ember Data or something else. @jgable has done a spike on Ember-Data, and we'd love to see one turn up for Ember Model so that we can compare the two. Ideally, we want to make this decision this week so that we can crack on and turn the Ember admin into the admin!

During the meeting I walked through some aspects of the API and what is and isn't implemented, as well as some visual and behavioural issues with the new Ember admin. Since the meeting I've gone through and opened many new issues, several of which are marked with the beginner tag, as well as added comments or updates to many of the existing issues in the Ember project. Most of the issues are linked from the main Ember Epic, and there are quite a few more to open. Please feel free to grab any unassigned issues by dropping a comment on the issue, or letting me know in IRC.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 20th May, 5:30pm London time.

]]>
<![CDATA[Sarah Frantz is a Ghost]]>https://ghost.org/changelog/sarah-frantz-is-a-ghostGhost__Post__5cf5f94b3a5f1b0038cc7126Tue, 13 May 2014 10:16:22 GMT

Today we are very pleased to welcome Sarah Frantz to the team as our newest Ghost Support Engineer!

Our first team member from the United States, Sarah describes herself as a perpetual geek and proud working mother. She'll be helping out users on Ghost(Pro), checking in on the Ghost forums, and crafting finely honed helpful words of wisdom in our support documentation.

That brings our Ghost Foundation Non-Profit team to 5, and counting!

Sarah Frantz

Find her on Twitter, or read Sarah's blog!

]]>
<![CDATA[Public Dev Meeting 6th May]]>https://ghost.org/changelog/public-dev-meeting-6th-mayGhost__Post__5cf5f94b3a5f1b0038cc704cTue, 06 May 2014 18:57:06 GMT

Today we are officially switching over to focusing on [Ember]((https://github.com/TryGhost/Ghost/issues?milestone=17&state=open).

The API Project still has a number of issues outstanding. We're working on wrapping these up as quickly as we can. We've done quite a bit of refactoring, and a lot of what's left is mopping up, so it may take a few more days to get all the PRs in on top of one another.

While a few people carry on cleaning up and finishing off the last few bits of the API, it is time for us to switch our focus to Ember 100%. This will happen over the course of this week. The first task is to figure out what to do with the 4 open PRs, whether to merge them or hold them for now so that we can merge the ember branch into master.

There are a couple of big niggles with the Ember project at the moment, most notably, how we plan to access the API and deal with the data. We need to make sure that we have a clear plan for this. It's being discussed in #2699 and the outcome of the discussion should be a clear plan / process documented on the Ember wiki doc.

The next steps will be to get the Ember admin UI up to enough of a standard that we can delete the old admin. In order to do this, we need to have ported the majority of the functionality including all the minute details of behaviour that may otherwise be lost. There are many open issues and we will continue to improve visibility on where we are as the week goes on.

Tips for working on Ember:

The issue list lives on the Ember.js milestone, and there is an epic issue which is a good place to start looking to get an idea of what this project involves. The majority of the issues currently open are blocks of functionality that need porting over from the old admin. Any issue which is directly to do with Ember, or 'Emberifying' something, is also marked with [Ember.js] at the start of the title, so that people only interested in Ember issues can filter GitHub notifications from Ghost.

Currently, the Ember.js version of the admin lives on the ember branch on GitHub, on which there are two versions of the admin. The old admin still lives in its usual place at /ghost/ and the Ember.js version lives at /ghost/ember/. This week we will merge the ember branch into master, and delete it. At that point the two admins will still coexist, but on the main master branch. We hope to be able to remove the old admin and have only the new admin somewhere around the meeting after next (20th May).

Please keep an eye on the Ember wiki doc as we will continue to update that with relevant / useful info as we think of it.

If you have any questions, are interested in picking up some work or otherwise getting involved, please swing by our #ghost channel on freenode. We'd love to help you get started contributing to the Ember project. There will be a video chat, probably on Thursday 15th of May for anyone looking for some guidance on getting started - more details next week.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 13th May, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 29th Apr]]>https://ghost.org/changelog/public-dev-meeting-29th-aprGhost__Post__5cf5f94b3a5f1b0038cc704bWed, 30 Apr 2014 08:33:32 GMT

Yesterday's meeting was a year to the day that we launched the Kickstarter campaign. Here's the second ever commit to the GitHub repo, which happened during the KS campaign after a week or so of cleaning up the prototype into a state fit for other developers...just about. We've come a long way in a year, and are very grateful to all of our contributors past, present and future for all of their time and hard work helping us to deliver Ghost.

Our API project has been progressing over the last week, and will hopefully be wrapping up this week - I have asked for all PRs to be submitted by Friday, and anyone who has an issue they cannot get completed by then needs to let us know. We'll use the weekend to test, merge and clean up loose ends. The API will be marked as v0.2 to indicate the progress & we'll ensure we have full documentation.

During the upcoming projects - Ember, Multi-user and Apps, the API will continue to evolve to meet our needs. One major evolution will be the addition of OAuth to Ghost for authenticating between the Admin UI and Ghost itself. With this addition, we will also add OAuth for the API, bump the API to v1, publish the documentation and declare the API ready for public use.

In next week's meeting we will be kicking off the Ember project into full swing. If you're interested in getting involved please come to the meeting, or if you can't make it drop in IRC sometime and let us know you're around and interested!

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode (note that the UK has just moved onto Daylight Savings Time, so the meeting is an hour earlier than it was previously). In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 6th May, 5:30pm London time.

]]>
<![CDATA[A Year to The Day]]>https://ghost.org/changelog/a-year-to-the-dayGhost__Post__5cf5f94b3a5f1b0038cc7125Tue, 29 Apr 2014 11:13:43 GMT

My stomach lurched, one final time, as I stared at the draft Kickstarter Campaign on the screen before me. I scrolled up and down the project description vigorously, checking that everything was there. Pictures, check. Rewards, check. FAQs, done. Six months of preparation came down to this moment. Six months of trepidation stored up to be released with one final click of the mouse.

It was April 29th, 2013.

Click

It feels like both a few moments and a lifetime ago when Ghost first announced itself publicly to the world. The amount that we’ve accomplished in the last 12 months is nothing short of staggering, and yet there is so much more that remains to be done. But on this, our first anniversary, I’d like to take a moment to share some of our journey with you — as well as some of our plans for what’s coming next.

We know, now, that we have created something which people want. Beyond that, we know that we have created something which genuinely has a positive impact on the world. Open Source, Not for Profit, Distributed… Ghost has the startup diversity trifecta locked up. It doesn’t make things easier — one might go as far as to say that it makes everything significantly harder — but it gives us something very powerful to believe in and work towards. The value of that cannot be overstated.

The Story So Far

Since Ghost launched to the public 6 months ago, we’ve seen 160,000 people sign up for an account on Ghost.org, who generate well over 1million page views per month and have cumulatively downloaded Ghost 272,000 times.

The Ghost core GitHub repository has had 2,150 code commits from 125 contributing developers all over the world. It has been starred 10,250 times — making it the 38th most popular project of all time on GitHub. Just behind LESS, and ahead of Ember.js. (Want to get involved?)

Since our Ghost(Pro) service launched just 4 months ago, we’ve grown to a paying user base of 2,300 customers generating slightly over $175,000 in annual recurring revenue — growing at roughly 30% month on month. That last stat is arguably the most important, as it secures the long term future of Ghost.

We are now a full-time team of 5 and, as a non-profit, we aren’t able to take Venture Capital as would be the norm for a tech startup (though many have contacted us to try, all the same). In order for Ghost to continue to evolve and develop, we’re relying on growing slowly and organically. Much like the first iteration of Ghost was made possible by our users via Kickstarter — the future of Ghost is made possible by our users on Ghost(Pro).

A very small number of paying users are making free, open source publishing possible for millions of people all over the world for the foreseeable future. That’s pretty incredible.

What’s Coming Next

In the original Kickstarter video, I laid out my idea for what a new and exciting blogging platform could look like. The ideas which I described could be considered the vision and goals for version 1.0 of Ghost. Now six months since public release, we are about half way there. Ghost is currently at version 0.4 (fast approaching 0.5) and our progress is relentless. Here are just some of the things you can expect to see us working on and releasing for the rest of the year:

  • A brand new, polished API which massively opens up the potential for developers to build on top of Ghost.
  • A significantly faster and slicker admin interface with much better mobile support.
  • Multiple-user support in Ghost (finally!)
  • One-click upgrades, to make it even easier to always stay up to date. (Unless you use Ghost(Pro), in which case you're already upgraded automatically).
  • Apps support, to allow 3rd party products, extensions and integrations to be built on top of Ghost.
  • Better imports, to make migrating from other platforms easier.
  • Localisation, to support running Ghost in different languages.
  • The long-awaited Ghost Dashboard, bringing your blog’s data to life in a centralised, useful admin home screen.

We’re also working on massive improvements to Ghost.org all the time. Very soon you’ll be seeing a fresh, slick Ghost(Pro) dashboard, significantly improved and expanded user documentation, and small but important improvements in user experience all over the site.

The Start of Year 2

There is little doubt in my mind that the second year is going to be even tougher than the first. We have set the expectations high, and we have asked our users to trust us. It is our responsibility, now, not just to build features and fix bugs — but to create an experience so immersive and direct that it enables the user to think and create in a way not previously possible.

Every tool in the history of time has impacted upon that which it was used to create, and it is the development of tools which separates us as humans from every other species. When looked at from that perspective, Ghost has the potential to be far more than just a blogging platform.

We have an incredible privilege, position and opportunity to influence the future of how ideas and stories are created and shared all over the world. Not just status updates or cat photos, but real, lasting, important content. Content which is owned by you, rather than any single company or social network. Ideas which are worth debating. Stories which are distributed and democratised by the masses.

Much like the internet itself: This is for everyone.

]]>
<![CDATA[Public Dev Meeting 22nd Apr]]>https://ghost.org/changelog/public-dev-meeting-22nd-aprGhost__Post__5cf5f94b3a5f1b0038cc704aWed, 23 Apr 2014 08:13:14 GMT

Today's meeting was mostly a progress report for the API project. Our new-found focus this week has resulted in a lot more commits, including several from new contributors which is fantastic. We are still looking to get more people involved and continue to try to create beginner level issues to facilitate this.

There are still a considerable number of API issues outstanding, although the vast majority of them are in progress by a developer. This week should see a flurry of PR activity! There are still some issues to be raised, so if you're still looking to get involved, keep an eye on the API backlog.

The structure of error responses from the API is an important consideration, and one that has not yet been addressed. We discussed this in some detail during the meeting, and an issue will be raised shortly to continue the discussion.

The remainder of the meeting was spent getting progress updates on the API issues which were assigned last week, and assigning more issues to developers. It's great to see some new names popping up to claim issues :) If you're interested in getting involved, please visit our IRC channel, come along to meetings, and don't be shy.

Next week we will do a full review of the API project, as well as plan another informal Google hangout for contributors.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode (note that the UK has just moved onto Daylight Savings Time, so the meeting is an hour earlier than it was previously). In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 29th April, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 15th Apr]]>https://ghost.org/changelog/public-dev-meeting-15th-aprGhost__Post__5cf5f94b3a5f1b0038cc7049Wed, 16 Apr 2014 07:03:05 GMT

This week, we have shaken things up. For the past few weeks the focus of the team has been split between Ember, Apps and the API. We don't have a big enough team for so many big projects!

From now on, we want to switch our focus from big milestones to small (no more than 4 weeks), individual projects and getting everyone working together on one thing at a time. In this way, I believe we'll be able to focus our resources and deliver more.

The Roadmap has been overhauled, with us focusing on the API project first, as it is a dependency for everything else. This will be followed by the Ember.js project, and then Multi-user so that we can deliver something big to our users. This is as much as we have planned at present, as time goes on we'll see if this approach works, and schedule in more projects based on what people are asking for, and what the dependencies are.

There is more detail on the Roadmap page, which is constantly updated with more information as and when the plan becomes clear.

Master is NOT stable

There was a lengthly discussion during the meeting about the use of the master branch.

Noone should be running a live blog with data they care about on the master branch.

It is not a stable branch: this doesn't just mean there could be bugs, it means that you could get your data into a state from which it cannot be migrated, or you could end up unable to edit your blog. If you want to run Ghost from git, either use a release tag or the stable branch.

In order to be absolutely clear about this, we're going to add a warning message to one of the grunt tasks, so that anyone trying to build Ghost from master is reminded not to use this for a live blog.

Core Developer Hangout

We're going to start running Google+ hangouts for core developers. The first one will be 6:30pm London time on Thursday 17th April. The hangout will be posted to IRC.

We'll aim to do these every 2 weeks or so, at different times to give different people the opportunity to join.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode (note that the UK has just moved onto Daylight Savings Time, so the meeting is an hour earlier than it was previously). In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 22nd April, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 8th Apr]]>https://ghost.org/changelog/public-dev-meeting-8th-aprGhost__Post__5cf5f94b3a5f1b0038cc7048Tue, 08 Apr 2014 17:40:36 GMT

Last week we set out three things as core focus points for the week:

  • Tests - get these passing reliably again
  • Ember.js - get both notifications and modals in place
  • The API - get the issues for this sorted out

We've made some serious progress on improving the tests, most of the random failures are now resolved. There are still a few in the pg build which is going to be looked at this week.

Modals have landed in the ember branch, notifications are in a PR which is almost ready to merge. Elsewhere in ember-land there has been much progress and with modals and notifications many features can be built out. The main blocker now is having a full fake API for the ember branch to work against. This will be a core focus this week.

Progress with the API hasn't been quite so smooth. Last week we were in a position where a decision had been made on how to proceed, and we just needed to divide it up into a set of issues to get it into the pipeline. However, that was turned on its head by me having second thoughts about the JSON-API standard and what it means for Ghost.

I feel very strongly that in our case, consistency between the different ways of consuming the API is more important than potential performance improvements that can be achieved by using linked objects instead of inline objects. During the meeting, this was the consensus - that we should continue to work towards supporting the JSON API standard, but keep our objects inline, and later on add an option for linked objects.

One result of the change towards following JSON API is that the pagination object which is currently created and given to themes will be renamed meta. This will not affect the pagination helper, but will affect any themes using the pagination object directly (I know of none, if you're doing this, please get in touch). pagination will be deprecated for 2 releases before it is removed.

In the world of Apps, much progress has been made in the last week, however the majority of that progress is living out on the apps-perms branch. This branch contains all of the data models & new permissions code needed to deliver apps in a safe way. The next step is to create a set of test cases to verify that what we have is correct, and merge in this branch after next weeks meeting unless there are problems.

This week's focus points:

  • Ember.js - ensure the mock API is complete with lots of data & start looking at how we might use models in future.
  • API - get issues opened for migrating the format & ensuring consistency
  • Apps - get everyone working towards their own example app & helping define the missing GDK APIs

The big focus for the core team this week is to get building the fundamentals of a series of apps. We want to use this to inspire tests and use cases for different apps, collaborate on a set of wiki pages around missing GDK Apis (routing, assets, etc) and to put together a series of issues to move these forward. Next weeks meeting will focus on how to deliver various parts of the GDK.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode (note that the UK has just moved onto Daylight Savings Time, so the meeting is an hour earlier than it was previously). In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 15th April, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 1st Apr]]> Fabian Becker, John O'Nolan, Harry Wolff, Sebastian Gierlinger, Gabor Javorszky, Jacob Gable, Johan Stenehall, Kyle Nunery, mattse, Brad Dougherty, Jakob Gillich, Jonathan Johnson, Michael Bradshaw, Paul Adam Davis, Sam Saccone, Shashank Mehta, Aia Patag, Andy, Clinton Ryan, Dan Schnau, Dane Springmeyer, Daniel Niccoli, D]]>https://ghost.org/changelog/public-dev-meeting-1st-aprGhost__Post__5cf5f94b3a5f1b0038cc7047Tue, 01 Apr 2014 19:01:31 GMT

The past week has been pretty quiet, with the small exception of the release of 0.4.2 of course!

As always, I am incredibly grateful to every single person who contributed:

Fabian Becker, John O'Nolan, Harry Wolff, Sebastian Gierlinger, Gabor Javorszky, Jacob Gable, Johan Stenehall, Kyle Nunery, mattse, Brad Dougherty, Jakob Gillich, Jonathan Johnson, Michael Bradshaw, Paul Adam Davis, Sam Saccone, Shashank Mehta, Aia Patag, Andy, Clinton Ryan, Dan Schnau, Dane Springmeyer, Daniel Niccoli, Declan Cook, Garrett Murphey, Jason Williams, John-David Dalton, Kenny Meyer, Lucas Churchill, Manuel Mitasch, Mark Stacey, Rob Graeber, Sean Hellwig, Xie JinBin, Zach Geis, balduv, cobbspur, nicksahler, polygonix, redwallhp

Releases are always time consuming, and putting our code in front of so many people inevitably turns up the odd issue or two. With the release of 0.4.2 we have encountered a problem with some themes which were not setup to correctly handle tag linking. This was not considered as a potentially breaking change by us, and so we spent some time discussing how we should manage this in future.

With Ghost being pre 1.0 and pretty fast-moving, there is a certain amount of expectation that things will break. However, we do believe we can improve the visibility and communication around potential breakage by allowing themes to determine which version of Ghost it should work with. This way we can do all sorts of interesting things around upgrading and informing users.

This week, we have 3 core points of focus:

  • Tests - get these passing reliably again
  • Ember.js - get both notifications and modals in place
  • The API - get the issues for this sorted out

We're hoping to churn out some more issues tagged beginner over the next week to try to help more people get involved.

Also this week I added a new branch to Ghost's GitHub. The stable branch is intended to contain the latest release of Ghost for anyone installing or buidling packages from git, so that it is easier to keep up to date. I'm interested to hear from anyone who might use this as to whether it would be useful to commit the built assets on this branch?

Don't forget that there is now a podcast about Ghost. Check out recent episodes of Ghostalk for some particularly interesting insights from Kezz Bracey of Polygonix themes, Andy Boutte and David Balderston from allaboutghost.com and this week Julian Lam of NodeBB :)

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode (note that the UK has just moved onto Daylight Savings Time, so the meeting is an hour earlier than it was previously). In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 8th April, 5:30pm London time.

]]>
<![CDATA[Ghost 0.4.2 Maintenance Release]]>https://ghost.org/changelog/ghost-0-4-2-maintenance-releaseGhost__Post__5cf5f94b3a5f1b0038cc7124Wed, 26 Mar 2014 15:20:43 GMT

Today, we're announcing Ghost 0.4.2 - which is a maintenance release.

Traditionally in a maintenance release the only changes are essential bugfixes. But... Pre-1.0 some flexibility is common to allow for a fast pace of development. So today's release contains a little bit more than you might be expecting!

  • [New] Support for editing on touch screen devices!
  • [New] Tag archive support!
  • [New] Custom page template support!
  • [New] Default robots.txt which can be overridden by themes
  • [New] RPC ping when new posts are published
  • [New] Themes can now have a package.json
  • [New] Ghost is now an NPM module
  • [New] Bower now manages front end dependencies
  • Lots more

How to Upgrade

Snap! Ghost(Pro) users have already been upgraded. You're welcome.

For people running Ghost on their own servers, you can download Ghost 0.4.2 and then check out the upgrade documentation over on Github.

Enjoy!

]]>
<![CDATA[Public Dev Meeting 25th Mar]]>https://ghost.org/changelog/public-dev-meeting-25th-marGhost__Post__5cf5f94b3a5f1b0038cc7046Tue, 25 Mar 2014 21:41:09 GMT

This week has largely been focused on testing and fixing bugs in 0.4.2. A second release candidate was made available today, and the release pushed back by a day due to an RC1 bug that was deemed to be a blocker. If all goes well, the release will begin around 10am tomorrow - this includes updating everyone on Ghost(Pro).

This week we have an awesome announcement: Paul Adam Davis has joined Ghost. More info on this over on the Ghost Blog.

The Ember rewrite has become somewhat blocked on modals and notifications. We're looking to resolve this during the coming week, in order to get the rewrite off the ground. At this point the aim is to get a to a rough version 1 which may not have everything perfect but so that we can at least see where all the pieces fit.

The API and permissions work is on-going. We're now about ready to start the work of switching over bits of the API to support the new JSON-API-style format, upgrading those parts to 0.2 as we go. At some point once we decide the API is 'ready' we'll then switch the whole API over to version 1.

Work on Ember, the API and Apps should all kick into higher gear this week once the 0.4.2 release is done. In the next meeting we'll revist the 0.5 milestone in more detail and look at how to deliver it in a timely manner alongside the Ember rewrite.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next weeks meeting: Tuesday 1st April, 5:30pm London time.

]]>
<![CDATA[Paul Davis is a Ghost]]>https://ghost.org/changelog/paul-davis-is-a-ghostGhost__Post__5cf5f94b3a5f1b0038cc7123Tue, 25 Mar 2014 16:13:11 GMT

We're very proud to welcome Paul Davis to the small (but growing!) Ghost team as our new Front-End architect / rocket scientist / neurosurgeon / ok fine I'll stop.

Based in the UK, Paul likes to get deep and meaningful with SASS, CSS, HTML and front-end JavaScript. He also gets deep and meaningful with his BMW, which he loves more than cake.

Paul is going to be heading up a big part of the front-end efforts both on Ghost itself, as well as right here on Ghost.org.

Find him on GitHub and Twitter!

]]>
<![CDATA[New for themes in 0.4.2]]>https://ghost.org/changelog/new-for-themes-0-4-2Ghost__Post__5cf5f94b3a5f1b0038cc703dMon, 24 Mar 2014 11:25:00 GMT

There's an exciting release just around the corner - Ghost 0.4.2 is scheduled for release this week - likely the 25th March.

Usually, patch releases contain little more than a few bug fixes and refactors, but in this case, we're taking advantage of being pre 1.0 and pushing out some serious features in 0.4.2. The majority of these features will impact on theme and other developers.

New features

package.json

Ghost themes now support having a package.json file. At the bare minimum, this file needs to contain a name and version number, which will be used in the Ghost admin theme dropdown. This file is not required in Ghost 0.4.2, but will likely be required in a future version.

Here's the example package.json from Casper:

{
  "name": "Casper",
  "version": "0.9.3"
}

You can choose to add any other fields to your package.json, the npm docs detail several options such as description, keywords, homepage and repository. As Ghost develops we'll make more and more use of these fields both in Ghost and on our marketplace. In addition, very soon Ghost will allow you to add the version of Ghost which your theme supports/requires and will have internal tools to ensure that themes are compatible and help managing upgrades.

The {{log}} helper

Handlebars supports the use of a log helper, but until now this hasn't done anything useful in Ghost. Now, when you're running Ghost in development mode you can use {{log}} to output debug messages to the server console. Perhaps the most interesting example of this is using {{log this}} to output the current handlebars context.

Tag Pages

Perhaps the single most exciting addition in 0.4.2, is the long awaited tag pages feature. Tag pages contain a paginated lists of posts which have a particular tag. If you use the default {{tags}} helper in your theme, tags will now automatically link to their tag page.

If you're not using the {{tags}} helper you'll probably want to update your theme to wrap tags in <a href="{{url}}"></a> to take advantage of this new feature.

In addition to the updated helpers, you can also add a tag.hbs file to your theme. This template will be used to render tag pages, so it's possible to control exactly how these look. Tag pages use the index.hbs file by default if no tag.hbs file can be found.

Custom Page Templates

As well as the shiny new tag.hbs template, Ghost now also supports custom templates for your individual pages giving you tight control over exactly how your static pages render. If you have a special page on your blog called 'About' with the url /about/, you can create a template called page-about.hbs with a custom layout and this template will only be used to render the About page, and nothing else.

The {{#has}} helper

The brand new {{#has}} helper has been created to provide a bit more flexibility in creating different layouts for posts in Ghost. The overall goal of the has helper is to allow you to ask questions about what the current context looks like. For the time being this only covers determining which tags are present, here's an example:

{{#post}}
    {{#has tag="photo"}}
        ...do something if this post has a tag of photo...
    {{else}}
        ...do something if this posts doesn't have a tag of photo...
    {{/has}}
{{/post}}

Furthermore, the has helper will accept a comma separated list of tags so that you can ask if a post has any one of a list of tags a.k.a an 'or' query. For example, if a post has a tag of photo or video or audio:

{{#has tag="photo, video, audio"}}
...do something if this post has a tag of photo or video or audio...
{{else}}
...do something with other posts...
{{/has}}

We hope that these new features give theme developers a better idea of just how powerful the Ghost theming system can become. We're super excited about all the features that are yet to come, and are committed to continuously and incrementally adding theme features with each and every Ghost release.

Changes

pageUrl -> page_url

In 0.4.2 we've renamed all of our helpers to consistently use underscores rather than camelCase. The majority of this affected internal helpers, but the pageUrl helper (used in custom pagination.hbs templates) also needed changing. To prevent compatibility problems, we've kept the old pageUrl helper around, but deprecated it in favour of page_url. Using pageUrl will result in a deprecation warning.

pageUrl will be removed in a future release of Ghost (likely 0.6 to make sure there is plenty of overlap), so theme developers are encouraged to make the switch shortly after 0.4.2 is released.

{{tags}} helper supports HTML prefix & suffix

The {{tags}} helper has been modified to permit the use of HTML in the prefix and suffix attributes, as well as the separator attribute, allowing for more flexibility in customising tag output without having to breakout from using the {{tags}} helper.

Active discussions

I believe it is very important that theme developers are actively involved in decision making around the theme API. We try as much as possible to provide an opportunity for discussion and debate around new features, so that we can build the best toolset possible. The following are some currently open theme API discussions that you may wish to get involved in:

  • Have an option 'append' to the content helper: #2163
  • [Feature] Improved post excerpts / previews
    #2166
  • body_class overhaul
    #1967
  • Improve handlebars' ability to be context aware
    #2249

A cheeky request

I'm over the moon that so many theme developers are offering fantastic themes for free, and many of those are being openly maintained on GitHub. I cannot begin to explain how happy seeing Ghost themes on GitHub makes me! However, I'd like to ask all theme developers using this mechanism to provide a clear link at the top of the readme which downloads a version of the theme which is compatible with the currently released version of Ghost.

I ask this because some of you are super-proactive, and update your themes for the next version of Ghost before it is released. As we start to introduce backwards in-compatible changes, we're getting a few people trying to use those new versions of your themes and getting confused. Unfortunately, what tends to happen in these cases is the user switches away to another theme... not what you want at all!

]]>
<![CDATA[Release Candidate for 0.4.2]]>https://ghost.org/changelog/release-candidate-0-4-2Ghost__Post__5cf5f94b3a5f1b0038cc7045Thu, 20 Mar 2014 21:39:21 GMT

The release candidate for 0.4.2 is now available and ready for testing. We appreciate as many people as possible grabbing the RC and taking it for a spin so that we can iron out any kinks. We have a special issue open for tracking testing.

You can download the pre-built zip file from the green button on the release page. This is a ready-to-go version of Ghost that doesn't require any building or grunting. A simple download, unzip and npm install --production && npm start should get you up and running.

For the first time ever, this version of Ghost is also available via npm. If you're interested in how you can use Ghost this way, check out the documentation (still a work in progress).

Full details of what is included in release 0.4.2, along with a detailed blog post covering what this release means for theme developers will be made available shortly :)

]]>
<![CDATA[Public Dev Meeting 18th Mar]]>https://ghost.org/changelog/public-dev-meeting-18th-marGhost__Post__5cf5f94b3a5f1b0038cc7044Wed, 19 Mar 2014 11:23:44 GMT

There were two main points on the agenda for this week's meeting:

  • Shipping 0.4.2
  • Ember.js rewrite

0.4.2

We are about to release master as 0.4.2. The deadline for PRs was Monday, and now we are in the process of merging, testing, cleaning up and getting a release candidate ready. 0.4.2 has some awesome features, including tag pages, and will be the first version of Ghost published to npm.

There are a couple of issues which still have some work outstanding. #2312 I have not yet PR'd as the fix is pretty ugly and it seems more appropriate at this stage to run a temporary showdown fork. #2148 needs a little cleanup work, and #2149 is still open as there is potential for futher improvements. All of this should be sorted out over the next day or so and the 0.4.2 RC should land on Thursday 20th, final release should be Tuesday 25th.

Ember.js rewrite

This week, @hswolff made significant headway with scaffolding the app - all the screens now exist in some form. There are ~20 new issues that have been opened and are mostly ready to start on.

For anyone who is unfamiliar with the Ember rewrite, it lives on the ember branch. This branch has the old admin located in it's usual place at /ghost/ and the new ember admin located at /ghost/ember/ so that anyone joining in but new to Ghost development can reference the old admin. When switching to the ember branch, we recommend running grunt clean && grunt init && grunt dev to get up and running (we should probably make a shorthand for this).

There are a couple of blockers to work on the Ember rewrite, the biggest of which being the discussion around the divide between what should live in Ember and what should live in Ghost-UI - Ghost's bootstrap-like frontend framework. I've raised issue #2446 to continue this discussion, and welcome all to get involved.

Aside from this, there is also some work needed to get fixtures sorted out (#2415), which in part depends upon the work we are doing to redesign the API following the JSON API standard as closely as possible. The API redesign & refactor is also pivotal to delivering Apps, so we are looking to get more people involved with this - if you like APIs come give us a hand :)

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next weeks meeting: Tuesday 25th March, 5:30pm London time.

]]>
<![CDATA[Making Ghost Blogs Faster & More Secure: Hello CloudFlare]]> CloudFlare makes it easy for any site to be as fa]]>https://ghost.org/changelog/cloudflareGhost__Post__5cf5f94b3a5f1b0038cc711eTue, 18 Mar 2014 12:28:33 GMT

Time and time again, there are two things which consistently cause difficulty for blog users: Getting pages to load as fast as possible for visitors (and search engines) all over the world - and protecting work against attacks from malicious sources when a site becomes popular.

Today we are thrilled to announce an official partnership between Ghost(Pro) and the incredible team over at CloudFlare.

So what is CloudFlare?

CloudFlare makes it easy for any site to be as fast and secure as the Internet giants. We’ll make any website twice as fast and protect it from a broad range of web threats. CloudFlare is designed to take a great hosted service like Ghost.org's and make it even better.

How does that work? I'm glad you asked! In short, CloudFlare distributes your content across its network of 24 worldwide data centers. This means that there's the shortest possible distance between your data and your reader - which makes things much quicker all round.

CloudFlare Network Map

In addition to the speed increase, CloudFlare actively protects your blog against attacks such as Distributed Denial of Service (DDoS), hacking and malicious use of web forms.

Faster, safer, better. It's pretty cool.

And how much do I have to pay for all this extra stuff now?

Nothing. It's free for every single Ghost(Pro) user. Over the next few weeks it will be automatically enabled on your blog, so you don't need to do anything at all. It just works! Like a tiger riding a unicorn with 4 litres of Red Bull and a sword. Fearsome.

Enjoy your (even) faster blog!

]]>
<![CDATA[Public Dev Meeting 11th Mar]]>https://ghost.org/changelog/public-dev-meeting-11th-marGhost__Post__5cf5f94b3a5f1b0038cc7043Wed, 12 Mar 2014 11:31:46 GMT

This week we made 3 pretty big infrastructural changes - 1. we switched JSLint for JSHint so that we can use ES6 modules, 2. we added bower for managing our frontend dependencies and 3. we removed all Sass from the Ghost repository, instead pulling in a pre-built css css file & fonts from the Ghost-UI repository and removing Ghost's dependency on ruby in the process.

The Ember.js project is moving forward, with the prototype now merged into the Ember branch. This week we are going to focus on getting a mock API in place to develop against and get the project moving full steam ahead. @hswolff is acting as our 'Ember Envoy' and is the main point of contact for this project.

Work on the real API & permissions continues for Apps on the 003-data-updates branch. This branch is going to continue on for a little longer, as we are going to release master as the next version of Ghost shortly. I've setup Milestone 0.4.2 which closes on the 17th, this contains all the work on 0.5 so far, a few things which are in progress and a couple of bugs. If all goes to plan, this will be released as Ghost 0.4.2 on the 25th of March. More info on what's in the release will be published soon!

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next weeks meeting: Tuesday 18th March, 5:30pm London time.

]]>
<![CDATA[No more ruby dependency!!]]>https://ghost.org/changelog/no-more-ruby-dependencyGhost__Post__5cf5f94b3a5f1b0038cc7042Tue, 11 Mar 2014 12:12:00 GMT

It is with MUCH excitement that I write this post to declare that building Ghost no longer depends on ruby.

whoohoo

That's right, you no longer have to have both node AND ruby on your development box to build or deploy Ghost. No more Gem files, no more bundler, no more bourbon. We don't have to wait for Travis to do ruby things, Gemnasium is no longer utterly confused and using tools like Werker is now straight forward. The PR removed so much complexity, you might even want to look at it, you know, in awe and stuff.

Why were you using ruby anyway?

Ghost's admin UI is written with Sass, and the ruby Sass compiler is the default. We tried to switch to node-sass (we really did), but the libsass C library it uses to compile is unfortunately missing too many features which we require. Therefore we were stuck with requiring ruby.

So how did you get rid of it?

pulse

Ghost has now split out the Sass for its admin UI into a frontend framework over at Ghost-UI. Much the same as Twitter Bootstrap, that repository generates a set of CSS files, fonts, and soon JS files that allow you to easily create simple UI components like buttons and tabs in the Ghost UI style. The framework is also open source, and if you're a frontend dev wanting to contribute to Ghost - it's the place to be (but you will still need ruby).

This week we made another important change to the Ghost infrastructure - we added Bower to manage our frontend dependencies. This means that we can pull in the Ghost-UI files using bower and a grunt task to put the files in the right place. It also means that the Ghost codebase has significantly reduced in size this week which we hope will help make it easier for new developers to navigate.

If you're a frontend dev looking to work on Ghost-UI alongside Ghost, and wondering how to make it possible to work with them both without having to publish to Bower, I highly recommend having a read of Thomas Parisot's Bower link tutorial. For everyone who just wants to work on Ghost core, or build Ghost from source, this is an important step forward. Excite!

]]>
<![CDATA[Keepin' Track of Your Views]]>https://ghost.org/changelog/viewcounterGhost__Post__5cf5f94b3a5f1b0038cc7122Mon, 10 Mar 2014 13:20:15 GMT

The three most common questions we get about our Ghost(Pro) service are "What is a view? How do you count them? And what happens when I go over the views in my plan?" - Today, we'd like to give you some answers.

We count a "view" as a each time a page loaded and someone views it. In most analytics programs this is referred to as a "pageview". If someone visits your site and looks at 1 page, that's 1 view. If they click on related links and read 5 different consecutive posts on your blog, that's 5 views.

How do we measure "views" ?

How views are measured is very important to us, because views determine what plan you should be on, and how much you are billed.

Initially, we tried a simple approach where we counted views based on requests to the server. Unfortunately this was far from ideal, as we found that when compared to a standard tool like Google Analytics - our view count was about 300% higher. Because of this, we haven't enforced any plan limits based on views up until now, to make sure that nobody gets billed for more views than they really received.

So we went back to our cauldron to whip up something new.

This is a cauldron of AWESOME

Our goal is always to make sure that we report a view count which is the same or lower than a standard analytics tracking service so that you are always billed fairly and accurately.

Today we're announcing the new Ghost(Pro) viewcounter which is a big improvement all round on our initial attempts.

How it works

To get an accurate count, we want to make sure that we only count a view when an entire page has been fully loaded. In order to track this, we insert a 1 pixel image file called view.gif at the very end of your blog's source code. When this file is loaded, it counts it as a view and tracks which page has been viewed.

<img src="/view.gif?page=/about-me" alt="" style="display:none" hidden />

This image is completely invisible and hidden, so it never shows up on your blog. It just counts views in the background and nothing else.

We count each view received by this file, and then we reduce your total viewcount by 5%. So if you receive 100 views, we count 95.

Why? Because we want to be certain that we report a view count the same as, or less than, a standard analytics tool. You may occassionally be billed too little for your usage, but you should never be billed too much.

How many views did I get?

In order to keep track of how many views your blog has been getting, we've created a viewcounter which will appear on your blog management screen on Ghost.org. It looks like this:

View Counter

This counter tells you how many views you've used in the current billing period out of your plan's allowance. It also has a small black chiclet to indicate how many days are left until your view count will reset and begin the next billing period.

If the black chiclet is ahead of the green bar, you're probably on the right plan. If you find that the view meter is filling up faster than the black chiclet is moving, that's a good indication that you're probably going to run out of views before the end of the month!

What happens if I get a lot of views and go over my limit?

First, we try to let you know before this happens. Every day, the Ghost(Pro) systems check for blogs that are getting close to their view limit for the month. If you've used more than 80% of your views, we send you an email to let you know in advance.

As soon as we notice that you've exceeded your limit for the month, we send you another email to tell you, and from this point you have a grace period of 3 full days to upgrade your Ghost(Pro) plan.

So, if you're right on the limit, and you run out of views just 2 days before your viewcount is due to reset - you don't need to worry about upgrading. Your view count will reset by itself.

If 3 full days have gone by and you still haven't upgraded your account to a higher plan or come to the end of your billing period, we will temporarily suspend your account until you are able to upgrade it. We send you an email when this happens, too, so you're always in the loop.

When will this be starting?

We're planning to start the rollout of the new viewcounter across all (Pro) accounts over the next few days. Today, we just wanted to let you know in advance what's happening and how it works.

Everyone's view counts will be starting from zero. No nasty surprises.

If you have any questions about how this works, please let us know in the comments below and we'll do our best to answer all of them!

By the way: Our viewcounter is only intended to track basic usage as it relates to your Ghost(Pro) plan. If you want full data on your blog traffic, we recommend installing a 3rd party analytics system in your theme. Google Analytics, GoSquared and Piwik, are 3 of our faves.

Awesome cauldron photo from Flickr: 64790426@N03

]]>
<![CDATA[Introducing Ghost(Pro)]]>https://ghost.org/changelog/introducing-ghostproGhost__Post__5cf5f94b3a5f1b0038cc7121Thu, 06 Mar 2014 12:29:25 GMT

Today I'm excited to share a momentous realisation we've come to at Ghost HQ.

We have suspected this for a while (I must admit) but recently we have been able to confirm, beyond reasonable doubt, that it turns out "The Ghost.org Official Hosted Platform / Service / Thing" - actually isn't a very catchy or memorable name.

So, we're renaming it...

Ghost(Pro)

But Seriously Why The Change?

There are several reasons. I'd like to share the most important of them with you.

For clarity - We've had a hard time (and so have many of you) distinguishing between the open source project and the official hosted platform in conversation. This new name should hopefully remove some confusion, and make it easier for everyone to stay on the same page.

Ghost = The software.
(Pro) = The official hosted service.

For marketing - We are a non-profit organisation called the Ghost Foundation and Ghost(Pro) is our only source of income. For Ghost to continue to exist and grow, we need to market our service effectively to new users. Ghost(Pro) subscribers are the people who finance the ongoing development and improvement of the Ghost software for the entire world (Thank you!).

For science - Studies suggest that 3 letters are easier to remember than [more than 3 letters]. We want you to remember Ghost(Pro).

So, that's it. Over the course of the next few days we'll be updating some naming and slowly rolling this out across Ghost.org. There are no other changes to any existing Ghost(Pro) plans. It's just a new name.

PS. Want to actively support Ghost and help us improve the software? Plans start at just $5 a month, and we'd be crazy not to remind you that you can try out Ghost(Pro) completely free right here.

]]>
<![CDATA[Public Dev Meeting 4th Mar]]>https://ghost.org/changelog/public-dev-meeting-4th-marGhost__Post__5cf5f94b3a5f1b0038cc7041Wed, 05 Mar 2014 11:09:39 GMT

How on earth is it March already? Time flies when you're having fun!

Development efforts are currently split between the Ember and Apps projects, however both of them are quite slow-going due to complex dependencies:

  • Ember - we are in the process of setting up a new branch with all the tooling we need to build the Ember.js version of the admin UI.
  • Apps - we're working through large data model, permissions and api issues which are heavy going.

The ember branch should be ready in the next few days, and the 003-data-updates branch will hopefully also be finished with this week. There is likely to be a flood of new issues in the coming days, one set to get the work on the Ember.js rewrite going, and another set to start adding filters to Ghost so that App development can properly get under way. In next week's meeting we will look at prioritising the projects.

For those of you interested solely in working on the Ember.js re-write, there is an Ember.js milestone where you can see all the active issues. Additionally, all issues relating to Ember.js have [Ember.js] in the title, so you should be able to watch the Ghost repository, and filter those issues to keep the noise down.

During the meeting we also discussed adding a concept of actions - events or notifications of actions which occur in Ghost which are 'fire and forget', unlike filters, there is now an issue to continue that discussion. Additionally, we need to re-start the discussion around assets from the perspective of apps. We'd love to get more ideas added to the App Ideas page, and PRs to the Example Apps repository are also very welcome.

Code Reviewing PRs

I'd like to encourage everyone - be you a lurker, a regular contributor, or somewhere in between - to review PRs and leave feedback. It's really useful to know if anyone else has read through the code or taken a PR for a spin. It's really easy to setup git so that you can checkout a PR like a branch, just follow these instructions: https://gist.github.com/piscisaureus/3342247

Weekly Email Digest

If you receive notification of these blog posts through the email subscription, we have moved it from sending a weekly digest on Mondays to Wednesdays. This way you'll get the email the day after the meeting, rather than the day before, keeping you more up to date. Apologies for the extra email this week. If you aren't subscribed and would like to be, you can do so via the green box on http://dev.ghost.org/.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next weeks meeting: Tuesday 11th March, 5:30pm London time.

]]>
<![CDATA[How One Blog Led to $18m of Funding & The World's Largest Online Q&A Community]]>https://ghost.org/changelog/how-one-blog-led-to-18m-of-funding-the-worlds-largest-online-qa-communityGhost__Post__5cf5f94b3a5f1b0038cc711fFri, 28 Feb 2014 13:38:06 GMT

There are a few names in the web community which pop up time and time again in the historical records. People who have been responsible for great change in the technological, the business and the social aspects of the web. One name that many (if not most) will recognise, is Jeff Atwood; co-founder of Stack Overflow, and now - his new project - Discourse.

What is perhaps a little less known, however, is that it all began with a single blog.

A decade ago, in 2005, Jeff Atwood was a full time computer programmer for a small Microsoft consulting firm called Vertigo Software. He had gotten the job, in part, due to the growing popularity of his new blog - a little website called Coding Horror. The CEO loved his blog, and Jeff enjoyed writing it, so he was able to continue to do that on an ongoing basis.

Back in 2005 there were significantly less programming blogs in the world than there are today. It didn't take Coding Horror very long to go from a readership of a few people to a readership of a few thousand people. Jeff describes it as incredibly motivating, and something which he really wanted to find a productive way of engaging with.

Coding Horror Screenshot

For the next 4 years, Coding Horror went from strength to strength until one day in 2008 when Jeff met one of his readers for the first time. His name was Joel Spolsky. Coding Horror had now gotten to the point where the blog had grown so large and so fast, that Jeff was looking for an opportunity to put his ever-growing audience to positive use.

In his own words...

I'd reached the point where I was thinking that this is the most significant thing I've ever done. I can go to work and talk to 20 people in a day, or I can post on my blog and reach a hundred thousand people every day. Which makes more sense? So the question becomes what do you want to do? What do you do with this big ball of energy which has the potential to change the world in some way?

So Jeff started reaching out to people for ideas for what to do. He talked to several people who he thought were interesting, but Joel Spolsky, who he'd met just the once, had the best idea. He had seen a website called Experts Exchange and he believed it could be improved and specifically targeted towards programmers.

As the pair set to work on their idea for a new Q&A site which would really work, Jeff took to his blog to ask his readers for help with naming it. In April of 2008, Coding Horror readers voted, by overwhelming majority, that 'Stack Overflow' was by far the strongest candidate. A few weeks later, the new site was announced.

Stack Overflow Screenshot

They described the difference between StackOverflow and its competitors as simply taking existing ideas and combing them to create something new that really worked.

For a long time it was just Jeff and 2 developers working away quietly and talking to Joel once a week on the phone. Jeff continued to blog on Coding Horror, and they set up a new blog on Stack Overflow took the format of a podcast of their weekly phonecalls. In episode 1, Jeff and Joel sit down to discuss everything they wanted (and hoped) StackOverflow would be. It's an amazing throwback to listen to now.

The rest, as they say, is history.

In 2010 Joel moved into the official role of CEO and the company took a Series A of $6M followed by a $12M Series B just two years later. Today, Stack Overflow receives an average of 18million page views per day and has become the destination of just about every programmer in the world, the second there's a problem which they need some help with.

It's incredible to read stories like this which all began with just a blog. A ball of energy and potential which, when harnessed, really can go on to do large and incredible things.

Nowadays Jeff has moved on to his new project: Discourse, which is the Ghost of online forum software, if you will. (In fact the Discourse project was where the "Free. Open. Simple." tagline originated, which Ghost has also adopted.) And Jeff still looks back fondly on the humble blog:

I think the blog is still very relevant. It's this way to connect with a very large audience, these people who are listening and paying attention to you. That's a privilege. I believe very strongly that you shouldn't squander that.

Today, we're very proud and excited to welcome Jeff Atwood to the family, as the Coding Horror blog begins its next decade of existence and influence, now published with Ghost.

]]>
<![CDATA[Public Dev Meeting 25th Feb]]>https://ghost.org/changelog/public-dev-meeting-25th-febGhost__Post__5cf5f94b3a5f1b0038cc703fWed, 26 Feb 2014 19:55:00 GMT

Yesterday's meeting revolved heavily around our decision to use Ember.js as our framework of choice for rebuilding the admin UI. If you'd like to read more about this decision, check out our announcement post.

I would like to thank everyone who took the time to write one of the ~100 incredibly valuable and constructive comments on the discussion thread and particularly thank the people who took the time to write some demo code: @hswolff wrote an example of the post settings menu in Angular, @samccone and @brian-mann demonstrated how much better our Backbone code could be with Marionette, @petehunt showed how much easier it would be to build our settings page in React and @manuelmitasch wrote an ember demo of the Ghost admin UI that was also worked on by @Globegitter.

Over the next week or so, we'll start getting a branch ready to redevelop the admin in Ember. If you'd like to get up to speed with ember, you can try out the CodeSchool course (drop an email to corey@codeschool.com if you need it adding to your account). We've got several core team members and developers from ember willing to help us out, but we also want to get as many Ghost contributors, new and old, involved in the code re-write as possible.

Right now, we're not 100% sure whether we're going to down tools on Apps to focus on this, or focus on shipping Apps first. The two projects will likely run side by side for a little while until we have a clearer idea of how much work is involved. We will update the roadmap & publish details of any changes to the plan as and when we are certain.


As well as the exciting news of the switch over to ember, we have a few other updates from today's meeting:

Introducing Ghost UI

This week we started a new GitHub repository called Ghost UI. We're going to split out the UI - that is SASS and interaction based JS into this repo in the form of a heavily Bootstrap-inspired user interface framework. Ghost UI will contain SASS and JS, which will be built out into a single .css and .js file that will then be included in Ghost via bower.

The Ghost UI repository will also contain extensive documentation for the framework, it's components and the parts that make them up. The intension is to make it easier for designers and frontend developers to get involved with and contribute to the Ghost project. We believe we're the first OSS project of our kind to structure our development this way, and we really hope it will help to encourage more frontend contributions.

Ghostalk

A few of our contributors have started a Ghost podcast! The first episode of 'Ghostalk' featuring Fabian Becker, Gabor Javorszky and Nick Pfisterer is available on https://talk.ghost.io, it covers all the latest goings on in the world of Ghost Development, and is far more digestible than IRC logs!

Ghostalk

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next weeks meeting: Tuesday 4th March, 5:30pm London time.

]]>
<![CDATA[Hello Ember]]>https://ghost.org/changelog/hello-emberGhost__Post__5cf5f94b3a5f1b0038cc7040Wed, 26 Feb 2014 12:25:00 GMT

Today we are announcing that the Ghost Admin UI is going to be rebuilt in Ember.js.

Ember.js

For the past couple of weeks, there has been an epic discussion occuring on Ghost's GitHub. The idea is that we're looking to find the right tool with which to build the next iteration of the Ghost admin UI: the main options being Angular, Ember, React or Backbone + marionette etc. Our existing Backbone implementation has a number of problems, so we've been specifically looking for the tool that will best solve those problems:

  • Is it client side? Is it server side? Is it dark side?
  • Data binding
  • Route/navigation/history management
  • View management
  • Fragile Code
  • Lack of clarity & guidelines on how to approach common problems

The discussion around which tool we should adopt has been amazingly positive and open minded, and has provided a great deal of insight. There is no doubt that any one of the options discussed could do a great job of driving the Ghost admin UI. However, throughout the discussion, there was one tool which shone out as being the right choice for Ghost. That tool is Ember.js.

Ember.js stands out from the other choices because it is strongly opinionated. Although seen as a downside by some, for Ghost, this is exactly what we need. As a fast moving open source project, we don't want to spend time discussing and deciding on the best structure, designing a framework & creating documentation and guidelines so that new contributors can get up to speed. With Ember.js, the majority of decisions have been made, making it easy to get going, easy to knowledge share, and easy to onboard new developers.

There are many other reasons for Ghost to choose Ember.js. It solves all of the hairiest problems we've faced with routing, data binding and view management in a straight forward manner. The tight integration with handlebars is a great fit with Ghost's existing dependence on handlebars. The top-down, URL driven approach is also going to help us push the whole app down to the client side in a much more structured manner.

The involvement of the Ember.js community in our decision making process has also been a great plus. We owe a special thanks to Trek, Manuel, Markus, Stefan, Taras, Erik, Yehuda, Tom and everyone else from the Ember.js community who got involved. They've shown that they are a passionate bunch of people and they have been very keen to get stuck in. The importance of their willingness to help us quickly turn around a big re-write cannot be overlooked, but this is not the only reason we are keen to join them. Their community and their approach is one we would love to emulate in Ghost's community, we hope that by working with them, some of their awesomeness will rub off on us!

Our core team is extremely excited to get stuck in with the rewrite. There will be plenty of news and updates here and on GitHub as the project unfolds. If you want to get involved, the best way is to drop by our IRC channel: #ghost on Freenode. The more the merrier!

]]>
<![CDATA[Such Ghost. So Guardian. Wow.]]>https://ghost.org/changelog/such-ghost-so-guardian-wowGhost__Post__5cf5f94b3a5f1b0038cc711dFri, 21 Feb 2014 11:34:05 GMT

A couple of weeks ago our (now) friends over at Duedil received several thousand pounds worth of advertising for free in one of the UK's largest newspapers: The Guardian.

Not knowing, really, what to do with such advertising - they decided to just run a giant picture of Doge for a day, and give the rest away to small businesses who might benefit from some mainstream news exposure.

Joyfully for us, Ghost was one of the companies selected to receive part of the remaining advertising budget. So today we are gracing the Business and Finance section of The Guardian.

Ghost Guardian Newspaper Advertisement

We thought we'd keep it clean and simple.

If you picked up a copy of The Guardian today - take a picture of yourself with the Ad and post a link in the comments. We'll give a 6-month free coupon for the Ghost Hosted Platform to the best photo!

Much thankyou.

]]>
<![CDATA[Ghost Theme Tips: Defining Content Blocks]]> If I've got some area in my default.hbs file, but I want it to contain information that changes depending on the post or page I'm viewing (for example meta data), can I do that and if so how? The answer is yes, you can! It's also really quite straightforward, however the feature is hidden away in the depths of how Ghost works, and not (yet) covered by our documentation. The following examples hope to demonstrate common Ghost-specifi]]>https://ghost.org/changelog/ghost-theme-tips-defining-content-blocksGhost__Post__5cf5f94b3a5f1b0038cc703eFri, 21 Feb 2014 10:08:11 GMT

In recent weeks I've seen a question popping up regularly:

If I've got some area in my default.hbs file, but I want it to contain information that changes depending on the post or page I'm viewing (for example meta data), can I do that and if so how?

The answer is yes, you can! It's also really quite straightforward, however the feature is hidden away in the depths of how Ghost works, and not (yet) covered by our documentation. The following examples hope to demonstrate common Ghost-specific use cases and how to achieve them.

There is a feature of express-hbs called content blocks. This will allow you to define a placeholder block in a layout file (e.g. default.hbs), and then define the content for that block in a template file (e.g. post.hbs). A common example of this is wanting to set Open Graph and other meta tags for posts:

In default.hbs:

<head>
    {{{block "metaTags"}}}
</head>

In post.hbs:

{{#post}}
    {{#contentFor "metaTags"}}
        <meta property="og:title" content="{{title}}" />  
        <meta property="og:url" content="{{url absolute="true"}}"/>  
        <meta property="og:type" content="article" />
        <meta property="article:author" content="{{author.website}}">

    {{/contentFor}}
    ... rest of post output ...
{{/post}}

You could define something different to be output in index.hbs:

{{#contentFor "metaTags"}}
    <meta property="og:title" content="{{meta_title}}" />  
    <meta property="og:url" content="{{url absolute="true"}}"/>  
    <meta property="og:type" content="website" />  
{{/contentFor}}

There are a few interesting and potentially confusing points to note about how this works. The block helper looks like {{{block "name"}}}, where name is the name of the placeholder you are defining. The name here needs to match the name you use with the contentFor helper.

Additionally, if you are going to define HTML to be output by the block as in the example above, the block helper needs three braces ({ and }) not two as with most helpers. If you only use two, the HTML will be escaped, using three tells handlebars to trust the output and render it as HTML instead of escaping.

The contentFor helper is a block helper - this means it has opening and closing parts rather than being a single helper. It looks like {{#contentFor "name"}}content here{{/contentFor}}, where name matches the name defined in the block helper, and the content you want to output in the block is between the opening and closing parts.

Note: confusingly the block helper is not a handlebars block helper so it doesn't have a # at the beginning.

Another example of how you might use this would be to add extra classes to the body tag:

In default.hbs:

</head>
<body class="{{body_class}} {{block "customBodyClass"}}">
...

In post.hbs:

{{#post}}
    {{#contentFor "customBodyClass"}}
        {{~#if featured~}}
            {{#if page~}}
                featured-page
            {{~/if}}
        {{~/if~}}
    {{/contentFor}}
{{/post}}

This time, the content I'm outputting is just a class, no HTML, so my {{block}} helper only needs two braces. Adding three wouldn't do any harm, but in this case I don't need them. However, the content I'm outputting does need to be free from additional whitespace so I'm making use of handlebars' new whitespace control feature which uses a ~ character to remove whitespace.

Hopefully, these examples open up some new possibilities for theme developers. For more details of what is possible with Ghost themes, be sure to get familiar with the handlebars, express-hbs and Ghost documentation - all of these resources are updated regularly. Happy theming!

Update 27/10/15: If you need some additional information on how to use layout templates, check out this section of the Ghost theme docs

]]>
<![CDATA[Public Dev Meeting 18th Feb]]>https://ghost.org/changelog/public-dev-meeting-18th-febGhost__Post__5cf5f94b3a5f1b0038cc703cWed, 19 Feb 2014 15:27:50 GMT

Today we had another general progress meeting around milestone 0.5. One of the best ways to get visibility on the progress of Apps is to keep an eye on issue #1474. This issue lists open issues, those which have been completed and other useful details.

The delivery date for 0.5 (which was a placeholder) has now been set for Monday 31st March. This means that all PRs for 0.5 need to be submitted by midnight on the 31st to be considered for inclusion. If all goes to plan, this means that 0.5 will be released on the 8th of April.

The team has now delivered a large chunk of the theme section of 0.5. We have some pretty awesome features in there, and we're hopefully going to wrap up the remaining pieces in the next week or so. I'll be adding a specific write-up on that here on the dev blog very soon.

The apps section of 0.5 is also progressing well, although there is still a sizable backlog of open issues. We have reached a somewhat awkward stage of the process where there are 2 or 3 issues which are dependencies for finishing up everything else. However, by mixing theme and other work in with Apps, we're continuing to make excellent progress.

We are still looking for more contributors to take on some of the work, and have started labelling issues that would be suitable to people who are new to Ghost development with beginner. If you'd like to get involved, jump on in - if you want to chat or have any questions come join our IRC channel - #ghost on freenode.

Next week:

Next week's meeting has been set aside to finalise our thoughts and decision making on the future of Ghost's admin UI - that is to determine how we are going to move forward with the admin interms of toolkit, the process for rebuilding, who, what, where when etc. If you're interested in taking part them please come along on Tuesday 25th February, 5:30 GMT.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next weeks meeting: Tuesday 25th February, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 11th Feb]]>https://ghost.org/changelog/public-dev-meeting-11th-febGhost__Post__5cf5f94b3a5f1b0038cc703bWed, 12 Feb 2014 07:47:23 GMT

Today's meeting was a general progress meeting around milestone 0.5. One of the best ways to get visibility on the progress of Apps is to keep an eye on issue #1474. This issue lists open issues, those which have been completed and other useful details.

Ghost apps have made a couple of important steps forward this week. The boilerplate has been improved, and the Ghost-App has been bumped to v0.0.2 and published to npm. The first set of instructions on how to get started with apps are available on the wiki, but are subject to change. Additionally, a new repo Example-Apps has been created to provide examples of how to use functionality as it is added.

The meeting focused heavily on the naming conventions for helpers and filters, and how to gather together a sensible set of filters to add to Ghost 0.5. In particular there was a discussion of whether apps should have any ability to hook into the editor in 0.5, given that those apps would likely break when we refactor the editor in 0.7.

We wrapped up with a discussion about issues which were waiting to be picked up, and who wanted to do what. There are a number of pretty hard and much unloved issues sat in #1474 waiting for someone to grab them, so if you're not involved yet and looking to get stuck in, please do!

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next weeks meeting: Tuesday 18th February, 5:30pm London time.

]]>
<![CDATA[A New Face for The Official Ghost Blog]]>https://ghost.org/changelog/new-ghost-blogGhost__Post__5cf5f94b3a5f1b0038cc711cTue, 11 Feb 2014 11:56:53 GMT

Today we're very pleased to announce an all new look and feel, right here, for the official Ghost blog.

Up until now, our official blog had been running a completely standard implementation of the default Casper theme which ships with every copy of Ghost. It worked very well, to get us started, but we've always wanted to have something a little more custom that's a part of the rest of Ghost.org and properly integrates our branding.

So, that is what you are now looking at!

Ghost blog screenshot

Along with the new design, we've also added a few bits of new functionality and plans for regularly published content. You can now subscribe to this blog via (weekly) emails, as well as RSS.

We'll be aiming to put together and publish regular content about what goes into building Ghost behind the scenes, who's using Ghost, and how blogging (and online publishing) as an industry continues evolve and shape the world of new media.

What else? You tell us! We've switched on comments for the first time. This is a project with a large community with a passionate voice; so we want to hear your feedback.

What kind of content would you enjoy reading here?

]]>
<![CDATA[Public Dev Meeting 4th Feb]]>https://ghost.org/changelog/public-dev-meeting-4th-febGhost__Post__5cf5f94b3a5f1b0038cc703aTue, 04 Feb 2014 21:14:46 GMT

Today's meeting focused specifically on the 'Apps' section of milestone 0.5, as further described by the epic issue #1474. The purpose of the epic is to track progress and provide visibility by grouping the work into related issues with clear & measurable goals.

The majority of the meeting focused around discussing issues to do with 'App Safety and Security'. The Ghost app platform is intended to be stable, reliable and safe to use with a clear one way of doing things. Apps should not be able to gain direct access to either the file system or the database, they should instead make use of the APIs provided by Ghost. This is intended to provide both security as well as making it less likely that Apps break as Ghost evolves as the provided APIs will be maintained abstractions which can be depended upon by App developers.

We accept that it isn't possible to prevent malicious use of the platform in all cases. However, the apps will be sandboxed to prevent access to blacklisted modules in order to deter app developers from using those tools instead of the provided APIs. We aren't 100% sure if this is a good balance between security and creativity, so want to try to land this as early as possible so that app developers can try it out and feed back to us.

The creation of the app platform requires us to roll out ACL across the API and other aspects of Ghost. There are still various aspects of how this will work, specifically with regard to determining which app or user is requesting permission at any given time, which are not clear. We discussed creating clear examples so that the work becomes less theoretical.

Work on the Data API is already on-going. We believe that this will have a big impact on the reliability of Ghost, and give us further room to improve the codebase. Documenting the API is going to be an interesting challenge - we are aware of the limitations of the current format of our documentation, and are in the process of improving this.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next weeks meeting: Tuesday 11th February, 5:30pm London time.

]]>
<![CDATA[What's new for Themes in Ghost 0.4?]]>https://ghost.org/changelog/ghost-0-4-themesGhost__Post__5cf5f94b3a5f1b0038cc7035Sat, 01 Feb 2014 13:05:00 GMT

With the release of Ghost 0.4.1 yesterday, I wanted to take the time to finish this long put-off post detailing what has changed in the world of Ghost themes since 0.3.3. Yesterday's release included an upgrade to handlebars 1.3.0, so I'll cover highlights of what's new there as well.

The tech

Before we dive into features and fixes, I wanted to quickly outline the technology behind Ghost themes. Theme templates are written in handlebars.js, but handlebars is wired into Ghost using another library called express-hbs. Express-hbs provides additional features which we depend on such as the ability to have a layout file like default.hbs. As both of these tools evolve, so do the possiblities for Ghost themes.

Ghost 0.3.3 used express-hbs 0.2.2, and that in turn used handlebars 1.0.10. Ghost 0.4.1 uses express-hbs 0.7.6 which in turn uses handlebars 1.3.0. This information is useful when trying to determine where and when things have changed.

New features in 0.4

Ghost 0.4 brings many new features which impact on themes. The following outlines how themes should use and cater for those features.

Featured posts

On the content screen in the Ghost admin, it is now possible to mark posts as featured with the 'star' button. This adds a property of featured to those posts, and also outputs a class of featured via the {{post_class}} helper. This allows themes to do interesting things with how these posts are displayed.

So in a theme, you might have something like:

{{#posts}}
    {{#if featured}}
    	...
    {{else}}
        ...
    {/if}
{{/posts}}    

Equally, if you just need to target the post with CSS, you can with .featured.

Featured posts do not move from their place in the chronological post list. We have been asked how to show featured posts separately, or list just featured posts, but unfortunately this isn't quite possible yet.

What you can do is loop through the post count twice, that way if any posts on the current page are featured, you can display them at the top of the current page. This isn't a perfect solution, and we will be providing tools to customise post lists very soon, however it is worth nothing that looping through the post count twice will have minimal performance impact, as the list is already fetched from the database.

Static Pages

Static pages are posts which don't appear in the chronological post list. They are intended to be used for simple content pages, like an 'about' page. By default, Ghost will render pages using post.hbs the same as posts. However, if your theme includes a page.hbs template, Ghost will use that instead. Static pages also get a class of .page from the {{post_class}} helper.

There is no way to build a menu in Ghost, so there is no helper to output one and therefore links to static pages have to be hardcoded into a theme. We recommend including an optional partial for adding a menu to themes, or hardcoding common pages like 'about' pages, and include instructions for how to change it in your README.

Custom Error pages

By adding an error.hbs file to your theme, you can customise the way that Ghost displays errors. Currently this works for both 404 and 500 errors, although there is some discussion around whether it should only be for 404 errors as the most common 500 error that can occur is an error with a theme.

The error page gets very specific information, namely the error {{code}}, an error {{message}} and in some cases a stack trace. There is an example of how to template the stack trace in Ghost's default error template /core/server/views/user-error.hbs.

Be careful what you put in an error.hbs template. Having errors on the error page is never a good situation!

Subdirectory support

URLs in config.js can now contain a subdirectory, meaning users can set their blog to appear at http://my-ghost-blog.com/blog which was not possible before. Although nothing to do with theming, this has implications for creating links to assets. Ghost themes frequently have to add references to script, style, image and other files which they depend upon. Currently those links are static, hard-coded references that break if the Ghost url contains a subdirectory.

The asset helper solves this problem, as well as allowing us to improve the caching of static assets so that themes load faster. We highly recommend that all Ghost themes upgrade to use the {{asset}} helper for all asset URLs. Casper 0.9.2 has this improvement, and it's as simple as switching out a static url like /assets/css/screen.css to {{asset "css/screen.css"}}. The asset helper assumes that assets are kept in a folder inside your theme called assets.

Customisable favicon

With the addition of the asset helper, it is now also possible to add a custom favicon.ico file to a theme. For full details please see the section on favicons under the asset helper in the theme docs

Changes to the Ghost helpers

For full details of the helpers, see the theme docs.

New:

{{assets}} - allows you to build robust links to your asset files - asset helper docs.

{{encode}} - provides for encoding data, for example when building links to sharing services - encode helper docs.

Updated:

{{tags}} - added prefix and suffix options - tags helper docs.

{{excerpt}} - added unicode character support - excerpt helper docs.

Bug Fixes

Support for template partials in Ghost 0.3.3 was really sketchy. They often didn't work properly in production mode, definitely didn't work if a theme was symlinked, and it was just generally buggy. Even worse, in 0.4, empty partials would completely crash Ghost.

0.4.1 includes a number of improvements to partial handling, template caching and also error handling, so that Ghost will keep running even when themes do unexpected and broken things. When things do go wrong, instead of crashing with an error in the console, you'll get a proper Ghost error page with a stack trace. Even if the theme is completely unavailable (i.e. if you rename or delete the theme) Ghost will start and run so you can access the admin panel and change which theme is active.

What's new in handlebars?

Note, handlebars has undergone many changes, these are just a couple of highlights:

Subexpressions

It is now possible to pass the output from one helper into another helper. This feature is called subexpressions and is achieved by using parentheses. This is particularly useful in Ghost if you want to encode a URL for use in a share link:

{{encode (url absolute="true")}}

Whitespace Control

Handlebars has added the ability to strip additional whitespace from around a helper by adding a ~ character to the helper.

For example, when outputting a post list you may wish to add whitespace control like so:

{{#posts ~}}
	<ul>
        ...
    </ul> 
{{~/posts}}

A note to all theme developers

During the development of 0.4 it came to our attention that an enterprising theme developer had discovered an interesting 'feature'. If you use {{content words="0"}} instead of returning nothing, Ghost will return the first image or video if one appears in the post before the text content. Although this is technically a bug, we decided not to fix it until there is an alternative way to provide a cover image for a post - this 'feature' is now covered by our test suite so that it can't accidentally disappear in the same way as it accidentally appeared.

If you stumble across other hacks, workarounds or potential bug-features like this, please do let us know! That way we can ensure that we don't accidentally remove things you are relying on without warning. Equally, if you ever manage to break Ghost whilst theming it, please do raise a bug on GitHub, we want to make Ghost indestructible.

Thank you for all the amazing themes you have created so far. We look forward to seeing what you do with the new features in 0.4, and hope you'll come and help us test the features we are building in 0.5.

]]>
<![CDATA[Ghost 0.4.1 Maintenance Release]]>https://ghost.org/changelog/ghost-0-4-1Ghost__Post__5cf5f94b3a5f1b0038cc711bThu, 30 Jan 2014 15:34:21 GMT

Today, we're announcing Ghost 0.4.1 - which is a maintenance release.

With great features come great responsibilities. And great bugs. Today's release is heavily focused on ironing out some of the kinks in Ghost 0.4.

Here's what's new:

  • [Security] Improved password reset comparison
  • [Fixed] SSL config errors
  • [Fixed] Several login/session problems
  • [Fixed] Post settings input errors
  • [Fixed] Errors in themes no longer crash Ghost
  • [Fixed] Consistent paths for storing images
  • [Fixed] Import tool browser compatibility
  • [Fixed] Issues with unicode characters in post urls
  • Lots more

How to Upgrade

Users of our Hosted Platform will be automatically updated within the next 24 hours. In fact, many of you have been running Ghost 0.4.1 since before this post was even published! You're welcome.

For people running Ghost on their own servers, you can download Ghost 0.4.1 and then check out the upgrade documentation over on Github.

Enjoy!

]]>
<![CDATA[Closing 0.4.1 & Kicking Off 0.5.0]]>https://ghost.org/changelog/closing-0-4-1-kicking-off-0-5-0Ghost__Post__5cf5f94b3a5f1b0038cc7039Mon, 27 Jan 2014 22:57:40 GMT

Since launching 0.4 two weeks ago, there has been a pretty hectic 0.4.1 maintenance cycle in progress. Many and various bugs were pulled from the backlog, and several important new issues were raised and added from changes made in 0.4.

As a result, 24 bugs are now sat on the 0.4-maintenance branch, waiting to be shipped out. The deadline for PRs is officially midnight (about an hour from now). The release candidate will be published first thing tomorrow morning, and the public release of 0.4.1 should occur on either Wednesday or Thursday depending on how testing goes.

Meanwhile, planning and preparations are underway for the official kick-off of 0.5 in tomorrow's public dev meeting. The Roadmap for 0.5 has been hashed out in detail, and the planned features listing has also received a significant update to reflect the current state of planning for milestones 0.5-0.9. These documents constantly updated as we develop our plans for getting to Ghost 1.0.

In short, 0.5 aims to deliver the very first iteration of apps for Ghost, including the first official Ghost app: the Ghost Importer.

Tomorrow's public dev meeting is an opportunity for anyone and everyone to help us discuss and finalise the plans for what will be delivered in 0.5. It's also a great opportunity to come along and find out where and how you could get involved. We hope to see you there.

]]>
<![CDATA[Public Dev Meeting 21st Jan]]>https://ghost.org/changelog/public-dev-meeting-21st-janGhost__Post__5cf5f94b3a5f1b0038cc7038Wed, 22 Jan 2014 18:33:06 GMT

This was our first meeting since shipping 0.4. The release of 0.4 went reasonably smoothly, especially for such a large release. The majority of people have had no issues with upgrading, however there are a few bugs which need ironing out, so we have planned the release of 0.4.1.

0.4.1

The next maintenance release aims to clear down the backlog of open bugs, as well as investigate and resolve / improve a few issues that we are seeing crop up since the release of 0.4:

  1. Memory usage. This increased significantly in 0.4, and it's still not clear whether the usage is entirely stable.

  2. Error handling. Themes introduce unknowns, right now we don't handle errors from themes as well as we should.

  3. Sessions. There have been numerous reports of strange issues with logins / sessions. Some of these are known/fixed, but there are still a few we haven't figured out yet.

There are already a good number of bugs fixed in 0.4.1. The intention is to release this version at some point next week, if we can get enough progress made with the above 3 issues.

0.5.0

The roadmap and planned features listings are in the process of being updated. The UI designs will appear soon, along with a flood of issues to get them converted to HTML/SASS and then wired up. More information on 0.5 can be found in the epic that tracks what's going on in the milestone.

One major area concern for apps is safety and security. There is an issue open for discussion about how we can ensure that apps are safe to use. Input from the community would be much appreciated.

Finally, there is a big question mark over the dashboard. he initial plan was to make it possible to enable it with a config option in 0.5, and then have it on for everyone in 0.6. However, the dashboard is almost an entire application in itself and as it stand it doesn't seem like we have enough contributors, especially frontend developers, to deliver it in 0.5. Therefore, the initial planning for 0.5 will not include the dashboard. Instead, we'll plan the dashbaord and have a meeting about it in a few weeks to decide whether to include it, or move it.

Next week's meeting will be the official kick off for 0.5.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next weeks meeting: Tuesday 28th January, 5:30pm London time.

]]>
<![CDATA[Milestone 0.4 Complete]]>https://ghost.org/changelog/milestone-4-completeGhost__Post__5cf5f94b3a5f1b0038cc7037Mon, 13 Jan 2014 11:52:51 GMT

It has been a long slog, there have been 374 commits (not including merges) since we released 0.3.3 almost 3 months ago, but the milestone is closed and 0.4 is finally here!

Ghost 0.4 - Aton - is here!

Opening Ghost up to public contributions has been fantastic. The hard work, careful consideration and wide-ranging skill set of our community members has really driven 0.4 to be the first fully grown-up version of Ghost. It's been an amazing transformation to watch.

Thank you

I would like to say a personal thank you to each and every one of the people who contributed to 0.4. Without you, Ghost would not be the platform it is today. I hope to see more PRs from you all soon :)

I would also like to call out just a few people for their extraordinary contributions:

  • Fabian Becker - for his incredible number of contributions, which included delivering static pages and subdirectory support, among much, much more
  • Harry Wolff - for grabbing Ghost by the proverbials and delivering hard core refactoring work in a carefully considered and managable way
  • Sebastian Gierlinger - for re-building our database migrations in such epic style
  • Jacob Gable - for his continuous and unwavering dedication to the app platform.

Come join us

Want to see your name on the next release? Come get stuck in with us on GitHub. The official kick-off for 0.5 will happen during the public dev meeting on Tuesday 14th January at 17:30 UTC in the #ghost IRC channel on Freenode. Details of what we have planned for 0.5 are currently being updated on the roadmap.

Release Notes:

This version has focused heavily on refactoring Ghost, with a large number of non-user facing changes. These release notes detail only the features, fixes and changes that we consider will be of interest to most Ghost users. For those who are interested, the full changelog is available as a gist.

New Features

  • static pages
  • unsaved changes notification
  • featured posts
  • sexy new loading bar
  • quick edit post URL
  • date based permalink support.
  • subdirectory support
  • gravatar for user images
  • SSL support
  • welcome email on blog creation
  • available update notifications
  • tag helper has suffix and prefix property
  • new encode helper

Noteworthy Changes

  • notifications are now bottom left
  • switch to busboy for uploads
  • switch to server side sessions
  • more secure password reset process
  • sort by publish date on content screen
  • time supported in published date
  • support for SVG images when uploading
  • swapped nodejs-bcrypt for bcryptjs

Important bug fixes

  • duplicate content on content screen
  • content disappears after publishing
  • issues with partials and theme switching
  • email address is not case sensitive on signin
  • reversed post order on import
  • unicode characters in post slugs are converted to ascii
  • unpublished posts are not accessible
  • no negative posts per page
  • content & excerpt helpers work with unicode characters
  • punctuation in titles not properly respected
  • preview pane in editor no longer editable

These are just a few highlights. The 0.4 release contains almost 100 minor bug fixes, including numerous fixes to styling, the markdown editor, admin interface behaviour, security, rss feeds and the Casper theme.

Ghost has also been refactored significantly, meaning the codebase is considerably improved. Some key areas of refactor work occurred around config loading and management, storage and retrieval of paths and URLs, the removal of the ghost.js file, cleanup work around the API and a complete re-write of the database migrations system.

Finally, there has also been significant advances in the test suite, including running tests against sqlite, mysql and pg, improvements to unit, functional and integration tests and the ability to generate a coverage report. This improved test suite makes it easier for us to move faster and deliver more features with confidence in the future.

Notes on key features

A few of our new features are worthy of further explanation.

Static pages

You can now toggle any post to be a "page" from within your post settings menu on the editor or content screen. This will remove it from your post feed. About / Contact / Terms galore!

Unsaved changes notifications

We'll now give you a heads up when you're about to lose unsaved changes. So you can, you know, save.

Featured posts

Clicking the star on the content screen will mark a post as featured. Featured posts get an extra class so they can be styled differently.

Sexy new loading bar.

Always know when Ghost is doing something, a little blue bar crawls across the screen to let you know!

Quick edit post URL

You can now slap /edit/ on the end of any post URL and, boom, you're editing it.

Date based permalink support.

Available from the general settings menu, you can now get Ghost to output URLs in the format: /:year/:month/:day/:slug/ rather than just /:slug/.

Subdirectory support

You can now configure your URL in config.js to contain a subdirectory, such as http://my-ghost-blog.com/blog/.

Credits

This release was lovingly crafted by Hannah Wolfe, Fabian Becker, Sebastian Gierlinger, John O'Nolan, Harry Wolff, Jacob Gable, William Dibbern, Jakob Gillich, Matthew Harrison-Jones, Michael Bradshaw, Zach Schneider, cobbspur, jamesbloomer, Dane Springmeyer, Sebastian Gräßl, Zach Geis, buddhamagnet, Benjamin Chodoroff, Daniel Hanson, Gabor Javorszky, Mark Berger, Matt DuVall, Patrick Garman, Seb Gotvitch, Tim Griesser, Tony Gaskell, b1nd, germanrcuriel, remixz, sjama, Ben Gladwell, Declan cook, Derek Myers, Devin Doolin, Enrique Chavez, Harry Walter, Henning Sprang, Jacob Kaplan-Moss, Jacques Marneweck, Jeff Escalante, Jonathan Johnson, Jono Warren, Jorge Niedbalski, Karl Mikkelsen, Karolis Dzeja, Kumar Abhinav, Lev Gimelfarb, Lucas, Luke Arduini, Manuel Gellfart, Matheus Azzi, Matt Florence, Matt Hughes, Matthew DuVall, Michael Nason, Micheil Smith, Nick Donohue, Nick Pfisterer, Nick Schonning, Pascal Borreli, Paul, Paul Adam Davis, Peter deHaan, Ryan Powell, Ryan Seys, Sean Hellwig, Simone D'Amico, StevenMcD, Talon, Thomas Faurbye Nielsen, Tim Mansfield, Tom Gillett, Vineet Sinha, WangSai, Will Glynn, William Golden, Zlatan Vasović, abe33, ali, andy matthews, danschumann, enahs, jtw, moritz haarmann, nason, nicovalencia, omeid and rektide.

Thank you all!

]]>
<![CDATA[Ghost 0.4 - Aton]]>https://ghost.org/changelog/ghost-0-4Ghost__Post__5cf5f94b3a5f1b0038cc711aMon, 13 Jan 2014 10:58:58 GMT

Today we are releasing Ghost 0.4 - the next minor release of the Ghost blogging platform. With a great deal of shiny new things.

This release represents a total of 374 commits across 178 issues from 88 incredible contributors all over the world. It's a cleaner, faster, more sophisticated Ghost all round. It enjoys Johnnie Walker Blue Label Scotch, Mozart, and the refined flavour of a premium cigar.

Aton - the Egyptian God of Sun - is the first release named for one of our 3 Kickstarter backers who pledged £1,000 to making Ghost a reality last year. Aton Energy develops smart, clean technologies to make your life easier and greener. They're pretty awesome.

What's in The Box

Ghost 0.4 is chock full of features, improvements and fixes. We really think you're going to love this update. Here are just a few of our favourite things in this release:

  • Static pages. You can now toggle any post to be a "page" from within your post settings menu. This will remove it from your post feed. About / Contact / Terms galore!
  • Unsaved changes notifications. We'll now give you a heads up when you're about to lose unsaved changes. So you can, you know, save.
  • Featured posts. You can now mark posts as featured, and style them accordingly from within your theme.
  • Sexy new loading bar. Always know when Ghost is doing something, a little blue bar crawls across the screen to let you know!
  • Quick edit post urls. You can now slap /edit/ on the end of any post URL and, boom, you're editing it.
  • Date based permalink support. If you like that kind of thing.
  • SSL support and a more secure password reset process.
  • Over 100 bugfixes and minor improvements!
  • Much, much more

Ghost 0.4 also introduces an automatic update check service to let you know when a new version of Ghost is available (woo!). Ghost.org collects basic anonymous usage statistics from update check requests. For more more information, see the update-check.js file in Ghost core. This service can be disabled with a flag in config.js at any time, if required.

How to Upgrade

Users of our Hosted Platform on Ghost.org will be automatically updated over the course of the coming days. Have some Jonny Walker Blue Label and put your feet up. You're welcome.

For people running Ghost on their own servers, you will need to download Ghost 0.4 and then check out the upgrade documentation over on Github. If you're using the default theme without modifications, be sure to drop in a fresh copy of that - too!

Credits

This release was lovingly crafted by...

Hannah Wolfe, Fabian Becker, Sebastian Gierlinger, John O'Nolan, Harry Wolff, Jacob Gable, William Dibbern, Jakob Gillich, Matthew Harrison-Jones, Michael Bradshaw, Zach Schneider, cobbspur, jamesbloomer, Dane Springmeyer, Sebastian Gräßl, Zach Geis, buddhamagnet, Benjamin Chodoroff, Daniel Hanson, Gabor Javorszky, Mark Berger, Matt DuVall, Patrick Garman, Seb Gotvitch, Tim Griesser, Tony Gaskell, b1nd, germanrcuriel, remixz, sjama, Ben Gladwell, Declan cook, Derek Myers, Devin Doolin, Enrique Chavez, Harry Walter, Henning Sprang, Jacob Kaplan-Moss, Jacques Marneweck, Jeff Escalante, Jonathan Johnson, Jono Warren, Jorge Niedbalski, Karl Mikkelsen, Karolis Dzeja, Kumar Abhinav, Lev Gimelfarb, Lucas, Luke Arduini, Manuel Gellfart, Matheus Azzi, Matt Florence, Matt Hughes, Matthew DuVall, Michael Nason, Micheil Smith, Nick Donohue, Nick Pfisterer, Nick Schonning, Pascal Borreli, Paul, Paul Adam Davis, Peter deHaan, Ryan Powell, Ryan Seys, Sean Hellwig, Simone D'Amico, StevenMcD, Talon, Thomas Faurbye Nielsen, Tim Mansfield, Tom Gillett, Vineet Sinha, WangSai, Will Glynn, William Golden, Zlatan Vasović, abe33, ali, andy matthews, danschumann, enahs, jtw, moritz haarmann, nason, nicovalencia, omeid and rektide.

Thank you all!

Ghost 0.4 is available right now on Ghost.org. Users of the Ghost hosted platform will be automatically upgraded over the coming days.

]]>
<![CDATA[Public Dev Meeting 7th Jan]]>https://ghost.org/changelog/public-dev-meeting-7th-janGhost__Post__5cf5f94b3a5f1b0038cc7036Tue, 07 Jan 2014 23:39:37 GMT

It's been a few weeks since the last meeting due to the holidays. During the holiday period, we've still been working to lock down and finalise 0.4, but work has been much slower than usual. This, as well as the refactoring work done in 0.4 surfacing quite a few bugs, has lead to a significant delay.

The good news is that 0.4 is now completely locked down to 'serious bug fixes only'. A pre-release has been published for testing purposes, and another pre-release likely will be published tomorrow. If everything continues to go well with the testing process, 0.4 is set to ship on Monday 13th January.

During the meeting we discussed some of what caused the delay with 0.4, and how we plan to prevent this from happening in the future. We now have a planned 'official focus' for each milestone from 0.5 - 0.9 which work will center around. PRs which aren't part of the official focus are still very much welcomed, but shouldn't expect to be merged until the official focus has been achieved.

The GitHub milestones page and the roadmap have been updated to reflect these goals, and will see further updates over the coming week. Next week's meeting will be the official kick-off of 0.5.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

Help wanted!

This week we need as many eyes on the pre-releases as we can get! Please help us out by downloading the latest pre-release from GitHub, and trying it out. We've published some tips on what to test, and we also have detailed guidelines on raising bugs. Thank you!

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next weeks meeting: Tuesday 14th January, 5:30pm London time.

]]>
<![CDATA[Merry Christmas: The Ghost Hosted Platform is Now Open]]>https://ghost.org/changelog/hosted-platform-openGhost__Post__5cf5f94b3a5f1b0038cc7119Mon, 23 Dec 2013 12:00:28 GMT

Today we are bringing you an announcement from Ghost HQ that has been cooking for rather a long time: The Ghost Hosted Platform is now available to absolutely everyone.

Our hosted platform is a premium service which allows you to set up and run a Ghost blog in a matter of seconds. It's incredibly powerful, easy to use, and is probably the best way of running any Ghost blog online.

Most importantly - as a NonProfit Organisation - this platform will secure the future of Ghost. Every penny we make from our hosted platform is re-invested into improving the Ghost software for everyone in the world. So if you want to help Ghost grow and improve, give it a try, and consider hosting your blog directly with us.

Benefits include an incredible infrastructure, awesome support, and a warm fuzzy feeling as a result of helping to improve online publishing for the entire world.

The hosted platform is available for all users, right now, from your Ghost.org Dashboard.

For those of you interested in a little more of the story behind how we put this giant piece of work together to get where we are now... read on

Building Hosted Ghost

Shortly after our Kickstarter campaign completed, we embarked on a journey which was - by all measures - a pretty crazy one. Simultaneously to building the Ghost blogging platform itself, we set out to create a hosted service which would allow people to get a brand new blog up and running with the click of a button and scale to handle millions of visitors.

To add an extra bit of spice to the mix, much of the infrastructure which we've now created has never been done before with a piece of software built on Node.js.

We were incredibly fortunate that our wonderful friends over at aTech Media had not only decided to become Ghost launch partners during the Kickstarter campaign - but also wanted to help us build out this entire side of the project.

By early August, the boxes started to arrive, and we started plugging everything in and setting things up.

Ghost servers arriving in boxes

After a couple of months of rigorous development, pushing the Ghost project, the Ghost.org website and the brand new hosted platform ahead all at the same time - and in sync with each other (I can't begin to tell you how hard this is!) - we had our first working version.

The First Users

In mid-October, as we launched the first version of Ghost to the public - we started adding the first people to our shiny new hosted platform. Initially all the blogs lived on a subdomain of ghost.org, but after a lot of consideration and logistical tomfoolery, we decided to move public-facing hosted blogs to a ghost.io subdomain. Github style.

At this point Hannah was doing live demo (roulette) of the hosted platform preview on stage at various Node.js events and showing off the ease-of-use which would soon be coming to deploying a Ghost instance to the web. Fortunately, it worked every time!

Getting in The Kickstarter Backers

A month later, in late November, we were ready to put the platform through its paces with some more heavy usage. We started adding our Kickstarter backers at a rate of around ~1,000 per day, and asked them to set up and use the platform as rigorously as possible to try and help us iron out any hiccups in the system.

We found a few problems, but nothing major, and we continued to optimise the system to handle more concurrent requests to provision blogs at a faster rate.

Building it Differently

You see, what we've built is pretty special. Unlike something like WordPress.com or Tumblr or Medium - where they have one giant web application with multi-tenancy - The Ghost hosted platform provisions truly independent installs of Ghost on-the-fly. Why is that important? Well I'm glad you asked!

When multiple blogs all live within one large application, the blogs are all inherently linked to each other. This means that for security reasons, you can't give users full control over what they do. It would be very easy for a single user to bring down the entire network with one wrong move. That's why with these platforms, you are never allowed to have custom plugins or functionality, and you're almost always heavily limited on what (if anything) you can do with themes.

This limitation kind of sucks, because as soon as you get serious about blogging, as soon as you start to look at it from a professional publishing point of view... you want, and often need full control of your website to do things which go beyond the defaults.

With the Ghost hosted platform, each blog is an independent install of the Ghost software. It's not connected to any other blogs. This means that we can allow you to run apps (plugins) or custom themes or do (almost) anything you want. This was a really critical point for us, because we didn't just want to create this platform as something "easy" - suited to beginners.

We wanted to make it easy and create the best possible infrastructure for running Ghost that's available on the web. Giving publishers and developers full control over their Ghost blog is the most important piece of that puzzle.

Rolling Out To The Public

There's nothing like real-users to test your infrastructure (and your assumptions). In December, a few weeks ago, we started rolling out full access to Ghost.org users in bulk. We added 10-20,000 users almost every day. It was exciting (read: terrifying) and you guys successfully managed to wake us up several times at 3am to restart servers and rewrite systems which couldn't handle the volume of requests which they were being made subject to.

Slowly, but surely, it stabilised. We found the bottlenecks, we changed some of the UI based on your feedback, and we improved everything we've been working so hard on to get to this point.

Today, the hosted platform is available to everyone.

(PS. and it works!)

A huge thank you to Charlie, Adam, Jack, aTech Media, and everyone who helped make this tremendous milestone possible.

]]>
<![CDATA[Public Dev Meeting 17th Dec]]>https://ghost.org/changelog/public-dev-meeting-17th-decGhost__Post__5cf5f94b3a5f1b0038cc7034Wed, 18 Dec 2013 23:21:38 GMT

At the moment, we are 100% focused on locking down and delivering Ghost v0.4. It is a little delayed at this point, but we are still aim to deliver the new version before the new year. As such, the meeting was quite short - we don't have a great deal left to do (wooo!).

There are two major refactors still in progress: Static Asset Management #1405 and Sub-directory support #527. These should both be landing this week, meaning that we can start testing 0.4 in earnest. We are also still wrapping up a few UI improvements, hopefully nothing too scary.

Once all of the PRs are landed and merged in, we will take around a week to test the final version fully and squash any bugs we find. I post here once the testing period starts, at which point we'll have a clear idea of when exactly Ghost 0.4 will ship. Note: next week we'll be meeting on Monday, not Tuesday.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

Help wanted!

We're always looking for more people to get involved with Ghost. In particular this week we are looking for people to help us test Ghost version 0.4 over the holiday period, to ensure our release is as bug free as possible. Check out our guidelines on raising bugs - every bug raised counts as a GitHub contribution! :)

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Next week's meeting will be on Monday, not Tuesday, because Tuesday is Christmas Eve. Hope to see you there: Monday 23rd December, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 10th Dec]]>https://ghost.org/changelog/public-dev-meeting-10th-decGhost__Post__5cf5f94b3a5f1b0038cc7033Tue, 10 Dec 2013 12:00:00 GMT

Yesterday (Monday 9th Dec) was intended to be the close of 0.4. There was still quite a bit to do according to the roadmap, and we have been focusing mostly on refactoring Ghost core, meaning that we weren't as far along with Ghost apps (plugins) as we would have liked. Therefore we have reshuffled our roadmap / long term plan to the following:

  • the majority of remaining work has been culled from 0.4 and moved to 0.5, 0.6 or future milestones, with the exception of a few bits and pieces which we would like to wrap up first
  • 0.5 will now be a short-cycle release focusing purely on apps.
  • i18n and multiuser have now been moved along to 0.6

Over the Christmas period we will start to raise issues and flesh out a detailed plan for the 0.5 roadmap so that we can deliver the long-awaited app platform to the world. The exciting thing about dedicating a release cycle purely to apps, is the potential to get lots of interested parties involved in trying it out as we build it. We also feel that giving it our full attention is nothing short of what it deserves.

Over the next week or so we are focusing on finishing up 0.4, and getting it released somewhere around Christmas time. The narrow focus means not adding anything that isn't absolutely required for 0.4, so please don't be concerned if PRs for issues not in 0.4 don't get looked at until after the release.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next week's meeting: Tuesday 17th December, 5:30pm London time.

]]>
<![CDATA[This week's public dev meeting]]>https://ghost.org/changelog/this-weeks-public-dev-meetingGhost__Post__5cf5f94b3a5f1b0038cc7032Fri, 06 Dec 2013 09:42:14 GMT

Apologies, we cancelled this week's public dev meeting at the last minute as I (Hannah) wasn't able to make it. Next week's meeting will run as scheduled.

Ordinarily we hold a public development meeting every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next weeks meeting: Tuesday 10th December, 5:30pm London time.

]]>
<![CDATA[Database Migrations]]>https://ghost.org/changelog/database-migrationsGhost__Post__5cf5f94b3a5f1b0038cc7030Fri, 29 Nov 2013 11:55:22 GMT

As we add new functions and features to Ghost, there's always the chance we need to add to or modify the database schema. This needs to be done in such a way that it doesn't impact our users... each change needs to be applied to every single user's database without effort or requiring any complex upgrade steps. Our database migration system is how we manage this process.

How migrations work

From a user's perspective, database migrations are automatic. The database gets modified with any necessary changes whenever Ghost is upgraded to a new version - so when a blog owner copies over a new set of files, the database upgrade automatically happens when you restart. It is very very quick and you probably won't even notice it happening.

What is happening in the code, is on startup Ghost checks to see what version of the database it should be running - this is controlled by the databaseVersion value in core/server/data/default-settings.json. It then looks to see what version the database says it is running by requesting databaseVersion from the settings table. If there is no database at all yet, Ghost creates one from the latest schema, and if the settings table version is older than the code base version, Ghost knows it needs to upgrade.

Once Ghost knows it needs to do an upgrade, it then goes off to figure out what needs to change. It does this by checking for differences between the actual database structure, and the schema defined in core/server/data/schema.js. If something is missing, Ghost adds it in... if there is something extra, Ghost removes it*.

All of this is pretty fancy, thanks to @sebgie.

Working on Ghost core

If you are working on Ghost core, there are a couple of migration-related issues you might run into.

If you are switching between branches, for example between latest master and a slightly out of date feature branch, you may find yourself getting the following error message:

Error: Your database is not compatible with this version of Ghost

This is because whilst on master, your database got upgraded. When you switched back to an earlier version of the codebase, Ghost's start up checks determine that the database is newer than the code base and throws an error. We don't automatically downgrade because this could result in accidental data loss.

The easiest way to fix this error is to delete your database, and let Ghost create you a fresh one with the right version. In some circumstances, changing the version number in your settings table to match the codebase may work. We will be introducing a command line tool in future for working with migrations to make all this a bit easier.

Another consideration to make when working on Ghost core, is that you cannot and should not add or remove things from the database without careful consideration. If you determine that your feature can only be implemented with a schema change, then you should make your change to schema.js, and bump the databaseVersion number in default-settings.json at the same time. Please clearly mark any pull requests which require migrations.

* Note: at the time of writing, automatic database migrations only work for adding and removing entire tables. Adding and removing columns is coming soon, and making modifications to columns themselves will come later.

Update: 7th Jan 2016: This article is now quite out of date. Since writing, we've added an environment variable that will force the migrations to re-run FORCE_MIGRATION=true npm start will get you out of a bind if you've got half a migration on your local copy.

]]>
<![CDATA[Public Dev Meeting 26th Nov]]>https://ghost.org/changelog/public-dev-meeting-26th-novGhost__Post__5cf5f94b3a5f1b0038cc7031Tue, 26 Nov 2013 20:24:58 GMT

This weeks has seen us make considerable progress towards delivering milestone 0.4, with around 22 pull requests merged and 15 issues closed. A lot of the ongoing work is heavy refactoring of Ghost core, and this is set to continue next week. We have found owners for a couple more of the top priority issues - the issues in GitHub marked 'top priority' are the ones which we need to be complete for us to release Ghost version 0.4.

In today's meeting we also introduced some new tools for our developers, including this blog and also that we are using the zenhub chrome extension to give us a better overview of issues on GitHub and their progress.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot (who is also on GitHub by the way!).

Help wanted!

We're always looking for more people to get involved with Ghost. In particular this week, we're looking for some bug squashers. Come join us in our IRC channel - #ghost on freenode, and find out more.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next weeks meeting: Tuesday 3rd December, 5:30pm London time.

]]>
<![CDATA[Public Dev Meeting 19th Nov]]>https://ghost.org/changelog/public-dev-meeting-19th-novGhost__Post__5cf5f94b3a5f1b0038cc702fTue, 19 Nov 2013 12:00:00 GMT

This weeks meeting focused heavily on trying to find assignees for some of the highest priority issues in the 0.4 milestone. By the end of the meeting, 5 of the 8 unassigned high priority issues had found owners. You can find our list of high priority issues by viewing the Top Priority label on GitHub.

We also announced that the closing date for PRs for the 0.4 milestone has been pushed back two weeks to the 9th December. The 0.4 milestone contains a lot of refactoring and infrastructure work that is needed going forward. This work is a little slower than adding shiny new stuff, so we decided giving ourselves a little more time would help us to deliver a much better producing in 0.4.

Full details:

The full logs of the meeting are available from Slimer, our IRC bot.

Help wanted!

We're always looking for more people to get involved with Ghost. In particular this week, we'd love for some HTML & CSS gurus to get involved with helping us improve the Ghost admin UI. Come join us in our IRC channel - #ghost on freenode, and find out more.

For anyone looking to get involved with contributing to Ghost, who are not sure where to start squashing bugs can often be a good start point and there are a number of open bugs in 0.4. Alternatively, why not pick a pull request and give it a thorough test? Not only is this a great way to learn our code base and processes, but it's also enormously useful.

What is this?

We hold a public development meeting pretty much every Tuesday at 5:30pm London time in the #ghost channel on freenode. In this meeting we discuss progress, important issues, and what is and isn't on the Roadmap. It's a chance for everyone to get involved and have their say about where Ghost goes next.

Hope to see you at next weeks meeting: Tuesday 26th November, 5:30pm London time.

]]>
<![CDATA[Welcome to the Ghost development blog]]>https://ghost.org/changelog/welcome-to-the-ghost-development-blogGhost__Post__5cf5f94b3a5f1b0038cc702eMon, 18 Nov 2013 12:00:00 GMT

This blog has been a long time coming! Welcome to the home of development news and information for the Ghost platform. If you are (or want to be) building themes or apps for Ghost, contributing to Ghost core, working on docs and translations, or involved in QA or security, this blog is for you.

The Ghost development blog will detail the latest features for theme development, new additions to the Ghost Development for building apps, and information about significant changes to the Ghost code base. We'll also publish useful tools, tips & tricks for working with Ghost and general information about contributing. Finally we'll be posting the minutes from the regular development meetings, which are held in Ghost's IRC channel (#ghost on Freenode) every Tuesday at 5:30 London time.

Thanks for checking in, subscribe to the RSS feed for updates, and we'll see you around soon.

]]>
<![CDATA[Hosted Platform Preview]]>https://ghost.org/changelog/hosted-platform-previewGhost__Post__5cf5f94b3a5f1b0038cc7117Tue, 29 Oct 2013 15:01:30 GMT

It's been two weeks since Ghost launched publicly, and we've been absolutely thrilled by the response we've had. The most commonly asked question you've asked by far, though, is "When is the hosted platform coming?" So today, I'm very excited to share a preview with you of what's just around the corner.

FAQ: How will it work?

We've been working very hard indeed at Ghost HQ to create something rather special. We're very excited about this! Take a look: