# Reference guide

- [Configuration and boostrapping](/reference-guide/configuration.md): Prior to bootstrapping a Revo application, one must first set up the framework and specify its configuration, which makes it possible to customize its behavior in a number of ways.
- [Dependency injection](/reference-guide/dependency-injection.md): Like many other frameworks, Revo also builds on the principles inversion of control (IoC). For the heavy lifting, the framework uses the open-source Ninject dependency container and injector.
- [Domain building blocks](/reference-guide/domain-building-blocks.md)
- [Commands and queries](/reference-guide/commands-and-queries.md): The framework implements a number of facilities for working with commands, queries and for implementing CQRS.
- [Events](/reference-guide/events.md): Events are one of the most powerful ways of communication used in Revo. The framework offers a few different ways for implementing an event-driven architecture.
- [Data persistence](/reference-guide/data-persistence.md)
- [Database migrations](/reference-guide/database-migrations.md): Database migrations in Revo are a simple feature how to version database schema.
- [Projections](/reference-guide/projections.md): Projection are specialized event listeners used for materializing events published by event sourced aggregates into better usable read models.
- [Authorization](/reference-guide/authorization.md)
- [Validation](/reference-guide/validation.md)
- [Request life-cycle](/reference-guide/request-life-cycle.md)
- [Sagas](/reference-guide/sagas.md)
- [Jobs](/reference-guide/jobs.md)
- [Messaging and integrations](/reference-guide/integrations.md): Scale and integrate by publishing and receiving events, commands and queries using common messaging patterns, e.g. with RabbitMQ message queue (using EasyNetQ connector or Rebus service bus).
- [Multi-tenancy](/reference-guide/multi-tenancy.md)
- [Testing](/reference-guide/testing.md)
