This is the repository of tl, the compiler for Teal, a typed dialect of Lua.
The core compiler has no dependencies and is implemented as a single tl.lua
file which you can load into your projects. Running tl.loader()
will add
Teal support to your package loader, meaning that require()
will be able to
run .tl
files.
Here are videos of talks given at FOSDEM 2019, 2020 and 2021 which discuss the history of Lua and types, outline the motivations behind Teal and talk about the project's progress:
And here's an update from early 2024, describing the process that eventually resulted in Teal Spring '24, later in the year:
Check also the tutorial to get started with an overview of the language.
Install Lua and LuaRocks, then run:
luarocks install tl
This should put a tl
command in your $PATH
(run eval $(luarocks path)
if
the LuaRocks-installed binaries are not in your $PATH
).
Teal works with Lua 5.1-5.4, including LuaJIT.
Alternatively, you can find pre-compiled binaries for Linux x86_64 and Windows x86_64 at the releases page. The packages contain a stand-alone executable that can run Teal programs (without the need of a separate Lua installation) and also compile them to Lua.
You can give Teal a try directly from your browser with the Teal Playground! It compiles Teal into Lua using Fengari, a Lua VM implemented in JavaScript, so everything runs on the client.
Once tl
is in your path, there are a few subcommands:
tl run script.tl
will run a Teal script.tl check module.tl
will type check a Teal module, report any errors and quit.tl gen module.tl
will check for syntax errors and generate amodule.lua
file in plain Lua with all type annotations stripped.tl warnings
will list all warnings the compiler can generate.
tl
also supports some compiler options.
These can either be specified on the command line or inside a tlconfig.lua file at the root of your project.
To build whole projects, you probably won't want to run tl
on each
file individually. We recommend using Cyan,
the build tool designed for Teal.
You can either pre-compile your .tl
files into .lua
, or you can add
the tl.lua
module into your project and activate the Teal package loader:
local tl = require("tl")
tl.loader()
Once the package loader is activated, your require()
calls can load and
compile .tl
files on-the-fly.
You can learn more about programming and using Teal in the docs/ folder. The tutorial is a great place to start!
tl
supports declaration files, which can be used to annotate the types
of third-party Lua libraries.
We have a collaborative repository for declaration files at https://github.com/teal-language/teal-types — check it out and make your contribution!
Teal language support is currently available for Vim, Visual Studio Code and lite with linter support.
- Join the chat on Gitter!
- You can also join via Matrix at #teal-language_community:gitter.im
Teal is a project started by Hisham Muhammad, developed by a growing number of contributors and is written using Teal itself!
License is MIT, the same as Lua.