<a href="https://github.com/skosch/Crimson">Crimson</a> is useful for experimenting with the new approach, because it’s free and defines few of the features it could support. Here are the features defined in its latest version:

           | r | i | b | bi | sb si |
    |------+---+---+---+----+-------|
    | c2sc | ✓ | ✓ | ✓ |    |       |
    | kern | ✓ | ✓ | ✓ | ✓  | ✓     |
    | liga |   |   |   | ✓  |       |
    | onum | ✓ | ✓ |   | ✓  |       |
    | ordn | ✓ |   |   |    |       |
    | pnum | ✓ | ✓ |   | ✓  | ✓     |
    | smcp | ✓ | ✓ | ✓ |    |       |
    | zero | ✓ |   |   |    |       |

**Ligatures**

It’s most surprising that `liga` is defined only in the bold italic face, so let’s fix that first.

Here’s Crimson before we add the feature:

    \documentclass{article}
    \usepackage{fontspec}
    \setmainfont{Crimson}
    \begin{document}
    The five baffled officials flew off.

    \textit{The five baffled officials flew off.}
    \end{document}

[![output of example][1]][1]

Now here’s the fix:

    \documentclass{article}
    \usepackage{fontspec}
    \directlua{
    fonts.handlers.otf.addfeature {
	    name = "liga",
	    {
	        type = "ligature",
	        data = {
		        ['f_f'] = { "f", "f" },
		        ['f_i'] = { "f", "i" },
		        ['f_f_i'] = { "f", "f", "i" },
		        ['f_l'] = { "f", "l" },
		        ['f_f_l'] = { "f", "f", "l" },
		        ['T_h'] = { "T", "h" },
	        }
	    },
	    "some ligatures"
      }
    }
    \setmainfont{Crimson}
    \begin{document}
    The five baffled officials flew off.

    \textit{The five baffled officials flew off.}
    \end{document}

[![output of second example][2]][2]

In `['f_i'] = { "f", "i" }`, `['f_i']` is the glyph name of the ligature, and `{ "f", "i" }` are the letters to be ligatured. So if your font calls the ligature “fi” rather than “f_i”, you should write `['fi'] = { "f", "i" }`.

**Stylistic Alternates**

Crimson has some alternate glyphs which cry out for a `calt` or `salt` feature. I haven’t yet figured out how `calt` works, even with feature files, so let’s do something easier, using `salt` to get a long-tailed Q:

    \documentclass{article}
    \usepackage{fontspec}
    \directlua{
    fonts.handlers.otf.addfeature {
        name = "salt",
        {
            type = "substitution",
            data = {
                Q = "Q.alt01",
            }
        },
        "long-tailed Q"
      }
    }
    \setmainfont{Crimson}
    \begin{document}
    Question

    \addfontfeature{RawFeature=+salt}
    Question
    \end{document}

[![output of alternates example][3]][3]

I don’t really understand what I’ve done, and there may be better ways (which I’d be glad to learn about), but at least it works. Among other features Crimson could but doesn’t define are `subs` and `sups`: the necessary glyphs are present in the roman face. But no luck yet defining `subs` and `sups`.


  [1]: https://i.sstatic.net/KHF6z.png
  [2]: https://i.sstatic.net/kO7ra.png
  [3]: https://i.sstatic.net/tLyEf.png