Koto is a simple and expressive programming language, usable as an extension
language for Rust applications, or as a standalone scripting language.
print 'Hello, World!'
square = |n| n * n
'8 squared is {square 8}'
(2, 4, 6, 8)
.each square
.to_list()
Koto was started in 2020 with the goal to create an ideal language for adding
scripting to applications developed in Rust. Of particular interest were
interactive systems like animation or game engines, where rapid iteration
demands a lightweight programming interface that compiles and runs quickly.
The guiding design principle is that Koto should be simple,
conceptually as well as visually. To that end, a focus throughout the language's
development has been on reducing syntax noise and minimizing core concepts
wherever possible.
Koto is a new language and should be considered to have a prominent
'use at your own risk' disclaimer.
With that said, Koto is starting to feel more stable, and although we're still
some way from a 1.0
release,
breaking changes are becoming much less frequent.
Early adopter feedback is invaluable, so if you do try out Koto please
get in touch and share your experiences, positive or otherwise!
You're welcome to reach out in Discussions,
or on Discord, or by opening an issue.
You can read the guide,
try it out in the playground or
the CLI, and see how well it works in your
existing Rust application.
- Simple and clean syntax: Koto aims to reduce visual noise and cognitive
load wherever possible, while still enabling full intuitive control of your
program.
- Easy integration with Rust: Koto is implemented in Rust, and is designed
to be easily added to existing applications.
Custom value types can be added to the Koto runtime by implementing the
KotoObject
trait.
- Fast compilation: The compiler has been written with rapid iteration in
mind, with the goal of compiling a script as quickly as possible.
- Rich iterator support: Koto has a focus on using iterators for data
manipulation, with a large collection of iterator generators, adaptors,
and consumers available in the core library's iterator module.
- Built-in testing: Automated testing has
first-class support in Koto, making it natural to write tests along
with your code.
- Tooling: Plugins offering editor support for Koto.
[Tree-sitter][#tree-sitter] and [LSP][#lsp] implementations are also available
or linting are still topics for the future.
- Type Checking: Koto is currently a dynamically typed language without
support for type checking, but type hints could be added in the
future.
- async tasks: Koto doesn't have support for asynchronous tasks,
support could be added in the future.
- Integration with other languages: There's currently no C API for Koto,
which would allow it to be integrated with other languages.
Koto was influenced by and is indebted to many other languages.
- Scope: Lua was a strong influence on Koto, showing the strength of
a minimalistic feature set in a companion scripting language.
- Syntax: Coffeescript and Moonscript show how
languages can be easy on the eye by minimizing visual distractions,
while also managing to avoid inexpressive terseness.
- Language Design: Although the syntax and core purpose is very different,
Rust had a huge impact on Koto's design, in particular Rust's
rich iterator support was a major influence on emphasizing
the role of iterators in Koto.
Plugins that provide Koto support is available for the following editors:
A Tree-sitter implementation is
available here.
If you're using Neovim then it's easy to set up with
nvim-treesitter.
An implementation of the Language Server Protocol for Koto is
available here.