Crowbook's aim is to allow you to write a book in Markdown without worrying about formatting or typography, and let the program generate HTML, PDF and EPUB output for you. Its focus is novels and fiction, and the default settings should (hopefully) generate readable books with correct typography without requiring you to worry about it.
To see what Crowbook's output looks like, you can read the Crowbook guide rendered in HTML, PDF or EPUB.
You can also play with the online demo version.
There are two ways to install Crowbook: either using precompiled
binaries, or compiling it using cargo
.
See the releases page
to download a precompiled binary for your architecture (currently:
Linux, Windows and MacOSX). Just extract the archive and run
crowbook
(or crowbook.exe
on Windows). You might also want to copy
the binary somewhere in your PATH
for later usage.
If you are on Debian GNU/Linux or Ubuntu (on a PC architecture), you can
also download .deb
packages on
the releases page.
Cargo is the Rust's package manager. You can install it here. Once it is done:
$ cargo install crowbook
will automatically download the latest crowbook
release on
crates.io, compile it, and
install it on your system.
Some dependencies also require building C libraries; you might thus also need to install a C compiler and
make
/cmake
build tools. You can also try to build a version of Crowbook without optional features:cargo install crowbook --no-default-features --features "clap"
will disable syntactic highlighting and proofreading, requiring less dependencies.
While there should be, strictly speaking, no real dependencies to be able to run Crowbook (it is published as a statically compiled binary), some features require additional commands to work correctly:
- EPUB rendering requires the
zip
command to be present on your system; - PDF rendering requires a working installation of LaTeX (preferably
xelatex
).
The simplest command is:
$ crowbook <BOOK>
where BOOK
is a configuration file. Crowbook will parse this
file and generate HTML, EPUB, and/or PDF output formats,
according to the settings in the configuration file.
To create a new book, assuming you have a
list of Markdown files, you can generate a template configuration file
with the --create
argument:
$ crowbook my.book --create chapter_*.md
This will generate a default my.book
file, which you'll need to
complete. This configuration file contains some metadata, options, and lists the
Markdown files.
For short books containing only a single Markdown file, it is possible
to embed some metadata at the beginning of the file and use the
--single
or -s
option to run crowbook
directly on this Markdown
file and avoid creating a separate book configuration file:
$ crowbook -s text.md
For more information, see the chapters
on the arguments supported by crowbook
and on the configuration file.
Crowbook supports HTML, PDF and EPUB (either version 2 or 3) as output formats. See the Crowbook User Guide rendered in HTML, EPUB and PDF.
Crowbook uses pulldown-cmark and thus should support most of CommonMark Markdown. Inline HTML, however, is not implemented, and probably won't be, as the goal is to have books that can also be generated in PDF (and maybe ODT).
Maybe the most specific "feature" of Crowbook is that it does its best to "clean" the input text before rendering it. By default, it removes superfluous spaces and tries to use curly quotes. If the book's language is set to french, it also tries to respect french typography by replacing spaces with non-breaking ones when it is appropriate (e.g. before '?', '!', ';' or ':').
Please open an issue describing typographic rules if you want them to be implemented for other languages.
Crowbook tries to correctly translate local links in the input Markdown files: e.g. if you have a link to a Markdown file that is part of your book, it will be transformed into a link inside the document.
Crowbook supports inline YAML blocks:
---
author: Me
title: My title
---
This is mostly useful when Crowbook is run with the --single
argument (receiving a single Markdown file instead of a book
configuration file), for short
texts that only contain one "chapter".
Crowbook can also generate "proofreading" copies in HTML or PDF, highlighting grammar errors and repetitions. For more information, see the proofreading chapter of the guide.
Crowbook has experimental support for writing interactive fiction (only for HTML). For more information, read the interactive fiction chapter.
While the default settings will hopefully generate something that should look "good enough", it is possible to customize the output, essentially by providing different templates.
See the github's issue tracker.
- Stéphane Mourey
<s+crowbook AT stephanemourey DOT fr>
- Falco Hirschenberger
Besides the Rust compiler and standard library, Crowbook uses the following libraries: pulldown-cmark, yaml-rust, mustache, clap, chrono, uuid, mime_guess, crossbeam, walkdir, rustc-serialize, caribon, hyper, url, lazy_static, regex, term, numerals, syntect.
It can also embed Highlight.js in HTML output to enable syntax highlighting for code blocks.
It also uses configuration files from rust-everywhere to use Travis and Appveyor to generate binaries for various platforms on each release.
While Crowbook directly doesn't use them, there was also inspiration from Pandoc and mdBook.
Also, the W3C HTML validator and the IDPF EPUB validator prove very useful during development and testing.
See ChangeLog.
See how you can contribute to Crowbook.
If you find this project useful, you can also support its author by making a Paypal donation.
While the main purpose of Crowbook is to be run as a standalone program, the code is written as a library, so if you want to build on it you can use it as such. You can look at the generated documentation on docs.rs.
Note that, in order to facilitate code reuse, some features have been split to separate libraries:
- epub-builder makes it easier to generate EPUB files.
- crowbook-text-processing contains all the "typographic" functions (smart quotes, handling of non-breaking spaces in french, ...).
- crowbook-intl is used for the internationalization (translation) process.
Crowbook is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License (LGPL), version 2.1 or (at your option) any ulterior version. See LICENSE for more information.
Crowbook's logo is licensed under the Creative Commons Attribution 4.0 International license, based on the Rust logo by Mozilla Corporation.
Crowbook includes binary (minified) CSS and Javascript files from Highlight.js, written by Ivan Sagalaev, licensed under the following terms:
Copyright (c) 2006, Ivan Sagalaev
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- Neither the name of highlight.js nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.