Comprehensive TeX Archive Network

Direc­tory macros/latex/contrib/l3kernel


3 Pro­gram­ming Con­ven­tions

Re­lease 2017/03/18 (r7019)


The files of the l3kernel bun­dle pro­vide a low-level API for pro­gram­mers with spe­cial syn­tax con­ven­tions, com­pletely sep­a­rat­ing it from doc­u­ment level syn­tax. Hence, the com­mands pro­vided are not in­tended for use at the doc­u­ment level nor for use in de­scrib­ing de­sign lay­outs in doc­u­ment class files.

This API pro­vides the foun­da­tion on which the 3 ker­nel and other ad­vanced ex­ten­sions are built. Spe­cial care has been taken so that they can be used within a con­text as reg­u­lar pack­ages.

While l3kernel is still ex­per­i­men­tal, the bun­dle is now re­garded as broadly sta­ble. The syn­tax con­ven­tions and func­tions pro­vided are now ready for wider use. There may still be changes to some func­tions, but these will be mi­nor when com­pared to the scope of l3kernel.

Pro­gram­mers mak­ing use of l3kernel are strongly en­cour­aged to sub­scribe to the -L mail­ing list (see be­low): an­nounce­ments con­cern­ing the dep­re­ca­tion or mod­i­fi­ca­tion of func­tions are made on the list.


The l3kernel bun­dle re­quires the ex­ten­sions and ad­di­tional func­tion­al­ity to sup­port string com­par­isons, ex­pand­able char­ac­ter gen­er­a­tion with ar­bi­trary cat­e­gory codes (for Uni­code en­gines) and PDF sup­port prim­i­tives (where di­rect PDF gen­er­a­tion is used). The bun­dle will there­fore only work with the fol­low­ing en­gines:

  • pdf v1.40 or later
  • v0.9994 or later
  • Lua v0.70 or later
  • e-(u)p from mid-2012 on­ward

pdf v1.40 was re­leased in 2007, and so any re­cent dis­tri­bu­tion will sup­port l3kernel. Both and Lua have de­vel­oped more ac­tively over the past few years, and for this rea­son only re­cent re­leases of these en­gines are sup­ported.

(Engine de­vel­op­ers should con­tact the team for de­tailed dis­cus­sion about prim­i­tive re­quire­ments.)


Dis­cus­sion con­cern­ing the ap­proach, sug­ges­tions for im­prove­ments, changes, ad­di­tions, etc. should be ad­dressed to the list -L.

You can sub­scribe to this list by send­ing mail to


with the body con­tain­ing

subscribe LATEX-L  <Your-First-Name> <Your-Second-Name>


The is­sue tracker for 3 is cur­rently lo­cated on GitHub.

Please re­port spe­cific is­sues with 3 code there; more gen­eral dis­cus­sion should be di­rected to the -L list.

The 3 Project

Devel­op­ment of 3 is car­ried out by The 3 Project. Cur­rently, the team mem­bers are

  • Jo­hannes Braams
  • David Carlisle
  • Robin Fair­bairns
  • Morten Høgholm
  • Bruno Le Floch
  • Frank Mit­tel­bach
  • Will Robert­son
  • Chris Row­ley
  • Rainer Schöpf
  • Joseph Wright

Former mem­bers of The 3 Project team were

  • Michael Downes
  • Denys Duchier
  • Alan Jef­frey
  • Thomas Lotze
  • Martin Schröder

The de­vel­op­ment team can be con­tacted by e-mail: <la­tex-team@la­tex-project.org>; for gen­eral 3 dis­cus­sion the -L list should be used.

Copy­right (C) 1998-2012,2015-2017 The LaTeX3 Project
All rights re­served.

Down­load the con­tents of this pack­age in one zip archive (7.5M).

l3k­er­nel – 3 pro­gram­ming con­ven­tions

The l3k­er­nel bun­dle pro­vides an im­ple­men­ta­tion of the 3 pro­gram­mers’ in­ter­face, as a set of pack­ages that run un­der 2e. The in­ter­face pro­vides the foun­da­tion on which the 3 ker­nel and other fu­ture code are built: it is an API for pro­gram­mers. The pack­ages are set up so that the 3 con­ven­tions can be used with reg­u­lar 2e pack­ages.

All the files of the bun­dle are also avail­able in the project’s Sub­ver­sion (SVN) repos­i­tory

Home pagehttp://www.la­tex-project.org/code.html
Ver­sionSVN 7019 2017-03-18
Li­cense The Project Public Li­cense 1.3
Copy­right1990–2017 The Project
Main­tainerThe Team
TDS archivel3kernel.tds.zip
Con­tained inTeX Live as l3k­er­nel
MiKTeX as l3k­er­nel
Topics de­vel­op­ing ver­sion of new soft­ware
macros to build a for­mat
work done for the project to up­grade
See also l3packages
Guest Book Sitemap Contact Contact Author