Skip to content

Monorepo

Raxos is developed as a single repository that tracks each library as a git submodule. Every submodule is its own repository on GitHub under github.com/basmilius/raxos-<name> and is published to Packagist as raxos/<name>.

Layout

The root repository contains one directory per package, plus this documentation site under docs/.

raxos/
├── barcode/        Raxos\Barcode
├── cache/          Raxos\Cache
├── collection/     Raxos\Collection
├── container/      Raxos\Container
├── contract/       Raxos\Contract
├── database/       Raxos\Database
├── datetime/       Raxos\DateTime
├── error/          Raxos\Error
├── foundation/     Raxos\Foundation
├── http/           Raxos\Http
├── mail/           Raxos\Mail
├── message-bus/    Raxos\MessageBus
├── oauth2/         Raxos\OAuth2
├── openapi/        Raxos\OpenAPI
├── rate-limit/     Raxos\RateLimit
├── reflection/     Raxos\Reflection
├── router/         Raxos\Router
├── search/         Raxos\Search
├── security/       Raxos\Security
├── terminal/       Raxos\Terminal
├── wallet/         Raxos\Wallet
└── docs/           This documentation site

Working with a submodule

Each directory is a standalone git repository. Commit and push changes from within that directory.

shell
cd http
git add src/...
git commit -m "feat: ..."

The root repository tracks the submodule pointers through .gitmodules. After changing a submodule, update its pointer in the root.

shell
git add http
git commit -m "chore: bump http"

Cross package dependencies

Within the monorepo, packages reference each other through Composer path repositories with symlinks, so local changes are picked up immediately. Published releases depend on the tagged versions on Packagist instead.