# Registering Modules

One bundle serves every module your manifest declares. Register each module at the top level of the entry file with the matching `prepare*` function; when Crowdin renders the app, the SDK invokes the registered module that matches the host context:

```tsx
import { prepareProjectMenu } from "@crowdin/serverless-apps-sdk";
import { createRoot } from "react-dom/client";
import { App } from "./App";

prepareProjectMenu({
  render() {
    createRoot(document.getElementById("root")!).render(<App />);
  },
});
```

:::caution
Registration must happen synchronously at the top level of the bundle - not inside an async callback.
:::

If the manifest declares several modules of the same type, pass the module key as the second argument: `prepareProjectMenu({ … }, "my-key")`.

## All module types

The table lists every module type this SDK version supports. The set grows with the Crowdin platform, and a new type always arrives together with an SDK release (the matching `prepare*` function and manifest schema entry), so [keep `@crowdin/serverless-apps-sdk` up to date](/serverless-apps/building-app/overview/#upgrading) to pick up new placements.

| Manifest module type | Function | Crowdin reference |
|----------------------|----------|-------------------|
| `editor-right-panel` | `prepareEditorRightPanel` | [module docs](https://support.crowdin.com/developer/crowdin-apps-module-editor-right-panel/) |
| `editor-translations-panel` | `prepareEditorTranslationsPanel` | [module docs](https://support.crowdin.com/developer/crowdin-apps-module-editor-translations-panel/) |
| `editor-asset-panel` | `prepareEditorAssetPanel` | [module docs](https://support.crowdin.com/developer/crowdin-apps-module-editor-asset-panel/) |
| `editor-background-worker` | `prepareEditorBackgroundWorker` | - |
| `project-tools` | `prepareProjectTools` | [module docs](https://support.crowdin.com/developer/crowdin-apps-module-project-tools/) |
| `project-menu` | `prepareProjectMenu` | [module docs](https://support.crowdin.com/developer/crowdin-apps-module-project-menu/) |
| `project-menu-crowdsource` | `prepareProjectMenuCrowdsource` | [module docs](https://support.crowdin.com/developer/crowdin-apps-module-project-menu-crowdsource/) |
| `project-reports` | `prepareProjectReports` | [module docs](https://support.crowdin.com/developer/crowdin-apps-module-project-reports/) |
| `project-integrations` | `prepareProjectIntegrations` | [module docs](https://support.crowdin.com/developer/crowdin-apps-module-project-integrations/) |
| `profile-resources-menu` | `prepareProfileResourcesMenu` | [module docs](https://support.crowdin.com/developer/crowdin-apps-module-profile-menu/) |
| `profile-settings-menu` | `prepareProfileSettingsMenu` | [module docs](https://support.crowdin.com/developer/crowdin-apps-module-profile-settings-menu/) |
| `organization-menu` | `prepareOrganizationMenu` | [module docs](https://support.crowdin.com/developer/crowdin-apps-module-organization-menu/) |
| `organization-settings-menu` | `prepareOrganizationSettingsMenu` | [module docs](https://support.crowdin.com/developer/crowdin-apps-module-organization-settings-menu/) |
| `organization-menu-crowdsource` | `prepareOrganizationMenuCrowdsource` | [module docs](https://support.crowdin.com/developer/crowdin-apps-module-organization-menu-crowdsource/) |
| `modal` | `prepareModal` | [module docs](https://support.crowdin.com/developer/crowdin-apps-module-modal/) |
| `chat` | `prepareChat` | [module docs](https://support.crowdin.com/developer/crowdin-apps-module-chat/) |
| `context-menu` | `prepareContextMenu` | [module docs](https://support.crowdin.com/developer/crowdin-apps-module-context-menu/) |
| `navbar-extension` | `prepareNavbarExtension` | - |

The linked references describe where each module appears in the Crowdin UI and how it behaves. Their manifest examples are written for classic (backend) Crowdin apps - for serverless apps, declare modules as described in the [manifest reference](/serverless-apps/reference/manifest/).

Two types have no reference page yet:

- `editor-background-worker` runs in the editor without any visible panel - useful for reacting to [editor events](/serverless-apps/building-app/context/#events) and preparing suggestions in the background.
- `navbar-extension` is a flyout panel opened from the Crowdin navigation bar; close it programmatically with [`closeNavbarExtension()`](/serverless-apps/building-app/host-actions/#advanced).