**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*.
* **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.
- 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).
* **OpenBSD**: Run `pkg_info -Q iosevka` to see which Iosevka packages are available. Use `pkg_add` to install the chosen package(s).
## Features
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).
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 `cv11` to `2` 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.
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:
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.
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.
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.
-`ss01`: Set character variant to “Andale Mono Style”.
-`ss02`: Set character variant to “Anonymous Pro Style”.
-`ss03`: Set character variant to “Consolas Style”.
-`ss04`: Set character variant to “Menlo Style”.
-`ss05`: Set character variant to “Fira Mono Style”.
-`ss06`: Set character variant to “Liberation Mono Style”.
-`ss07`: Set character variant to “Monaco Style”.
-`ss08`: Set character variant to “Pragmata Pro Style”.
-`ss09`: Set character variant to “Source Code Pro Style”.
-`ss10`: Set character variant to “Envy Code R Style”.
-`ss11`: Set character variant to “X Window Style”.
-`ss12`: Set character variant to “Ubuntu Mono Style”.
-`ss13`: Set character variant to “Lucida Style”.
-`ss14`: Set character variant to “JetBrains Mono Style”.
-`ss15`: Set character variant to “IBM Plex Mono Style”.
-`ss16`: Set character variant to “PT Mono Style”.
-`ss17`: Set character variant to “Recursive Mono Style”.
-`ss20`: Set character variant to “Curly Style”.
<!-- END Section-Stylistic-Sets -->
<!-- BEGIN Section-Cherry-Picking-Styles -->
<!-- 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 = 'more-asymmetric'`, `cv02 = 2`: `B` in more asymmetric proportion to differentiate with `8`.
+ `capital-b = 'standard-unilateral-motion-serifed'`, `cv02 = 3`: `B` in near-symmetric proportion with motion serifs at both top and bottom.
+ `capital-b = 'more-asymmetric-unilateral-motion-serifed'`, `cv02 = 4`: `B` in more asymmetric proportion with motion serifs at top.
+ `capital-b = 'standard-bilateral-motion-serifed'`, `cv02 = 5`: `B` in near-symmetric proportion with motion serifs at both top and bottom.
+ `capital-b = 'more-asymmetric-bilateral-motion-serifed'`, `cv02 = 6`: `B` in more asymmetric proportion with motion serifs at top.
+ `capital-b = 'standard-interrupted'`, `cv02 = 7`: `B` in near-symmetric proportion with interupted middle bar.
+ `capital-b = 'more-asymmetric-interrupted'`, `cv02 = 8`: `B` in more asymmetric proportion to differentiate with `8`, with interupted middle bar.
+ `capital-b = 'standard-interrupted-unilateral-motion-serifed'`, `cv02 = 9`: `B` in near-symmetric proportion with interupted middle bar and motion serifs at both top and bottom.
+ `capital-b = 'more-asymmetric-interrupted-unilateral-motion-serifed'`, `cv02 = 10`: `B` in more asymmetric proportion with interupted middle bar and `8` with motion serifs at top.
+ `capital-b = 'standard-interrupted-bilateral-motion-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-motion-serifed'`, `cv02 = 12`: `B` in more asymmetric proportion with interupted middle bar and `8` with motion serifs at top.
+ `capital-w = 'curly-motion-serifed'`, `cv22 = 7`: Slightly curly `W`, like Iosevka 2.x, with motion serifs.
+ `capital-w = 'straight-flat-top-motion-serifed'`, `cv22 = 8`: Standard, straight `W`, and the middle is forced to be aligned the top, with motion serifs.
+ `capital-w = 'straight-double-v-motion-serifed'`, `cv22 = 9`: Straight `W` looks like double V, with motion serifs.
+ `f = 'serifless-crossbar-at-x-height'`, `cv31 = 6`: `f` without bottom serif, hook or exension; crossbar is placed right at X-height.
+ `f = 'serifed-crossbar-at-x-height'`, `cv31 = 7`: `f` with bottom serif; crossbar is placed right at X-height.
+ `f = 'tailed-crossbar-at-x-height'`, `cv31 = 8`: `f` with bottom hook; crossbar is placed right at X-height.
+ `f = 'extended-crossbar-at-x-height'`, `cv31 = 9`: `f` with bar extended to descender; crossbar is placed right at X-height.
+ `f = 'diagonal-tailed-crossbar-at-x-height'`, `cv31 = 10`: `f` with bottom diagonal tail; crossbar is placed right at X-height.
+ `f = 'flat-hook'`, `cv31 = 11`: `f` with flat top hook, without bottom serif, hook or exension.
+ `f = 'flat-hook-serifed'`, `cv31 = 12`: `f` with flat top hook and bottom serif.
+ `f = 'flat-hook-tailed'`, `cv31 = 13`: `f` with flat top hook and bottom hook (default for Italic).
+ `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.
+ `l = 'serifed-diagonal-tailed'`, `cv37 = 12`: `l` with top serif and diagonal tail.
- Styles for `m`:
+ `m = 'normal'`, `cv38 = 1`: `m` with normal middle leg, touching the baseline (default).
+ `m = 'short-leg'`, `cv38 = 2`: `m` with shorter middle leg, like Ubuntu Mono.
+ `m = 'tailed'`, `cv38 = 3`: `m` with normal middle leg, touching the baseline, and a curly tail.
+ `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 = 'motion-serifed'`, `cv38 = 17`: `m` with motion serifs, normal middle leg touching baseline.
+ `m = 'short-leg-motion-serifed'`, `cv38 = 18`: `m` with motion serifs, a shorter middle leg like Ubuntu Mono.
+ `m = 'motion-serifed-tailed'`, `cv38 = 19`: `m` with motion serifs, normal middle leg touching baseline, and a curly tail.
+ `m = 'short-leg-motion-serifed-tailed'`, `cv38 = 20`: `m` with motion serifs, a shorter middle leg like Ubuntu Mono, and a curly tail.
+ `lower-lambda = 'straight-turn'`, `cv58 = 2`: Greek small Lambda (`λ`) with straight upper and a tail turns leftward.
+ `lower-lambda = 'curly'`, `cv58 = 3`: More curly Greek small Lambda (`λ`), like Iosevka 2.x.
+ `lower-lambda = 'curly-turn'`, `cv58 = 4`: More curly Greek small Lambda (`λ`), like Iosevka 2.x, with a tail turns leftward.
- Styles for `к` (Cyrillic Ka):
+ `cyrl-ka = 'straight'`, `cv59 = 1`: Cyrillic Ka (`К`/`к`) with standard shape.
+ `cyrl-ka = 'curly'`, `cv59 = 2`: Slightly curly Cyrillic Ka (`К`/`к`) , like Iosevka 2.x.
+ `cyrl-ka = 'symmetric-touching'`, `cv59 = 3`: Cyrillic Ka (`К`/`к`) with symmetric legs disconnected to the vertical bar.
+ `cyrl-ka = 'symmetric-connected'`, `cv59 = 4`: Cyrillic Ka (`К`/`к`) with symmetric legs connected to the vertical bar (default).
+ `cyrl-ka = 'straight-motion-serifed'`, `cv59 = 5`: Cyrillic Ka (`К`/`к`) with standard shape and motion serifs.
+ `cyrl-ka = 'curly-motion-serifed'`, `cv59 = 6`: Slightly curly Cyrillic Ka (`К`/`к`) , like Iosevka 2.x, with motion serifs.
+ `cyrl-ka = 'symmetric-touching-motion-serifed'`, `cv59 = 7`: Cyrillic Ka (`К`/`к`) with symmetric legs disconnected to the vertical bar, and motion serifs.
+ `cyrl-ka = 'symmetric-connected-motion-serifed'`, `cv59 = 8`: Cyrillic Ka (`К`/`к`) with symmetric legs connected to the vertical bar, and motion serifs.
- Styles for `У` (Cyrillic Capital U):
+ `cyrl-capital-u = 'straight'`, `cv60 = 1`: Cyrillic capital U (`У`) that is fully straight (default for Sans).
+ `cyrl-capital-u = 'straight-turn'`, `cv60 = 2`: Cyrillic capital U (`У`) with straight upper and a tail turns leftward (default for Slab).
+ `cyrl-capital-u = 'curly'`, `cv60 = 3`: More curly Cyrillic capital U (`У`), like Iosevka 2.x.
+ `cyrl-capital-u = 'curly-turn'`, `cv60 = 4`: More curly Cyrillic capital U (`У`), like Iosevka 2.x, with a tail turns leftward.
+ `cyrl-capital-u = 'cursive'`, `cv60 = 5`: Cursive-like Cyrillic capital U (`У`).
+ `cyrl-capital-u = 'cursive-flat-hook'`, `cv60 = 6`: Cursive-like Cyrillic capital U (`У`) with flat terminal hook.
- Styles for `0`:
+ `zero = 'unslashed'`, `cv61 = 1`: O-like Zero (`0`).
+ `percent = 'rings-segmented-slash'`, `cv83 = 2`: Percent `%` with rings and segmented slash (default).
+ `percent = 'rings-continuous-slash'`, `cv83 = 3`: Percent `%` with rings and continuous bar.
+ `percent = 'rings-continuous-slash-also-connected'`, `cv83 = 4`: Percent `%` with rings and continuous bar and the slash in `%` is also connected to the top-left ring.
- Styles for `|`:
+ `bar = 'natural-slope'`, `cv84 = 1`: Bar punctuations (`|`) has a natural slope under italics and oblique (default).
+ `bar = 'force-upright'`, `cv84 = 2`: Bar punctuations (`|`) is forced upright under italics and oblique.
- Styles for `<=`, `>=`:
+ `lig-ltgteq = 'flat'`, `cv85 = 1`: The lower bar of `<=` and `>=` ligation is flat (default).
+ `lig-ltgteq = 'slanted'`, `cv85 = 2`: The lower bar of `<=` and `>=` ligation is slanted.
- Styles for `'`:
+ `ascii-single-quote = 'straight'`, `cv86 = 1`: Show ASCII quote (`'`) as short vertical straight bar. (default).
+ `ascii-single-quote = 'raised-comma'`, `cv86 = 2`: Show ASCII quote (`'`) as raised comma..
- Styles for `` ` ``:
+ `ascii-grave = 'straight'`, `cv87 = 1`: Show ASCII grave (`` ` ``) as short diagonal straight bar. (default).
+ `ascii-grave = 'raised-inverse-comma'`, `cv87 = 2`: Show ASCII grave (`` ` ``) as raised comma..
+ `ascii-grave = 'raised-turn-comma'`, `cv87 = 3`: Show ASCII grave (`` ` ``) as raised turned comma, identical to curly open single quote symbols (U+2018)..
+ `question = 'corner'`, `cv88 = 2`: Question mark (`?`) with a corner at middle.
+ `question = 'corner-flat-hooked'`, `cv88 = 3`: Question mark (`?`) with a corner at middle and flat hook.
<!-- END Section-Cherry-Picking-Styles -->
#### Configuring Weights, Widths and Slopes
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
Once you narrow down your font choice of family (`Droid Sans`, `Inconsolata`, etc) and style (`bold`, `italic`, etc) you have 2 main choices:
#### `Option 1: Download already patched font`
* download an already patched font from the `complete` folder
* This is most likely the one you want. It includes **all** of the glyphs from all of the glyph sets. Only caution here is that some fonts have glyphs in the _same_ code point so to include everything some had to be moved to alternate code points.
#### `Option 2: Patch your own font`
* patch your own variations with the various options provided by the font patcher (see each font's readme for full list of combinations available)
* This is the option you want if the font you use is _not_ already included or you want maximum control of what's included
* This contains a list of _all permutations_ of the various glyphs. E.g. You want the font with only [Octicons][octicons] or you want the font with just [Font Awesome][font-awesome] and [Devicons][vorillaz-devicons]. The goal is to provide every combination possible in this folder.
For more information see: [The FAQ](https://github.com/ryanoasis/nerd-fonts/wiki/FAQ-and-Troubleshooting#which-font)