As you may know, shortly after we released Fargo, we introduced a server-based CMS called Trex. A small community developed, we were off to a good start, then due to a programmer quitting, we lost the ability to scale the server.
In September, the server finally couldn't handle the load, and we had to turn it off. Fargo went back to being an outliner, with a number of vestigial features that didn't work because its back-end was kaput.
I had to quickly cobble together a Frontier-based solution so Scripting News could stay on the air, if I wanted to continue using Fargo, and I most certainly did. Then after a couple of weeks of using that system, it occurred to me that I could port this new code to JavaScript, and merge it with Fargo. This was a really exciting idea, and I couldn't see anything that stood in the way of it working. If you saw me in this period you could tell I had discovered something, I was pretty excited.
As it turns out, for good cause -- there were no obstacles in the way. The software is ported. I'm using it to render this blog post, as I write it, in the background. All the software is running on my machine. There is no server.
Yet there's a really powerful content management system that's rendering this content. I know about this stuff, I've been writing CMS's since 1994 when I first started working on the web. There's been a long sequence of them: AutoWeb, Clay Basket, Frontier's website framework, Manila, Radio UserLand. And not counting all the one-off blogging tools I've made for myself that ran Scripting News. Of all those, this is the only one I want to use. Because it's all in the outliner. I have the ability to control what I need to control, and when I'm writing, it all stays neatly out of the way.
Now I want to walk you through the features of this new CMS, which is just called Fargo, it's just a feature of the outliner.
I'm editing this in my outline.
To get it to render, I chose Outline Settings in the File menu in Fargo.
I clicked on the CMS tab, and then turned on rendering, and background rendering for this outline.
Then I started editing. The first time Fargo saved the outline, the Eye icon in the left margin appeared. When I click on the icon, it opens a new tab with the rendered view of the content.
I can edit, review, edit, iterating over my writing until it's ready to present to the public.
The rendered content appears in the html sub-folder of the Fargo app folder in Dropbox. Here's a screen shot of what my folder looks like.
There's a sub-folder for each file that you've chosen to have rendered. Inside that folder there are pages with stories on them, and pages for each month and day. There's a sub-folder for the year, then one for each month, and one for each day, and finally a file with the rendered version of the post. It also automatically generates an index file for each level.
The contents of each page can include Markdown features. You can use the outline structure to add structure to the rendered page. We generate a Markdown list for every level of indentation. It's pretty nice.
Templates, the glossary, menus and # directives work exactly as they did in Trex with a few enhancements.
You can have a #prefs outline anywhere that includes other directives.
If there's a file called cmsPrefs.opml in your Fargo folder the templates, glossary items, macros in that file will be included in every rendering on your system. That means you can establish global defaults that apply to every outline.
We also support includes in a lot more places than Trex did. We will support them everywhere practical. They're very very useful, and we missed this ability in Trex.
There's only one major feature in Trex that is not present in the new CMS: rules-based outline rendering.
Markdown is what the rest of the world is using. If we can make it work in the Fargo outliner, our work will be immediately relevant to a lot more people.
We're going to study Markdown and make it work with outlines.