---
order: 8
---
# Monorepo

## What is a monorepo?

A monorepo (monolithic repository) is a version control strategy where multiple related projects, such as Minecraft plugins and libraries, reside within a single repository. 
Instead of maintaining separate repositories for each plugin or library, all codebases share the same version control system, dependencies, and development workflow.

## Benefits of a Monorepo

- **Code Reuse**: Share common libraries between plugins without duplication.
- **Simplified Dependency Management**: Easily reference shared libraries without external repositories.
- **Consistent Development Workflow**: Standardized build tools and CI/CD pipelines across all projects.
- **Atomic Changes**: Simultaneously update multiple plugins and libraries within the same commit.
- **Easier Refactoring**: Modify shared code with full visibility of its impact on all projects.

## Repository Structure

The dependencies between plugins and libraries are managed using Gradle, a build automation tool for Java projects.

There are three main folders in the monorepo:

- `plugins/`: Contains all Minecraft plugins.
- `libraries/`: Contains all shared libraries.
- `docs/`: Contains documentation for the plugins and libraries.

## Development Workflow

1. Clone the Repository
2. Make Changes
3. Test Changes
4. Commit Changes
5. Push Changes
6. Review Changes
7. Merge Changes
8. Publish Changes
9. Monitor Changes

Commit messages should follow this format:

```
<scope>: <short description>
```

scope: The affected component (e.g., plugin, library, docs, ci etc.)

Example:

```
fancynpcs: Fix NPE in teleport command
```