PageSourceSearch

https://calibre-ebook.com/about

html calibre-ebook.com collected 2026-10-01 08:45:21 UTC 55,838 bytes, 1,289 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3
4<head>
5    <meta charset='utf-8'>
6    <title>calibre - About</title>
7    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
8    
9    <meta name="keywords" content="e-book,ebook,library,calibre,software,news,digital text,free,open source" />
10    <meta name="description" content="calibre: The one stop solution for all your e-book needs. Comprehensive e-book software." />
11    
12    <link rel="icon" type="image/png" href="/favicon.png" />
13
14    
15    <!-- InMobi Choice. Consent Manager Tag v3.0 (for TCF 2.2) -->
16<script type="text/javascript" async=true>
17(function() {
18  var host = window.location.hostname;
19  var element = document.createElement('script');
20  var firstScript = document.getElementsByTagName('script')[0];
21  var url = 'https://cmp.inmobi.com'
22    .concat('/choice/', '593Yp13RM2k2D', '/', host, '/choice.js?tag_version=V3');
23  var uspTries = 0;
24  var uspTriesLimit = 3;
25  element.async = true;
26  element.type = 'text/javascript';
27  element.src = url;
28
29  firstScript.parentNode.insertBefore(element, firstScript);
30
31  function makeStub() {
32    var TCF_LOCATOR_NAME = '__tcfapiLocator';
33    var queue = [];
34    var win = window;
35    var cmpFrame;
36
37    function addFrame() {
38      var doc = win.document;
39      var otherCMP = !!(win.frames[TCF_LOCATOR_NAME]);
40
41      if (!otherCMP) {
42        if (doc.body) {
43          var iframe = doc.createElement('iframe');
44
45          iframe.style.cssText = 'display:none';
46          iframe.name = TCF_LOCATOR_NAME;
47          doc.body.appendChild(iframe);
48        } else {
49          setTimeout(addFrame, 5);
50        }
51      }
52      return !otherCMP;
53    }
54
55    function tcfAPIHandler() {
56      var gdprApplies;
57      var args = arguments;
58
59      if (!args.length) {
60        return queue;
61      } else if (args[0] === 'setGdprApplies') {
62        if (
63          args.length > 3 &&
64          args[2] === 2 &&
65          typeof args[3] === 'boolean'
66        ) {
67          gdprApplies = args[3];
68          if (typeof args[2] === 'function') {
69            args[2]('set', true);
70          }
71        }
72      } else if (args[0] === 'ping') {
73        var retr = {
74          gdprApplies: gdprApplies,
75          cmpLoaded: false,
76          cmpStatus: 'stub'
77        };
78
79        if (typeof args[2] === 'function') {
80          args[2](retr);
81        }
82      } else {
83        if(args[0] === 'init' && typeof args[3] === 'object') {
84          args[3] = Object.assign(args[3], { tag_version: 'V3' });
85        }
86        queue.push(args);
87      }
88    }
89
90    function postMessageEventHandler(event) {
91      var msgIsString = typeof event.data === 'string';
92      var json = {};
93
94      try {
95        if (msgIsString) {
96          json = JSON.parse(event.data);
97        } else {
98          json = event.data;
99        }
100      } catch (ignore) {}
101
102      var payload = json.__tcfapiCall;
103
104      if (payload) {
105        window.__tcfapi(
106          payload.command,
107          payload.version,
108          function(retValue, success) {
109            var returnMsg = {
110              __tcfapiReturn: {
111                returnValue: retValue,
112                success: success,
113                callId: payload.callId
114              }
115            };
116            if (msgIsString) {
117              returnMsg = JSON.stringify(returnMsg);
118            }
119            if (event && event.source && event.source.postMessage) {
120              event.source.postMessage(returnMsg, '*');
121            }
122          },
123          payload.parameter
124        );
125      }
126    }
127
128    while (win) {
129      try {
130        if (win.frames[TCF_LOCATOR_NAME]) {
131          cmpFrame = win;
132          break;
133        }
134      } catch (ignore) {}
135
136      if (win === window.top) {
137        break;
138      }
139      win = win.parent;
140    }
141    if (!cmpFrame) {
142      addFrame();
143      win.__tcfapi = tcfAPIHandler;
144      win.addEventListener('message', postMessageEventHandler, false);
145    }
146  };
147
148  makeStub();
149
150  function makeGppStub() {
151    const CMP_ID = 10;
152    const SUPPORTED_APIS = [
153      '2:tcfeuv2',
154      '6:uspv1',
155      '7:usnatv1',
156      '8:usca',
157      '9:usvav1',
158      '10:uscov1',
159      '11:usutv1',
160      '12:usctv1'
161    ];
162
163    window.__gpp_addFrame = function (n) {
164      if (!window.frames[n]) {
165        if (document.body) {
166          var i = document.createElement("iframe");
167          i.style.cssText = "display:none";
168          i.name = n;
169          document.body.appendChild(i);
170        } else {
171          window.setTimeout(window.__gpp_addFrame, 10, n);
172        }
173      }
174    };
175    window.__gpp_stub = function () {
176      var b = arguments;
177      __gpp.queue = __gpp.queue || [];
178      __gpp.events = __gpp.events || [];
179
180      if (!b.length || (b.length == 1 && b[0] == "queue")) {
181        return __gpp.queue;
182      }
183
184      if (b.length == 1 && b[0] == "events") {
185        return __gpp.events;
186      }
187
188      var cmd = b[0];
189      var clb = b.length > 1 ? b[1] : null;
190      var par = b.length > 2 ? b[2] : null;
191      if (cmd === "ping") {
192        clb(
193          {
194            gppVersion: "1.1", // must be “Version.Subversion”, current: “1.1”
195            cmpStatus: "stub", // possible values: stub, loading, loaded, error
196            cmpDisplayStatus: "hidden", // possible values: hidden, visible, disabled
197            signalStatus: "not ready", // possible values: not ready, ready
198            supportedAPIs: SUPPORTED_APIS, // list of supported APIs
199            cmpId: CMP_ID, // IAB assigned CMP ID, may be 0 during stub/loading
200            sectionList: [],
201            applicableSections: [-1],
202            gppString: "",
203            parsedSections: {},
204          },
205          true
206        );
207      } else if (cmd === "addEventListener") {
208        if (!("lastId" in __gpp)) {
209          __gpp.lastId = 0;
210        }
211        __gpp.lastId++;
212        var lnr = __gpp.lastId;
213        __gpp.events.push({
214          id: lnr,
215          callback: clb,
216          parameter: par,
217        });
218        clb(
219          {
220            eventName: "listenerRegistered",
221            listenerId: lnr, // Registered ID of the listener
222            data: true, // positive signal
223            pingData: {
224              gppVersion: "1.1", // must be “Version.Subversion”, current: “1.1”
225              cmpStatus: "stub", // possible values: stub, loading, loaded, error
226              cmpDisplayStatus: "hidden", // possible values: hidden, visible, disabled
227              signalStatus: "not ready", // possible values: not ready, ready
228              supportedAPIs: SUPPORTED_APIS, // list of supported APIs
229              cmpId: CMP_ID, // list of supported APIs
230              sectionList: [],
231              applicableSections: [-1],
232              gppString: "",
233              parsedSections: {},
234            },
235          },
236          true
237        );
238      } else if (cmd === "removeEventListener") {
239        var success = false;
240        for (var i = 0; i < __gpp.events.length; i++) {
241          if (__gpp.events[i].id == par) {
242            __gpp.events.splice(i, 1);
243            success = true;
244            break;
245          }
246        }
247        clb(
248          {
249            eventName: "listenerRemoved",
250            listenerId: par, // Registered ID of the listener
251            data: success, // status info
252            pingData: {
253              gppVersion: "1.1", // must be “Version.Subversion”, current: “1.1”
254              cmpStatus: "stub", // possible values: stub, loading, loaded, error
255              cmpDisplayStatus: "hidden", // possible values: hidden, visible, disabled
256              signalStatus: "not ready", // possible values: not ready, ready
257              supportedAPIs: SUPPORTED_APIS, // list of supported APIs
258              cmpId: CMP_ID, // CMP ID
259              sectionList: [],
260              applicableSections: [-1],
261              gppString: "",
262              parsedSections: {},
263            },
264          },
265          true
266        );
267      } else if (cmd === "hasSection") {
268        clb(false, true);
269      } else if (cmd === "getSection" || cmd === "getField") {
270        clb(null, true);
271      }
272      //queue all other commands
273      else {
274        __gpp.queue.push([].slice.apply(b));
275      }
276    };
277    window.__gpp_msghandler = function (event) {
278      var msgIsString = typeof event.data === "string";
279      try {
280        var json = msgIsString ? JSON.parse(event.data) : event.data;
281      } catch (e) {
282        var json = null;
283      }
284      if (typeof json === "object" && json !== null && "__gppCall" in json) {
285        var i = json.__gppCall;
286        window.__gpp(
287          i.command,
288          function (retValue, success) {
289            var returnMsg = {
290              __gppReturn: {
291                returnValue: retValue,
292                success: success,
293                callId: i.callId,
294              },
295            };
296            event.source.postMessage(msgIsString ? JSON.stringify(returnMsg) : returnMsg, "*");
297          },
298          "parameter" in i ? i.parameter : null,
299          "version" in i ? i.version : "1.1"
300        );
301      }
302    };
303    if (!("__gpp" in window) || typeof window.__gpp !== "function") {
304      window.__gpp = window.__gpp_stub;
305      window.addEventListener("message", window.__gpp_msghandler, false);
306      window.__gpp_addFrame("__gppLocator");
307    }
308  };
309
310  makeGppStub();
311
312  var uspStubFunction = function() {
313    var arg = arguments;
314    if (typeof window.__uspapi !== uspStubFunction) {
315      setTimeout(function() {
316        if (typeof window.__uspapi !== 'undefined') {
317          window.__uspapi.apply(window.__uspapi, arg);
318        }
319      }, 500);
320    }
321  };
322
323  var checkIfUspIsReady = function() {
324    uspTries++;
325    if (window.__uspapi === uspStubFunction && uspTries < uspTriesLimit) {
326      console.warn('USP is not accessible');
327    } else {
328      clearInterval(uspInterval);
329    }
330  };
331
332  if (typeof window.__uspapi === 'undefined') {
333    window.__uspapi = uspStubFunction;
334    var uspInterval = setInterval(checkIfUspIsReady, 6000);
335  }
336})();
337</script>
337
338<!-- End InMobi Choice. Consent Manager Tag v3.0 (for TCF 2.2) -->
339    
339<script data-cfasync="false" type="text/javascript">
340    var freestar = freestar || {};
341    freestar.hitTime = Date.now();
342    freestar.queue = freestar.queue || [];
343    freestar.config = freestar.config || {};
344    freestar.debug = window.location.search.indexOf('fsdebug') === -1 ? false : true;
345    freestar.config.enabled_slots = [];
346    !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);
347    freestar.initCallback = function () { (freestar.config.enabled_slots.length === 0) ? freestar.initCallbackCalled = false : freestar.newAdSlots(freestar.config.enabled_slots) }
348    </script>
348
349    <!-- Below is a link to a CSS file that accounts for Cumulative Layout Shift,
350         a new Core Web Vitals subset that Google uses to help rank your site in search -->
351    <!-- The file is intended to eliminate the layout shifts that are seen when ads load into the page.
352         If you don't want to use this, simply remove this file -->
353    <!-- To find out more about CLS, visit https://web.dev/vitals/ -->
354    <link rel="stylesheet" href="https://a.pub.network/calibre-ebook-com/cls.css">
355    
356
357    <link rel="alternate" type="application/rss+xml" href="/changelog.rss" title="RSS feed of the calibre changelog" />
358
359    <!-- jQuery and associated tools -->
360    
360<script type="text/javascript" src="/resources/js/jquery.tools.min.js"></script>
360
361
362    <!-- YUI CSS foundation -->
363    <link rel="stylesheet" type="text/css" href="/resources/styles/yui.css" />
364
365    <!-- Master CSS -->
366    <link rel="stylesheet" type="text/css" href="/resources/styles/base.css" />
vendor: 74 bytes, lines 366-369
366
367
368    
369    <script async src="https://www.googletagmanager.com/gtag/js?id=
369G-YMW4X5CSKP
vendor: 16 bytes, lines 369-370
369"></script>
370    
370<script>
371        
vendor: 151 bytes, lines 371-374
371window.dataLayer = window.dataLayer || [];
372        function gtag(){dataLayer.push(arguments);}
373        gtag('js', new Date());
374        gtag('config', '
374G-YMW4X5CSKP
vendor: 8 bytes, lines 374-375
374');
375    
375</script>
375
376    
377
378    
379<link rel="stylesheet" type="text/css" href="/resources/styles/tabs.css" />
380
381<style type="text/css">
382
383    #feature-list { list-style-type: square; }
384
385    #feature-list .feature-description {
386        display: none;
387        margin-top: 1ex;
388    }
389
390    .feature-title {
391        color: blue;
392        cursor: pointer;
393        line-height: 1.5;
394        font-weight: bold;
395    }
396
397    .feature-title:hover {
398        color: red;
399    }
400
401    #signature {
402        text-align: right;
403        width: 100%;
404        font-size: 80%;
405        font-family: monospace;
406    }
407
408    #usage {
409        margin-top: 2ex;
410    }
411
412    #awards {
413        list-style-type: none;
414    }
415
416    #awards li {
417        list-style-type: none;
418        display: inline;
419        margin-right: 2em;
420        text-align: center;
421    }
422
423    #awards img {
424        padding-top: 1em;
425    }
426
427
428</style>
429<script type="text/javascript">
430    //<![CDATA[
431
432    $(document).ready(function() {
433            $("ul.tabs").tabs("div.panes > div", {
434                'history': true,
435                'effect': 'default',
436            });
437            var api = jQuery("ul#right-tabs").data("tabs");
438
439            $(".tabs a[title]").tooltip({
440                position : 'bottom center',
441                delay: 0,
442            });
443
444            $("#feature-list > li > span.feature-title").click(function() {
445                $(this).next("div").slideToggle("normal");
446            });
447    });
448    //]]>
449</script>
449
450
451
452
453    
453<script>
454        document.addEventListener('DOMContentLoaded', function() {
455            document.querySelectorAll('video.calibre').forEach(function(video) {
456                video.addEventListener('play', function() { this.classList.add('playing'); this.focus(); });
457                video.addEventListener('pause', function() { this.classList.remove('playing'); });
458                video.addEventListener('ended', function() { this.classList.remove('playing'); });
459                video.addEventListener('keydown', function(e) { if (e.key === 'Escape') this.pause(); });
460            });
461        });
462    </script>
462
463</head>
464
465<body onload="document.getElementById('content-wrapper').focus()"><div id="grid">
466    
467    <div id="header">
468        
469        <h1><a href="/">Calibre E-Book Management</a></h1>
470        
471        <ul id="primary-nav">
472            
473            <li><a id="nav-about" href="/about" title="The features and history of calibre">About Calibre</a></li>
474            <li><a id="nav-demo" href="/demo" title="See calibre in action">Demo</a></li>
475            <li><a id="nav-download" href="/download" title="Download calibre for your operating system">Download</a></li>
476            <li><a id="nav-help" href="/help" title="Get help on using calibre">Help</a></li>
477            <li><a id="nav-whats-new" href="/whats-new" title="What's new in calibre world">What's New</a></li>
478            <li><a id="nav-get-involved" href="/get-involved" title="Contribute to calibre">Get Involved</a></li>
479            <li><a id="nav-bugs" href="/bugs" title="Report bugs / enhancement requests">Bugs</a></li>
480            
481            <li><a id="nav-lang" href="javascript:choose_language()" title="Change the language of this website">Language</a></li>
482            
483            
484        </ul>
485        <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>
486    </div>
487    
488    <div id="content-wrapper" class="yui-cssbase" tabindex="-1">
489        <div id="content">
490            
491<h1>About calibre</h1>
492<ul class="tabs">
493    <li><a id="t1" href="#features" title="A brief description of calibre's many features">Features</a></li>
494    <li><a id="t2" href="#history" title="A history of the development of calibre">History</a></li>
495    <li><a id="t3" href="#contact" title="The best ways to contact the calibre team">Contact</a></li>
496    <li><a id="t4" href="#contributors" title="A list of contributors to the calibre community">Contributors</a></li>
497    <li><a id="t5" href="#press" title="Mentions of calibre in the press">Press</a></li>
498</ul>
499
500<div class="panes">
501
502    <div class="pane" id="features">
503
504        <b>calibre is a powerful and easy to use e-book manager</b>. Users say it’s
505        <i>outstanding</i> and a <i>must-have</i>. It’ll allow you to do nearly everything and it
506        takes things a step beyond normal e-book software. It’s also <b>completely free</b>
507        and <i>open source</i> and great for both <b>casual users</b> and computer experts.
508
509        <ul id="feature-list">
510            <li>
511                <span class="feature-title">Save time on managing your e-book collection</span>
512                <div class="feature-description">
513
514                    <p>calibre’s user interface is designed to be as simple as
515                    possible. <b>Large buttons</b> in the main window take care of
516                    most of your needs. The vast number of calibre’s features
517                    and options is always clearly displayed under <b>intuitive
518                    tabs</b>. Its context menus are neatly sorted, so the things
519                    you’re looking for almost find themselves on their own.
520                    <b>You’re never more than three clicks away from your goal.</b>
521                    It’s the result of years of tweaking calibre’s interface
522                    based on users’ feedback. Plus, you can change many aspects
523                    of how calibre looks and feels, and try one of the three
524                    built-in library views to browse your book collection using
525                    covers, titles, tags, authors, publishers, etc.</p>
526
527                    <p>calibre not only can <b>download all the metadata</b>
528                    for an e-book (things like title, author, publisher, ISBN,
529                    tags, cover or summary) but will also allow you to edit or
530                    create metadata in existing or new fields. That way you can
531                    track which books you’ve read and which ones you liked. You
532                    can also take advantage of the <b>advanced search and
533                    sorting</b> functions that use tags, authors, comments and
534                    more. You will find the book you were looking for in seconds!
535                    </p>
536
537                </div>
538            </li>
539            <li>
540                <span class="feature-title">Use it everywhere and with anything</span>
541                <div class="feature-description">
542
543                    <p>calibre supports almost <b>every single e-reader</b> and
544                    is compatible with more devices with every update. You can
545                    transfer your e-books from one device to another in
546                    seconds, <b>wirelessly</b> or with a cable. And you don’t
547                    need any additional tools to do that. calibre will send the
548                    <b>best file format</b> for your device converting it if
549                    needed, automatically.  </p>
550
551                    <p>No matter what PC, laptop or tablet you use, calibre’s
552                    got you covered. If you’re traveling and don’t have
553                    your device with you – you can take calibre on a USB stick
554                    and <b>use it wherever you are</b>. Or run the calibre Content server and read
555                    your books anywhere, on any device.</p>
556
557                    <p>calibre can convert dozens of file types. No matter
558                    where you got your e-book from, it’ll be ready for your
559                    device in no time. When converting, you can also
560                    automatically change the book’s style, create a table of
561                    contents or improve punctuation and margins. calibre will
562                    also detect the format that’s best suited for your device
563                    on its own, so you don’t have to bother.</p>
564
565                    <p>calibre can also turn your personal documents to e-books
566                    or create them from scratch. It can also take all the
567                    mundane things that go with it off your plate. It has
568                    automatic style helpers and scripts generating the book’s
569                    structure. You focus on the content, calibre will take care
570                    of the rest.</p>
571
572                </div>
573            </li>
574            <li>
575                <span class="feature-title" href="#">Comprehensive e-book viewer</span>
576                <div class="feature-description">
577
578                    <p>calibre has a built-in e-book viewer that can
579                    display <b>all the major e-book formats</b>. It has full
580                    support for Table of Contents, highlighting, bookmarks,
581                    CSS, read aloud, a reference mode, printing, searching,
582                    copying, multi-page view, embedded fonts, and on and on…
583                    </p>
584
585                </div>
586            </li>
587            <li>
588                <span class="feature-title" href="#">Download news/magazines from the web</span>
589                <div class="feature-description">
590
591                    <p>calibre can make sure you know what’s happening and
592                    <b>automatically deliver stories</b> to your device from hundreds
593                    of news sources like The Economist, New York Times, New Yorker
594                    Magazine, The Guardian, BBC News, National Geographic, CNN,
595                    The Wall Street Journal, The Washington Post, The Atlantic,
596                    Scientific American, Wired Magazine, The Telegraph, Forbes,
597                    Ars Technica…</p>
598
599                    <p>You can also teach calibre to deliver news from
600                    completely different sites or take advantage of any <b>RSS
601                    feed</b>. No searching, no waiting, no hassle.</p>
602
603                </div>
604            </li>
605            <li>
606                <span class="feature-title">Share and backup your library easily</span>
607                <div class="feature-description">
608
609                    <p>calibre comes with a <b>handy web server</b> to host
610                    your library. In just a few moments you can <b>safely
611                    share</b> all (or just some) of your e-books with anyone
612                    you choose or access them yourself from anywhere, using any
613                    device you like. With the server, you can read the books
614                    in your calibre library on any phone/tablet using just
615                    a browser. It even works offline. </p>
616
617                    <p>calibre has also some useful backup and import/export
618                    features that will guarantee the safety and portability of
619                    your book collection with minimal fuss.</p>
620
621                </div>
622            </li>
623            <li>
624                <span class="feature-title">Edit the books in your collection</span>
625                <div class="feature-description">
626
627                    <p>For the e-book nerds amongst you, calibre has a built-in
628                    editor that allows you to <b>edit e-books</b> in the most popular
629                    e-book formats, EPUB and Kindle.  The editor has
630                    many sophisticated features to make editing the innards of
631                    e-books as easy and efficient as possible.</p>
632
633                </div>
634            </li>
635
636            <li>
637                <span class="feature-title">Satisfy every e-book need and get support</span>
638                <div class="feature-description">
639
640                    <p>It’s unlikely, but if you find out there’s a feature you
641                    need but calibre lacks it, you can use the <b>built-in plugin
642                    explorer</b>. Many users develop plugins to enhance and expand
643                    calibre’s features. You can browse through <b>hundreds of
644                    plugins</b> directly from calibre and install them with just
645                    one click.</p>
646
647                    <p>calibre has more than 3 million active installs and
648                    <b>lots of fans</b>! You will never have to wait to solve
649                    any issue you might encounter: you can use the <a
650                    href="/help">extensive help resources</a>, or just ask
651                    members of the <a href="https://www.mobileread.com/forums/forumdisplay.php?f=166">calibre forum</a>.</p>
652
653                    <p>calibre is created by <b>book lovers</b>, for book lovers.
654                    Hundreds of motivated <b>volunteers develop</b> calibre and
655                    deliver updates on a regular basis. Most issues are
656                    <b>resolved in a week</b>. With every update, we fix bugs, add new
657                    features and make calibre more compatible, faster and
658                    easier.</p>
659
660                </div>
661            </li>
662
663        </ul>
664
665        <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>
666
667    </div>
668
669    <div class="pane" id="history">
670        <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.
671        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
672        system of choice, so I decided to reverse engineer the USB protocol that it used, to get it working on Linux. This was accomplished
673        with the help of the fine folks over at <a href="https://mobileread.com" target="new">mobileread.com</a> and calibre was born, albeit
674        named <code>libprs500</code>.</p>
675
676        <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
677        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
678        the (mostly non-existent) offerings from SONY. It was picked up and used by various publishing houses and content digitizers to produce the
679        first generation of books in the LRF format.</p>
680
681        <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
682        libprs500 to make it easier. This became calibre, in its present form, as a comprehensive e-book management tool. libprs500
683        was renamed to calibre in mid-2008. The name calibre was chosen by my wife, Krittika. The libre in calibre stands for
684        freedom, indicating that calibre is a free and open source product, modifiable by all. Nonetheless, calibre should be pronounced as
685        cali-ber, not ca-libre.
686        </p>
687
688        <p>
689        Today calibre is a vibrant open-source community with half a dozen developers and many, many tester
689s and bug reporters. It is used in over
690        200 countries and has been translated into a dozen different languages by volunteers. calibre has become a comprehensive tool for the management of
691        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
692        goals has always been to prevent either the fragmentation or the monopolization of the e-book market by entities that care solely for
693        short-term goals. As the calibre community continues to grow, driven by book lovers, for book lovers, hopefully it will always present an alternative
694        for people that love to read e-books and want to be in control of their own digital libraries.
695        </p>
696
697        <p id="signature">Kovid Goyal<br />November 2009</p>
698
699
700    </div>
701    <div class="pane" id="contact">
702        <h2>Asking for help</h2>
703        <p>
704        The best places to ask for help with calibre are the very active
705        <a target="forum" href="https://www.mobileread.com/forums/forumdisplay.php?f=166">calibre forum</a> at
706        mobileread.com, where there are a number of friendly and knowledgeable long time users/developers of calibre.
707        In addition, there is the <a href="https://www.facebook.com/pages/Calibre/201937604701">calibre Facebook fan page</a> and
708        <a target="twitter" href="https://twitter.com/calibreforum">#calibreforum</a> on Twitter.
709        </p>
710
711        <h2>Reporting issues and asking for new features</h2>
712        <p>
713        If you wish to report a problem with calibre or would like to request a new feature, the best place to
714        do it is via the calibre <a href="/bugs">Bug tracker</a>. Be aware that calibre is developed by volunteers,
715        which means that your bug report/feature request may or may not get attention, so if you are looking for help,
716        the best place is the forum linked to above.
717        </p>
718
719    </div>
720
721    <div class="pane" id="contributors">
722        <p>calibre is an open source application, developed primarily by Kovid Goyal, based in Mumbai, India.
723        calibre uses a large number of other open source libraries and is developed on Linux,
724        an open source platform, and as such, it has benefited from the work of large numbers of people,
725        some of whom are listed below.
726        I've tried to be as exhaustive as possible, but, if I have omitted your contribution, please let me know.</p>
727
728        <h2>Contributors of code/bug fixes</h2>
729        <p>In no particular order:</p>
730        <ul>
731            <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>
732            <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>
733            <li>Charles Haley: For custom columns, saved searches, restrictions, the wireless device driver, lots of other help/ideas</li>
734            <li>Gregory Riker: For MOBI indexing, catalogs, the iPad driver</li>
735            <li>Roger Critchlow: For the initial implementation of lrs2lrf</li>
736            <li>Anatoly Shipitsin: For fb2lrf and fb2-meta</li>
737            <li>Ori Avtalion and WayneD: For various bug fixes</li>
738            <li>Tijmen Ruizendaal: For the Be Book driver</li>
739            <li>Igor Skochinsky: For various bits of reverse engineering without which calibre would never have gotten off the ground</li>
740            <li>Darko Miletic: For a large number of news recipes</li>
741            <li>Grant Drake: For various plugins including Open with, Search the internet and Goodreads integration</li>
742            <li>Timothy Legge and David Forrester: For Kobo support in calibre</li>
743            <li>Eli Schwartz: For Linux packaging efforts</li>
744            <li>Eli Schwartz and Flaviu Tamas: For Python 3 porting efforts</li>
745            <li>Mark W. Gabby-Li: For adding right-to-left and vertical text support to the E-book viewer</li>
746        </ul>
747
748        <h2>Graphics and design</h2>
749        <ul>
750            <li>Nicholas Holland and the guys at <a target="new" href="https://cs-website.herokuapp.com/">Centresource</a>: For the website design</li>
751            <li>diaboNL: For the reader icon</li>
752            <li>Caleb Avery and Kamil Tatara: For the calibre logo</li>
753            <li>Jonatan Nyberg: For lots of polishing of the UI</li>
754            <li>subtlepatterns.com: For various textures</li>
755        </ul>
756
757        <h2>Recipe writers</h2>
758        <p>Too many people have contributed recipes to list here, but their contributions are a big part of calibre.</p>
759
760        <h2>Translators</h2>
761        <p>The list of translators is available <a target="new" href="https://app.transifex.com/calibre/calibre/">here</a>.</p>
762
763        <h2>Other projects whose code/libraries calibre uses/links against</h2>
764        <ul>
765            <li>Python</li>
766            <li>Qt</li>
767            <li>PyQt</li>
768            <li>rtf2xml</li>
769            <li>poppler</li>
770            <li>feedparser</li>
771            <li>pylrs</li>
772            <li>BeautifulSoup</li>
773            <li>mechanize</li>
774            <li>pictureflow</li>
775            <li>lxml</li>
776            <li>Hyphenator</li>
777            <li>sqlite</li>
778            <li>chardet</li>
779            <li>podofo</li>
780            <li>libmtp</li>
781            <li>Python Imaging Library</li>
782            <li>Sphinx</li>
783            <li>django</li>
784            <li>odfpy</li>
785            <li>cssutils</li>
786            <li>git</li>
787            <li>ICU</li>
788            <li>dateutil</li>
789            <li>dnspython</li>
790            <li>pywin32</li>
791            <li>python-dbus</li>
792        </ul>
793
794        <p>The Launchpad, Transifex and GitHub services for providing bug, file, translation and code hosting for calibre.</p>
795
796        <p>Last, but not least I'd like to thank the folks at <a target="new" href="https://mobileread.com">mobileread.com</a>
797        for creating a wonderful community for us e-book lovers to gather round.</p>
798    </div>
799    <div class="pane" id="press">
800        <h2>Awards</h2>
801        <ul id="awards">
802            <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>
803            <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>
804            <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>
805            <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>
806            <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>
807            <li><a href="https://calibre.sooftware.com/windows" target="_blank"><img src="/resources/img/sooftware_pick.png" alt="Excellent"/></a></li>
808            <li><a href="https://calibre.informer.com/" target="_blank"><img src="/resources/img/informer_editor.png" alt="Excellent"/></a></li>
809            <li><a href="https://win.topdownload.club/calibre/" target="_blank"><img src="/resources/img/topdownload.png" alt="Excellent"/></a></li>
810        </ul>
811        </ul>
812        <p><a href="https://calibre.informer.com/" target="_blank">Software informer</a>: <b>4.3 stars</b> (August, 2022)</p>
813        <p><a href="https://win.topdownload.club/calibre/" target="_blank">Top Download club</a>: <b>5 stars</b> (July, 2022)</p>
814        <p><a href="https://calibre.sooftware.com/windows" target="_blank">Sooftware rating</a>: <b>4.5 stars</b> (May, 2022)</p>
815        <p><a href="https://www.capterra.com/p/92449/Calibre/reviews/" target="_blank">Capterra rating</a>: <b>4.7 stars</b> (Apr, 2021)</p>
816        <p><a href="https://calibre.en.softonic.com/" target="_blank">Softonic rating</a>: <b>4 stars</b> (Apr, 2021)</p>
817        <p><a href="https://www.macupdate.com/app/mac/30657/calibre" target="_blank">MacUpdate rating</a>: <b>4.3 stars</b> (Apr, 2021)</p>
818        <p><a href="https://www.ebool.com/reviews/calibre" target="_blank">eBool rating</a>: <b>5 stars</b> (Apr, 2017)</p>
819        <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>
820        <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>
821        <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>
822        <h2>Press mentions</h2>
823        <ul>
824            <li>
824<a href="http://gadgetwise.blogs.nytimes.com/tag/calibre">The New York Times</a></li>
825            <li><a href="http://kindleworld.blogspot.com/2009/08/million-free-google-books-in-epub-for.html">Kindle World</a></li>
826            <li><a href="http://www.softpedia.com/reviews/mac/calibre-Review-137455.shtml">Softpedia</a></li>
827            <li><a href="http://www.wired.com/gadgetlab/2009/10/gadget-lab-guide-how-to-un-cripple-your-international-kindle/">Wired.com</a></li>
828            <li><a href="http://lifehacker.com/5169425/calibre-manages-your-e+book-collection">LifeHacker</a></li>
829            <li><a href="http://dearauthor.com/wordpress/2008/12/28/calibre-the-ebook-readers-best-friend-part-1-of-2">Dear author</a></li>
830            <li><a href="http://www.thekindlechronicles.com/2009/04/03/37-kovid-goyal/">Kindle Chronicles</a></li>
831            <li><a href="http://www.livemint.com/Companies/RsORoaz8sHA0VgXBfT1sUK/How-one-of-the-most-popular-ebook-management-softwares-cal.html">Live Mint</a></li>
832        </ul>
833    </div>
834    <ul id="usage">
835        <li>You can see usage statistics for calibre <a target="usage" href="/dynamic/calibre-usage">here</a></li>
836        <li>You can see usage statistics for the various news sources in calibre <a target="usage" href="/dynamic/recipe-usage">here</a></li>
837    </ul>
838</div>
839
840
841        </div> <!-- end content -->
842        <ul id="footer">
843            <li>&copy; Kovid Goyal</li>
844            
845            <li><a type="application/rss+xml" href="/changelog.rss" title="RSS feed of the calibre changelog">Feed of new releases</a></li>
846            
847            <li class="last"><a href="/privacy" title="Privacy policy">Privacy Policy</a></li>
848        </ul>
849    </div> <!-- end content-wrapper -->
850    <div id="sidebar">
851        
852        
853        
854        <div id="ad-container">
855<div align="center" id="calibre-ebook_rail_right_1">
856  
856<script data-cfasync="false" type="text/javascript">
857      freestar.config.enabled_slots.push({ placementName: "calibre-ebook_rail_right_1", slotId: "calibre-ebook_rail_right_1" });
858  </script>
858
859</div>
860<div style="display:inline-block;width:336px; height:20px">&nbsp;</div>
861<div align="center" id="calibre-ebook_rail_right_2">
862  
862<script data-cfasync="false" type="text/javascript">
863      freestar.config.enabled_slots.push({ placementName: "calibre-ebook_rail_right_2", slotId: "calibre-ebook_rail_right_2" });
864  </script>
864
865</div>
866</div>
867        
868        
869    </div> <!-- end sidebar -->
870    
871    <div id="donate_box" style="display:none" data-location="loc_unknown">
872
873
874<style type="text/css">
875
876#donate_box {
877    z-index: 10001;
878    background-color: #eee;
879    color: #000;
880    padding: 10px;
881    width: 675px;
882    max-width: 80%;
883    border: 2px solid #666;
884    box-shadow:0 0 90px 5px #000;
885    border-radius: 6px;
886}
887
888#donate_box .close {
889    background-image:url(/resources/img/close.png);
890    position:absolute;
891    right:-15px;
892    top:-15px;
893    cursor:pointer;
894    height:24px;
895    width:24px;
896}
897
898#donate_box h2 {
899    text-align: center;
900    font-size: xx-large;
901    margin-top: -0.2em;
902    color: #666;
903    background-color: #ddd;
904    border-radius: 6px;
905    margin-bottom: 0.5em;
906}
907
908#donate_box h2:before {
909    content: "♥ ";
910    color: red;
911}
912#donate_box h2:after {
913    content: " ♥";
914    color: red;
915}
916#donate_box .donate_line {
917    background-color: rgb(217, 237, 247);
918    color: rgb(58, 135, 173);
919    border: solid 1px rgb(188, 232, 241);
920    padding: 0.5em;
921    margin-top: 0.5em;
922    margin-bottom: 0.5em;
923}
924
925#donate_box .donate_line input {
926    border: solid 1px rgba(82, 168, 236, 0.8) !important;
927    padding: 5px 0px;
928    padding-left: 3px;
929    border-radius: 4px;
930    width: 5em;
931}
932
933#donate_box #donate_ok_button {
934    float: right;
935    margin-top: 12px;
936}
937
938#donate_box #donate_bt_button {
939    float: left;
940    text-decoration: none;
941    margin-top: 12px;
942    padding: 9px 2px;
943}
944
945#donate_box div {
946    margin-top: 0.5em;
947}
948
949#donate_box #donate_wait_msg  {
950    text-align: center;
951    margin-top: 1em;
952}
953
954#donate_box #donate_wait_msg img {
955    vertical-align: middle;
956}
957
958</style>
959
960
961
962    <h2>Thank you!</h2>
963    <p>Your support helps keep calibre development alive.</p>
964    <p class="donate_line">
965        Contribute
966        <input name="price" type="number" value="10" step="1" min="1" />
967        <select id="donate-contribute-currency" required="required" data-val="USD">
968            <option value="USD">USD ($)</option>
969            <option value="INR">INR (₹)</option>
970        </select>
971    </p>
972    <p class="donate_radio">Amount:
973    <label><input type="radio" value="5" name="price_choice" /> <span>$5</span> </label>&nbsp;
974    <label><input type="radio" value="10" name="price_choice" checked="checked" /> <span>$10</span> </label>&nbsp;
975    <label><input type="radio" value="15" name="price_choice" /> <span>$15</span> </label>&nbsp;
976    <label><input type="radio" value="25" name="price_choice" /> <span>$25</span> </label>&nbsp;
977    <label><input type="radio" value="50" name="price_choice" /> <span>$50</span> </label>&nbsp;
978    <label><input type="radio" value="100" name="price_choice" /> <span>$100</span> </label>
979    </p>
980    <div id="donate_wait_msg"><img src="/resources/img/spinner.gif" alt="Working" />&nbsp;Contacting payment provider, please wait&hellip;</div>
981    <div id="donate_buttons">
982        <a id="donate_bt_button" href="https://www.patreon.com/kovidgoyal">
983            Become a calibre patron
984        </a>
985        <span id="donate_ok_button" tooltip="Pay with credit card or PayPal"><span style="color:red">PayPal unavailable!</span></span>
986    </div>
987
988
989
990<script src="https://www.paypalobjects.com/api/checkout.min.js" async="async" id="paypal-checkout-script"></script>
vendor: 1 bytes, line 990
990
991<script type="text/javascript">
992
993(function() {
994
995    function change_currency() {
996        var curr = document.getElementById('donate-contribute-currency').value;
997        if (curr === document.getElementById('donate-contribute-currency').dataset.val) return;
998        var mult = curr === 'INR' ? 20 : 1/20;
999        var symbol = curr === 'INR' ? '₹' : '$';
1000        var text_input = document.querySelector('#donate_box input[name="price"]');
1001        text_input.value = '' + Math.max(1, parseFloat(text_input.value) * mult);
1002        document.querySelectorAll('#donate_box input[name="price_choice"').forEach(function(node) {
1003            var rval = '' + (parseInt(node.value) * mult);
1004            node.value = rval;
1005            node.parentNode.querySelector('span').textContent = symbol + rval;
1006        });
1007        document.getElementById('donate-contribute-currency').dataset.val = curr;
1008    }
1009    document.getElementById('donate-contribute-currency').addEventListener('change', change_currency);
1010
1011    var x = new XMLHttpRequest();
1012    x.addEventListener('load', function() {
1013        if (this.responseText === 'IND' || this.responseText === 'IN') {
1014            document.getElementById('donate-contribute-currency').value = 'INR';
1015            change_currency();
1016        }
1017    });
1018    var cc = 'country-code';
1019    x.open('GET', '/' + cc);
1020    x.send();
1021
1022    function get_current_value() {
1023        var ans = parseFloat($('#donate_box input[name="price"]').val());
1024        if (isNaN(ans)) ans = 10;
1025        return ans;
1026    }
1027
1028    document.getElementById('paypal-checkout-script').onload = function() {
1029        if (!window.paypal) return;
1030        // See https://developer.paypal.com/docs/api/payments/#payment
1031        var lang = document.documentElement.getAttribute('lang');
1032        var locale = 'en_US';
1033        var locale_map = {fr: 'fr_FR', de: 'de_DE', es: 'es_ES'}
1034        if (locale_map[lang]) locale = locale_map[lang];
1035        document.getElementById('donate_ok_button').textContent = '';
1036        window.paypal.Button.render({
1037            env: 'production',  // sandbox or production
1038            client: {
1039                sandbox: 'AcbgAJCOt1wze9Xwh8ijAEIQOck5Ykz_UhA3jTtfPjdcl5bOPIgwz7k2E33oJ_24QZe59_gQZIFnvr6n',
1040                production: 'AbVJy1AqjPTncpdEQteWqVN-DdULUR9vtpvEKQMAof4SFoiuiuAACRd0fjNvvTsZPnQy3Enai5lmdm1A'
1041            },
1042            commit: true,
1043            style: { tagline: false, label: 'pay'},
1044            locale: locale,
1045
1046            payment: function(data, actions) {
1047                $('#donate_box #donate_wait_msg').css('display', 'block');
1048                $('#donate_box #donate_buttons').css('display', 'none');
1049                return actions.payment.create({
1050                    payment: {
1051                        application_context: {
1052                            shipping_preference: "NO_SHIPPING",
1053                            locale: locale,
1054                            brand_name: 'calibre - Kovid Goyal',
1055                        },
1056                        // Disabled as it causes an intrusive popup on the payment page.
1057                        // note_to_payer: 'Thank you for supporting calibre!',
1058                        transactions: [
1059                            {
1060                                amount: {
1061                                    total: get_current_value().toFixed(2),
1062                                    currency: document.getElementById('donate-contribute-currency').value
1063                                },
1064                                description: 'Support calibre development: ' + document.getElementById('donate_box').dataset.location,
1065                            }
1066                        ]
1067                    }
1068                });
1069            },
1070
1071            onAuthorize: function(data, actions) {
1072                return actions.payment.execute().then(function(response) {
1073                    $('#donate_box .close').click();
1074                    alert('Payment successful! Thank you for your support.');
1075                });
1076            },
1077
1078            onCancel: function(data, actions) {
1079                $('#donate_box .close').click();
1080            },
1081
1082            onError: function(err) {
1083                console.error("PayPal SDK Error Encountered:", err);
1084                const errorMessage = err?.message || String(err);
1085                alert('Payment failed with error from Paypal:' + ' ' + errorMessage);
1086                $('#donate_box .close').click();
1087            }
1088        }, '#donate_ok_button');
1089    }
1090
1091    $(document).ready(function() {
1092        $("[rel='#donate_box']").each(function() {
1093            var loc = this.getAttribute('data-location');
1094            if (!loc) loc = 'loc_unknown';
1095            $(this).overlay({
1096            expose: $("#donate_box").css('background-color'), // change to mask for jquery.tools >= 1.2
1097
1098            closeOnClick: false, // Prevent clicking outside from closing the dialog
1099
1100            onBeforeLoad: function() {
1101                $('#donate_box #donate_wait_msg').css('display', 'none');
1102                $('#donate_box #donate_buttons').css('display', 'block');
1103            },
1104
1105            onLoad: function() {
1106                document.getElementById('donate_box').dataset.location = loc;
1107                // 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)
1108                $('#donate_box').css('position', 'fixed');
1109            },
1110
1111            top: "5%"
1112            });
1113        });
1114
1115        var sync_from_radio = true;
1116        // The change() function does not work on IE
1117        $('#donate_box input[name="price_choice"]').click(function() {
1118            if (sync_from_radio) $('#donate_box input[name="price"]').val(this.value);
1119        });
1120
1121        $('#donate_box input[name="price"]').change(function() {
1122            var val = get_current_value();
1123            var found = null;
1124            if (val % 1 === 0) {
1125                // Number is an integer
1126                var elem = $('#donate_box input[name="price_choice"][value="' + val.toFixed() + '"]');
1127                if (elem.length > 0) {
1128                    found = elem;
1129                }
1130            }
1131            sync_from_radio = false;
1132            if (found === null) {
1133                $('#donate_box input[name="price_choice"]').each(function() { this.checked = false; });
1134            } else { found[0].checked = true; }
1135            sync_from_radio = true;
1136
1137        });
1138
1139
1140        $('#donate_box input[name="price"]').keypress(function(event) {
1141            if (event.which == 13) $('#donate_box #donate_ok_button').click();
1142        });
1143    });
1144
1145})();
1146
1147</script>
1147
1148
1149
1150</div>
1151    
1152
1153    <div id="language-box" tabindex="0">
1154    
1154<script>
1155$(document).ready(function() {
1156        $("#primary-nav a[title]").tooltip({
1157            position : 'bottom center',
1158            });
1159        $("#donate").tooltip({
1160            position : 'bottom center',
1161            });
1162        $('#language-box').on('keydown', function(ev) {
1163            if (ev.key === "Escape") close_language();
1164        });
1165        redirect_to_preferred_language();
1166
1167});
1168
1169function choose_language() {
1170    document.getElementById('language-box').style.display = 'flex';
1171    document.getElementById('language-box').focus();
1172}
1173
1174function close_language() {
1175    document.getElementById('language-box').style.display = 'none';
1176}
1177
1178function change_language(lang_code, is_current, lang_href) {
1179    if (document.getElementById("set-default-lang").checked) {
1180        window.localStorage.setItem("calibre-web-ui-lang", lang_code);
1181    }
1182    if (is_current) return close_language();
1183    window.location.href = lang_href;
1184}
1185
1186function redirect_to_preferred_language() {
1187    var languages = {};
1188    var current_language = '';
1189    document.querySelectorAll('#language-box [data-lang-code]').forEach(function(item) {
1190        languages[item.dataset.langCode] = item.dataset.langHref;
1191        if (item.dataset.langIsCurrent === 'true') current_language = item.dataset.langCode;
1192    });
1193    var preferred_lang = window.localStorage.getItem("calibre-web-ui-lang");
1194    if (preferred_lang && current_language && preferred_lang !== current_language && languages[preferred_lang]) {
1195        window.location.href = languages[preferred_lang];
1196    }
1197}
1198    </script>
1198
1199<style>
1200#language-box {
1201    display: none;
1202    position: absolute;
1203    z-index: 3000;
1204    left: 0;
1205    top: 0;
1206    width: 100vw;
1207    height: 100vh;
1208    background: rgba(255, 255, 255, 0.9);
1209    justify-content: center;
1210    overflow: auto;
1211}
1212
1213#language-box h2 {
1214    font-weight: bold;
1215    font-size: 160%;
1216    margin: 1rem auto;
1217    text-align: center;
1218}
1219
1220#language-box ul {
1221    margin: auto;
1222    display: grid;
1223    max-width: 75vw;
1224    grid-template-columns: repeat(auto-fit, minmax(20em, 1fr));
1225}
1226
1227#language-box li {
1228    margin: 1em;
1229}
1230
1231</style>
1232        <div>
1233            <h2>Choose the language you want</h2>
1234            <div style="display: flex; justify-content: space-between; margin-bottom: 1ex">
1235                <label><input type="checkbox" checked id="set-default-lang"> Save as default language</label>
1236                <a href="javascript:close_language()">Cancel</a>
1237            </div>
1238            <ul>
1239                
1240                <li><a data-lang-code="ar" data-lang-is-current="false" data-lang-href="/ar/about" href="javascript: change_language('ar', false, '/ar/about')">Arabic (العربية)</a></li>
1241                
1242                <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>
1243                
1244                <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>
1245                
1246                <li><a data-lang-code="cs" data-lang-is-current="false" data-lang-href="/cs/about" href="javascript: change_language('cs', false, '/cs/about')">Czech (čeština)</a></li>
1247                
1248                <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>
1249                
1250                <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>
1251                
1252                <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>
1253                
1254                <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>
1255                
1256                <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>
1257                
1258                <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>
1259                
1260                <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>
1261                
1262                <li><a data-lang-code="ko" data-lang-is-current="false" data-lang-href="/ko/about" href="javascript: change_language('ko', false, '/ko/about')">Korean (한국어)</a></li>
1263                
1264                <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>
1265                
1266                <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>
1267                
1268                <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>
1269                
1270                <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>
1271                
1272                <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>
1273                
1274                <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>
1275                
1276                <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>
1277                
1278                <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>
1279                
1280                <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>
1281                
1282            </ul>
1283        </div>
1284    </div>
1285<!-- end languages -->
1286
1287
1288</div></body>
1289</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.