Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Thunderbird is an XML+CSS+Javascript app. Just like Electron (well, Electron is not XML).


By that definition would you call Firefox before version ~40 a javascript app? It obviously isn't despite using XUL and the elements implicit in that. The same is true of Thunderbird.


Yes, I would and would not ;-)

The technology in use is called XPFE. For a full (graphical) overview, see http://mb.eschew.org/1

It is different sorts of XML (XBL, XUL, RDF, DTD) controlled via Javascript and styled by CSS running on top of a C++ runtime. The components, the runtime exposes, can be accessed directly from within Javascript. Most of the application specific stuff is written in the XML+JS+CSS domain. There may be the one or other app-specific support library, but in the end, they all run on top of the same xulrunner binary.


The underlying rendering engine is in C++, of course. As is the JS implementation.

Which is to say, exactly like Electron. The only relevant difference that I can see between XUL and Electron is that the former had its own non-HTML-based markup language for UI.


Curious what you'd have called it.


Looking at the languages used in Thunderbird source (https://wiki.mozilla.org/Tree_Rules/comm-central#Thunderbird):

    $ cloc  build/ ldap/ editor/ mailnews/ mail/
        3938 text files.
        3848 unique files.                                          
         949 files ignored.

    github.com/AlDanial/cloc v 1.80  T=6.01 s (497.6 files/s, 127309.9 lines/s)
    ---------------------------------------------------------------------------------------
    Language                             files          blank        comment           code
    ---------------------------------------------------------------------------------------
    C++                                    360          36718          26562         207587
    JavaScript                            1098          39149          63692         195828
    CSS                                    278           7371           2664          30455
    C                                       83           5339           8278          29463
    C/C++ Header                           413           7091           8979          24034
    IDL                                    238           3205              0          18852
    XML                                     40           1365            690          16902
    JSON                                    24              7              0           5367
    DTD                                    180            772           1360           5344
    Python                                  24            893           2422           3740
    NAnt script                            118            489              0           2512
    Objective C++                            5            461            163           2231
    HTML                                    62            178             22           1666
    XHTML                                   14            186             98           1096
    INI                                     28             46             12            687
    Windows Module Definition                7             24            156            354
    LESS                                     1             33             52            183
    make                                     4             36             22            133
    TOML                                     1             17              7            110
    Freemarker Template                      6             24              0             98
    WiX source                               1             11             25             71
    Ant                                      1              6              5             49
    Markdown                                 1             10              0             49
    Bourne Shell                             3              8             11             23
    Windows Resource File                    2              6             11             15
    ---------------------------------------------------------------------------------------
    SUM:                                  2992         103445         115231         546849
    ---------------------------------------------------------------------------------------


You forgot db/mork, which is another ~100K-ish LOC (at least as measured by wc -l).


Oops! I'm not actually familiar with the Thunderbird source's organization, so I just went by what was marked as owned by Thunderbird in that wiki page I linked.


In practice, Thunderbird is all of comm-central sans suite/ and chat/. calendar/ used to be Sunbird [a standalone calendar client], but those people decided to channel all of their resources into Lightning instead, so all of the Sunbird-specific stuff was ripped out.

Lightning is strictly speaking an independent project from Thunderbird, but it is far and away the most-used extension in Thunderbird and parts of it (particularly the backend) have essentially moved into the TB distribution for various policy reasons. There's some other stuff that's basically build system, release engineering, or testing gunk, but that stuff is mostly Python anyways and won't impact the SLOC metrics too badly.


Mere line count does not tell a truth, simply because you can do more thing with a SLoC in a language than another, also sometime to be on certain platform you need an enormous amount of code only for them that's have no other purpose that boilerplate for a platform.

Too simplistic :-)


Most of the backend is written in C++. This is the mail protocol suite, the message database store logic, most of the internal account glue stuff, and even the bits that drive the main message listing (although that's moving to JS because Mozilla is killing off nsITreeView, a move which I fear for the performance implications of). The parts that are in JS are most of the code that drives the actual display. Of the MVC for the display, essentially the main model and view are both implemented in C++ whereas the controller is JS.

The largest pieces of the backend that are in JS are the RSS functionality and gloda (one of the search backends), as well as half of the MIME parser.


is there a node_modules directory that didn't get ignored?




Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: