# Codebase Overview

## Overview of Comm Central

The following directories are included in the comm-central repository:

**build**\
Miscellaneous files used by the build process.

**calendar**\
The calendar component of Thunderbird (formerly known as the Lightning extension).

[**chat**](/thunderbird-development/codebase-overview/chat.md)\
Files for the chat component of Thunderbird. There is also related code in `mail/components/im`.

The subdirectories are:

* **components** Various chat features, includes the interfaces that each protocol must implement.
* **content** User interface files which become `chrome://chat/content/…`.
* **locales** The user-visible strings, in US English. Files from this directory become `chrome://chat/locale/…`.
* **modules** JavaScript modules that are specific to chat.
* **protocols** Various protocol implementations. Each of subdirectory implements a protocol to the interfaces found under **components**.
* **themes** Common and platform-specific styling specific to chat. Files from this directory become `chrome://chat/skin/…`.

**mail**\
Thunderbird specific source code. It's no coincidence that this folder is laid out a lot like the `browser` and `toolkit` directories on mozilla-central. Many of the subdirectories follow the same pattern:

* **content** User interface files which become `chrome://messenger/content/…`.
* **modules** Javascript modules which become `resource:///modules/…`.
* **test** Mochitest and/or XPCShell tests.

The subdirectories are:

* **actors** Modules which handle communication between processes. [See the Firefox documentation for information about actors](https://firefox-source-docs.mozilla.org/dom/ipc/jsactors.html).
* **app** Configuration and packaging instructions. Contains `all-thunderbird.js`, the default preferences.
* **base** The main mail window and several miscellaneous dialogs. Also, things which are common to many parts of the program.
* **branding** Icons and imagery.
* **components** Various Thunderbird features, including:
  * **accountcreation** The account setup wizard.
  * **addrbook** The address book user front end. (Not the address book back end, which is in `mailnews/addrbook`).
  * **cloudfile** The cloud attachment feature (a.k.a. FileLink).
  * **compose** Email composition window.
  * **extensions** WebExtensions schema and implementation.
  * **im** The chat front end.
  * **preferences** The preferences tab.
* **config** Build instructions, including the automation mozconfig files.
* **extensions**
* **installer** Packaging and installation instructions.
* **locales** The user-visible strings, in US English. Files from this directory become `chrome://messenger/locale/…`.
* **modules** Shared JS modules. Files from this directory become `resource:///modules/….`
* **test** The MozMill user interface tests and the code to run that test suite.
* **themes** Common and platform-specific styling of Thunderbird user interface. Files from this directory become `chrome://messenger/skin/…`.

**mailnews**\
Source code specific to the Mail and Newsgroups part of Thunderbird and SeaMonkey.

**mozharness**\
Files needed for Thunderbird's test infrastructure.

**other-licenses**\
Code that is not under the Mozilla license. See <http://www.mozilla.org/MPL/> for more info.

**suite**\
SeaMonkey-specific source code. Not used in Thunderbird.

**taskcluster**\
Files needed for Thunderbird's build infrastructure.

**testing**\
Files needed for Thunderbird's test infrastructure.

**third\_party**\
Libraries developed elsewhere that are included in Thunderbird


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.thunderbird.net/thunderbird-development/codebase-overview.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
