# Introduction

First of all, **thank you** for checking out my framework. I really appreciate that :smile:. I put a lot of work into this framework by exploring all sorts of different design patterns, possibilities of utility functions and performance improvements. Enough talking, let's get started!

## What is Quebec?

Quebec is a **modular Roblox game framework** developed for **vanilla Luau**. It's entirely written in pure Luau and therefore 100% compatible with Roblox. The goal of Quebec is to create a **seamless developer experience**, because developing Roblox games can quickly become a mess, especially for bigger games.&#x20;

To achieve this, Quebec uses **services and controllers**. These are called **"singletons"** in Quebec, because they are only instantiated once, and never multiple times. A singleton is essentially a place where your game logic lives.

Normally, a singleton has one specific field or task to avoid clutter and improve organization. The best example for this is: `DataService, MonetizationService & JoinService` , where each service has it's own purpose.

## What are the benefits?

Quebec provides the developer with a **lot of benefits**. Some notable ones are:

* Organized and well-structured codebase
* Built-in utility functions and modules
* Little to no performance loss
* Lifecycle events to act upon game events seamlessly
* Opt-in architecture: **You only use, what you need**
* Load order: A singleton will only start, once it's dependencies have already started
* ... and more

### I am still not convinced

If you are uncertain if you need Quebec, **just try it out**. You can always revert back! And also, we accept new contributors on our GitHub :wink:
