This blog is part of a series, Checklist for Starting Your Own Blog Business.
Chris Garrett from Performancing wrote a good checklist on criteria for evaluating blog engines:
I’m going to add to that checklist:
- Must be written in ASP.NET, preferably in C# and .NET 3.5
- Must work in Visual Studio 2008
- Must provide the source
- Should be easy to figure out
- Should work with a SQL Server backend
- Should have a large support community and easy to find help
- Should use current technologies, preferably bleeding edge technologies
Briefly, here is my ranking of ASP.NET blog engines. The rest of this post will provide more detailed reviews, in this order.
- BlogEngine.NET (MY PICK) – easy to set up and configure – straightforward ASP.NET 2.0 architecture
- dasBlog – strong product with a solid history, but might suffer from code bloat
- subText – seems like good product, but is ASP.NET 1.1
- Graffiti – I’m sure it is a good product, but the price is high
- VineType – website looks good, community seems small
- Presstopia – might be good, community seems small
- ThinkJot – might be good, community seems small
- ASPAlliance Article: Build Your Own MVC-LINQ Blog Engine – most sample projects are good for learning but not for production; this project is exciting because it uses bleeding edge technologies
- MSDN Sample – same comments as the ASPAlliance Article, but older technologies
- .Text – this project is dead
Conclusion
Picking the right engine will make things easier in the future, but simply getting started will make it happen. It's better to pick one product and start blogging than to never start at all because you're not sure which product to pick. I liked BlogEngine.NET and started using it.
With all that said, good luck getting started with your blog engine of choice. I look forward to hearing from others about their experiences with .NET blog server software.
The first thing I noticed about BlogEngine.NET was all the positive comments people said about it. Microsoft’s Scott Guthrie said “This excellent ASP.NET open source blog engine keeps getting richer and richer.” Microsoft’s Joe Stagner compared BlogEngine.NET with SubText and dasBlog, concluding that BlogEngine.NET “ROCKS … Installation is SIMPLE … It’s FAST, slick looking and fully featured.” Merill Fernando moved from dasBlog to BlogEngine for “more features, better themes and frequent releases.” Mason Lyngby described it as an engine that includes the things “a blog should in the year 2007. Little things like a textbox for pasting in Google Analytics.” As in Chris Chapman’s Battle of the Blogs post, I also noticed that the setup was easy and the code base did have a light feel. Nurasto described how much easier it was to change themes in BlogEngine than SubText. He also appreciated that BlogEngine used ASP.NET 2.0 features, like master pages. It also allowed the developer to choose between an XML or SQL backend. Another blogger asked “BlogEngine.net any good?” The responses included: “It's simple enough that I can quickly customize it and the team, headed by Mads is extremely responsive to comments and requests.” … “I was able to dig around BlogEngine.NET within minutes and see where I could add some useful functionality.” … “easy to customize and modify. In minutes I had it configured and running on my SQL Server 2005 backend as well as using FCKEditor instead of Tiny MCE.”… “The feature I love is the support for Metablog API.” Andrew Westgarth noted that the project is “regularly updated and the team behind it have a very impressive roadmap and vision for the engine…. By using an engine which is being worked on by the community, the work is shared and a lot of the functionality which I wanted to develop is already here.” Mauricio Quirós states that this product “has all the ingredients an ASP.NET web developer loves when dealing with a Blog engine: easy to setup, easy to extend and easy to understand.” In my experience with BlogEngine.NET, those reviewers were correct.
The first thing I noticed when I opened the code was the Visual Studio 2008 project conversion wizard. I converted the website with no conversion errors and it ran on the first F5.
Just using the XML backend was very quick to setup and get working. “Upgrading” to the SQL backend was also VERY easy, thanks to Al Nyveldt’s instructional screencasts and the RTUR.NET blog. The architecture was very simple and the code was easy to understand. There were only 2 projects, Core and Web. The support for extensions and themes/skinning was very good. I was able to dive into the code and quickly make my own modifications / bug fixes. It could be hosted on CrystalTech, as described in the forums here and here. This product met almost all of the items on my shopping list without much extra effort.
Rob Mensching estimated that BlogEngine was built in only about 16,000 lines of code.
The BlogEngine community is very active. You can get help in the forums, learn about the product roadmap, find extensions or themes, review current issues / work items, and even download a multiple extension project. Though the wiki had good content, some of it was outdated. I’ve also found that including the keyword “BlogEngine” in Google searches made it easy to find the many developers who have built additional resources that are not yet indexed on those pages.
BlogEngine.NET Disadvatages
Some complained that “the administrative features were a bit lacking”. However, there was an active community making extensions / add-ons for this project. For example, blogger Moses built a moderated comments extension.
Others state that it lacked a photo gallery and has no forums. This was not an issue for me. I just wanted a blog.
Chris Chapman noted that there weren’t any unit tests. I’ve noticed that a few bugs have gotten through to the 1.3 release. They were fairly easy to fix, and fell into areas of functionality that can be considered edge cases… but including more testing should make this a more robust product. The main functionality worked wonderfully out of the box.
One of my top criticisms about BlogEngine.NET 1.3 is that the architecture needed to be refactored. The codebase was still fairly small, so this would be a great time to do it. There were some places where duplicate functionality was handled in multiple code paths. One example of this was the code for sending comment emails. Some emails were handled in the “Core” engine and others were handled by Extensions (custom event handlers) in the “Web” project. The architecture also needed better separation of concerns. I found some places where the C# code in the “Core” engine was emitting strings that contained HTML formatting. Ideally, all UI building would happen in the Web project. At the very least, the HTML built in these strings needed to provide better support for CSS. Simply adding “class” attributes to more of the dynamically built HTML elements would help. Wrapping free standing text in SPAN tags would be my next request. As an example, HTML for the star rating needed to be rewritten. The current implementation required some serious CSS code to get it to display nicely.
Though I appreciated the variety of pre-built themes and starting with an existing theme saved me a lot of time over building my own theme... the theme I chose required quite a bit of work to polish it. If the project included more testing, perhaps the themes would come out with higher quality.
My Final Thoughts on BlogEngine.NET 1.3
In the end, I chose BlogEngine.NET because it is a really good blog engine, which happens to be in version 1. The simplicity of the architecture, broad feature set, and extensibility outweigh the annoyances of using a product so early in its lifecycle.
dasBlog was a close second. I have a lot of respect for Scott Hanselman. The fact that he is an active contributor to this project gives it a lot of credibility. However, this project was difficult to get running with .NET 3.5. Lots of files were not converted by the Visual Studio 2008 conversion wizard. The website project could not be opened. I was able to open it by hacking the .csproj file contents and removing this line:
<IISUrl>http://localhost/DasBlog</IISUrl>
The web project was also set to run in IIS. I needed to open the web project properties, then the web tab to set the “Servers” to “Use Visual Studio Development Server.”
Building the solution worked, however, I got a global.asax error when I tried to run it. There were a lot of projects (19) and it was built in an older IDE. This product began to feel heavy. It just had too many projects, too many lines of code, and too many conversion errors just to get started. My objective was to get up & running quickly, so this was the end of my dasBlog experience.
According to an Ohloh analysis reported by Scott Hanselman, dasBlog included about 54,000 lines of code.
After a positive experience with BlogEngine and learning that SubText used ASP.NET 1.1, I decided against even opening the source for this product. Rob Mensching described his experience with maxing out his database disc space quota because SubText was saving referrals in a database table. He also noted that SubText had about 45,000 lines of code.
Graffiti might be a good option as a blog server. It’s made by the people who made Community Server (CS). I have experience with CS. It was a good product, but the codebase was bloated if you just wanted a blog. The biggest turn off for me was Graffiti’s price tag: $400… unless you’re using it for a non-profit, hobby club, or strictly personal use. I didn't look any further than the price tag, so I cannot comment on the quality of the product.
VineType was the other commercial option I discovered. It might be a good option. Even though it wasn’t free, at $20 it was cheap enough. It just didn’t seem to have as large of a community as BlogEngine.NET.
Presstopia was an open source blog engine. It might be a good option. It just didn’t seem to have as large of a community as BlogEngine.NET.
ThinkJot was an open source blog engine that was still in beta. It might be a good option but didn’t seem to have as large of a community as BlogEngine.NET.
Since I write about technology, it’s exciting that this ASPAlliance project uses the most recent ASP.NET technologies. However, when I was evaluating products in March 2008, it did not include all of the source code. Since I was heavily invested in learning WPF/Silverlight/XAML programming, I opted against learning MVC at that moment. Additionally, it was a "sample" project, so it did’t have as full of a feature set as other projects. Traditionally, starter & sample projects are great for learning, but not for production applications.
This sample project from the MSDN had the same "sample project" limitations as the MVS-LINQ project, but was also built with older technologies.
.TEXT
Scott Watermasysk explains that .TEXT was no longer being actively developed.