_model: page
---
title: telml
---
body:
**TeLML** (short for _TeX-Like Markup Language_) is a markup language I created for personal projects, specifically to serve as a lightweight but extensible markup language. I've implemented it in several languages, but the current reference implementation is in Haskell, and can be found [on Gitub](https://github.com/aisamanra/telml). In addition to using it locally as a markup language for projects-in-progress, it is also the markup language that powers [What Happens When Computer](https://what.happens.when.computer/), my short-posts-on-technical-topics blog.
The core of TeLML is the _tag_, which looks mostly like a LaTeX command invocation (e.g. `\em{foo}`), with the following major differences:
- All tags in TeLML have a _mandatory_ payload, which is surrounded in curly braces. Thus, `\br` is not a valid TeLML tag, but `\br{}` is.
- All tags in TeLML can have multiple "arguments" separated by vertical bars, so a tag with multiple values might look like `\link{https://duckduckgo.com/|this}`.
- All special characters can be escaped with another backslash, so that `\\br\{\}` is the TeLML transcription of the string `\br{}` rather than a nullary tag.
The TeLML format is split into two parts: the _core_ format, which only defines the data model and how to parse and serialize it, and the _markup_ format, which adds a set of HTML-like basic tags on top (including inline tags like `\em{...}` and `\strong{...}` as well as block-level tags like `\blockquote{...}` and `\code{...}`.) The libraries linked to above also allow uses that are _extensible_, in which new bespoke tags can be added for particular purposes.
For a more thorough description, see the following links:
- [A description of the exact grammar and data model used in TeLML](https://git.gdritter.com/telml/blob/master/telml/README.md)
- [The TeLML markup module](https://git.gdritter.com/telml/blob/master/telml-markup/README.md) that defines the tag semantics as well as an API for adding new custom tags
- [A document giving short rationale for why I wrote this instead of using another markup language](https://git.gdritter.com/telml/blob/master/README.md)