Contributing to Intlayer
March 1, 2026 · View on GitHub
Understanding the project
To understand the project, you can read the documentation named "How Intlayer Works".
Development setup
Intlayer is developed as a mono-repo using Bun.
To set up the repository, you will need to follow these steps:
- Create a Copy (Fork the repository)
- Clone the repository
- Install the approved version of Bun
- Install dependencies
- Build packages
- Start dev mode (to interact with packages)
- Launch apps (to interact with frontend, CMS, online docs, etc.)
Cloning
Add your Github Username replace {username}
git clone https://github.com/{username}/intlayer.git
or
git clone git@github.com:{username}/intlayer.git
Installing packages manager
npm install -g bun@1.3.10
or visit https://bun.com/docs/installation for installation instructions.
Installing Dependencies
bun install:packages
Tips
Then, if you're only working on a specific example (vite-react-app, nextjs-14-app, etc.), you can install only the necessary dependencies.
This prevents installing docs, backend apps, and all other frameworks you're not working with.
Example: Install only the vite-react-app example
bun install --filter ./examples/vite-react-app
--filteris used to limit installation to selected packages only.
The --filter '!./examples/**' argument in bun install is used to exclude all packages within the examples directory from being installed.
Packages List
To understand the interest of all packages, you can read the documentation named "How Intlayer Works".
Building packages
The repo use turborepo to optimize the building process.
Look at the application that you want to contribute to, and build it with the following example commands:
# Build website and all related packages
bun run turbo build --filter=./apps/website
# Build vite-react-app example app and all related packages
bun run turbo build --filter=./examples/vite-react-app
Or if you want to build all packages, you can use the following command:
# Build all packages (clean dist folders, and build packages)
bun run build
⏱️ On Github Actions, building all packages usually take around 2 to 4 minutes. ⏱️ On old environment, building all packages can be really slow and can take more than 10 minutes.
To pick a package and build it, without having to navigate in the repository, you can use the following command:
# Select a package and build it (clean dist folder, and build package)
bun run build:pick
Development mode
# Start development mode for all packages
# Watch the change related to each files. If the modified file is included in a package, the package will be rebuilt
bun run dev
# Start development mode for selected packages or apps
# This command allow to pick the packages to execute in watch-mode, avoid conflicts, and optimize performances during development
bun run dev:pick
Setup environment variables
For each project necessitating environment variables, like @intlayer/backend, you can find a .env.template file in the root of the project. Copy the file and rename it to .env. Then, fill the variables with the correct values.
For specific environment, use .env.local, .env.[environment] or .env.[environment].local files.
Starting an application
For applications locates in apps/ folder, as well as example applications locates in examples/ folder, you can start them with the following command:
cd ./apps/backend # or ./apps/website, ./examples/nextjs-15-app, etc.
bun run dev # or bun run dev:turbo, etc.
Adapt the path to the application you want to start. See the application
package.jsonto check the command to start it. Example for nextjs-15-app:bun run dev:turbois the most efficient command to start the dev server. If you filtered some applications during the installation, do not forget to add the related dependencies using the install command (Example:bun install --filter ./examples/nextjs-15-app).
Includes a new package
If you're working on a new package, ensure this package is listed in the
packageBuildOrderarray inscripts/package-build-order.mjs.
Codebase conventions
- Prefer arrow function (
() => {}) over function declaration (function () {}). - Prefer TypeScript
typeoverinterface. Useinterfacefor modules augmentation only. - For testing and reusability, prefer 1 function per file.
- Prefer
??over||syntax. - Prefer
import typeoverimportfor type imports. - Prefer named exports over default exports.
- Avoid abbreviations in variable names (ex: use
localeinstead ofloc,map(dictionary => dictionary.key)instead ofmap(d => d.key), etc.).
Commit formatting
We follow a Conventional Commit format to make our Git history cleaner and more readable. Each commit message should follow the pattern:
<type>(<scope>): <message>
<type>: One of the allowed types listed below.<scope>(optional): Can be a package name, app name, or a general scope.<message>: A clear, concise description of the change.
Common types
feat: New features or capabilitiesfix: Bug fixesrefactor: Code changes that neither fix a bug nor add a featurestyle: Code style changes (formatting, spacing, etc.)chore: Routine tasks (e.g., updates to lockfiles or CI)doc: Documentation changes onlytest: Adding or updating testsperf: Performance improvementsbuild: Changes affecting the build system or dependenciesci: Changes to CI configuration or scripts
Examples of commit messages
feat(next-intlayer): add version comparison utility and integrate deepmerge for configuration management
fix(website): fix 404 layout
feat(solid-intlayer): prepare solid and preact intlayer
doc: fix anchors
chore: update lockfile
Maintaining this format helps ensure consistent, readable commit history and is also necessary for automated tools like changesets to work correctly.
Includes a new package
If you're working on a new package, ensure this package is listed in the packageBuildOrder array in scripts/package-build-order.mjs.
Adding and translating documentation
Intlayer uses an automated translation system powered by AI to translate documentation across multiple languages. The system supports 14 languages and can translate markdown files while preserving structure, code blocks, and metadata.
Prerequisites
Before translating documentation, you need to set up the required environment:
-
Set up OpenAI API key:
# Navigate to the docs directory cd ./docs # Create environment file (if it doesn\'t exist) cp .env.template .env # Add your OpenAI API key nano .env
Adding New Documentation Files for Translation
To add new documentation files to the translation system:
-
Edit the translation configuration:
# Open the translation configuration file code ./docs/tools/translate.ts -
Update the DOC_PATTERN array:
File location:
./docs/tools/translate.tsconst DOC_PATTERN: string[] = [ "./docs/en/your-new-file.md", // Add your new file here // './docs/en/**/*.md', // Uncomment to translate all docs // './blog/en/**/*.md', // Uncomment to translate all blog posts // './frequent_questions/en/**/*.md', // Uncomment to translate FAQ // './legal/en/**/*.md', // Uncomment to translate legal docs ]; -
Configure translation options:
NB_SIMULTANEOUS_FILE_PROCESSED: Number of files to process simultaneously (default: 3)LOCALE_LIST_TO_TRANSLATE: List of target locales (excludes English by default)SKIP_IF_MODIFIED_BEFORE/AFTER: Time-based filtering for filesGIT_OPTIONS: Git-based filtering (uncommitted, unpushed files, etc.)
-
Navigate to the docs directory:
cd ./docs -
Run the translation command:
bun run translate -
Test the translation:
bun run test
Support the project

The simplest way to support Intlayer is to star the repository on GitHub. Dropping a ⭐️ on the repository on GitHub is on click, free, and takes only a few seconds.
Why GitHub Stars matter ?
-
🏆 Help getting more social proof
Stars help developers feel confident that this project is actively used and appreciated by the community. They also encourage potential YouTubers, influencers, and content creators to feel confident about promoting the project.
-
👥 Attract more contributors
Contributors measure the impact of their work by the number of stars a repository receives. More stars help attract additional contributors, which speeds up development and provides complementary checks regarding code quality, solution suggestions, security improvements, and more.
-
👀 Helps to get more visibility
More stars lead to even greater visibility. Platforms like GitHub Daily and others track stars to measure project popularity, and showing strong traction helps the project gain recognition.
-
💰 Attract more sponsors
GitHub stars are one of the main metrics used to measure traction for open source projects. Demonstrating strong community support helps sponsoring organizations recognize the project's value, which enables continued development.
-
🚀 Encourage us to continue the development of the project
We also get encouraged when we see the star count increasing. As open source contributors, we are motivated by building something impactful, and seeing growing community support provides excellent motivation to continue developing the project.