CINXE.COM
calibre - About
<!DOCTYPE html> <html lang="en"> <head> <meta charset='utf-8'> <title>calibre - About</title> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta name="keywords" content="e-book,ebook,library,calibre,software,news,digital text,free,open source" /> <meta name="description" content="calibre: The one stop solution for all your e-book needs. Comprehensive e-book software." /> <link rel="icon" type="image/png" href="/favicon.png" /> <!-- InMobi Choice. Consent Manager Tag v3.0 (for TCF 2.2) --> <script type="text/javascript" async=true> (function() { var host = window.location.hostname; var element = document.createElement('script'); var firstScript = document.getElementsByTagName('script')[0]; var url = 'https://cmp.inmobi.com' .concat('/choice/', '593Yp13RM2k2D', '/', host, '/choice.js?tag_version=V3'); var uspTries = 0; var uspTriesLimit = 3; element.async = true; element.type = 'text/javascript'; element.src = url; firstScript.parentNode.insertBefore(element, firstScript); function makeStub() { var TCF_LOCATOR_NAME = '__tcfapiLocator'; var queue = []; var win = window; var cmpFrame; function addFrame() { var doc = win.document; var otherCMP = !!(win.frames[TCF_LOCATOR_NAME]); if (!otherCMP) { if (doc.body) { var iframe = doc.createElement('iframe'); iframe.style.cssText = 'display:none'; iframe.name = TCF_LOCATOR_NAME; doc.body.appendChild(iframe); } else { setTimeout(addFrame, 5); } } return !otherCMP; } function tcfAPIHandler() { var gdprApplies; var args = arguments; if (!args.length) { return queue; } else if (args[0] === 'setGdprApplies') { if ( args.length > 3 && args[2] === 2 && typeof args[3] === 'boolean' ) { gdprApplies = args[3]; if (typeof args[2] === 'function') { args[2]('set', true); } } } else if (args[0] === 'ping') { var retr = { gdprApplies: gdprApplies, cmpLoaded: false, cmpStatus: 'stub' }; if (typeof args[2] === 'function') { args[2](retr); } } else { if(args[0] === 'init' && typeof args[3] === 'object') { args[3] = Object.assign(args[3], { tag_version: 'V3' }); } queue.push(args); } } function postMessageEventHandler(event) { var msgIsString = typeof event.data === 'string'; var json = {}; try { if (msgIsString) { json = JSON.parse(event.data); } else { json = event.data; } } catch (ignore) {} var payload = json.__tcfapiCall; if (payload) { window.__tcfapi( payload.command, payload.version, function(retValue, success) { var returnMsg = { __tcfapiReturn: { returnValue: retValue, success: success, callId: payload.callId } }; if (msgIsString) { returnMsg = JSON.stringify(returnMsg); } if (event && event.source && event.source.postMessage) { event.source.postMessage(returnMsg, '*'); } }, payload.parameter ); } } while (win) { try { if (win.frames[TCF_LOCATOR_NAME]) { cmpFrame = win; break; } } catch (ignore) {} if (win === window.top) { break; } win = win.parent; } if (!cmpFrame) { addFrame(); win.__tcfapi = tcfAPIHandler; win.addEventListener('message', postMessageEventHandler, false); } }; makeStub(); function makeGppStub() { const CMP_ID = 10; const SUPPORTED_APIS = [ '2:tcfeuv2', '6:uspv1', '7:usnatv1', '8:usca', '9:usvav1', '10:uscov1', '11:usutv1', '12:usctv1' ]; window.__gpp_addFrame = function (n) { if (!window.frames[n]) { if (document.body) { var i = document.createElement("iframe"); i.style.cssText = "display:none"; i.name = n; document.body.appendChild(i); } else { window.setTimeout(window.__gpp_addFrame, 10, n); } } }; window.__gpp_stub = function () { var b = arguments; __gpp.queue = __gpp.queue || []; __gpp.events = __gpp.events || []; if (!b.length || (b.length == 1 && b[0] == "queue")) { return __gpp.queue; } if (b.length == 1 && b[0] == "events") { return __gpp.events; } var cmd = b[0]; var clb = b.length > 1 ? b[1] : null; var par = b.length > 2 ? b[2] : null; if (cmd === "ping") { clb( { gppVersion: "1.1", // must be “Version.Subversion”, current: “1.1” cmpStatus: "stub", // possible values: stub, loading, loaded, error cmpDisplayStatus: "hidden", // possible values: hidden, visible, disabled signalStatus: "not ready", // possible values: not ready, ready supportedAPIs: SUPPORTED_APIS, // list of supported APIs cmpId: CMP_ID, // IAB assigned CMP ID, may be 0 during stub/loading sectionList: [], applicableSections: [-1], gppString: "", parsedSections: {}, }, true ); } else if (cmd === "addEventListener") { if (!("lastId" in __gpp)) { __gpp.lastId = 0; } __gpp.lastId++; var lnr = __gpp.lastId; __gpp.events.push({ id: lnr, callback: clb, parameter: par, }); clb( { eventName: "listenerRegistered", listenerId: lnr, // Registered ID of the listener data: true, // positive signal pingData: { gppVersion: "1.1", // must be “Version.Subversion”, current: “1.1” cmpStatus: "stub", // possible values: stub, loading, loaded, error cmpDisplayStatus: "hidden", // possible values: hidden, visible, disabled signalStatus: "not ready", // possible values: not ready, ready supportedAPIs: SUPPORTED_APIS, // list of supported APIs cmpId: CMP_ID, // list of supported APIs sectionList: [], applicableSections: [-1], gppString: "", parsedSections: {}, }, }, true ); } else if (cmd === "removeEventListener") { var success = false; for (var i = 0; i < __gpp.events.length; i++) { if (__gpp.events[i].id == par) { __gpp.events.splice(i, 1); success = true; break; } } clb( { eventName: "listenerRemoved", listenerId: par, // Registered ID of the listener data: success, // status info pingData: { gppVersion: "1.1", // must be “Version.Subversion”, current: “1.1” cmpStatus: "stub", // possible values: stub, loading, loaded, error cmpDisplayStatus: "hidden", // possible values: hidden, visible, disabled signalStatus: "not ready", // possible values: not ready, ready supportedAPIs: SUPPORTED_APIS, // list of supported APIs cmpId: CMP_ID, // CMP ID sectionList: [], applicableSections: [-1], gppString: "", parsedSections: {}, }, }, true ); } else if (cmd === "hasSection") { clb(false, true); } else if (cmd === "getSection" || cmd === "getField") { clb(null, true); } //queue all other commands else { __gpp.queue.push([].slice.apply(b)); } }; window.__gpp_msghandler = function (event) { var msgIsString = typeof event.data === "string"; try { var json = msgIsString ? JSON.parse(event.data) : event.data; } catch (e) { var json = null; } if (typeof json === "object" && json !== null && "__gppCall" in json) { var i = json.__gppCall; window.__gpp( i.command, function (retValue, success) { var returnMsg = { __gppReturn: { returnValue: retValue, success: success, callId: i.callId, }, }; event.source.postMessage(msgIsString ? JSON.stringify(returnMsg) : returnMsg, "*"); }, "parameter" in i ? i.parameter : null, "version" in i ? i.version : "1.1" ); } }; if (!("__gpp" in window) || typeof window.__gpp !== "function") { window.__gpp = window.__gpp_stub; window.addEventListener("message", window.__gpp_msghandler, false); window.__gpp_addFrame("__gppLocator"); } }; makeGppStub(); var uspStubFunction = function() { var arg = arguments; if (typeof window.__uspapi !== uspStubFunction) { setTimeout(function() { if (typeof window.__uspapi !== 'undefined') { window.__uspapi.apply(window.__uspapi, arg); } }, 500); } }; var checkIfUspIsReady = function() { uspTries++; if (window.__uspapi === uspStubFunction && uspTries < uspTriesLimit) { console.warn('USP is not accessible'); } else { clearInterval(uspInterval); } }; if (typeof window.__uspapi === 'undefined') { window.__uspapi = uspStubFunction; var uspInterval = setInterval(checkIfUspIsReady, 6000); } })(); </script> <!-- End InMobi Choice. Consent Manager Tag v3.0 (for TCF 2.2) --> <script data-cfasync="false" type="text/javascript"> var freestar = freestar || {}; freestar.hitTime = Date.now(); freestar.queue = freestar.queue || []; freestar.config = freestar.config || {}; freestar.debug = window.location.search.indexOf('fsdebug') === -1 ? false : true; freestar.config.enabled_slots = []; !function(a,b){var c=b.getElementsByTagName("script")[0],d=b.createElement("script"),e="https://a.pub.network/calibre-ebook-com";e+=freestar.debug?"/qa/pubfig.min.js":"/pubfig.min.js",d.async=!0,d.src=e,c.parentNode.insertBefore(d,c)}(window,document); freestar.initCallback = function () { (freestar.config.enabled_slots.length === 0) ? freestar.initCallbackCalled = false : freestar.newAdSlots(freestar.config.enabled_slots) } </script> <link rel="alternate" type="application/rss+xml" href="/changelog.rss" title="RSS feed of the calibre changelog" /> <!-- jQuery and associated tools --> <script type="text/javascript" src="/resources/js/jquery.tools.min.js"></script> <!-- YUI CSS foundation --> <link rel="stylesheet" type="text/css" href="/resources/styles/yui.css" /> <!-- Master CSS --> <link rel="stylesheet" type="text/css" href="/resources/styles/base.css" /> <script async src="https://www.googletagmanager.com/gtag/js?id=G-YMW4X5CSKP"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-YMW4X5CSKP'); </script> <link rel="stylesheet" type="text/css" href="/resources/styles/tabs.css" /> <style type="text/css"> #feature-list { list-style-type: square; } #feature-list .feature-description { display: none; margin-top: 1ex; } .feature-title { color: blue; cursor: pointer; line-height: 1.5; font-weight: bold; } .feature-title:hover { color: red; } #signature { text-align: right; width: 100%; font-size: 80%; font-family: monospace; } #usage { margin-top: 2ex; } #awards { list-style-type: none; } #awards li { list-style-type: none; display: inline; margin-right: 2em; text-align: center; } #awards img { padding-top: 1em; } </style> <script type="text/javascript"> //<![CDATA[ $(document).ready(function() { $("ul.tabs").tabs("div.panes > div", { 'history': true, 'effect': 'default', }); var api = jQuery("ul#right-tabs").data("tabs"); $(".tabs a[title]").tooltip({ position : 'bottom center', delay: 0, }); $("#feature-list > li > span.feature-title").click(function() { $(this).next("div").slideToggle("normal"); }); }); //]]> </script> <script> document.addEventListener('DOMContentLoaded', function() { document.querySelectorAll('video.calibre').forEach(function(video) { video.addEventListener('play', function() { this.classList.add('playing'); this.focus(); }); video.addEventListener('pause', function() { this.classList.remove('playing'); }); video.addEventListener('ended', function() { this.classList.remove('playing'); }); video.addEventListener('keydown', function(e) { if (e.key === 'Escape') this.pause(); }); }); }); </script> </head> <body onload="document.getElementById('content-wrapper').focus()"><div id="grid"> <div id="header"> <h1><a href="/">Calibre E-Book Management</a></h1> <ul id="primary-nav"> <li><a id="nav-about" href="/about" title="The features and history of calibre">About Calibre</a></li> <li><a id="nav-demo" href="/demo" title="See calibre in action">Demo</a></li> <li><a id="nav-download" href="/download" title="Download calibre for your operating system">Download</a></li> <li><a id="nav-help" href="/help" title="Get help on using calibre">Help</a></li> <li><a id="nav-whats-new" href="/whats-new" title="What's new in calibre world">What's New</a></li> <li><a id="nav-get-involved" href="/get-involved" title="Contribute to calibre">Get Involved</a></li> <li><a id="nav-bugs" href="/bugs" title="Report bugs / enhancement requests">Bugs</a></li> <li><a id="nav-lang" href="javascript:choose_language()" title="Change the language of this website">Language</a></li> </ul> <div title="Support calibre development" id="donate" alt="Contribute to support calibre development" rel="#donate_box" data-location="top_banner" style="cursor:pointer; border:none" >Support Calibre</div> </div> <div id="content-wrapper" class="yui-cssbase" tabindex="-1"> <div id="content"> <h1>About calibre</h1> <ul class="tabs"> <li><a id="t1" href="#features" title="A brief description of calibre's many features">Features</a></li> <li><a id="t2" href="#history" title="A history of the development of calibre">History</a></li> <li><a id="t3" href="#contact" title="The best ways to contact the calibre team">Contact</a></li> <li><a id="t4" href="#contributors" title="A list of contributors to the calibre community">Contributors</a></li> <li><a id="t5" href="#press" title="Mentions of calibre in the press">Press</a></li> </ul> <div class="panes"> <div class="pane" id="features"> <b>calibre is a powerful and easy to use e-book manager</b>. Users say it’s <i>outstanding</i> and a <i>must-have</i>. It’ll allow you to do nearly everything and it takes things a step beyond normal e-book software. It’s also <b>completely free</b> and <i>open source</i> and great for both <b>casual users</b> and computer experts. <ul id="feature-list"> <li> <span class="feature-title">Save time on managing your e-book collection</span> <div class="feature-description"> <p>calibre’s user interface is designed to be as simple as possible. <b>Large buttons</b> in the main window take care of most of your needs. The vast number of calibre’s features and options is always clearly displayed under <b>intuitive tabs</b>. Its context menus are neatly sorted, so the things you’re looking for almost find themselves on their own. <b>You’re never more than three clicks away from your goal.</b> It’s the result of years of tweaking calibre’s interface based on users’ feedback. Plus, you can change many aspects of how calibre looks and feels, and try one of the three built-in library views to browse your book collection using covers, titles, tags, authors, publishers, etc.</p> <p>calibre not only can <b>download all the metadata</b> for an e-book (things like title, author, publisher, ISBN, tags, cover or summary) but will also allow you to edit or create metadata in existing or new fields. That way you can track which books you’ve read and which ones you liked. You can also take advantage of the <b>advanced search and sorting</b> functions that use tags, authors, comments and more. You will find the book you were looking for in seconds! </p> </div> </li> <li> <span class="feature-title">Use it everywhere and with anything</span> <div class="feature-description"> <p>calibre supports almost <b>every single e-reader</b> and is compatible with more devices with every update. You can transfer your e-books from one device to another in seconds, <b>wirelessly</b> or with a cable. And you don’t need any additional tools to do that. calibre will send the <b>best file format</b> for your device converting it if needed, automatically. </p> <p>No matter what PC, laptop or tablet you use, calibre’s got you covered. If you’re traveling and don’t have your device with you – you can take calibre on a USB stick and <b>use it wherever you are</b>. Or run the calibre Content server and read your books anywhere, on any device.</p> <p>calibre can convert dozens of file types. No matter where you got your e-book from, it’ll be ready for your device in no time. When converting, you can also automatically change the book’s style, create a table of contents or improve punctuation and margins. calibre will also detect the format that’s best suited for your device on its own, so you don’t have to bother.</p> <p>calibre can also turn your personal documents to e-books or create them from scratch. It can also take all the mundane things that go with it off your plate. It has automatic style helpers and scripts generating the book’s structure. You focus on the content, calibre will take care of the rest.</p> </div> </li> <li> <span class="feature-title" href="#">Comprehensive e-book viewer</span> <div class="feature-description"> <p>calibre has a built-in e-book viewer that can display <b>all the major e-book formats</b>. It has full support for Table of Contents, highlighting, bookmarks, CSS, read aloud, a reference mode, printing, searching, copying, multi-page view, embedded fonts, and on and on… </p> </div> </li> <li> <span class="feature-title" href="#">Download news/magazines from the web</span> <div class="feature-description"> <p>calibre can make sure you know what’s happening and <b>automatically deliver stories</b> to your device from hundreds of news sources like The Economist, New York Times, New Yorker Magazine, The Guardian, BBC News, National Geographic, CNN, The Wall Street Journal, The Washington Post, The Atlantic, Scientific American, Wired Magazine, The Telegraph, Forbes, Ars Technica…</p> <p>You can also teach calibre to deliver news from completely different sites or take advantage of any <b>RSS feed</b>. No searching, no waiting, no hassle.</p> </div> </li> <li> <span class="feature-title">Share and backup your library easily</span> <div class="feature-description"> <p>calibre comes with a <b>handy web server</b> to host your library. In just a few moments you can <b>safely share</b> all (or just some) of your e-books with anyone you choose or access them yourself from anywhere, using any device you like. With the server, you can read the books in your calibre library on any phone/tablet using just a browser. It even works offline. </p> <p>calibre has also some useful backup and import/export features that will guarantee the safety and portability of your book collection with minimal fuss.</p> </div> </li> <li> <span class="feature-title">Edit the books in your collection</span> <div class="feature-description"> <p>For the e-book nerds amongst you, calibre has a built-in editor that allows you to <b>edit e-books</b> in the most popular e-book formats, EPUB and Kindle. The editor has many sophisticated features to make editing the innards of e-books as easy and efficient as possible.</p> </div> </li> <li> <span class="feature-title">Satisfy every e-book need and get support</span> <div class="feature-description"> <p>It’s unlikely, but if you find out there’s a feature you need but calibre lacks it, you can use the <b>built-in plugin explorer</b>. Many users develop plugins to enhance and expand calibre’s features. You can browse through <b>hundreds of plugins</b> directly from calibre and install them with just one click.</p> <p>calibre has more than 3 million active installs and <b>lots of fans</b>! You will never have to wait to solve any issue you might encounter: you can use the <a href="/help">extensive help resources</a>, or just ask members of the <a href="https://www.mobileread.com/forums/forumdisplay.php?f=166">calibre forum</a>.</p> <p>calibre is created by <b>book lovers</b>, for book lovers. Hundreds of motivated <b>volunteers develop</b> calibre and deliver updates on a regular basis. Most issues are <b>resolved in a week</b>. With every update, we fix bugs, add new features and make calibre more compatible, faster and easier.</p> </div> </li> </ul> <div style="border: solid 1px currentColor; padding: 1ex 1em; margin: 1ex 1em;"><b>Celebrate over fifteen years of excellence with us and <a href="/download">download</a> calibre today!</b></div> </div> <div class="pane" id="history"> <p>calibre started life on 31 October, 2006, soon after the release of the SONY PRS-500, the first e-ink based reader to be sold commercially in the US. At the time, I was a graduate student, with a lot of time on my hands. The PRS-500 did not work at all with Linux, my operating system of choice, so I decided to reverse engineer the USB protocol that it used, to get it working on Linux. This was accomplished with the help of the fine folks over at <a href="https://mobileread.com" target="new">mobileread.com</a> and calibre was born, albeit named <code>libprs500</code>.</p> <p>At the time there were no satisfactory tools to convert content into the <code>LRF</code> format, used by the SONY reader, so I decided to implement a converter to convert the most popular e-book formats to LRF. This converter proved to be wildly popular and far better than the (mostly non-existent) offerings from SONY. It was picked up and used by various publishing houses and content digitizers to produce the first generation of books in the LRF format.</p> <p>As my e-book collection grew, I realized that managing it was quickly becoming unwieldy, so I decided to write a graphical interface to libprs500 to make it easier. This became calibre, in its present form, as a comprehensive e-book management tool. libprs500 was renamed to calibre in mid-2008. The name calibre was chosen by my wife, Krittika. The libre in calibre stands for freedom, indicating that calibre is a free and open source product, modifiable by all. Nonetheless, calibre should be pronounced as cali-ber, not ca-libre. </p> <p> Today calibre is a vibrant open-source community with half a dozen developers and many, many testers and bug reporters. It is used in over 200 countries and has been translated into a dozen different languages by volunteers. calibre has become a comprehensive tool for the management of digital texts, allowing you to do whatever you could possibly imagine with your e-book library. Reading is very important to me and one of my goals has always been to prevent either the fragmentation or the monopolization of the e-book market by entities that care solely for short-term goals. As the calibre community continues to grow, driven by book lovers, for book lovers, hopefully it will always present an alternative for people that love to read e-books and want to be in control of their own digital libraries. </p> <p id="signature">Kovid Goyal<br />November 2009</p> </div> <div class="pane" id="contact"> <h2>Asking for help</h2> <p> The best places to ask for help with calibre are the very active <a target="forum" href="https://www.mobileread.com/forums/forumdisplay.php?f=166">calibre forum</a> at mobileread.com, where there are a number of friendly and knowledgeable long time users/developers of calibre. In addition, there is the <a href="https://www.facebook.com/pages/Calibre/201937604701">calibre Facebook fan page</a> and <a target="twitter" href="https://twitter.com/calibreforum">#calibreforum</a> on Twitter. </p> <h2>Reporting issues and asking for new features</h2> <p> If you wish to report a problem with calibre or would like to request a new feature, the best place to do it is via the calibre <a href="/bugs">Bug tracker</a>. Be aware that calibre is developed by volunteers, which means that your bug report/feature request may or may not get attention, so if you are looking for help, the best place is the forum linked to above. </p> </div> <div class="pane" id="contributors"> <p>calibre is an open source application that uses a large number of other open source libraries and is developed on Linux, an open source platform, and as such, it has benefited from the work of large numbers of people, some of whom are listed below. I've tried to be as exhaustive as possible, but, if I have omitted your contribution, please let me know.</p> <h2>Contributors of code/bug fixes</h2> <p>In no particular order:</p> <ul> <li>Marshall Vandegrift: For epub2lrf, lit2oeb, oeb2mobi and various improvements in the html2lrf code, as well as the basic framework for the conversion pipeline in the 0.6.x series</li> <li>John Schember: For the new calibre device driver framework, various GUI enhancements and several input and output format plugins and the "Get Books" feature</li> <li>Charles Haley: For custom columns, saved searches, restrictions, the wireless device driver, lots of other help/ideas</li> <li>Gregory Riker: For MOBI indexing, catalogs, the iPad driver</li> <li>Roger Critchlow: For the initial implementation of lrs2lrf</li> <li>Anatoly Shipitsin: For fb2lrf and fb2-meta</li> <li>Ori Avtalion and WayneD: For various bug fixes</li> <li>Tijmen Ruizendaal: For the Be Book driver</li> <li>Igor Skochinsky: For various bits of reverse engineering without which calibre would never have gotten off the ground</li> <li>Darko Miletic: For a large number of news recipes</li> <li>Grant Drake: For various plugins including Open with, Search the internet and Goodreads integration</li> <li>Timothy Legge and David Forrester: For Kobo support in calibre</li> <li>Eli Schwartz: For Linux packaging efforts</li> <li>Eli Schwartz and Flaviu Tamas: For Python 3 porting efforts</li> <li>Mark W. Gabby-Li: For adding right-to-left and vertical text support to the E-book viewer</li> </ul> <h2>Graphics and design</h2> <ul> <li>Nicholas Holland and the guys at <a target="new" href="https://cs-website.herokuapp.com/">Centresource</a>: For the website design</li> <li>diaboNL: For the reader icon</li> <li>Caleb Avery and Kamil Tatara: For the calibre logo</li> <li>Jonatan Nyberg: For lots of polishing of the UI</li> <li>subtlepatterns.com: For various textures</li> </ul> <h2>Recipe writers</h2> <p>Too many people have contributed recipes to list here, but their contributions are a big part of calibre.</p> <h2>Translators</h2> <p>The list of translators is available <a target="new" href="https://app.transifex.com/calibre/calibre/">here</a>.</p> <h2>Other projects whose code/libraries calibre uses/links against</h2> <ul> <li>Python</li> <li>Qt</li> <li>PyQt</li> <li>rtf2xml</li> <li>poppler</li> <li>feedparser</li> <li>pylrs</li> <li>BeautifulSoup</li> <li>mechanize</li> <li>pictureflow</li> <li>lxml</li> <li>Hyphenator</li> <li>sqlite</li> <li>chardet</li> <li>podofo</li> <li>libmtp</li> <li>Python Imaging Library</li> <li>Sphinx</li> <li>django</li> <li>odfpy</li> <li>cssutils</li> <li>git</li> <li>ICU</li> <li>dateutil</li> <li>dnspython</li> <li>pywin32</li> <li>python-dbus</li> </ul> <p>The Launchpad, Transifex and GitHub services for providing bug, file, translation and code hosting for calibre.</p> <p>Last, but not least I'd like to thank the folks at <a target="new" href="https://mobileread.com">mobileread.com</a> for creating a wonderful community for us e-book lovers to gather round.</p> </div> <div class="pane" id="press"> <h2>Awards</h2> <ul id="awards"> <li><a href="https://www.windows11downloads.com/win11-calibre/" target="_blank"><img src="/resources/img/windows-11-downloads.png" alt="Windows 11 downloads award for calibre" style="border:0" /></a></li> <li><a href="https://graphicsfamily.com/calibre/" target="_blank"><img src="/resources/img/Best-Software-Award-by-GraphicsFamily.png" alt="Graphics Family award for calibre" style="border:0" /></a></li> <li><a href="http://download.famouswhy.com/calibre/" target="_blank"><img src="/resources/img/Famous_Software_Award_Logo.png" alt="Calibre" style="border:0" /></a></li> <li><a href="http://www.fiberdownload.com/Download/24368/Calibre" target="_blank"><img src="/resources/img/editor_pick_1.png" alt="Fiber download Editor's pick"/></a></li> <li><a href="http://www.filecluster.com/reviews/082011/calibre-your-e-book-virtual-librarian/" target="_blank"><img src="/resources/img/review_5stars.png" alt="Excellent"/></a></li> <li><a href="https://calibre.sooftware.com/windows" target="_blank"><img src="/resources/img/sooftware_pick.png" alt="Excellent"/></a></li> <li><a href="https://calibre.informer.com/" target="_blank"><img src="/resources/img/informer_editor.png" alt="Excellent"/></a></li> <li><a href="https://win.topdownload.club/calibre/" target="_blank"><img src="/resources/img/topdownload.png" alt="Excellent"/></a></li> </ul> </ul> <p><a href="https://calibre.informer.com/" target="_blank">Software informer</a>: <b>4.3 stars</b> (August, 2022)</p> <p><a href="https://win.topdownload.club/calibre/" target="_blank">Top Download club</a>: <b>5 stars</b> (July, 2022)</p> <p><a href="https://calibre.sooftware.com/windows" target="_blank">Sooftware rating</a>: <b>4.5 stars</b> (May, 2022)</p> <p><a href="https://www.capterra.com/p/92449/Calibre/reviews/" target="_blank">Capterra rating</a>: <b>4.7 stars</b> (Apr, 2021)</p> <p><a href="https://calibre.en.softonic.com/" target="_blank">Softonic rating</a>: <b>4 stars</b> (Apr, 2021)</p> <p><a href="https://www.macupdate.com/app/mac/30657/calibre" target="_blank">MacUpdate rating</a>: <b>4.3 stars</b> (Apr, 2021)</p> <p><a href="https://www.ebool.com/reviews/calibre" target="_blank">eBool rating</a>: <b>5 stars</b> (Apr, 2017)</p> <p><a href="http://www.softpedia.com/get/Office-tools/Diary-Organizers-Calendar/Calibre.shtml" target="_blank">Softpedia rating</a>: <b>4.5 stars</b> (Mar, 2017)</p> <p><a href="http://www.filehorse.com/download-calibre-64/" target="_blank">File Horse rating</a>: <b>5 stars</b> Completely safe (Jan, 2017)</p> <p><a href="http://download.cnet.com/Calibre/3000-2125_4-10910277.html?tag=mncol" target="_blank">CNET Editor's rating</a>: <b>4.5 stars</b> (Nov, 2009)</p> <h2>Press mentions</h2> <ul> <li><a href="http://gadgetwise.blogs.nytimes.com/tag/calibre">The New York Times</a></li> <li><a href="http://kindleworld.blogspot.com/2009/08/million-free-google-books-in-epub-for.html">Kindle World</a></li> <li><a href="http://www.softpedia.com/reviews/mac/calibre-Review-137455.shtml">Softpedia</a></li> <li><a href="http://www.wired.com/gadgetlab/2009/10/gadget-lab-guide-how-to-un-cripple-your-international-kindle/">Wired.com</a></li> <li><a href="http://lifehacker.com/5169425/calibre-manages-your-e+book-collection">LifeHacker</a></li> <li><a href="http://dearauthor.com/wordpress/2008/12/28/calibre-the-ebook-readers-best-friend-part-1-of-2">Dear author</a></li> <li><a href="http://www.thekindlechronicles.com/2009/04/03/37-kovid-goyal/">Kindle Chronicles</a></li> <li><a href="http://www.livemint.com/Companies/RsORoaz8sHA0VgXBfT1sUK/How-one-of-the-most-popular-ebook-management-softwares-cal.html">Live Mint</a></li> </ul> </div> <ul id="usage"> <li>You can see usage statistics for calibre <a target="usage" href="/dynamic/calibre-usage">here</a></li> <li>You can see usage statistics for the various news sources in calibre <a target="usage" href="/dynamic/recipe-usage">here</a></li> </ul> </div> </div> <!-- end content --> <ul id="footer"> <li>© Kovid Goyal</li> <li><a type="application/rss+xml" href="/changelog.rss" title="RSS feed of the calibre changelog">Feed of new releases</a></li> <li class="last"><a href="/privacy" title="Privacy policy">Privacy Policy</a></li> </ul> </div> <!-- end content-wrapper --> <div id="sidebar"> <div id="ad-container"> <div align="center" id="calibre-ebook_rail_right_1"> <script data-cfasync="false" type="text/javascript"> freestar.config.enabled_slots.push({ placementName: "calibre-ebook_rail_right_1", slotId: "calibre-ebook_rail_right_1" }); </script> </div> <div style="display:inline-block;width:336px; height:20px"> </div> <div align="center" id="calibre-ebook_rail_right_2"> <script data-cfasync="false" type="text/javascript"> freestar.config.enabled_slots.push({ placementName: "calibre-ebook_rail_right_2", slotId: "calibre-ebook_rail_right_2" }); </script> </div> </div> </div> <!-- end sidebar --> <div id="donate_box" style="display:none" data-location="loc_unknown"> <style type="text/css"> #donate_box { z-index: 10001; background-color: #eee; color: #000; padding: 10px; width: 675px; max-width: 80%; border: 2px solid #666; box-shadow:0 0 90px 5px #000; border-radius: 6px; } #donate_box .close { background-image:url(/resources/img/close.png); position:absolute; right:-15px; top:-15px; cursor:pointer; height:24px; width:24px; } #donate_box h2 { text-align: center; font-size: xx-large; margin-top: -0.2em; color: #666; background-color: #ddd; border-radius: 6px; margin-bottom: 0.5em; } #donate_box h2:before { content: "♥ "; color: red; } #donate_box h2:after { content: " ♥"; color: red; } #donate_box .donate_line { background-color: rgb(217, 237, 247); color: rgb(58, 135, 173); border: solid 1px rgb(188, 232, 241); padding: 0.5em; margin-top: 0.5em; margin-bottom: 0.5em; } #donate_box .donate_line input { border: solid 1px rgba(82, 168, 236, 0.8) !important; padding: 5px 0px; padding-left: 3px; border-radius: 4px; width: 5em; } #donate_box #donate_ok_button { float: right; margin-top: 12px; } #donate_box #donate_bt_button { float: left; text-decoration: none; margin-top: 12px; padding: 9px 2px; } #donate_box div { margin-top: 0.5em; } #donate_box #donate_wait_msg { text-align: center; margin-top: 1em; } #donate_box #donate_wait_msg img { vertical-align: middle; } </style> <h2>Thank you!</h2> <p>Your support helps keep calibre development alive.</p> <p class="donate_line"> Contribute <input name="price" type="number" value="10" step="1" min="1" /> <select id="donate-contribute-currency" required="required" data-val="USD"> <option value="USD">USD ($)</option> <option value="INR">INR (₹)</option> </select> </p> <p class="donate_radio">Amount: <label><input type="radio" value="5" name="price_choice" /> <span>$5</span> </label> <label><input type="radio" value="10" name="price_choice" checked="checked" /> <span>$10</span> </label> <label><input type="radio" value="15" name="price_choice" /> <span>$15</span> </label> <label><input type="radio" value="25" name="price_choice" /> <span>$25</span> </label> <label><input type="radio" value="50" name="price_choice" /> <span>$50</span> </label> <label><input type="radio" value="100" name="price_choice" /> <span>$100</span> </label> </p> <div id="donate_wait_msg"><img src="/resources/img/spinner.gif" alt="Working" /> Contacting payment provider, please wait…</div> <div id="donate_buttons"> <a id="donate_bt_button" href="https://www.patreon.com/kovidgoyal"> Become a calibre patron </a> <span id="donate_ok_button" tooltip="Pay with credit card or PayPal"><span style="color:red">PayPal unavailable!</span></span> </div> <script src="https://www.paypalobjects.com/api/checkout.min.js" async="async" id="paypal-checkout-script"></script> <script type="text/javascript"> (function() { function change_currency() { var curr = document.getElementById('donate-contribute-currency').value; if (curr === document.getElementById('donate-contribute-currency').dataset.val) return; var mult = curr === 'INR' ? 20 : 1/20; var symbol = curr === 'INR' ? '₹' : '$'; var text_input = document.querySelector('#donate_box input[name="price"]'); text_input.value = '' + Math.max(1, parseFloat(text_input.value) * mult); document.querySelectorAll('#donate_box input[name="price_choice"').forEach(function(node) { var rval = '' + (parseInt(node.value) * mult); node.value = rval; node.parentNode.querySelector('span').textContent = symbol + rval; }); document.getElementById('donate-contribute-currency').dataset.val = curr; } document.getElementById('donate-contribute-currency').addEventListener('change', change_currency); var x = new XMLHttpRequest(); x.addEventListener('load', function() { if (this.responseText === 'IND' || this.responseText === 'IN') { document.getElementById('donate-contribute-currency').value = 'INR'; change_currency(); } }); var cc = 'country-code'; x.open('GET', '/' + cc); x.send(); function get_current_value() { var ans = parseFloat($('#donate_box input[name="price"]').val()); if (isNaN(ans)) ans = 10; return ans; } document.getElementById('paypal-checkout-script').onload = function() { if (!window.paypal) return; // See https://developer.paypal.com/docs/api/payments/#payment var lang = document.documentElement.getAttribute('lang'); var locale = 'en_US'; var locale_map = {fr: 'fr_FR', de: 'de_DE', es: 'es_ES'} if (locale_map[lang]) locale = locale_map[lang]; document.getElementById('donate_ok_button').textContent = ''; window.paypal.Button.render({ env: 'production', // sandbox or production client: { sandbox: 'AcbgAJCOt1wze9Xwh8ijAEIQOck5Ykz_UhA3jTtfPjdcl5bOPIgwz7k2E33oJ_24QZe59_gQZIFnvr6n', production: 'AbVJy1AqjPTncpdEQteWqVN-DdULUR9vtpvEKQMAof4SFoiuiuAACRd0fjNvvTsZPnQy3Enai5lmdm1A' }, commit: true, style: { tagline: false, label: 'pay'}, locale: locale, payment: function(data, actions) { $('#donate_box #donate_wait_msg').css('display', 'block'); $('#donate_box #donate_buttons').css('display', 'none'); return actions.payment.create({ payment: { application_context: { shipping_preference: "NO_SHIPPING", locale: locale, brand_name: 'calibre - Kovid Goyal', }, // Disabled as it causes an intrusive popup on the payment page. // note_to_payer: 'Thank you for supporting calibre!', transactions: [ { amount: { total: get_current_value().toFixed(2), currency: document.getElementById('donate-contribute-currency').value }, description: 'Support calibre development: ' + document.getElementById('donate_box').dataset.location, } ] } }); }, onAuthorize: function(data, actions) { return actions.payment.execute().then(function(response) { $('#donate_box .close').click(); alert('Payment successful! Thank you for your support.'); }); }, onCancel: function(data, actions) { $('#donate_box .close').click(); }, onError: function(data, actions) { alert('Payment failed!'); } }, '#donate_ok_button'); } $(document).ready(function() { $("[rel='#donate_box']").each(function() { var loc = this.getAttribute('data-location'); if (!loc) loc = 'loc_unknown'; $(this).overlay({ expose: $("#donate_box").css('background-color'), // change to mask for jquery.tools >= 1.2 closeOnClick: false, // Prevent clicking outside from closing the dialog onBeforeLoad: function() { $('#donate_box #donate_wait_msg').css('display', 'none'); $('#donate_box #donate_buttons').css('display', 'block'); }, onLoad: function() { document.getElementById('donate_box').dataset.location = loc; // Keep the box at a fixed position in the viewport (this can be removed when updating jquery.tools to 1.2 as it is the default) $('#donate_box').css('position', 'fixed'); }, top: "5%" }); }); var sync_from_radio = true; // The change() function does not work on IE $('#donate_box input[name="price_choice"]').click(function() { if (sync_from_radio) $('#donate_box input[name="price"]').val(this.value); }); $('#donate_box input[name="price"]').change(function() { var val = get_current_value(); var found = null; if (val % 1 === 0) { // Number is an integer var elem = $('#donate_box input[name="price_choice"][value="' + val.toFixed() + '"]'); if (elem.length > 0) { found = elem; } } sync_from_radio = false; if (found === null) { $('#donate_box input[name="price_choice"]').each(function() { this.checked = false; }); } else { found[0].checked = true; } sync_from_radio = true; }); $('#donate_box input[name="price"]').keypress(function(event) { if (event.which == 13) $('#donate_box #donate_ok_button').click(); }); }); })(); </script> </div> <div id="language-box" tabindex="0"> <script> $(document).ready(function() { $("#primary-nav a[title]").tooltip({ position : 'bottom center', }); $("#donate").tooltip({ position : 'bottom center', }); $('#language-box').on('keydown', function(ev) { if (ev.key === "Escape") close_language(); }); redirect_to_preferred_language(); }); function choose_language() { document.getElementById('language-box').style.display = 'flex'; document.getElementById('language-box').focus(); } function close_language() { document.getElementById('language-box').style.display = 'none'; } function change_language(lang_code, is_current, lang_href) { if (document.getElementById("set-default-lang").checked) { window.localStorage.setItem("calibre-web-ui-lang", lang_code); } if (is_current) return close_language(); window.location.href = lang_href; } function redirect_to_preferred_language() { var languages = {}; var current_language = ''; document.querySelectorAll('#language-box [data-lang-code]').forEach(function(item) { languages[item.dataset.langCode] = item.dataset.langHref; if (item.dataset.langIsCurrent === 'true') current_language = item.dataset.langCode; }); var preferred_lang = window.localStorage.getItem("calibre-web-ui-lang"); if (preferred_lang && current_language && preferred_lang !== current_language && languages[preferred_lang]) { window.location.href = languages[preferred_lang]; } } </script> <style> #language-box { display: none; position: absolute; z-index: 3000; left: 0; top: 0; width: 100vw; height: 100vh; background: rgba(255, 255, 255, 0.9); justify-content: center; overflow: auto; } #language-box h2 { font-weight: bold; font-size: 160%; margin: 1rem auto; text-align: center; } #language-box ul { margin: auto; display: grid; max-width: 75vw; grid-template-columns: repeat(auto-fit, minmax(20em, 1fr)); } #language-box li { margin: 1em; } </style> <div> <h2>Choose the language you want</h2> <div style="display: flex; justify-content: space-between; margin-bottom: 1ex"> <label><input type="checkbox" checked id="set-default-lang"> Save as default language</label> <a href="javascript:close_language()">Cancel</a> </div> <ul> <li><a data-lang-code="pt_BR" data-lang-is-current="false" data-lang-href="/pt_BR/about" href="javascript: change_language('pt_BR', false, '/pt_BR/about')">Brazilian Portuguese (Português Brasileiro)</a></li> <li><a data-lang-code="zh_HK" data-lang-is-current="false" data-lang-href="/zh_HK/about" href="javascript: change_language('zh_HK', false, '/zh_HK/about')">Chinese (中文; 汉语; 华语)</a></li> <li><a data-lang-code="da" data-lang-is-current="false" data-lang-href="/da/about" href="javascript: change_language('da', false, '/da/about')">Danish (Dansk)</a></li> <li><a data-lang-code="nl" data-lang-is-current="false" data-lang-href="/nl/about" href="javascript: change_language('nl', false, '/nl/about')">Dutch (Nederlands)</a></li> <li><a data-lang-code="en" data-lang-is-current="true" data-lang-href="/about" href="javascript: change_language('en', true, '/about')">English (English)</a></li> <li><a data-lang-code="et" data-lang-is-current="false" data-lang-href="/et/about" href="javascript: change_language('et', false, '/et/about')">Estonian (eesti)</a></li> <li><a data-lang-code="fr" data-lang-is-current="false" data-lang-href="/fr/about" href="javascript: change_language('fr', false, '/fr/about')">French (Français)</a></li> <li><a data-lang-code="gl" data-lang-is-current="false" data-lang-href="/gl/about" href="javascript: change_language('gl', false, '/gl/about')">Galician (Galego)</a></li> <li><a data-lang-code="it" data-lang-is-current="false" data-lang-href="/it/about" href="javascript: change_language('it', false, '/it/about')">Italian (Italiano)</a></li> <li><a data-lang-code="ja" data-lang-is-current="false" data-lang-href="/ja/about" href="javascript: change_language('ja', false, '/ja/about')">Japanese (日本語)</a></li> <li><a data-lang-code="pl" data-lang-is-current="false" data-lang-href="/pl/about" href="javascript: change_language('pl', false, '/pl/about')">Polish (polski)</a></li> <li><a data-lang-code="pt" data-lang-is-current="false" data-lang-href="/pt/about" href="javascript: change_language('pt', false, '/pt/about')">Portuguese (Português)</a></li> <li><a data-lang-code="ru" data-lang-is-current="false" data-lang-href="/ru/about" href="javascript: change_language('ru', false, '/ru/about')">Russian (русский)</a></li> <li><a data-lang-code="zh_CN" data-lang-is-current="false" data-lang-href="/zh_CN/about" href="javascript: change_language('zh_CN', false, '/zh_CN/about')">Simplified Chinese (简体中文)</a></li> <li><a data-lang-code="es" data-lang-is-current="false" data-lang-href="/es/about" href="javascript: change_language('es', false, '/es/about')">Spanish (Español)</a></li> <li><a data-lang-code="sv" data-lang-is-current="false" data-lang-href="/sv/about" href="javascript: change_language('sv', false, '/sv/about')">Swedish (Svenska)</a></li> <li><a data-lang-code="ta" data-lang-is-current="false" data-lang-href="/ta/about" href="javascript: change_language('ta', false, '/ta/about')">Tamil (தமிழ்)</a></li> <li><a data-lang-code="zh_TW" data-lang-is-current="false" data-lang-href="/zh_TW/about" href="javascript: change_language('zh_TW', false, '/zh_TW/about')">Traditional Chinese (正體中文)</a></li> <li><a data-lang-code="uk" data-lang-is-current="false" data-lang-href="/uk/about" href="javascript: change_language('uk', false, '/uk/about')">Ukrainian (українська)</a></li> </ul> </div> </div> <!-- end languages --> </div></body> </html>