Skip to main content
Oro is a PHP web application built on the Symfony framework. This section explains the architectural decisions, application structure, and how to customize and extend Oro applications.

What is an Oro application

Oro application provides the following out-of-the-box capabilities:
  • Runs on any OS — Linux is recommended. See setup for system requirements.
  • Scalable — Can be scaled up and down to meet your company’s needs (message queue, indexes, search).
  • Extendable — Extend via packages from the Oro Extensions Store designed by Oro, Oro partners, or the community.
  • Customizable — Inherits most Symfony development techniques and extends them, allowing fast customization for any business needs.

Oro licensing

Community versions of Oro applications are distributed under the OSL-3.0 license. The community edition of OroPlatform is distributed under the MIT license. Enterprise editions are distributed under a custom End User License Agreement.

Architecture overview

Technology Stack

Client-side (web browser, API client) and server-side (PHP, database, message queue, search, cache) components.

Application Structure

Source code repositories, distribution model, and file system structure.

Application Framework

How the Symfony-based Oro framework works and how to get started building with it.

Application Customization

Customize source code and publish your customization as a package.

Differences from Symfony

Key differences between Oro applications and standard Symfony applications.

Custom Oro Application

Build a fully custom application on top of the Oro platform.

Bundle-less structure

Oro supports a modern bundle-less file organization as an alternative to the classic bundle-based layout. This approach moves application-specific code out of dedicated bundle directories and into a flatter structure.

Bundle-less Structure

Learn how to migrate existing bundles to a bundle-less structure and organize migrations, entities, controllers, views, translations, ACLs, and more without a dedicated bundle class.

Technology stack highlights

Web browserThe Oro storefront and back-office are rendered as standard HTML pages enhanced with JavaScript. The UI layer relies on Backbone.js-based components and communicates with the server over REST/JSON API.API clientExternal systems integrate with Oro through the JSON:API-compliant REST API or the legacy REST API endpoints.

Application structure

Oro applications use Composer for dependency management and follow the Symfony bundle system for code organization.
project-root/
├── bin/                  # Executable files (console, phpunit)
├── config/               # Application configuration
├── migrations/           # Database migrations
├── public/               # Web root (index.php, assets)
├── src/                  # Custom application code
│   └── Acme/Bundle/DemoBundle/
│       ├── AcmeDemoBundle.php
│       ├── Controller/
│       ├── Entity/
│       ├── Resources/
│       │   └── config/
│       │       └── oro/
│       └── ...
├── templates/            # Global Twig templates
├── translations/         # Global translation files
└── var/                  # Cache, logs, sessions

Key differences from standard Symfony

The Oro application kernel automatically discovers and registers bundles by scanning for Resources/config/oro/bundles.yml files in all installed packages. You do not need to manually register bundles in the kernel class.
Routing resources are also auto-discovered from Resources/config/oro/routing.yml files in each bundle, removing the need for manual route imports in the main routing configuration.
OroSecurityBundle extends the standard Symfony security layer with an ownership-aware, role-based ACL system. Access can be granted at User, Business Unit, Division, Organization, or Global level.
Oro applications support installable extensions via Composer packages. Extensions are published on the Oro Extensions Store and can be installed without modifying core code.

Build docs developers (and LLMs) love