This repository contains the technical specification, architecture documentation, and design decisions for Sprout.
Technical documentation describing how Sprout works internally. These are design specification documents that explain concepts, design rationale, and how parts of the system relate to each other.
| Document | Description |
|---|---|
| Overview | High-level architecture and design principles |
| Tenancy | The container for tenant state |
| Tenant Providers | Loading tenants from storage |
| Identity Resolvers | Extracting tenant identity from requests |
| Resolution Hooks | When and how tenant resolution occurs |
| Tenancy Lifecycle | Events and listeners during tenant activation |
| Service Overrides | Making Laravel services tenant-aware |
| Eloquent Integration | Tenant-aware models and automatic scoping |
| Managers & Factories | Driver-based factory pattern for extensibility |
| Exceptions | Error handling and exception hierarchy |
The documents above cover Sprout's core architecture. The following extension packages add additional capabilities:
- Bud — Tenant-specific configuration
- Seedling — Multi-database support (in development)
- Canopy — Domain-based identification (in development)
Request for Comments documents for proposing significant changes or new features. RFCs provide a structured way to discuss and evaluate proposals before implementation.
- RFC-0000: Template — Template for new RFCs
- RFC-0001: Seedling — Multi-Database Support — Multi-database support
- RFC-0002: Canopy — Domain-Based Tenant Identification — Domain-based tenant identification
- RFC-0003: Stacked Identity Resolution — Stacked Identity Resolution
- Index — List of all RFCs and their status
Architecture Decision Records document significant technical decisions, their context, and rationale. ADRs help maintain a historical record of why things are built the way they are.
- ADR-0000: Template — Template for new ADRs
- ADR-0001: Monorepo v2 — Decision to consolidate addons into a single package
- Index — List of all ADRs
If you'd like to propose a change to Sprout's architecture or design, please:
- For new features or significant changes, open an RFC
- For implementation decisions within an accepted RFC, document them as ADRs
- For clarifications or corrections to existing documentation, open a pull request
See CONTRIBUTING.md for general contribution guidelines.
This specification tracks the development of Sprout v2. Documentation for v1 can be found in the main documentation.