Channels
In modern commerce, your website is rarely the only way you sell. Channels let you run multiple storefronts (B2C, B2B, mobile app, marketplace presence, in‑store POS, brand microsites) from a single Sylius installation and admin.
Each Channel represents one sales context with its configuration: assortment, branding, prices and taxes, languages, currencies, URL/hostname, and more. Administrators and , so you operate everything from one admin panel.
Channel properties
A Channel is one sales context (e.g., "Web EU", "B2B US", "Mobile App"). These are the knobs you can turn, in plain language:
Identity & access
Name – how it appears in the Admin.
Code – short unique ID used by imports/integrations.
Hostname – which domain points to this Channel (e.g.,
eu.example.com
).
Language & money
Default language – the language pages/emails use when nothing else is chosen.
Available languages – languages shoppers can switch to.
Base currency – the currency you store prices in for this Channel.
Enabled currencies – extra currencies shoppers can view (prices auto‑convert for display purposes via exchange rates).
Catalog & presentation
Visible assortment – which products/taxons are offered here (via your catalog settings and visibility rules on each product).
Menu root – where the main navigation starts (pick a Taxon for the top menu).
Theme – storefront theme for this Channel. Each Channel can use a different theme, so storefronts can look completely different.
Channel color (Admin only) – the color label used in the administration to visually mark Channel‑related items (e.g., orders, promotions, listings). It does not affect the storefront.
Selling rules
Countries – where you sell/ship.
Shipping methods – options shown at checkout for this Channel.
Payment methods – payment options available at checkout for this Channel.
Taxes – how tax is calculated (strategy) and which zones/rates apply.
Promotions/pricing – promotions and price rules that run on this Channel (set on Promotions).
Legal & contact
Shop billing data – legal entity on invoices/refunds.
Contact email – public address for customers.
Switches & status
Enabled – whether the Channel is live.
Configure a Channel (Admin UI)
Create or edit a Channel
Go to: Configuration → Channels.
Create or edit a Channel.
Fill out the key fields:
Name & Code.
Hostname (e.g.,
eu.example.com
). This is how Sylius resolves the Channel.Default locale (e.g.,
en_US
,pl_PL
) and Available locales.The storefront's interface defaults to the Default locale.
Base currency (e.g.,
EUR
,PLN
) and Available currencies.Prices are displayed (and stored) in the Base currency (unless another enabled currency is selected).
Menu taxon in Look & feel to start the navigation at a specific taxon.
(Optional) Shop Billing Data (legal entity details for invoices/refunds).
Save. Visit the hostname to verify the storefront shows the expected language and prices.
Important
Pick the base currency carefully. Prices are stored in the base currency for a channel.
After creation, changing base currency requires a price migration (and is not supported in the UI). Treat it as effectively immutable.

URLs, SEO, and fallbacks
Localized URLs: By default, Sylius prefixes routes with the
_locale
(e.g.,/pl_PL/product/acme-mug
). If a URL lacks a prefix, Sylius applies the Channel’s default locale.Translation fallback: If a page/product has no content in the current locale, Sylius falls back to the Channel’s default locale.
Currency fallback: The shopper is not able to select a currency that isn’t enabled. Sylius, by default, displays the base currency; other enabled currencies are used for display only and calculated based on exchange rates. All internal calculations always use the base currency.
Different menu root
By default, Sylius will render the same menu for all channels defined in the store, which will be all the children of the taxon with the code category. You can customize this behavior by specifying a menu taxon in the “Look & feel” section of the desired channel.

With this configuration, this particular channel will expose a menu starting from the children of the chosen taxon (T-Shirt taxon in this example):

The rest of the channels will still render only the children of the Category taxon.
Shop Billing Data
For Invoicing and Credit Memo purposes Channels are supplied with a section named Shop Billing Data, which is editable on the Channel create/update form.


Business Units
Sylius Plus is supplied with an enhanced version of Shop Billing Data from Sylius CE. It is also used for Invoicing and Refunds purposes. Still, it is a separate entity, that you can create outside of the Channel and then pick a previously created Business Unit on the Channel form.




Developer guide
How to get the current channel?
You can get the current channel from the channel context.
$channel = $this->container->get('sylius.context.channel')->getChannel();
Beware! When using multiple channels, remember to configure hostname
for each of them. If missing, the default context will not be able to provide an appropriate channel, resulting in an error.
Symfony Integration: Request Locale
Sylius integrates with Symfony’s request handling system and automatically sets the locale on the Symfony Request object based on the current channel.
How It Works
The current channel is resolved via sylius.context.channel
The locale is injected into Symfony’s Request object as request.locale
All translations, validators, and templates use this locale
Accessing Locale and Currency in Code
In a custom service or controller:
$locale = $this->get('sylius.context.locale')->getLocaleCode();
$currency = $this->get('sylius.context.currency')->getCurrencyCode();
$channel = $this->get('sylius.context.channel')->getChannel();
Or using Symfony’s Request object:
$locale = $request->getLocale();
Last updated
Was this helpful?