1. clckwrks now on github!

    Fri, 2014-08-01 @ 06:19:45 PM

    It is with some sadness that I announce that clckwrks is now on github.

    I've been a user of darcs for more than 6 years and have been a very happy customer. Unfortunately, the joy of using darcs does not make up for the loss of contributions resulting from not being on github. So, it is not for technical reasons, but social reasons that clckwrks is now on github.

    On the upside, many people said they would contribute patches if clckwrks was on github. And so, I am excited for a new era of contributions. For obvious reasons, the official issue tracker is now on github as well.

    Previously all of the clckwrks related libraries were in one giant darcs repo. They have now been split into separate repos on github. This means there are now separate issue trackers for each library. I am not sure if that is a good thing or not.

    I am also pretty new to git and github. So I'd appreciate any feedback on how to better use these tools.

    In other news -- whoa, it's been a long time since I blogged about clckwrks -- a year and a half since the last post! A lot has actually happened -- but coding always feels so much more productive than blogging :) But, social engagement is important too. So, I will attempt to blog more often. The next blog post will be about the modernization of the authentication library. I am looking to move clckwrks to have full I18N support, SPA (single page application) architecture, and more! The starting point for that is the authentication layer which is shaping up nicely!


  2. ANN: clckwrks 0.16 - now built with bootstrap, plus a new page plugin

    Tue, 2013-02-26 @ 08:07:26 PM

    ANN: clckwrks 0.16

    I am pleased to announce the release of clckwrks 0.16. A screencast demonstrating the latest release can be found at http://www.youtube.com/watch?v=8J2Dt5ccXCw.

    There have been a few improvements since that video was recorded including the addition of a navbar in the admin menu and proper theming of the login page.



    We have made several large changes in this release. We temporarily lost a little functionality, but overall things are a lot better.


    The blogging and CMS functionality has now been split out into a new package clckwrks-plugin-page. One important reason for doing this is that it just felt like the obvious thing to do. The blogging/CMS code was already largely independent of the other core code. So, creating the extra modularity was just good design.

    This also means that clckwrks can now be used even if you don't need blogging/CMS. This makes clckwrks more suitable for implementing something like a wiki. The wiki functionality could be added in a new plugin clckwrks-plugin-wiki but would still use existing plugins like clckwrks-plugin-media.


    With this release we are beginning to base clckwrks on bootstrap. At the most basic level, this means that the setting menu and forms are a bit nicer looking. A larger problem we face is that plugins and themes are designed and implemented independently. But, the two sides need some sort of standardization to agree upon. Rather than invent our own new standard, we are going to leverage bootstraps.

    As a plugin designer, you can hope that if your plugin looks good using the standard bootstrap theme, it will look good in other themes as well.

    As a theme designer, you are not required to use bootstrap. But, you will be able to expect that the HTML your are trying to theme will try to follow the bootstrap conventions.

    new NavBar editor

    In clckwrks < 0.15 we ended up with two things called 'menu'. One is the sidebar menu that appears in the settings pages. The other is the menu that is at the top of normal pages. The menu at the top of the page is now called a 'NavBar' and the types have been renamed accordingly. This matches better with bootstrap terminology.

    There have also been substantial improvements to the navbar editor. It is now possible for each plugin to add new links to the navbar editor. And it is also possible to rename the nav bar entries.

    We do not, unfortunately, provide any automatic migration of the old menu entries to the new system. Given the small number of users and the fact that it is relatively easy to recreate the navbar entries, we opted to simply ignore the old menu entries. The old menu is preserved in the "menu" state directory as the new navbar use the "navbar" state directory. But, users will need to recreate the navigation menu by hand.

    The new navbar editor is still missing features -- but they will come over time :)

    Settings Menu

    Previously, after a user was logged in, they would be presented with the default 'admin settings' menu. But, of course, they do not have authorization to most of the admin console features, so clicking on the links would result in an authorization error.

    In the new system, the settings menu entries include a set of Roles for which they should be shown. So, non-admin users should only see links that are relevant to them.

    What's Been Lost

    As mentioned before, we can not migration old navbar data -- which is a minor inconvenience.

    Previously, themes included the ability to customize the HTML used to generate individuals pages and the blog. Because all those types now live in a clckwrks-plugin-page, the theme packages would need to depend on that plugin in order to continue providing that functionality.

    However, that method does not really scale up. It seems likely that theme designers might want to heavily customize other plugins as well, such as the media plugin. So, it seems like the way to go is to have something like:

    • clckwrks-theme-foo - foo theme for core system
    • clckwrks-theme-foo-page - foo theme for page plugin
    • clckwrks-theme-foo-media - foo theme for media plugin

    This allows theme designer to theme the core, and have addons for other plugins they want to customize, with out forcing users of the theme to install plugins they don't actually use.

    This has not been implemented yet.


  3. ANN: clckwrks 0.13 - a brand new plugins architecture

    Tue, 2012-12-11 @ 12:50:02 AM

    I am pleased to announce clckwrks 0.13.0. The source for clckwrks has been moved to:


    clckwrks (pronounced, clockworks) is a Haskell-based CMS and blogging platform intended to (eventually) compete directly with popular PHP based solutions.

    clckwrks 0.13 is built on an entirely new plugins platform currently named web-plugins. (Please submit your ideas for a better name).

    The immediate implication is that the standard Main.hs for a clckwrks project is much, much smaller and easier to understand. The standard Main.hs can be found here:


    The Get Started page has been updated to reflect the changes.

    This also sets the stage for one-click installs of plugins and themes with zero-coding. The web-plugins library has proof-of-concept code for dynamically loading plugins and themes. However, it currently requires that the user manually compile the plugins and explicitly pass the path to the .o to the application. The next step will be to use Cabal and cabal-install to automatically fetch, build, and load the plugins/theme.

    clckwrks is still very early in development and is missing a lot of features, polish, and documentation. Your contributions would be greatly appreciated!

    jeremy shaw