Summary
Open Sans currently lacks OpenType locl (Localized Forms) support for Bulgarian Cyrillic (language BGR). This means that when Bulgarian text is rendered with Open Sans, users see Russian-style Cyrillic letterforms instead of the historically distinct Bulgarian forms — even when lang="bg" is correctly set in HTML.
Given that Open Sans is used on 26+ million websites worldwide, this is arguably the most impactful single change that could be made for Bulgarian language representation on the web.
Background
The Bulgarian and Russian variants of the Cyrillic script have significant visual differences, particularly in lowercase letters. Bulgarian Cyrillic letterforms are rounder and more calligraphic, with distinct ascenders and descenders that improve legibility and reflect the script's historical origins — Bulgaria being the birthplace of the Cyrillic alphabet in the 9th century.
The differences are not cosmetic — they are comparable to the distinction between Latin a (single-story) and ɑ (double-story). Using Russian-style forms for Bulgarian text is akin to rendering English with Fraktur letterforms: technically readable, but culturally and typographically wrong.
Key lowercase glyphs that differ between Russian and Bulgarian Cyrillic in sans-serif typefaces:
| Glyph |
Unicode |
Russian form |
Bulgarian form |
| в |
U+0432 |
в (like "b") |
more open, calligraphic |
| г |
U+0433 |
г (like "Γ") |
г (like "s"-shaped) |
| д |
U+0434 |
д (like "A" base) |
д (with descender) |
| ж |
U+0436 |
ж |
more calligraphic |
| з |
U+0437 |
з |
з (with different proportions) |
| и |
U+0438 |
и (like "N" reversed) |
и (like Latin "u" mirrored) |
| й |
U+0439 |
й |
й (follows и form + breve) |
| к |
U+043A |
к |
к (calligraphic) |
| л |
U+043B |
л (like "Λ") |
л (with serif/foot) |
| н |
U+043D |
н |
more open form |
| п |
U+043F |
п (like "n" mirror) |
п (like Latin "n") |
| т |
U+0442 |
т (like "m" mirror) |
т (like Latin "m") |
| ц |
U+0446 |
ц |
ц (different tail) |
| ч |
U+0447 |
ч |
ч (different bowl) |
| ш |
U+0448 |
ш |
ш (different proportions) |
| щ |
U+0449 |
щ |
щ (different proportions + tail) |
| ъ |
U+044A |
ъ |
ъ (with ascender) |
| ь |
U+044C |
ь |
ь (different) |
| ю |
U+044E |
ю |
ю (different connection) |
Additionally, several uppercase glyphs differ:
- Д (U+0414) — optional, but preferred
- Ѝ (U+040D) — required for Bulgarian language (capital И with grave)
- Л (U+041B) — different structural form
- Ф (U+0424) — optional
Technical Implementation
The OpenType locl feature is the standard mechanism for this. The implementation would involve:
1. Design alternate glyphs
Create .loclBGR suffixed alternates for the glyphs listed above, matching the weight/style across all masters in the variable font source.
2. Add OpenType feature code
feature locl {
script cyrl;
language BGR exclude_dflt;
sub [uni0432 uni0433 uni0434 uni0436 uni0437 uni0438 uni0439 uni045D
uni043A uni043B uni043D uni043F uni0442 uni0447 uni0446 uni0448
uni0449 uni044C uni044A uni044E]
by [uni0432.loclBGR uni0433.loclBGR uni0434.loclBGR uni0436.loclBGR
uni0437.loclBGR uni0438.loclBGR uni0439.loclBGR uni045D.loclBGR
uni043A.loclBGR uni043B.loclBGR uni043D.loclBGR uni043F.loclBGR
uni0442.loclBGR uni0447.loclBGR uni0446.loclBGR uni0448.loclBGR
uni0449.loclBGR uni044C.loclBGR uni044A.loclBGR uni044E.loclBGR];
} locl;
3. Optionally expose via Stylistic Set
Adding the same alternates as a Stylistic Set (e.g., ss04) gives non-Bulgarian designers access to the forms without needing to change spell-check language — a best practice recommended by type designers working in this space.
Relevant Context
Open Sans is derived from Noto Sans
Per this repo's README, Open Sans styles are now updated from Noto Sans sources. The Noto project has had an open issue about Bulgarian Cyrillic since 2014. If Noto Sans gains locl BGR support, the path to Open Sans inheriting it would be straightforward.
Community workarounds already exist
The Bulgarian community has had to create workarounds due to this gap:
- npoekmu.me created "Open Sans BG" — a fork with Bulgarian letterforms, distributed as a WordPress plugin. It covers Regular, Bold, and Italic only.
- Stefan Peev / localfonts.eu maintains an extensive catalogue of fonts with Bulgarian Cyrillic support and documents the
locl implementation process.
- The Libra Sans project took a similar approach for Liberation Sans (another Matteson-derived font), adding multilingual Cyrillic support via OpenType local features.
The same issue affects other Google Fonts
Institutional momentum in Bulgaria
- Sofia Sans (by Lettersoup, on Google Fonts) was designed with Bulgarian Cyrillic as the default and is now the official typeface of Sofia Municipality, Bulgarian State Railways, and the Vision for Sofia initiative.
- The Bulgarian "Site of the Year" competition awards bonus points for proper Bulgarian Cyrillic usage (cyrillic.bgweb.bg).
- The initiative is supported by FAPW (Foundation for Active Production on the Web).
Comprehensive technical guide available
Botio Nikoltchev of Lettersoup has published a detailed technical guide covering exactly which glyphs need alternates, how to implement them in Glyphs App / FontLab, and the OpenType feature code. Lettersoup also created the Monotype standard for Bulgarian Cyrillic glyphs and has deep expertise in this area.
Impact
- ~7 million native Bulgarian speakers see incorrect letterforms on the majority of the web
- Bulgaria is an EU member state — proper script support matters for digital inclusion
- Open Sans's Apache 2.0 license enables the community to fork (and they have), but upstreaming the fix would benefit all 26M+ sites at once
- Browsers already support
locl features triggered by lang="bg" — the infrastructure is ready, only the font glyphs are missing
Offer to Help
I'm happy to help coordinate this effort — whether that's connecting with Bulgarian type designers who have expertise in this area, testing implementations, or contributing to documentation. The Bulgarian type design community (Lettersoup, localfonts.eu, Fontfabric, npoekmu.me) has been working on this problem for years and would likely welcome the opportunity to contribute upstream.
References
Summary
Open Sans currently lacks OpenType
locl(Localized Forms) support for Bulgarian Cyrillic (language BGR). This means that when Bulgarian text is rendered with Open Sans, users see Russian-style Cyrillic letterforms instead of the historically distinct Bulgarian forms — even whenlang="bg"is correctly set in HTML.Given that Open Sans is used on 26+ million websites worldwide, this is arguably the most impactful single change that could be made for Bulgarian language representation on the web.
Background
The Bulgarian and Russian variants of the Cyrillic script have significant visual differences, particularly in lowercase letters. Bulgarian Cyrillic letterforms are rounder and more calligraphic, with distinct ascenders and descenders that improve legibility and reflect the script's historical origins — Bulgaria being the birthplace of the Cyrillic alphabet in the 9th century.
The differences are not cosmetic — they are comparable to the distinction between Latin
a(single-story) andɑ(double-story). Using Russian-style forms for Bulgarian text is akin to rendering English with Fraktur letterforms: technically readable, but culturally and typographically wrong.Key lowercase glyphs that differ between Russian and Bulgarian Cyrillic in sans-serif typefaces:
Additionally, several uppercase glyphs differ:
Technical Implementation
The OpenType
loclfeature is the standard mechanism for this. The implementation would involve:1. Design alternate glyphs
Create
.loclBGRsuffixed alternates for the glyphs listed above, matching the weight/style across all masters in the variable font source.2. Add OpenType feature code
3. Optionally expose via Stylistic Set
Adding the same alternates as a Stylistic Set (e.g.,
ss04) gives non-Bulgarian designers access to the forms without needing to change spell-check language — a best practice recommended by type designers working in this space.Relevant Context
Open Sans is derived from Noto Sans
Per this repo's README, Open Sans styles are now updated from Noto Sans sources. The Noto project has had an open issue about Bulgarian Cyrillic since 2014. If Noto Sans gains
locl BGRsupport, the path to Open Sans inheriting it would be straightforward.Community workarounds already exist
The Bulgarian community has had to create workarounds due to this gap:
loclimplementation process.The same issue affects other Google Fonts
loclfeatures commented out in the source.Institutional momentum in Bulgaria
Comprehensive technical guide available
Botio Nikoltchev of Lettersoup has published a detailed technical guide covering exactly which glyphs need alternates, how to implement them in Glyphs App / FontLab, and the OpenType feature code. Lettersoup also created the Monotype standard for Bulgarian Cyrillic glyphs and has deep expertise in this area.
Impact
loclfeatures triggered bylang="bg"— the infrastructure is ready, only the font glyphs are missingOffer to Help
I'm happy to help coordinate this effort — whether that's connecting with Bulgarian type designers who have expertise in this area, testing implementations, or contributing to documentation. The Bulgarian type design community (Lettersoup, localfonts.eu, Fontfabric, npoekmu.me) has been working on this problem for years and would likely welcome the opportunity to contribute upstream.
References