# Installation

Before installing the Crowdin Apps SDK, make sure you have Node.js 20.11 or higher installed on your machine. You can download the latest version of Node.js from the [official website](https://nodejs.org/).

## Requirements

- **Node.js**: Version 20.11 or higher (the code samples in this documentation use [`import.meta.dirname`](https://nodejs.org/api/esm.html#importmetadirname), available since Node.js 20.11)
- **Express**: The module uses Express 5 for improved performance and modern features

Then, you can install the Crowdin Apps SDK using one of the following package managers:

<PackageManagers pkg="@crowdin/app-project-module" />

## Project Setup

All code samples in this documentation use ES modules (`import`) syntax. Pick the tab that matches your project language:

Enable ES modules in your `package.json`:

    ```json title="package.json" ins={3}
    {
      "name": "my-crowdin-app",
      "type": "module",
      "scripts": {
        "start": "node index.js"
      }
    }
    ```
  Install TypeScript and the type definitions:

    <PackageManagers pkg="typescript @types/node @types/express" dev />

    Use a modern Node.js TypeScript configuration:

    ```json title="tsconfig.json"
    {
      "compilerOptions": {
        "module": "nodenext",
        "moduleResolution": "nodenext",
        "target": "es2022",
        "strict": true,
        "skipLibCheck": true,
        "outDir": "dist"
      },
      "include": ["src"]
    }
    ```

    And enable ES modules in your `package.json`:

    ```json title="package.json" ins={3}
    {
      "name": "my-crowdin-app",
      "type": "module",
      "scripts": {
        "build": "tsc",
        "start": "node dist/index.js"
      }
    }
    ```
**Note:** CommonJS (`require('@crowdin/app-project-module')`) is still fully supported by the SDK — the samples just aren't written in it. If your app uses CommonJS, replace `import.meta.dirname` with `__dirname` when copying samples.

### Supported import paths
Use only publicly documented import subpaths. Avoid internal paths such as `@crowdin/app-project-module/out/*`, because those are implementation details and may change without notice.

- `@crowdin/app-project-module` — main app entrypoint, includes all necessary types
- `@crowdin/app-project-module/util` — shared utility helpers
- `@crowdin/app-project-module/functions/*` — app helper functions, tokens, and Crowdin API helpers
- `@crowdin/app-project-module/modules/*` — module-specific types and helper definitions
- `@crowdin/app-project-module/middlewares` — built-in middleware helpers
- `@crowdin/app-project-module/test` — app testing utilities

## Further Reading

- [Modules Overview](/app-project-module/modules/)
- [App Functions](/app-project-module/reference/app-functions/)
- [User Interface](/app-project-module/user-interface/)
- [Deployment](/app-project-module/deployment/)