Os módulos são unidades independentes de software que são compostos de models (modelos), views (visões), controllers (controladores) e outros componentes de apoio. Os usuários finais podem acessar os controllers (controladores) de um módulo caso esteja implementado na aplicação. Por estas razões, os módulos são muitas vezes enxergados como mini-aplicações. Os módulos diferem das aplicações pelo fato de não poderem ser implementados sozinhos e que devem residir dentro das aplicações.
Um módulo é organizado como um diretório que é chamado de [[yii\base\Module::basePath|caminho base]] do módulo. Dentro deste diretório, existem subdiretório, como o controllers, models, views que mantêm os controllers (controladores), models (modelos), views (visões) e outros códigos assim como em uma aplicação. O exemplo a seguir mostra o conteúdo dentro de um módulo:
Cada módulo deve ter uma única classe que estende de [[yii\base\Module]]. Esta classe deve estar localizada diretamente sob o [[yii\base\Module::basePath|caminho base]] do módulo e deve ser autoloadable. Quando um módulo estiver sendo acessado, uma única instância da classe módulo correspondente será criada. Assim como as instâncias da aplicação, as instâncias do módulo são usadas para compartilhar dados e componentes para os códigos dentro dos módulos.