== LuaMetaTeX

This is a follow up on the LuaTeX project. The source is considered part of the ConTeXt distribution
and managed by the ConTeXt development team and the ConTeXt user group. That way we can guarantee
that the engine and this TeX macro package work together as expected. The idea is that users can
easily compile the source themselves and that way have a guaranteed long term (minimal) TeX based
installation. Because the management scripts are in Lua, only one binary is needed to serve the
ConTeXt distribution.

In the source code we try to stay close to the ancestors, LuaTeX, pdfTeX, eTeX and TeX, but in the
meantime due to additions there is quite some diverge. There are new primitives and submechanisms,
there is more control over the inner workings, font handling is mostly delegated to Lua and there
is no built-in backend. The code base is all-inclusive and has no (nor will have) dependencies on
external libraries.

Performance and memory consumption have been optimized and the additions (compared to LuaTeX) don't
have a negative impact. In spite of the extensions, we consider this a more lightweight version of
its ancestor and want to keep it that way. There are a few optional interfaces to the outside world
but ConTeXt will never depend on them for regular usage.

Version numbering starts 2.00 so that there is no confusion with LuaTeX where the stable 1.00+
version numbers now can bump with the yearly TeXlive updates. Backporting features to LuaTeX is yet
undecided (also because the codebase is now too different). The internal MetaPost library is an
enhanced version of the official one that ships with LuaTeX. Here we started with number 3.00 and
to what extend there will be backports to the 2.00+ library is yet unknown. We use Lua 5.4+ and try
to keep up to date with the latest greatest, also because the LuaMetaTeX-ConTeXt combination makes
for nice test enviroment. Starting with LuaMetaTeX version 2.10 the interfaces are considered
stable. Although we will fix bugs as fast as possible, we might end up with the same slow-paced
release cycle as traditional TeX.

Bugs can be reported to the ConTeXt mailing lists (support or development) or the team members. Such
a report should come with a (MEW) ConTeXt .tex file that illustrates the issue. The code repository
is managed by the ConTeXt user group and its compile farm team (aka contextgarden built bot).

* reference implementation : https://github.com/contextgarden/context.git

* compile farm subset      : https://github.com/contextgarden/luametatex.git 

* unstable work copy       : https://github.com/contextgarden/luametatex/tree/work

The first repository has what we use in ConTeXt. The second normally has the same code and is used 
by the compile farm. The third repository is (can) be used by us for testing new features and playing
around with the code. That one is not to be used because it can have issues and we don't run the test 
suite every time we submit; code can come and go. Accumulated patches and additions in work become 
a combined push into main after which we just wipe work and make a new clone which will then be used
by the compile farm. Normally that also comes with incrementing the version number. The reason why 
work is not kept local is because that way we can check if the compilation works, for which it has 
to be public so that the compile farm can access it conveniently. 

All kind of aspects of the LuaMetaTeX engine, its development, experiment, ideas and implementation
have been (and are) reported in user group publications aas well as several documents in the ConTeXt
distribution. The mailing list archives and contextgarden wiki are also a source of information.

Hans Hagen

image::luametatex.svg[LuaMetaTeX,100%]
