Reference
Block catalog
Layer 1 layout utilities, then all 23 blocks. Change Layer 1 and check it here.
Layer 1 — layout utilities
The grid vocabulary every block is composed from. Each value below is a literal key in a static lookup map: Tailwind cannot generate a class from an interpolated string, so a value absent from the map does not exist.
Grid — column count
A scalar ramps responsively and is what an MDX author writes ~90% of the time. Resize the window: every one of these collapses to a single column on a phone.
cols={2}cols={3}cols={4}cols={6}cols={{ base: 2, md: 3, lg: 6 }}min="16rem"Grid — gap, alignment and flow
Gap draws from the same closed scale as Stack, Row and Split, so vertical and horizontal rhythm cannot drift apart.
gap={2}gap={12}gap={12} gapY={2}align="stretch"align="start"debugCell — spanning
This is what turns a bento from bespoke code into an arrangement. Spans are always breakpoint-scoped and collapse to full width on a phone: a col-span-3 inside a one-column grid does not clamp, it creates implicit columns and squeezes the content into a third of the screen.
span={3} · span={1}rowSpan={2}flow="dense"span={{ sm: 2, lg: 4 }}Split — asymmetric two-column
By volume the most-used marketing layout: split hero, alternating feature rows, media and copy, split CTA. All eight ratios, plus reverse — which swaps visual order with order utilities and never flex-row-reverse, so RTL inverts once rather than twice and copy stays before media in the DOM.
ratio="1:1"ratio="1:2"ratio="2:1"ratio="1:3"ratio="3:1"ratio="2:3"ratio="3:2"ratio="golden"ratio="1:2" reversestackAt="sm"Row and Stack — one-dimensional clusters
Row is the horizontal cluster every block used to hand-roll: button pairs, badge rows, logo strips, meta lines. Its scroll mode is how a carousel ships at zero bytes.
Rowjustify="between" stackAt="none"justify="center" stackAt="none"scrollStack divide gap={0}Frame — aspect-ratio media
The single place the image pipeline lands, so the first real hero image proves it once rather than in nine blocks. Given no src it renders a tokened placeholder, which is also what a layout draft looks like before art direction arrives.
ratio="21:9 | 16:9 | 3:2 | 4:3 | 1:1 | 3:4"chrome="none | browser | device"radius="none | default | lg"Container — width
Bleed is shown further down, on MediaBlock, because it only means anything against a real section edge.
width="narrow"width="default"width="wide"Motion
Five entrance presets, stagger, exit and parallax. Opt-in per block, brand-themeable, and hidden only under html.motion-ready so a visitor without JavaScript sees everything.
Reveal — the five presets
Each specimen re-animates only if you reload; entrance is a one-shot unless it asks for exit.
<Reveal animate="fade"><Reveal animate="rise"><Reveal animate="slide-start"><Reveal animate="slide-end"><Reveal animate="scale">Stagger
Delays come from nth-child rules in base.css, not from JavaScript — a component rendered from MDX cannot enumerate its own children. Twelve distinct steps; everything past the twelfth shares the twelfth.
<Grid cols={4} stagger><Grid stagger="rise"><Stack stagger="slide-start">Exit, and Frame parallax
Exit is opt-in and should stay rare — an element that fades out on scroll-up is one a visitor cannot re-read. Parallax is the one pure-CSS part: animation-timeline behind @supports, so an unsupporting browser simply shows a static image.
<Reveal animate='rise' exit><Frame parallax />Layer 2 — the block catalog
23 blocks, each composed from the utilities above plus @ctrader/ds. Nineteen of them ship zero JavaScript.
Entry
layout=split-end
Copy first, media second
Split puts the media on the inline-end edge. The DOM order stays copy-first in both writing directions.
layout=split-start
The mirror image
Same props, media on the inline-start edge. Split flips it with order utilities, never flex-row-reverse.
layout=with-form
Capture in the hero
The embedded form is a native POST to a server action. Still zero bytes of client JavaScript.
A quieter opening
Display tier 2 and default spacing, for interior pages that want weight without height.
Value and capability
layout=cards
The default feature grid
Cards on a secondary surface, three across, collapsing to one on a phone.
Transparent execution
Cloud execution
One account everywhere
layout=icon-start
The glyph sits beside the text rather than above it, which reads tighter in two columns.
Level II pricing
Every price level, not just the top of book.
Sub-millisecond routing
Measured at the server, published monthly.
No dealing desk
Orders route to liquidity, never to a book.
Trade receipts
A signed record of every fill, exportable.
layout=bare
No Card. The right call when the section already carries a surface of its own.
Charting
Fifty-four timeframes and twenty-eight order types.
Automation
C# and Python, with a built-in editor and backtester.
Analysis
Performance statistics computed from the deal history.
layout=list
FeatureAlternating
The feature story
Each capability gets a full row, media and copy alternating sides. Below md every row stacks copy-above-media uniformly.
Charts
Read the market, not the chrome
Every panel is detachable, every layout is a workspace, and both sync across devices.
- Detachable windows
- Multi-monitor layouts
- Cloud-synced workspaces
Automation
Strategies that outlive your session
Write in C# or Python, backtest against tick data, then run it in the cloud.
See automationBentoGrid
Composition, not layout code
Grid plus Cell and nothing else. Spans collapse to full width below the first breakpoint.
Depth of market
Full Level II on every instrument, aggregated or raw.
Cloud execution
Free, and always on.
Automation in two languages
C# and Python, with a built-in editor and a tick-accurate backtester.
Copy trading
Browse strategies, invest, or provide one of your own.
Trade receipts
A signed record of every fill.
Steps layout=horizontal
Four steps across
Create a cTrader ID
One identity for every broker and every app.
Pick a broker
Only regulated firms are listed.
Open a demo
No deposit and no card.
Trade
The demo and the live platform are the same build.
Steps layout=timeline
- Minute 1
Install
One package, no configuration.
- Minute 3
Connect
Sign in with an existing cTrader ID.
- Minute 5
Run
Deploy a strategy to cloud execution.
ComparisonTable
A matrix, not a tier list
Rows by columns. Scrolls horizontally on a phone rather than reflowing — a comparison you cannot see side by side is not one.
| A matrix, not a tier list | Starter | TeamTalk to us | |
|---|---|---|---|
| Execution | |||
| Cloud instances | 1 | 10 | Unlimited |
| Level II pricing | Included | Included | Included |
| Support | |||
| Priority support | Not included | Included | Included |
| Seats | 1 | 1 | 25 |
TabbedShowcase
The one block that costs indexability
Base UI renders only the active panel, so the wrapper publishes every panel in a noscript block. Prefer FeatureAlternating where it fits.
Charting
Fifty-four timeframes.
Proof
11M+ registered traders · 250+ partner firms
LogoWall layout=row — string wordmarks
LogoWall layout=grid — string wordmarks
LogoWall layout=marquee — string wordmarks, static under prefers-reduced-motion
Testimonials layout=grid
“The first platform that showed me why a fill happened where it did.”
“Cloud execution removed a VPS bill and a whole category of outage.”
“The same workspace on a laptop and a phone, without thinking about it.”
“It is the only platform where I can explain every fill to a client without hedging.”
Testimonials layout=carousel — CSS scroll-snap, zero bytes
“The first platform that showed me why a fill happened where it did.”
“Cloud execution removed a VPS bill and a whole category of outage.”
“The same workspace on a laptop and a phone.”
“Backtests that match live results closely enough to trust.”
Conversion
PricingTable layout=cards with a billing toggle
Without the billing prop this block ships zero bytes. With it, one island.
Starter
Everything needed to trade one account.
- 1 cloud instance
- Level II pricing
- All order types
Active
For traders running strategies around the clock.
- 10 cloud instances
- Priority routing
- Advanced analytics
- Email support
Team
Seats, shared workspaces and consolidated billing.
- Unlimited instances
- 25 seats
- Dedicated support
CTABand layout=centered
The default: an accent band with a centred pair of buttons.
CTABand layout=boxed
A card on a page surface, for mid-page placement where a full band would cut the page in half.
CTABand layout=with-form
An inline capture field instead of a button pair.
LeadForm layout=card
The same form standalone. Native POST, server-rendered result, no client JavaScript.
FAQ layout=single-column
FAQ layout=two-column
For eight or more short questions. Never for long answers — the reflow on expand reads as a bug.
Editorial and media
MediaBlock layout=contained
A screenshot as a section in its own right, capped at the reading width.
MediaBlock
layout=split
Copy on one side, media on the other, driven by the same Split utility as the hero.
Learn moreMediaBlock layout=full-bleed
Bleed cancels the container gutter so the media reaches both viewport edges.
Gallery layout=filmstrip
CSS scroll-snap. Zero bytes, touch-native, keyboard reachable, and every image is in the HTML.
Gallery layout=grid
ResourceGrid
layout=cards
How execution transparency actually works
What Level II pricing means when a broker cannot alter a quote.
Migrating a strategy from MQL to C#
The three differences that account for most of the work.
Cloud execution, one year on
What we learned running strategies for 11 million accounts.
ResourceGrid layout=featured
ResourceGrid layout=list
How execution transparency actually works
What Level II pricing means when a broker cannot alter a quote.
Migrating a strategy from MQL to C#
The three differences that account for most of the work.
Cloud execution, one year on
What we learned running strategies for 11 million accounts.
Timeline
layout=vertical
- 2010
Founded
Limassol, with a single product and a seed round.
- 2018
cTrader 3.0
Manual and algorithmic trading merged into one application.
- 2023
Python and the Store
A second automation language and a marketplace to sell into.
- 2025
cBridge
Liquidity aggregation, and volume doubled.
Timeline layout=alternating
- 2010
Founded
- 2018
cTrader 3.0
- 2023
Python and the Store
- 2025
cBridge
Team
layout=grid
Amelia Rowe
Chief executiveTomas Berg
Head of platformPriya Nair
Head of designKen Adeyemi
Head of researchTeam layout=leadership
Amelia Rowe
Chief executiveTwenty years in market infrastructure, most of it spent explaining why execution quality is measurable.
Tomas Berg
Head of platformBuilt the routing layer that the transparency claims rest on.
Prose
The long-form body style, for legal and editorial pages. Deliberately not
@tailwindcss/typography — its defaults fight the design system tokens.
- Lists, links and emphasis are all styled from tokens
- Logical padding throughout, so it reads correctly in Arabic
End of the catalog
Twenty-three blocks, sixty layout variants.