TL;DR Amazon Sucks

You’re probably here because you tried to send one of my ebooks to your Kindle, it didn’t work, you asked me why not, and I sent this to you in response. I wrote a long rant on this topic, but it’s not really fair to make you wade through that just because you want to read my book on the beach. Here’s the short version.

  • Amazon Kindle uses a proprietary, undocumented variant of the open, industry-standard EPUB3 format. They call it KF8.
  • Amazon provides a free-as-in-beer tool called Kindlegen to enable authors to generate well-formed KF8 files without knowing the format specification.
  • According to their terms of use, I am not allowed to directly sell you the high-quality KF8 files generated by that tool. I can only use it to generate copies for personal review and submission to the Kindle store.
  • Instead, I use a free-as-in-speech tool called Calibre to generate the KF8 (.mobi) file I bundle in my direct ebook sales. Unfortunately, Calibre-generated KF8 files are lower in quality than those generated by Kindlegen, largely because Calibre doesn’t really support EPUB3 freatures.
  • Amazon’s mail-to-kindle service has begun rejecting the files generated by Calibre. Which is probably why you are here, reading this.
  • In other words, Amazon has been very careful to make it inconvenient to buy Kindle-format books outside of the Kindle store. I know, shocking, right?

Again, if you want the full story it’s here. Practically speaking, here are your options:

  1. Install Kindlegen on your computer. Take the EPUB file I shipped you, and use Kindlegen to convert it to KF8 format. Then send the resulting file to your Kindle. I have taken pains to ensure that my EPUB3 files translate very well to KF8 using Kindlegen. So if you want the best reading experience on your Kindle, and you’re willing to go through a few extra steps to get it, this is the way to go.
  2. Alternately, you can take the Calibre-generated file I shipped you, and transfer it via USB rather than email-to-kindle.


“Why don’t you use [EBOOK CREATION TOOL X]?” 

Trust me, I’m familiar with virtually every document conversion tool and ebook toolchain project on the planet. They all suffer from the same issues. Whatever else goes into the toolchain, if they produce KF8 they use either Kindlegen or Calibre to do it.  And thus they are subject to the same licensing and quality issues explained above.

“But the ebooks I receive from [PUBLISHER X] don’t have this problem!”

Established publishing houses have their own agreements with Amazon. I’m not an established publishing house.

UPDATE, April 2015:


  1. On a different but related note, I just found out that Confident Ruby and Exceptional Ruby are available through The Pragmatic Bookshelf.

    As I really like your books (I’ve already got those two and Naught) and also really like PragProg and their distribution tools, I wonder if you plan to make more of your current and future publications available through them? And if it matters to you which channel your customers choose? If you still would prefer us buying directly from you I’ll do that, otherwise I believe I’d rather add them to my PragProg shelf. (I guess there’s no way to migrate?)

    1. My relationship with the Prags gives me a wider distribution channel than I could reach on my own, for which I am grateful. That said, when you buy direct from me, I get more money 🙂

      1. Ok, thanks for the answer. As you already reach me by your own channels, I’ll continue buying here. (And I’m quite happy with your own distribution system of books and updates as well!)

  2. This is very interesting.

    I’m not aware of Amazon wholesale-rejecting any calibre-generated books. Do you have a sample rejection email, or does it silently fail?

    1. I don’t have time to hunt up a sample, but it’s a pretty generic “we couldn’t add this book to your library” message.

      It’s possible that some combination of the right input and the right settings would satisfy Amazon’s newer, more stringent requirements for books added by email, but I haven’t had time to figure it out. Part of the problem is that my input EPUBs are version 3, but Calibre doesn’t really understand EPUB3.

Leave a Reply

Your email address will not be published. Required fields are marked *