This is a first post in a series of articles about Booktype. Before I start to be all technical and “… and that is how you install new Django app” it would be good to say couple of words about Booktype history.
Booktype is an open source platform to write and publish print and digital books. It was created to run the FLOSS Manuals platform and back then it was just called Booki. FLOSS Manuals is a community of people joined together for their love of writing good quality documentation for FLOSS software. At first the FLOSS Manuals platform was build on the TWiki (Wiki in Perl) platform.
Using TWiki to prototype something was a good choice. We extended it with our own plugins and some external tools. FLOSS Manuals is a collaborative community and we needed to extend TWiki to support the collaborative processes. We had our IRC-Web chat gateway called FM Transmission [post in Croatian], live Table of contents where you could see what other users are doing (view image of it), Remixer for content, Localization plugins to manage book translation, our own Web-based tool for translating content and many other things. It was good enough platform but it felt like a big hack at times. After some thinking and observing some problems in the TWiki community [post in Croatian] we decided to write a new platform – from scratch.
We wanted to build community around software and we figured out TWiki and Perl were not the best platform for that. Mainly because a lot of our users are people who are more interested in books and less in Perl code. We decided to use Python and Django as our new platform. They both seems to be reasonably easy to master and even newbies could extend their Booktype installations. You want to have blog on the front page? Just install existing Django blog app, change one line in settings file, put couple of tags in templates and you are good to go. Simples! Anyone could do it.
When we talk about Booktype we really talk about Booktype and Objavi. Booktype is used for editing and managing books while Objavi is used to produce book formats (as pdf, epub, mobi, …). In this post we will talk only about Booktype (the book editor).
Booktype is all about the collaborative editing of books and as such is not always what people want. It is about building community around your book. Sure, you can use it to write your diary also (and you should!), but the real power is in collaborative work. What does this mean for the architecture?
Like i said, we decided to use Django as web framework mainly because we wanted people to be able to plug Booktype into their existing web sites more easily and extend their installations with many already existing Django apps. I think we made a good choice with it. As database backend we are using PostgreSQL. Sqlite3 is also an option, but it really should be used just for testing and development purposes. We are using Redis in-memory database to store all kind of information web clients are exchanging with Booktype server using Sputnik.
What is Sputnik? Sputnik is a Django application for two-way communication with web clients. When we started there was no other Django project that could help us with this so I decided to do what everyone would normally do. I wrote one abstract API (with channels, subscriptions and etc…) for communication and implemented dummy network layer. It means when the right moments comes this network layer can be replaced with something better without any need to change the rest of the code. There are many good frameworks these days that could be used as network layer (Socket.IO for instance). Why do we have it? Mainly because of the collaborative part of Booktype. When you have 10 people working on one book at the same time you need a way of notifying all of them about the actions others are doing. Like: locking chapters, chat, changes in Table of Contents, creation of new chapters, attachments uploads and etc. Yes, it means your Table of Contents will be changed as soon as someone adds a new chapter to it. This really improves the user experience and stops you from overwriting someone’s changes.
But enough about Booktype history. In my next article I will talk about exciting world of “Booktype projects” and how you can easily install and extend your Booktype installation!
These are the Booktype links you should probably check: