So after a few weeks of teaser posts, we’ve finally opened up the code on the software that powers this very blog, Feather. It’s been a collaborative effort so far between me and my boy Mike, but now it’s time to open source it, and hopefully people besides us will not only find a use for it, but will also find new ways to extend and improve it.
So what’s in the current codebase? As alluded to before, the core itself is lightweight. Basic article posting, and user management is all you’re really getting. The beauty is in the wide variety of plugins that are (and will be) available to extend the software further. Within a separate plugins repository, there are currently twelve plugins, that extend Feather to provide comments for articles, feeds, formatters for article content (Textile and Markdown), basic RSS importing for articles and comments, integration with ping services, the ability to setup hard-coded redirects on your site, sidebar and snippet content, overridden css styles, tagging, Twitter integration (to display your tweets in line with blog posts), and file uploads. The code in core and for these plugins probably isn’t perfect, but it’s good enough to power a few blogs already - and improvement is where you come in.
If you’ve got an idea for a new plugin, improvements to existing functionality, or you’ve found a bug, then by all means fork the project on GitHub, implement your code, and send us a pull request so we can merge the changes into the main trunk. Alternatively, send us your patch via e-mail, and we’ll look to include it within the application. If you submit two patches to either feather, or feather-plugins, then you’ll be given commit access to the repository in question, and will effectively become part of the core team. So what needs doing right away?
The biggest deficiency at the minute are specs - there are some specs in the core code, but it doesn’t cover a lot of the application, and ideally we’d be aiming for 100% coverage of the core controllers and models. We then need to devise a decent way of similarly shipping specs with plugins. When we start updating and improving plugins, we’ll need a way of handling data migrations smoothly and efficiently. On top of this, there are still outstanding useful plugins that need to be written, such as content search, and trackbacks, as well as integration with services other than Twitter. Lastly, there are bound to be bugs, so roll up your sleeves and fix them, it’ll be much appreciated!
We’ll be rolling out a Feather website soon, along with an official plugin directory to make installing plugins easier - for now, there’s a basic getting started page on the wiki over at GitHub, and there will be more information over the coming days on both mine and Mike’s blog. Any questions in the meantime, then let me know.
Other than that, what are you waiting for? Get your Feather on!
Damn.. just when i finished writing my own rails blog cms for my site!
@alistair: well if you think that after writing your own Rails-based blog/CMS that you may have something to contribute to this project, then by all means get stuck in!
@mario: thanks!
@mig: great, thanks! We have some specs in place which should act as a decent starting point, but there is definitely a lot missing there, and having almost 100% coverage would make future core improvements a lot easier to develop. Let me or Mike know when you've got some stuff you want to contribute to the trunk repo, or send a pull request!
@cag: thanks for the comments, you are right that the white-on-black design might not be everyone's cup of tea - I put it in place partly just to show the capability of Feather to support custom designs, and also so it would at least look different to my buddy Mike's Feather hosted blog! I may look to update/improve the design when I get some more time, so keep checking back and thanks for your comment!
By the way, I've got a link to this post over at DZone (http://www.dzone.com/links/announcing_feather.html), and also Digg (http://digg.com/programming/Announcing_Feather), so if anyone wants to help push the link further up by voting for it on either of those sites, that'd be great!
@el: I’ve just had been playing with feather and looking through the code. Really nice simple app. I can think of a few improvements and ideas which I will try to contribute.
I take in the theme stuff isn’t implemented yet? One of my main dislikes of all the CMS systems I looked at before building my own was the way themeing is implemented. Personally I just want to edit the .html.erb views and drop in my own CSS files without having to go through the hassle of learning a "new theme language":http://www.liquidmarkup.org/ and being restricted in what I can do. Yes, I’m looking at you Mephisto:http://mephistoblog.com/ and Typo:http://www.typosphere.org/ !
I also like the way you’re developing feather with having everything extra in plugins. :)
Specifically on the topic of themes, at the minute the blog design is fairly customizable using the snippets plugin (that allows custom html to be inserted at predefined hook points in the design), and also using the styles plugin (that allows custom css to be specified to override the design css). Using just these plugins I was able to tweak my design here to be a fair bit different to the default. I would like to continue customizing the snippets plugin to further allow it to edit and override existing elements within the design (rather than just add to them), and then we should have most of the pieces in place to allow basic view modification and custom css. The snippets are basic erb templates, so like you say, there won't be any new complicated theme/scripting syntax to learn!
Oh and yeah, not sure comment formatting is being picked up properly as I had a little trouble with my comment yesterday, so I'm going to look into that. I use Safari as well so I'm also aware of the form field bug you mentioned, it's driving me mad but that's another one we're looking into. I think it's time to get a bug tracking instance up so we can start to track issues and feature requests!
Thanks for the comments.
Of course, it's written in Java, so it probably wasn't on your Ruby-world radar.
FYI
Thanks for your comment!
In the meantime, to answer your specific question, you can setup the database tables using the Merb console (merb -i), and then by calling "DataMapper::Persistence.auto_migrate!". I think there is a rake task that does the auto migrate, but it didn't seem to work correctly last time I tried it. Bear in mind that that command creates the database structure in a destructive manner, so if you run it once the schema is created (even if there is data present), it'll destroy and recreate the schema, thereby destroying any data you had too. We're looking into better ways to handle data schemas, especially for plugins which should be easily upgradable.
Thanks for your comment!
Bascially, when I tried to bring up #index, an exception is being thrown in Article#specific_date_function and it basically boils down to the the method trying to determine if the database adapter is sqlite and formats the SQL query differently.
Its looks like using symbols on the Hash returned from YAML::load is causing an issue. Are you guys running this using AR as the orm? I was using Sqlite3 and changed to Datamapper and was still seeing the same issue.
I was then able to overcome this by changing to
YAML::load(File.open('config/database.yml'))[Merb.environment]["adapter"]
I'd love to play arround with feather, but I don't really know how I should populate the database.
At the moment, I'm just gettting a:
Internal Server Error 500
Your query failed. no such table: configurations QUERY: "SELECT "id", "title", "tag_line", "about_formatter" FROM "configurations" LIMIT 1"
when going to localhost :-(
@xavier: Certainly interesting, but it seems that the Enki blog definitely has a different ethos to our project. We want people to have options for extending and customizing their blog in any way they want, but we also want to make sure that those same choices don't result in a bloated and heavyweight piece of software for everyone else. By separating the lightweight core code from the plugins, each user can completely customize their instance of Feather, while ensuring that they only have the features they need installed.
@khang: absolutely, let us know what you think when you check out Feather! It'd be great if you'd like to contribute, checkout the bug/feature request tracker over at http://feather.lighthouseapp.com for ideas, or if you already have some other ideas for how to contribute, then fork the code on GitHub and give it a go! As for your specific issue, perhaps if you could raise that as a bug on the Lighthouse tracker, someone will take a look into it and see if they can replicate the issue? You can also submit your patch if you think it may resolve the issue for other users too.
@marc: it looks like you need to setup the initial database structure for the app as you suggest. You can do this by running the application in console mode ("merb -i"), and then by calling "DataMapper::Persistence.auto_migrate!". This will setup the initial database structure and should allow you to get up and running. Also, I've finally gotten around to writing a basic getting started guide that might be of interest - it's available at http://github.com/mleung/feather/wikis/getting-started. Let me know how you get on!
I guess the main question is whether Feather should support a more full CMS model for sites since it is an application rather than a component that can be added to a larger app.
Anything design-wise that can be achieved using CSS can be implemented using the feather-styles plugin, that allows you to specify custom CSS rules that'll override the CSS already within the Feather style. We also allow custom snippets of HTML/Javascript to be inserted at predefined points, using feather-snippets. I'm looking to extend snippets to allow you to also override existing html elements (using a basic selector syntax) with your own HTML/Javascript, rather than simply using the predefined snippet points in the layout.
However as you say, a lot of the design still maintains a static layout, and altering this using CSS/snippets solely may prove to be tricky and/or untidy. The beauty of Feather is it's extendability, and we have someone at the minute that is going to be looking into writing a new plugin, feather-themes, that'll provide full theme support. In this way, you'll be able to choose between minor customizations (styles/snippets plugins), or using a dedicated theme plugin to change the entire layout and style.
And as for the CMS stuff you mentioned, again this is now something that is being worked on. Above and beyond the basic blog stuff, feather-pages is currently in development so that Feather can be used as more of a CMS than just a blog engine, for those that need it (we are hoping to then use that to host the official Feather site when it gets up and running). There'd be nothing to stop a wiki plugin being written as well, for sites that require built-in wiki features on their site.
So really, "fully customizable" doesn't necessarily mean we have everything in place right this minute, it just means that the concept of Feather is to continue extending it with a wide variety of plugins that in the future will allow the user to utilise Feather for a different range of requirements, and to be able to tweak it as they see necessary. Obviously the project is still very young, and so we are actively seeking contributions to try and implement a lot of these features, and to add to the already available plugins. If you are a developer, you are welcome to contribute some of your ideas to Feather, they'd be much appreciated! If not, then keep an eye on Feather, as over the next few weeks we are hoping to line up a few of these bigger features (feather-pages, feather-themes) to allow greater customization along the lines that you were referring to. Either way, drop by #feather on irc.freenode.net if you want to discuss your ideas further, the more the merrier!
If you have any issues in setting it up, or would like to contribute, please drop in to the IRC channel on irc.freenode.net, #feather!
Please,
body { line-height: 1.4 }Think of the children!