Arabic RTL UI Design: The Complete Guide for SaaS Teams

Layout mirroring rules, Arabic typography, bilingual dashboards and the RTL mistakes that break trust with Gulf users — a practical guide for GCC-bound products.

Most teams discover their Arabic problem after launch. The build looked fine in review, the translations came back approved, and then Gulf users started dropping out of the signup flow at a rate nobody could explain. The cause is almost never the translation. It is that right-to-left was treated as a rendering setting rather than a design pass.

This guide covers what actually changes when a SaaS product goes right-to-left: which elements mirror, which must never mirror, how numbers and dates break, why Arabic typography needs its own spacing decisions, and how to run one codebase across both directions without maintaining two designs.

RTL is not direction: rtl

Setting dir="rtl" on the root element flips text alignment and the reading order of inline content. That is roughly ten percent of the work. Everything positioned with explicit left and right values stays exactly where it was, which produces the characteristic half-mirrored interface: text runs right-to-left, but the sidebar, the close button, the dropdown caret and the progress bar all sit on the wrong side.

The result reads as unfinished to a native speaker in the same way a machine-translated landing page reads as unfinished to you. Users rarely file a bug about it. They just trust the product less, and in financial products that trust gap shows up directly in conversion.

The practical test: open your Arabic build and try to complete your primary conversion flow without switching back to English. If you find yourself hunting for a control you designed yourself, your users have no chance.

What mirrors, and what must never mirror

This is where most RTL implementations go wrong in both directions — under-mirroring the layout, then over-mirroring things that carry their own meaning.

Mirror these

Do not mirror these

Charts sit in a genuinely contested middle. A time-series axis reading right-to-left matches Arabic reading order and is common in Gulf financial software; a chart copied straight from an English dashboard with the axis unchanged is also widely understood. Pick one, apply it consistently across the product, and state the decision in your design system so it does not get re-litigated every sprint. What breaks trust is a dashboard where two charts disagree.

Numbers, currency and dates: where the real bugs live

Arabic is a bidirectional script, which means a single string can contain runs in both directions. The Unicode bidirectional algorithm decides how they sit together, and it is doing its best with incomplete information. Concatenate an Arabic label with a Latin product name and a figure, and the parts can reorder in ways that look like a rendering fault but are technically correct behaviour.

Three rules prevent most of it:

  1. Isolate every embedded run. Wrap Latin text, numbers, phone numbers and email addresses in an element carrying unicode-bidi: isolate, or use the native <bdi> element. This tells the algorithm to treat the run as one unit rather than negotiating with its neighbours.
  2. Never build sentences by concatenation. Use full interpolated strings in your localisation files so translators control word order. "Deleted " + count + " files" cannot be translated correctly into Arabic; "تم حذف {count} ملفاً" can.
  3. Decide your numeral system deliberately. Gulf business and financial interfaces overwhelmingly use Western Arabic numerals — 0 to 9, the same glyphs you are reading now. Eastern Arabic numerals (٠١٢٣) are common in Egypt and in more traditional or literary contexts. Defaulting to Eastern numerals in a Saudi banking dashboard because it feels more authentic will make your product harder to scan, not more trusted.

Dates deserve their own decision. Saudi Arabia runs on both the Hijri and Gregorian calendars, and which one is expected depends entirely on context — a government-facing form, a salary date and an international invoice do not have the same answer. If your product touches anything official or salary-linked, showing both is the safe default rather than a nice extra.

Arabic typography needs its own decisions

Arabic removes three of the tools you normally use to build hierarchy. There is no uppercase, no italic and no small caps. Bolding works, but Arabic typefaces often have fewer usable weights than their Latin counterparts, and faux-bolding a connected script degrades it badly.

What replaces them is size, colour, spacing and weight used more deliberately. In practice:

Reliable open-source options include IBM Plex Sans Arabic, Noto Sans Arabic, Readex Pro, Cairo and Tajawal. Pair one for UI and, if you need display contrast, choose a second with genuinely different structure rather than a heavier weight of the same family.

Building bilingual without maintaining two designs

Teams usually reach for one of two bad options: a second stylesheet that drifts out of sync within a quarter, or a pile of [dir="rtl"] overrides that grows with every feature.

CSS logical properties remove most of the problem. Instead of describing positions in physical terms, describe them relative to the reading direction, and the browser resolves them per direction:

margin-leftmargin-inline-start

padding-rightpadding-inline-end

left: 0inset-inline-start: 0

text-align: lefttext-align: start

