---
title: How it works
extends: _layouts.documentation
section: content
---


# How it works

This package is very flexible and lets you use tenancy however you want. But it comes with sensible defaults that work like this out of the box:

- a request comes in
- the domain is used to identify the tenant
- the database, cache, etc are switched to that tenant's context

This happens using identification middleware and events.

[Tenant identification]({{ $page->link('tenant-identification') }})

[Event system]({{ $page->link('event-system') }})

Note that even though the default assumes you're using domains and the database-per-tenant model, you're free to customize this any way you want. **And it's easy to customize!** Just read on to get an understanding of how everything works.

TODO: Expand. Why this approach, etc. Maybe on the other page?