**Iosevka** is an *open-source*, *sans-serif* + *slab-serif*, *monospace* + *quasi‑proportional* typeface family, designed for *writing code*, using in *terminals*, and preparing *technical documents*.
![](images/preview-all.png)
## Installation
Quit your editor/program. Unzip and open the folder.
* **Windows**: Download the fonts from the [Releases](https://github.com/be5invis/Iosevka/releases), select the font files and right click, then hit “Install”.
* On Windows 10 1809 or newer the default font installation is per-user, and it may cause compatibility issues for some applications, mostly written in Java. To cope with this, right click and select “Install for all users” instead. [Ref.](https://youtrack.jetbrains.com/issue/JRE-1166?p=IDEA-200145)
* **[macOS](http://support.apple.com/kb/HT2509)**
* Standard distribution in Homebrew:
```bash
brew tap homebrew/cask-fonts
brew install --cask font-iosevka
```
* Search for other variants using `brew search font-iosevka` and install what you want.
* Customizable install using Homebrew: see [robertgzr/homebrew-tap](https://github.com/robertgzr/homebrew-tap).
* **Linux** : Copy the TTF files to your fonts directory → Run `sudo fc-cache`.
- Void Linux users can install the font with `xbps-install font-iosevka`.
- Fedora Linux users can install the font(s) from the copr [here](https://copr.fedorainfracloud.org/coprs/peterwu/iosevka/). Run `dnf search iosevka` to discover available fonts and `dnf install` to install the chosen one(s).
* **FreeBSD**: The font can be installed with `pkg install iosevka`.
* **OpenBSD**: Run `pkg_info -Q iosevka` to see which Iosevka packages are available. Use `pkg_add` to install the chosen package(s).
In the official package, Iosevka provides 6 monospace subfamilies (sans-serif and slab-serif, each in the 3 spacings Default, Term and Fixed) and 2 quasi-proportional subfamilies (Aile (sans-serif) and Etoile (slab-serif)). In all the monospace subfamilies, 9 weights (Thin to Heavy), 2 widths (Normal and Extended), and 3 slopes (Upright, Italic and Oblique) are included. In the quasi-proportional subfamilies, the quantity of widths is reduced to 1.
All versions include the same ranges of characters: Latin letters, Greek letters (including Polytonic), some Cyrillic letters, IPA symbols and common punctuations and some symbols. You can check out the full list [here](http://be5invis.github.io/Iosevka/specimen).
![Languages Sample](images/languages.png)
<!-- BEGIN Section-Language-List -->
<!-- THIS SECTION IS AUTOMATICALLY GENERATED. DO NOT EDIT. -->
Alongside stylistic sets, Monospace Iosevka can also be configured to cherry-pick variants for each character using OpenType. The variants are shown below. To enable, assign the feature tag to the variant index. For example, setting `cv26` to `6` will enable single-storey `a`.
**Caution :** Certain software may limit the quantity of OpenType features and drop some of them if the feature list is too long. Please validate your feature configuration to ensure that it worked in your software.
![Character Variants](images/charvars.png)
### Ligations
Monospace subfamilies support ligations. Iosevka’s default ligation set is assigned to `calt` feature, though not all of them are enabled by default.
<!-- BEGIN Section-OT-Ligation-Tags-1 -->
<!-- THIS SECTION IS AUTOMATICALLY GENERATED. DO NOT EDIT. -->
Iosevka supports Language-Specific Ligations, which is the ligation set enabled only under certain languages. These ligation sets are assigned to custom feature tags. To use them, you need to turn **off**`calt` and enable the corresponded feature. The feature list is:
<!-- BEGIN Section-OT-Ligation-Tags-2 -->
<!-- THIS SECTION IS AUTOMATICALLY GENERATED. DO NOT EDIT. -->
Please note that, due to the complex interactions when forming ligations, cherry-picking ligation groups will require a custom Iosevka build. The instructions could be seen below.
## Building from Source
To build Iosevka you should:
1. Ensure that [`nodejs`](http://nodejs.org) (≥ 12.16.0) and [`ttfautohint`](http://www.freetype.org/ttfautohint/) are present, and accessible from `PATH`.
2. Run `npm install`. This command will install **all** the NPM dependencies, and will also validate whether external dependencies are present.
3.`npm run build -- contents::iosevka`.
You will find TTFs, as well as WOFF(2) web fonts and one Webfont CSS in the `dist/` directory.
### Using a Docker container
A Docker container handling the build environment for you can be found [here](https://github.com/avivace/fonts-iosevka).
To pull it from Docker Hub and start a standard build of the latest released version, run
```
docker run -it -v $(pwd):/build avivace/iosevka-build
```
Fonts files will be placed in the `dist` folder.
You can provide `private-build.plans.toml` for a customized build and/or specify the desired release appending `-e FONT_VERSION=X.X.X`. to the Docker command.
## Customized Build
To create a custom build, you need:
1. Create `private-build-plans.toml` file if absent.
2. Add a build plan into `private-build-plans.toml`. The configurable properties are described in the following sections.
3. Run `npm run build -- contents::<your plan name>` and the built fonts would be available in `dist/`. Aside from `contents::<plan>`, other options are:
1.`contents::<plan>` : TTF (Hinted and Unhinted), WOFF(2) and Web font CSS;
2.`ttf::<plan>` : TTF;
3.`ttf-unhinted::<plan>` : Unhinted TTF only;
4.`webfont::<plan>` : Web fonts only (CSS + WOFF2);
5.`woff2::<plan>` : WOFF2 only.
### Configuring Custom Build
Configuration of build plans are organized under `[buildPlans.<plan name>]` sections in the `private-build-plans.toml`. You can use [the Customizer](https://be5invis.github.io/Iosevka/customizer) to create the build plan, and/or manulally edit them, following the instructions below.
Inside the plan, top-level properties include:
*`family`: String, defines the family name of your custom variant.
*`spacing`: Optional, String, denotes the spacing of the custom variant. Valid values include:
-`quasi-proportional`: The font will become quasi-proportional.
-`term`: Make the symbols' width suitable for terminal emulators. Arrows and geometric symbols will become narrower.
-`fontconfig-mono`: Apply `term` spacing changes and further apply changes to be compatible with FontConfig's Mono spacing, which recognizes a font as monospace if and only if its every non-combining characters having the same width. The changes include:
- Completely remove wide glyphs. All non-combining glyphs will be exactly the same width.
- As a consequence, the following characters will be **removed**:
-`U+27F5` LONG LEFTWARDS ARROW
-`U+27F6` LONG RIGHTWARDS ARROW
- Remove `NWID` and `WWID` OpenType feature.
-`fixed`: Apply `fontconfig-mono` changes and further remove ligations.
*`serifs`: Optional, String, configures style of serifs.
- When set to `slab`, the font will be converted into slab-serif.
- Otherwise the font will be sans-serif.
*`no-cv-ss`: Optional, Boolean, disables `cv##` and `ss##` OpenType features.
*`export-glyph-names`: Optional, Boolean, whether to export glyph names into the fonts. Setting this to `true` will incrase file footprint, however this is necessary for ligature support in [Kitty](https://sw.kovidgoyal.net/kitty/).
-`connected-number-sign`: Make contiguous number signs (like `##`) connected.
-`connected-tilde-as-wave`: Make contiguous ASCII tildes (like `~~`) connected as a wave line.
-`connected-hyphen-as-solid-line`: Make contiguous hyphen-minuses (like `--`) connected as a straight solid line.
-`connected-hyphen-as-semi-dashed-line`: Make contiguous hyphen-minuses (like `--`) connected as a straight semi-dashed line, identifying each hyphen component.
<!-- THIS SECTION IS AUTOMATICALLY GENERATED. DO NOT EDIT. -->
*`design`, `upright`, `italic`, and `oblique`: Optional, Dictionary, defines styles for individual characters. The choices are organized in key-value pairs, assigning a variant to a character group. Alternatively, you could assign numbers to `cv##` tags, like what you did when using OpenType in CSS. Assignments under `design` will be applied to all the slopes, and `upright`, `italic`, and `oblique` will apply to corresponded slopes.
In addition, style selector for default digit form also uses these dictionaries.
+ `capital-b = 'standard-serifless'`, `cv02 = 1`: `B` in near-symmetric proportion, without serifs.
+ `capital-b = 'more-asymmetric-serifless'`, `cv02 = 2`: `B` in more asymmetric proportion to differentiate with `8`, without serifs.
+ `capital-b = 'standard-unilateral-serifed'`, `cv02 = 3`: `B` in near-symmetric proportion with motion serifs at top.
+ `capital-b = 'more-asymmetric-unilateral-serifed'`, `cv02 = 4`: `B` in more asymmetric proportion with motion serifs at top.
+ `capital-b = 'standard-bilateral-serifed'`, `cv02 = 5`: `B` in near-symmetric proportion with motion serifs at both top and bottom.
+ `capital-b = 'more-asymmetric-bilateral-serifed'`, `cv02 = 6`: `B` in more asymmetric proportion with motion serifs at both top and bottom.
+ `capital-b = 'standard-interrupted-serifless'`, `cv02 = 7`: `B` in near-symmetric proportion with interupted middle bar, without serifs.
+ `capital-b = 'more-asymmetric-interrupted-serifless'`, `cv02 = 8`: `B` in more asymmetric proportion to differentiate with `8`, with interupted middle bar, without serifs.
+ `capital-b = 'standard-interrupted-unilateral-serifed'`, `cv02 = 9`: `B` in near-symmetric proportion with interupted middle bar and motion serifs at top.
+ `capital-b = 'more-asymmetric-interrupted-unilateral-serifed'`, `cv02 = 10`: `B` in more asymmetric proportion with interupted middle bar and `8` with motion serifs at top.
+ `capital-b = 'standard-interrupted-bilateral-serifed'`, `cv02 = 11`: `B` in near-symmetric proportion with interupted middle bar and motion serifs at both top and bottom.
+ `capital-b = 'more-asymmetric-interrupted-bilateral-serifed'`, `cv02 = 12`: `B` in more asymmetric proportion with interupted middle bar and `8` with motion serifs at both top and bottom.
+ `capital-k = 'symmetric-touching-serifless'`, `cv11 = 3`: `K` with symmetric legs disconnected to the vertical bar, without serifs.
+ `capital-k = 'symmetric-connected-serifless'`, `cv11 = 4`: `K` with symmetric legs connected to the vertical bar, without serifs.
+ `capital-k = 'straight-top-left-serifed'`, `cv11 = 5`: `K` with standard shape and serifs at top left.
+ `capital-k = 'curly-top-left-serifed'`, `cv11 = 6`: Slightly curly `K`,like Iosevka 2.x, with serifs at top left.
+ `capital-k = 'symmetric-touching-top-left-serifed'`, `cv11 = 7`: `K` with symmetric legs disconnected to the vertical bar, and serifs at top left.
+ `capital-k = 'symmetric-connected-top-left-serifed'`, `cv11 = 8`: `K` with symmetric legs connected to the vertical bar, and serifs at top left.
+ `capital-k = 'straight-bottom-right-serifed'`, `cv11 = 9`: `K` with standard shape and serifs at bottom right.
+ `capital-k = 'curly-bottom-right-serifed'`, `cv11 = 10`: Slightly curly `K`,like Iosevka 2.x, with serifs at bottom right.
+ `capital-k = 'symmetric-touching-bottom-right-serifed'`, `cv11 = 11`: `K` with symmetric legs disconnected to the vertical bar, and serifs at bottom right.
+ `capital-k = 'symmetric-connected-bottom-right-serifed'`, `cv11 = 12`: `K` with symmetric legs connected to the vertical bar, and serifs at bottom right.
+ `capital-k = 'straight-serifed'`, `cv11 = 13`: `K` with standard shape, and serifs.
+ `capital-k = 'curly-serifed'`, `cv11 = 14`: Slightly curly `K`,like Iosevka 2.x, and with serifs.
+ `capital-k = 'symmetric-touching-serifed'`, `cv11 = 15`: `K` with symmetric legs disconnected to the vertical bar, and serifs.
+ `capital-k = 'symmetric-connected-serifed'`, `cv11 = 16`: `K` with symmetric legs connected to the vertical bar, and serifs.
+ `capital-w = 'curly-motion-serifed'`, `cv22 = 8`: Slightly curly `W`, like Iosevka 2.x, with motion serifs.
+ `capital-w = 'straight-flat-top-motion-serifed'`, `cv22 = 9`: Standard, straight `W`, and the middle is forced to be aligned the top, with motion serifs.
+ `capital-w = 'straight-double-v-motion-serifed'`, `cv22 = 10`: Straight `W` looks like double V, with motion serifs.
+ `f = 'flat-hook-extended'`, `cv31 = 14`: `f` with flat top hook and bar extended to descender.
+ `f = 'flat-hook-diagonal-tailed'`, `cv31 = 15`: `f` with falt hook and bottom diagonal tail.
+ `f = 'flat-hook-crossbar-at-x-height'`, `cv31 = 16`: `f` with flat top hook, without bottom serif, hook or exension; crossbar is placed right at X-height.
+ `f = 'flat-hook-serifed-crossbar-at-x-height'`, `cv31 = 17`: `f` with flat top hook, bottom serif; crossbar is placed right at X-height.
+ `f = 'flat-hook-tailed-crossbar-at-x-height'`, `cv31 = 18`: `f` with flat top hook, bottom hook; crossbar is placed right at X-height.
+ `f = 'flat-hook-extended-crossbar-at-x-height'`, `cv31 = 19`: `f` with flat top hook, bar extended to descender; crossbar is placed right at X-height.
+ `f = 'flat-hook-diagonal-tailed-crossbar-at-x-height'`, `cv31 = 20`: `f` with falt hook and bottom diagonal tail; crossbar is placed right at X-height.
+ `k = 'straight-serifless'`, `cv36 = 1`: `k` with standard shape, and without serifs.
+ `k = 'curly-serifless'`, `cv36 = 2`: Slightly curly `k`, like Iosevka 2.x, and without serifs.
+ `k = 'cursive-serifless'`, `cv36 = 3`: `k` with a cursive loop, and without serifs.
+ `k = 'diagonal-tailed-cursive-serifless'`, `cv36 = 4`: `k` with a cursive loop and diagonal tail, and without serifs.
+ `k = 'symmetric-touching-serifless'`, `cv36 = 5`: `k` with symmetric legs disconnected to the vertical bar, and without serifs.
+ `k = 'symmetric-connected-serifless'`, `cv36 = 6`: `k` with symmetric legs connected to the vertical bar, and without serifs.
+ `k = 'straight-top-left-serifed'`, `cv36 = 7`: `k` with serifs at top left.
+ `k = 'curly-top-left-serifed'`, `cv36 = 8`: Slightly curly `k`, like Iosevka 2.x, with serifs at top left.
+ `k = 'cursive-top-left-serifed'`, `cv36 = 9`: `k` with a cursive loop and serifs at top left.
+ `k = 'diagonal-tailed-cursive-top-left-serifed'`, `cv36 = 10`: `k` with a cursive loop, diagonal tail and serifs at top left.
+ `k = 'symmetric-touching-top-left-serifed'`, `cv36 = 11`: `k` with symmetric legs disconnected to the vertical bar and serifs at top left.
+ `k = 'symmetric-connected-top-left-serifed'`, `cv36 = 12`: `k` with symmetric legs connected to the vertical bar and serifs at top left.
+ `k = 'straight-bottom-right-serifed'`, `cv36 = 13`: `k` with serifs at bottom right.
+ `k = 'curly-bottom-right-serifed'`, `cv36 = 14`: Slightly curly `k`, like Iosevka 2.x, with serifs at bottom right.
+ `k = 'cursive-bottom-right-serifed'`, `cv36 = 15`: `k` with a cursive loop and serifs at bottom right.
+ `k = 'symmetric-touching-bottom-right-serifed'`, `cv36 = 16`: `k` with symmetric legs disconnected to the vertical bar and serifs at bottom right.
+ `k = 'symmetric-connected-bottom-right-serifed'`, `cv36 = 17`: `k` with symmetric legs connected to the vertical bar and serifs at bottom right.
+ `k = 'straight-top-left-and-bottom-right-serifed'`, `cv36 = 18`: `k` with serifs at top left and bottom right.
+ `k = 'curly-top-left-and-bottom-right-serifed'`, `cv36 = 19`: Slightly curly `k`, like Iosevka 2.x, with serifs at top left and bottom right.
+ `k = 'cursive-top-left-and-bottom-right-serifed'`, `cv36 = 20`: `k` with a cursive loop and serifs at top left and bottom right.
+ `k = 'symmetric-touching-top-left-and-bottom-right-serifed'`, `cv36 = 21`: `k` with symmetric legs disconnected to the vertical bar and serifs at top left and bottom right.
+ `k = 'symmetric-connected-top-left-and-bottom-right-serifed'`, `cv36 = 22`: `k` with symmetric legs connected to the vertical bar and serifs at top left and bottom right.
+ `k = 'straight-serifed'`, `cv36 = 23`: `k` with serifs.
+ `k = 'curly-serifed'`, `cv36 = 24`: Slightly curly `k`, like Iosevka 2.x, with serifs.
+ `k = 'cursive-serifed'`, `cv36 = 25`: `k` with a cursive loop and serifs.
+ `k = 'symmetric-touching-serifed'`, `cv36 = 26`: `k` with symmetric legs disconnected to the vertical bar and serifs.
+ `k = 'symmetric-connected-serifed'`, `cv36 = 27`: `k` with symmetric legs connected to the vertical bar and serifs.
+ `m = 'short-leg-tailed'`, `cv38 = 4`: `m` with shorter middle leg, like Ubuntu Mono, and a curly tail.
+ `m = 'earless-corner-double-arch'`, `cv38 = 5`: Earless (corner top-left) `m` with normal middle leg touching baseline.
+ `m = 'earless-corner-double-arch-short-leg'`, `cv38 = 6`: Earless (corner top-left) `m` with a shorter middle leg like Ubuntu Mono.
+ `m = 'earless-corner-double-arch-tailed'`, `cv38 = 7`: Earless (corner top-left) `m` with normal middle leg touching baseline, and a curly tail.
+ `m = 'earless-corner-double-arch-short-leg-tailed'`, `cv38 = 8`: Earless (corner top-left) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail.
+ `m = 'earless-rounded-double-arch'`, `cv38 = 9`: Earless (rounded top-left) `m` with normal middle leg touching baseline.
+ `m = 'earless-rounded-double-arch-short-leg'`, `cv38 = 10`: Earless (rounded top-left) `m` with a shorter middle leg like Ubuntu Mono.
+ `m = 'earless-rounded-double-arch-tailed'`, `cv38 = 11`: Earless (rounded top-left) `m` with normal middle leg touching baseline, and a curly tail.
+ `m = 'earless-rounded-double-arch-short-leg-tailed'`, `cv38 = 12`: Earless (rounded top-left) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail.
+ `m = 'earless-single-arch'`, `cv38 = 13`: Earless (single-arch) `m` with normal middle leg touching baseline.
+ `m = 'earless-single-arch-short-leg'`, `cv38 = 14`: Earless (single-arch) `m` with a shorter middle leg like Ubuntu Mono.
+ `m = 'earless-single-arch-tailed'`, `cv38 = 15`: Earless (single-arch) `m` with normal middle leg touching baseline, and a curly tail.
+ `m = 'earless-single-arch-short-leg-tailed'`, `cv38 = 16`: Earless (single-arch) `m` with a shorter middle leg like Ubuntu Mono, and a curly tail.
+ `m = 'top-left-serifed'`, `cv38 = 17`: `m` with serif at top left, normal middle leg touching baseline.
+ `m = 'short-leg-top-left-serifed'`, `cv38 = 18`: `m` with serif at top left, a shorter middle leg like Ubuntu Mono.
+ `m = 'tailed-top-left-serifed'`, `cv38 = 19`: `m` with serif at top left, normal middle leg touching baseline, and a curly tail.
+ `m = 'short-leg-tailed-top-left-serifed'`, `cv38 = 20`: `m` with serif at top left, a shorter middle leg like Ubuntu Mono, and a curly tail.
+ `m = 'top-left-and-bottom-right-serifed'`, `cv38 = 21`: `m` with serifs at top left and bottom right, normal middle leg touching baseline.
+ `m = 'short-leg-top-left-and-bottom-right-serifed'`, `cv38 = 22`: `m` with serifs at top left and bottom right, a shorter middle leg like Ubuntu Mono.
+ `cyrl-ze = 'unilateral-serifed'`, `cv59 = 2`: Cyrillic Lower Ze (`з`) with serif.
+ `cyrl-ze = 'bilateral-serifed'`, `cv59 = 3`: Cyrillic Lower Ze (`з`) with serif.
+ `cyrl-ze = 'unilateral-inward-serifed'`, `cv59 = 4`: Cyrillic Lower Ze (`з`) with inward serif.
+ `cyrl-ze = 'bilateral-inward-serifed'`, `cv59 = 5`: Cyrillic Lower Ze (`з`) with inward serif.
- Styles for `К` (Cyrillic Capital Ka):
+ `cyrl-capital-ka = 'straight-serifless'`, `cv60 = 1`: Cyrillic Capital Ka (`К`) with standard shape.
+ `cyrl-capital-ka = 'curly-serifless'`, `cv60 = 2`: Slightly curly Cyrillic Capital Ka (`К`) ,like Iosevka 2.x.
+ `cyrl-capital-ka = 'symmetric-touching-serifless'`, `cv60 = 3`: Cyrillic Capital Ka (`К`) with symmetric legs disconnected to the vertical bar.
+ `cyrl-capital-ka = 'symmetric-connected-serifless'`, `cv60 = 4`: Cyrillic Capital Ka (`К`) with symmetric legs connected to the vertical bar.
+ `cyrl-capital-ka = 'straight-top-left-serifed'`, `cv60 = 5`: Cyrillic Capital Ka (`К`) with standard shape and serifs at top left.
+ `cyrl-capital-ka = 'curly-top-left-serifed'`, `cv60 = 6`: Slightly curly Cyrillic Capital Ka (`К`) ,like Iosevka 2.x, with serifs at top left.
+ `cyrl-capital-ka = 'symmetric-touching-top-left-serifed'`, `cv60 = 7`: Cyrillic Capital Ka (`К`) with symmetric legs disconnected to the vertical bar, and serifs at top left.
+ `cyrl-capital-ka = 'symmetric-connected-top-left-serifed'`, `cv60 = 8`: Cyrillic Capital Ka (`К`) with symmetric legs connected to the vertical bar, and serifs at top left.
+ `cyrl-capital-ka = 'straight-bottom-right-serifed'`, `cv60 = 9`: Cyrillic Capital Ka (`К`) with standard shape and serifs at bottom right.
+ `cyrl-capital-ka = 'curly-bottom-right-serifed'`, `cv60 = 10`: Slightly curly Cyrillic Capital Ka (`К`) ,like Iosevka 2.x, with serifs at bottom right.
+ `cyrl-capital-ka = 'symmetric-touching-bottom-right-serifed'`, `cv60 = 11`: Cyrillic Capital Ka (`К`) with symmetric legs disconnected to the vertical bar, and serifs at bottom right.
+ `cyrl-capital-ka = 'symmetric-connected-bottom-right-serifed'`, `cv60 = 12`: Cyrillic Capital Ka (`К`) with symmetric legs connected to the vertical bar, and serifs at bottom right.
+ `cyrl-capital-ka = 'straight-serifed'`, `cv60 = 13`: Cyrillic Capital Ka (`К`) with standard shape and serifs.
+ `cyrl-capital-ka = 'curly-serifed'`, `cv60 = 14`: Slightly curly Cyrillic Capital Ka (`К`) ,like Iosevka 2.x, with serifs.
+ `cyrl-capital-ka = 'symmetric-touching-serifed'`, `cv60 = 15`: Cyrillic Capital Ka (`К`) with symmetric legs disconnected to the vertical bar, and serifs.
+ `cyrl-capital-ka = 'symmetric-connected-serifed'`, `cv60 = 16`: Cyrillic Capital Ka (`К`) with symmetric legs connected to the vertical bar, and serifs.
+ `cyrl-ka = 'straight-serifless'`, `cv61 = 1`: Cyrillic Lower Ka (`к`) with standard shape, and without serifs.
+ `cyrl-ka = 'curly-serifless'`, `cv61 = 2`: Slightly curly Cyrillic Lower Ka (`к`) ,like Iosevka 2.x, and without serifs.
+ `cyrl-ka = 'symmetric-touching-serifless'`, `cv61 = 3`: Cyrillic Lower Ka (`к`) with symmetric legs disconnected to the vertical bar, and without serifs.
+ `cyrl-ka = 'symmetric-connected-serifless'`, `cv61 = 4`: Cyrillic Lower Ka (`к`) with symmetric legs connected to the vertical bar, and without serifs.
+ `cyrl-ka = 'straight-top-left-serifed'`, `cv61 = 5`: Cyrillic Lower Ka (`к`) with standard shape and serifs at top left.
+ `cyrl-ka = 'curly-top-left-serifed'`, `cv61 = 6`: Slightly curly Cyrillic Lower Ka (`к`) ,like Iosevka 2.x, with serifs at top left.
+ `cyrl-ka = 'symmetric-touching-top-left-serifed'`, `cv61 = 7`: Cyrillic Lower Ka (`к`) with symmetric legs disconnected to the vertical bar, and serifs at top left.
+ `cyrl-ka = 'symmetric-connected-top-left-serifed'`, `cv61 = 8`: Cyrillic Lower Ka (`к`) with symmetric legs connected to the vertical bar, and serifs at top left.
+ `cyrl-ka = 'straight-bottom-right-serifed'`, `cv61 = 9`: Cyrillic Lower Ka (`к`) with standard shape and serifs at bottom right.
+ `cyrl-ka = 'curly-bottom-right-serifed'`, `cv61 = 10`: Slightly curly Cyrillic Lower Ka (`к`) ,like Iosevka 2.x, with serifs at bottom right.
+ `cyrl-ka = 'symmetric-touching-bottom-right-serifed'`, `cv61 = 11`: Cyrillic Lower Ka (`к`) with symmetric legs disconnected to the vertical bar, and serifs at bottom right.
+ `cyrl-ka = 'symmetric-connected-bottom-right-serifed'`, `cv61 = 12`: Cyrillic Lower Ka (`к`) with symmetric legs connected to the vertical bar, and serifs at bottom right.
+ `cyrl-ka = 'straight-serifed'`, `cv61 = 13`: Cyrillic Lower Ka (`к`) with standard shape and serifs.
+ `cyrl-ka = 'curly-serifed'`, `cv61 = 14`: Slightly curly Cyrillic Lower Ka (`к`) ,like Iosevka 2.x, with serifs.
+ `cyrl-ka = 'symmetric-touching-serifed'`, `cv61 = 15`: Cyrillic Lower Ka (`к`) with symmetric legs disconnected to the vertical bar, and serifs.
+ `cyrl-ka = 'symmetric-connected-serifed'`, `cv61 = 16`: Cyrillic Lower Ka (`к`) with symmetric legs connected to the vertical bar, and serifs.
- Styles for `л` (Cyrillic Lower El):
+ `cyrl-el = 'straight'`, `cv62 = 1`: Cyrillic Lower El (`л`) with standard shape.
+ `cyrl-el = 'tailed'`, `cv62 = 2`: Cyrillic Lower El (`л`) with tail shape.
- Styles for `н` (Cyrillic Lower En):
+ `cyrl-en = 'serifless'`, `cv63 = 1`: Cyrillic Lower En (`н`) with standard shape.
+ `cyrl-en = 'tailed-serifless'`, `cv63 = 2`: Cyrillic Lower En (`н`) with tail.
+ `cyrl-en = 'top-left-serifed'`, `cv63 = 3`: Cyrillic Lower En (`н`) with outward serifs only at top left.
+ `cyrl-en = 'tailed-top-left-serifed'`, `cv63 = 4`: Cyrillic Lower En (`н`) with tail and outward serifs only at top left.
+ `cyrl-en = 'top-left-bottom-right-serifed'`, `cv63 = 5`: Cyrillic Lower En (`н`) with outward serifs only at top left and bottom right.
+ `cyrl-en = 'serifed'`, `cv63 = 6`: Cyrillic Lower En (`н`) with full serifs.
+ `cyrl-en = 'tailed-serifed'`, `cv63 = 7`: Cyrillic Lower En (`н`) with tail and full serifs.
- Styles for `ф` (Cyrillic Lower Ef):
+ `cyrl-ef = 'serifless'`, `cv64 = 1`: Cyrillic Lower Ef (`ф`) with standard shape and without serifs.
+ `cyrl-ef = 'cursive'`, `cv64 = 2`: Cyrillic Lower Ef (`ф`) with cursive shape.
+ `cyrl-ef = 'top-serifed'`, `cv64 = 3`: Cyrillic Lower Ef (`ф`) with standard shape and serif at top.
+ `cyrl-ef = 'serifed'`, `cv64 = 4`: Cyrillic Lower Ef (`ф`) with standard shape and serifs at top and bottom.
- Styles for `ч` (Cyrillic Lower Che):
+ `cyrl-che = 'standard'`, `cv65 = 1`: Cyrillic Lower Che (`ч`) with standard shape.
+ `cyrl-che = 'tailed'`, `cv65 = 2`: Cyrillic Lower Che (`ч`) with tail.
+ `percent = 'rings-segmented-slash'`, `cv93 = 2`: Percent `%` with rings and segmented slash.
+ `percent = 'rings-continuous-slash'`, `cv93 = 3`: Percent `%` with rings and continuous bar.
+ `percent = 'rings-continuous-slash-also-connected'`, `cv93 = 4`: Percent `%` with rings and continuous bar and the slash in `%` is also connected to the top-left ring.
+ `ascii-grave = 'straight'`, `cv97 = 1`: Show ASCII grave (`` ` ``) as short diagonal straight bar..
+ `ascii-grave = 'raised-inverse-comma'`, `cv97 = 2`: Show ASCII grave (`` ` ``) as raised comma..
+ `ascii-grave = 'raised-turn-comma'`, `cv97 = 3`: Show ASCII grave (`` ` ``) as raised turned comma, identical to curly open single quote symbols (U+2018)..
Subsection `weights` is used to change the weight grades that the custom family needs. It is a dictionary of sub-objects with properties:
*`shape`: Integer, configures the weight grade of the glyphs' shapes.
*`menu`: Integer, configures the weight grade used when naming fonts.
*`css`: Integer, configures the weight grade used in web font CSS.
Subsection `widths` is used to change the weight grades that the custom family needs. It is a dictionary of sub-objects with properties:
*`shape`: Integer, configures the width of the glyphs' shapes, measured in 1/1000 em.
*`menu`: Integer, configures the width grade used when naming fonts. The valid values are `1` to `9`, inclusive.
*`css`: String, configures the [font-stretch](https://developer.mozilla.org/en-US/docs/Web/CSS/font-stretch) value used in web font CSS.
Subsection `slopes` is a simple string-to-string dictionary maps slopes (`upright`, `italic` or `oblique`) to [CSS font-style](https://developer.mozilla.org/zh-CN/docs/Web/CSS/font-style) values, represented in string.
#### Compatibility Ligatures
Certain software, notably Emacs, relies on pre-encoded ligatures instead of OpenType to provide ligations. Iosevka could be configured with additional subsection `compatibility-ligatures`, being an array of records with following fields:
*`unicode`: The PUA code point being assigned to.
*`featureTag`: The feature tag to compute ligations.
Subsection `metric-override` provides ability to override certain metric values, if you *reallly* want to. Adding this section is **strongly discouraged** as it may introduce broken geometry or broken shapes.
| Property | Unit | Default Value | Meaning |
|----------|------|---------|----------|
| `cap` | emu | 735 | Height of `H`. |
| `xheight` | emu | 530 | Height of `x`. |
| `sb` | emu | (*varies, 60 for Regular*) | Width of common side-bearings. |
| `winMetricAscenderPad` | emu | 0 | Additional pad for Win metrics’ ascender to avoid clipping in legacy Windows applications. |
| `winMetricDescenderPad` | emu | 0 | Additional pad for Win metrics’ descender to avoid clipping in legacy Windows applications. |
| `powerlineScaleX`,`powerlineScaleY` | (*ratio*) | 1 | X and Y scale of Powerline glyphs. |
| `powerlineShiftX`, `powerlineShiftY` | emu | 0 | X and Y shift of Powerline glyphs. |
| `onumZeroHeightRatio` | (*ratio*) | 1.145 | Ratio of height of `0` under `onum`feature, to the height of `x`. |
Sub-subsection `metric-override.multiplies` and `metric-override.adds` could be used to override the value by multiplying a scale to the default value, then add a shift to it further. The following configuration