The Ghost publishing system
Ghost is an MIT-licensed application written primarily in JavaScript; it has been under development since 2013. The project is owned by the non-profit Ghost Foundation, which appears to be mainly funded by an associated Ghost(Pro) hosting business. The entire platform appears to be free software; this is not an open-core offering.
At a first glance, Ghost looks like yet another blogging platform, providing the ability to create, edit, and publish articles. Tied closely to that platform, though, is the ability to send articles via email newsletters; Ghost seems to be firmly positioned as a free alternative to operations like SubStack. Support for paid subscriptions is also built in, with the ability to define multiple subscriber levels. Much of the documentation and in-system help provided by Ghost is aimed at helping users create and monetize their content with the platform.
Getting started with Ghost
Your editor decided to give it a try, following the provided instructions on an Ubuntu 22.04 platform; the result can be seen (through the end of October 2022 or so) at ghost.lwn.net. (Note that not a lot of effort has gone into fine-tuning that site's appearance, so the result is arguably even uglier than the regular LWN site). The instructions are clear enough and almost worked; the MySQL user account was not set up properly and had to be fixed by hand. Everything else, including the (seemingly) inevitable curl|bash step and the procurement and installation of a Let's Encrypt SSL certificate, simply worked.
The documentation falls down slightly at this point, though, in that it doesn't provide a next step. That step is to go to the site's dashboard page (under /ghost on the newly installed site), but nothing appears to provide the link to that page. Once that page is found, it becomes possible to play with themes, configure the look of the site, manage user accounts, and get into many of the other relevant details.
Posting an article starts in a fairly straightforward web-based editor. It
works well enough, especially once one learns that it is necessary to
highlight a range of text before the small set of formatting options
becomes visible. The interface is mouse-heavy in general; there are a few
keyboard shortcuts, but they fall far short of a proper text editor.
Perhaps more interesting is the ability to insert "cards" to bring other
types of media into an article. They can be as simple as Markdown or HTML
text, but also extend to images, bookmarks, audio content, video content,
or things like a "call to action" or "product recommendation". Widgets
from many of the popular online services can be embedded as well.
Articles can be previewed and published in a straightforward manner; it is also possible to schedule the posting of an article for some later time. Posts can be fully public or reserved for subscribers. It is also possible to fine-tune how the article will appear when posted to various social-media sites. In general, Ghost has clearly been developed with an eye toward social-media propagation, with the ability to add all of the usual links to encourage readers to spread the word.
Ghost allows readers to post comments on articles, but that functionality is disabled by default. Comments seemingly can only be plain text, with no ability for any sort of fancier formatting.
Going deeper
Going beyond the simple posting of public articles requires more setup, including the creation of accounts with other providers. For example, Ghost is designed to send email newsletters, but it will not do so directly; instead, it requires the use of a paid Mailgun account. The documentation warns that sending large amounts of email directly will only result in the site being blacklisted, so Ghost doesn't even try. LWN's experience is that the situation is not quite that grim — but running an independent email system on today's net is certainly a challenge. In any case, there is no ability to use any other bulk-email service, but that appears to be a result of nobody having gotten around to implementing the integration rather than some sort of special deal.
Stripe, instead, is presented as the "exclusive" payment provider. The integration looks simple enough to configure, though your editor, lacking a Stripe account, was unable to try it out. Given the "exclusive" wording, it would be interesting to see what would happen if somebody submitted a pull request adding support for another provider. There is no support for PayPal in the base install, but that support can be added later.
The site dashboard provides information on how the site's content is doing,
including how many subscribers there are and how many of those have
"engaged" with the site recently. Information on individual subscribers
includes their activity on the site and, for better or for worse, whether
and when they read their email newsletters. Tracking images are used to
obtain that information. There does not appear to be a way for site owners
to control the acquisition or retention of this data, and users are not
asked to consent to its collection. It could, as a
result, be difficult at best to run a Ghost site in a way that is compliant
with regulations like the GDPR.
User management on Ghost is a bit strange in general, in that there are two entirely different types of accounts. Ordinary users have whatever access to content their subscriber level allows, but no other access. There are no passwords associated with these accounts; logging in is done by providing an email address, then clicking on the link sent to that address. "Staff" accounts, instead, have the (configurable) ability to create posts, publish them, modify other users' posts, or exercise administrative access to the site. They must be created by an existing administrative account, and access is controlled by a password. An attempt to log into a staff account via the normal login form will fail; one seemingly has to go to a privileged page then provide an email address and password. There is no way to turn a normal user account into a staff account.
Internally, Ghost is split between the content-management system and the web front end; it is possible to use the former without the latter. There is an API that can be used to access the back end... actually, there are two of them. The API that is easily found from the front page provides read-only access to data in the system. More serious work requires using the admin API, which is rather harder to find, instead. Among other things, the APIs are useful to implement a vast number of integrations with proprietary services across the net.
Community and closing
Ghost is certainly an active project, producing a release every few days. An Internet-facing application like this needs to prioritize security; the Ghost Security page says many of the right things in that regard. The last release that mentions a security issue is 4.15.1 from September 2021. The idea that an application of this nature has had no security problems in over a year seems like a bit of a stretch, but one never knows. Updating a Ghost installation appears to be a relatively easy process.
The 4.20.0 release happened on October 22, 2021 — almost exactly one year ago. Since then, the project has added 16,130 non-merge changesets from 261 developers, which is certainly a respectable level of activity. Over half of those patches come from a relatively small number of Ghost employees, as would be expected, but there is also clearly a long tail of contributors from outside the project. Ghost development appears to be centered on its public GitHub site, with company employees submitting pull requests there like everybody else.
In other words, Ghost may be a project that is dominated by a single company, but it appears to have a healthy community and to be developed in an open manner. This doesn't look like software that was tossed over the wall and forgotten about. It is worth noting that the project's contributor license agreement allows the Ghost Foundation to release contributions under a proprietary license — though the project's MIT license poses few obstacles to that in any case.
The writing of LWN's site code began in early 2002, with the subscription
support added in a development frenzy by your highly motivated editor
toward the end of that year. Twenty years ago, there were not really any
alternatives to creating something from scratch; LWN, it seems, was ahead
of its time. If we were starting today, the situation would be completely
different; there are a number of options out there for people who are crazy
enough to try to make a living writing on the Internet. It is not certain
that Ghost would be chosen to host a site
like LWN, but it would undoubtedly be on the short list of contenders.