border-radius: 16px 0 0 16pxborder-start-start-radius and friends

Written this way, one stylesheet serves both directions and new features inherit correct behaviour by default. Support is universal across current browsers.

A small override sheet is still worth keeping for the things that are genuinely different rather than merely mirrored: the Arabic font stack, adjusted line-heights, and the handful of components where mirroring is the wrong answer. Keeping that sheet deliberately small is what stops the two versions diverging.

Two further habits matter more than they sound. Set lang="ar" alongside dir="rtl", because it drives font selection, hyphenation and screen reader pronunciation independently of direction. And add hreflang pairing between your language versions so search engines serve the right one rather than treating them as duplicates.

Seven mistakes that cost you trust in the Gulf

  1. Shipping machine translation without native review. Arabic has strong register distinctions. Copy that is technically correct but tonally wrong — overly formal, or casual where it should be respectful — reads immediately as foreign. This is the fastest way to lose an enterprise buyer.
  2. Latin font fallback. Broken letterform joining is visible to every native reader and invisible to most non-native teams.
  3. Scrambled mixed strings. Prices, IDs, IBANs and product names reordering inside Arabic sentences. In a financial product this does not read as a rendering quirk. It reads as unreliable.
  4. Forms that flip everything. Labels and layout should mirror. Email fields, IBANs, URLs and phone numbers should stay left-to-right, or users cannot verify what they typed.
  5. Gregorian-only dates in official contexts. A minor omission in most products; a real obstacle in anything touching Saudi government processes, payroll or compliance.
  6. Over-mirroring. Reversed play buttons, flipped logos, mirrored screenshots. Over-correction signals inexperience as clearly as under-correction.
  7. Treating Arabic as a toggle rather than a design pass. The layout that works at English string lengths often breaks at Arabic ones. Someone has to look at every screen in Arabic before launch, and that someone should read Arabic.

Pre-launch RTL checklist

  • dir="rtl" and lang="ar" both set on the root element
  • An Arabic-capable font loaded for every weight actually used in the UI
  • Line-height and font size reviewed specifically for Arabic, not inherited from the English design
  • Layout built on logical properties, with physical left and right removed from component CSS
  • Every mixed-direction string isolated with <bdi> or unicode-bidi
  • Numerals, currency format and date system decided and documented
  • Email, phone, IBAN and URL inputs forced left-to-right
  • Icon set audited: directional icons mirrored, conventional icons untouched
  • Charts following one documented rule across the whole product
  • Every primary flow completed end to end in Arabic by a native speaker
  • hreflang pairing in place between language versions

Frequently asked questions

Is setting dir="rtl" enough to support Arabic?

No. It flips text alignment and inline reading order, but anything positioned with explicit left or right values stays in place. Sidebars, close buttons, progress bars and dropdown carets all need handling separately, usually by moving component CSS onto logical properties.

Which UI elements should not be mirrored?

Media playback controls, clocks and clockwise motion, numbers themselves, logos and brand marks, product screenshots, code and file paths, and icons whose shape is conventional rather than directional — search, settings, notifications.

Should an Arabic interface use Eastern or Western numerals?

Gulf business and financial interfaces overwhelmingly use Western Arabic numerals (0–9). Eastern Arabic numerals are more common in Egypt and in traditional or literary contexts. Using Eastern numerals in a Saudi financial dashboard generally makes the product harder to scan.

How much line-height does Arabic text need?

Body text that reads comfortably at 1.5 in a Latin typeface typically needs 1.7 to 1.9 in Arabic, because Arabic glyphs carry more vertical extent through ascenders, descenders and diacritics. Copying the Latin value is the most common Arabic typography mistake.

How do you maintain one codebase for both LTR and RTL?

Use CSS logical properties — margin-inline-start, padding-inline-end, inset-inline-start, text-align: start — instead of physical left and right values. The browser resolves them per direction, so one stylesheet serves both and new features inherit correct behaviour by default.

Getting it right the first time is cheaper

Retrofitting RTL into a product designed left-to-right costs several times what building bidirectionally from the start would have. The expensive part is rarely the CSS — it is the component library, the localisation architecture and the design decisions that were never written down, all of which have to be revisited at once.

If a GCC launch is anywhere on your roadmap, the cheapest moment to make these decisions is before your design system hardens. The second cheapest is now.

Planning a GCC launch?

We design SaaS and fintech products with Arabic and English treated as equals rather than a translation layer. If you want a second pair of eyes on your Arabic build before it ships, we can review it.

Request an RTL review