embedded-scripting-languages
                                
                                 embedded-scripting-languages copied to clipboard
                                
                                    embedded-scripting-languages copied to clipboard
                            
                            
                            
                        A list of embedded scripting languages
Embedded scripting languages
The following is a list of reasonably mature open source embedded scripting languages to use in your application. Stretching the definition of a scripting language, it also includes Datalog implementations. Items with a strong copyleft license (like the GNU GPL) that will apply to the rest of your code are highlighted as a warning.
| Project name/link | Implementation language | GC | License | Notes | 
|---|---|---|---|---|
| AbcDatalog | Java | JVM's GC | 3-clause BSD | Implements Datalog. | 
| AngelScript | C++ | Ref. counting + cycle-detecting tracing GC | zlib | A statically typed curly brace language resembling C++ itself. | 
| Anko | Go | Go's GC | MIT | Scriptable interpreter with syntax similar to Go. | 
| ArkScript | C++ | None (resource release is destruction + optional manual MM) | MPL 2.0 | A small functional Lisp-like programming language. Separate bytecode compiler and VM. | 
| Atlast | C | None (manual MM) | Public domain | A dialect of Forth originally developed at Autodesk. | 
| BeanShell | Java | JVM's GC | Apache License 2.0 | An small, embeddable Java source code interpreter. Understands Java code with certain extensions like method closures. | 
| Boron | C | Tracing | LGPL 3+ | An embeddable scripting language similar to Rebol. | 
| Cascalog | Clojure | JVM's GC | Apache License 2.0 | Implements Datalog. | 
| CircuitPython | C | Tracing | MIT | A fork of MicroPython, designed for API uniformity across many microcontrollers. | 
| ChaiScript | C++ | Ref. counting | 3-clause BSD | A header-only C++14 interpreter library. | 
| Chibi Scheme | C | Tracing | 3-clause BSD | Implements R7RS small. | 
| CHICKEN Scheme | C | Tracing | 3-clause BSD | Implements R5RS (with some changes). R7RS support is a work in progress. Examples of embedding CHICKEN. | 
| Clasp | Common Lisp, C++ | MPS GC (Boehm-Weiser also supported) | LGPL 2+ | Full Common Lisp implementation well integrated with C++, using LLVM for the code generation, to integrate closely with C++ applications or libraries. | 
| daScript | C++ | None (region-based + manual MM?) | 3-clause BSD | A statically-typed performance-oriented scripting language. | 
| Datalog (c-cube) | OCaml | OCaml's GC | 2-clause BSD | Implements Datalog. | 
| Datalog (fogfish) | Erlang | None (no collection inside interpreter state) | Apache License 2.0 | Implements Datalog. | 
| Datalog (MITRE Corporation) | C | Tracing (Lua's GC) | LGPL 2+ | Implements Datalog. It is implemented on top of Lua 5.3 and can be extended with Lua functions. | 
| Dhall | Haskell | Haskell's GC | 3-clause BSD | A statically-typed functional configuration language. Not Turing-complete. Untrusted code: can't access the file system, can fetch Dhall libraries over HTTP(S) from static URLs (but libraries aren't allowed to access your data), can use up memory and CPU time for a DoS attack. Has a work-in-progress Clojure and Ruby implementation. | 
| Duktape | C | Ref. counting + cycle-detecting tracing GC | MIT | Implements JavaScript E5/E5.1. | 
| DWScript | Object Pascal (Delphi 2009 or later) | Ref. counting + cycle-detecting tracing GC | MPL 1.1, GPL 3 (JavaScript code generator) | Description. A statically typed Delphi/Free Pascal-like language. Can compile to JavaScript. | 
| Dyon | Rust | None (Rust-style lifetimes) | Apache License 2.0 or MIT | Has optional, optimistic (succeed-by-default) static type checking. | 
| Embeddable Common Lisp | Common Lisp, C | Boehm-Weiser GC | LGPL 2+ | Full Common Lisp implementation, available as a shared library libecl.soembeddable in any C, C++ or other application. | 
| ephp | Erlang | None (no collection inside interpreter state) | LGPL 2.1 | Implements a subset of PHP 5.5. | 
| Erlog | Erlang | None () | Apache License 2.0 | Interprets a subset of standard Prolog. | 
| Espruino | C | Tracing | MPL 2.0 | Implements a subset of JavaScript ES5 in a way suitable for embedded hardware with 8+ KiB RAM. | 
| Expr | Go | Go's GC | MIT | Compiles and evaluates statically-typed expressions. | 
| Falcon | C++ | Tracing | GPL 2 or custom | The GC is pluggable. | 
| FTH | C | Tracing | 2-clause BSD | A dialect of Forth with objects, hashes, regular expressions, and other extensions. | 
| GameMonkey Script | C++ | Tracing | MIT | Comes with C bindings. Similar to Lua, multithreaded. | 
| Gentee | Go | Go's GC | MIT | Statically typed. | 
| gluon | Rust | Tracing | MIT | Statically typed. Inspired by Lua, Haskell, and OCaml. Each executing gluon thread gets a separate heap. | 
| Goja | Go | Go's GC | MIT | Implements ECMAScript 5.1. Better standard compliance and performance than otto. | 
| Golog | Go | Go's GC | MIT | Implements a subset of standard Prolog. | 
| Go-Lua | Go | Go's GC | MIT | Implements a subset of Lua 5.2. | 
| GopherLua | Go | Go's GC | MIT | Implements Lua 5.1 with the added support for Go's channels. Lacks the debug hooks and several functions from the C version. | 
| Gravity | C | Tracing | MIT | A class-based concurrent scripting language with a Swift-like syntax. | 
| Groovy | Java | JVM's GC | Apache License 2.0 | A scripting language for the JVM. A large subset of Java is valid Groovy. Integrating Groovy into applications. | 
| GNU Guile | C | Boehm | LGPL 3+ | "Guile mostly implements R6RS." | 
| HashLink | C | Tracing (lazy sweep) | MIT | A bytecode interpreter and a baseline JIT compiler (x86/x86_64 only) for Haxe. | 
| Io | C | Tracing | 3-clause BSD | A prototype-based OO language. | 
| Janet | C | Tracing | MIT | A functional and imperative language with a Lisp syntax. | 
| JerryScript | C | Tracing | Apache License 2.0 | A full ECMAScript 5.1 interpreter written in C99 and optimized for low memory consumption. Uses CMake. | 
| Jim Tcl | C | Tracing | 2-clause BSD | Largely compatible with Tcl 8.5 with its own additions. | 
| Jinx | C++17 | Ref. counting | MIT | Designed for use in realtime applications such as video games. | 
| JRuby | Java | JVM's GC | Choice of EPL, GPL, and LGPL | An implementation of Ruby on the JVM. | 
| jsish | C | Ref. counting | MIT | A JavaScript ES 5.2+ interpreter. Internally structured after Tcl with an extensive C API. Features include subinterpreters, introspection, SQLite bindings, and a web framework with WebSocket support. The code is valid C and C++. | 
| Jsonnet | C++ | Tracing | Apache License 2.0 | A functional configuration language that extends JSON. Untrusted code: can't access the file system or network, can use up memory and CPU time for a DoS attack. Has bindings for C, C++, Go, Python, and other languages, as well as a separate native Go implementation. | 
| JTcl | Java | Ref. counting | Various BSD-like | Tcl 8.4 with some 8.5 features for the JVM. | 
| Jython | Java | JVM's GC | PSFL (BSD-like) | An implementation of Python on the JVM. | 
| Kawa | Java | JVM's GC | MIT | R7RS. Supports the javax.script API. Evaluating Scheme expressions from Java. | 
| Ketos | Rust | None (no heap allocation)? | Apache License 2.0 | A functional Lisp. | 
| LambdaChip | Scheme | Tracing | GPL 3+ | An optimizing compiler and VM for embedded systems. R7RS. | 
| Libfawk | C | Ref. counting | 3-clause BSD | A multi-language VM. Includes compilers for three languages: Fawk (Awk dialect), Fbas (Basic dialect), and Fpas (Pascal dialect). | 
| Libmawk | C | Ref. counting | GPL 2 | Implements Awk. A fork of mawk 1.3 restructured for embedding. | 
| LIL | C, Object Pascal (separate implementations) | None (no reference support) | zlib | A Tcl-like language incompatible with mainline Tcl. | 
| Lily | C | Ref. counting + GC | MIT | A language focusing on expressiveness and safety. | 
| ljs | C | Tracing | MIT | Lua 5.3, Lua 5.1, and LuaJIT with a C/C++/Java/JavaScript syntax. Can convert Lua source code to ljs. | 
| Lua | C | Tracing | MIT | The reference implementation of what is likely the world's most popular embedded scripting language. Allows you to precompile scripts to bytecode. Versions 5.1-5.3, which are the ones used today, are not fully compatible with each other. | 
| LuaJ | Java | JVM's GC | MIT | A Lua 5.2 spec-compliant interpreter written in Java for JME and JSE. Complies Lua directly to JVM bytecode. | 
| LuaJIT | C | Tracing | MIT | Fully compatible with Lua 5.1. Has a built-in C FFI library. Performance comparison. | 
| Lua-ML | OCaml | OCaml's GC | 2-clause BSD | Embeddable Lua 2.5 reimplementation that integrates with OCaml type and module system. It's possible to extend or even replace the standard library with your own modules. | 
| luerl | Erlang | Tracing | Apache License 2.0 | An implementation of Lua 5.2 in pure Erlang with some features like gotoabsent. | 
| MicroPython | C | Tracing | MIT | Implements the Python 3.4 syntax and some of the core datatypes. | 
| Molt | Rust | Ref. counting | 3-clause BSD | A minimal Tcl implementation for Rust applications and libraries. | 
| Mond | C# | CLR's GC | MIT | A dynamically typed scripting language with generators, async, remote debugging, and a binding API. | 
| Mono | C | Tracing | MIT and other | Implements the CLR. | 
| MoonSharp | C# | CLR's GC | 3-clause BSD and other | CLR Based Lua implementation that is 99% compatible with Lua 5.2 | 
| mruby | C | Tracing | MIT | A lightweight implementation of Ruby. Has a compile-time package manager. | 
| mruby/c | C | Ref. counting | 3-clause BSD | An even smaller implementation of Ruby for microcontrollers with limited memory. | 
| MuJS | C | Tracing | ISC | Implements JavaScript (ES5). Has a similar C interface to Lua. | 
| MY-BASIC | C | Ref. counting + cycle-detecting tracing GC | MIT | A Basic dialect with prototype-based OOP. | 
| Neko | C | Boehm | MIT | The NekoVM is a target for several compilers, including Haxe. | 
| NetRexx | Java | JVM's GC | ICU (BSD-like) | Implements Rexx. | 
| Never | C | Tracing | MIT | A statically typed functional programming language. | 
| njs | C | None (no collection performed) | 2-clause BSD | Implements a subset of ES5.1 with some ES6 extensions. | 
| ooRexx | C++ | Tracing | CPL | Implements Rexx extended with objects. | 
| otto | Go | Go's GC | MIT | Implements ES5 with some limitations. | 
| Pascal Script | Object Pascal | None (manual MM) | modified zlib/libpng-License with mandatory attribution | Statically typed. Implements "most of Object Pascal". Can't define new classes. | 
| Pawn | C | None (no heap allocation) | Apache License 2.0 with a clause to explicitly permit static linking | A curly-brace language with a small-footprint VM. Represents data as 4/8-byte "cells". Compiles to CPU-specific bytecode. More. | 
| pForth | C | None (manual MM) | Public domain | A dialect of Forth. | 
| PH7 | C | Ref. counting | SPL or proprietary | Implements a subset of PHP 5.3 with some changes like native UTF-8 support. | 
| PicoC | C | None (manual MM) | 3-clause BSD | Statically typed. Interprets a subset of C. | 
| Picol | C | None (no reference support) | 2-clause BSD | A header-only library interpreter for a limited dialect of Tcl. | 
| pocketlang | C | Tracing | MIT | A small language syntactically similar to Ruby. Embedding examples. Performance comparison. | 
| Python | C | Ref. counting + cycle-detecting tracing GC | PSFL (BSD-like) | Embedding Python in Another Application. | 
| gmqcc/qcvm | C++ | None (no dynamic memory allocation) | MIT | A QuakeC compiler and VM. | 
| QuickJS | C | Ref. counting + cycle-detecting tracing GC | MIT | A small embedded JavaScript interpreter that implements almost all of ES2019 and much of ES2020. | 
| Quirrel | C++ | Ref. counting | MIT | A fork of Squirrel with new features. | 
| Red | Rebol, Red, Red/System | Tracing | 3-clause BSD, BSL | A descendant of Rebol. Embeddable via libRed. Features a cross-platform native GUI system. Intended to have low memory usage. | 
| Rhai | Rust | None (Rust-style lifetimes) | MIT or Apache License 2.0 | An embedded scripting language for Rust inspired by ChaiScript. | 
| Ring | C | Tracing | MIT | An embeddable applications programming language with a large standard library and GIL-less multithreading. | 
| Ruby | C | Tracing | Choice of 2-clause BSD, Ruby license, GPL 2 | An embeddable object-oriented scripting language. Running Ruby in C. | 
| s7 | C | Tracing | 3-clause BSD | Implements a subset of R5RS/R7RS. Descended from TinyScheme. | 
| sci | Clojure | host VM's GC | EPL | An interpreter for a subset of Clojure for Clojure and ClojureScript. | 
| SGScript | C | Ref. counting + tracing CG | MIT | Features include a built-in data serialization format, coroutines, class-based OOP, sandboxed evaluation, a built-in debugger and profiler. | 
| Shine | C | Tracing | MIT | A language based on Lua with additional safety and expressiveness features implemented as a fork of LuaJIT. | 
| SquiLu | C++ | Ref. counting | MIT, some extensions LGPL or GPL | A fork of Squirrel. Changes the syntax to accept a subset of JavaScript and C/C++. Implements Lua's features like string pattern matching and global table manipulation functions. Adds extensions for database access (SQLite3, MySQL, PostgreSQL), sockets, and other features. | 
| Squirrel | C++ | Ref. counting | MIT | A language inspired by Lua and JavaScript/Python. Has a Lua-like C++ API. Differentiates itself from Lua with the use of reference counting in place of Lua's tracing GC, a curly-brace syntax, built-in class-based OOP, and zero-indexed arrays. | 
| Starlark (Go) | Go | Go's GC | 3-clause BSD | A small dialect of Python for configuration. Not Turing-complete. Untrusted code: can't access the file system and network, can use up memory and CPU to perform a DoS attack. Spec. | 
| Starlark (Java) | Java | JVM's GC | Apache License 2.0 | Starlark for the JVM. The original implementation. | 
| Starlark (Rust) | Rust | ? | Apache License 2.0 | Starlark in Rust. | 
| Tcl | C | Ref. counting | Tcl license (BSD-like) | An embeddable general-purpose scripting language with a rich C API. Has a cross-platform GUI toolkit called Tk. How to embed Tcl in C applications. | 
| TinyScheme | C | Tracing? | 3-clause BSD | Implements a subset of R5RS. | 
| Umka | C | Ref. counting | 2-clause BSD | Statically typed. | 
| Wirefilter | Rust | None (no dynamic memory allocation) | An expression language for Wireshark-like filters. | |
| Wren | C | Tracing | MIT | A small class-based performance-oriented scripting language. Performance comparison. | 
| zygomys | Go | Go's GC | 2-clause BSD | An embedded Lisp for Go. Inspired by Clojure, but more oriented towards imperative programming. Has an infix syntax layer that looks like a subset of Go. | 
See also
- cwal: Scripting Engine Without A Language.
- Game scripting languages benchmarked.
- Languages that compile to JavaScript.
- Languages that compile to Lua.
- miniKanren logic programming language implementations.
- sol — C++ bindings for Lua.
Contributing
Your contributions are welcome! Please submit a pull request or create an issue to add a new language to the list. I am looking for language implementations that are either actively maintained or largely "done". The VM, bytecode compiler, and standard library (if any) must have a free (libre) license. They may have optional add-ons with any license. A Datalog implementation must be able to parse Datalog source code; it must not be just an EDSL.
License
Disclosure
The curator of this document maintains Picol and has contributed to Jim Tcl.
