A list of embedded scripting languages
Switch branches/tags
Nothing to show
Clone or download
Failed to load latest commit information.
README.md Datalog (fogfish): Fix GC Nov 6, 2018


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.

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.
Atlast C None (manual MM) Public domain A dialect of Forth originally developed at Autodesk.
Anko Go Go's GC MIT Scriptable interpreter with syntax similar to Go.
BeanShell Java JVM's GC Apache License 2.0 An small, embeddable Java source code interpreter. Understands Java code with version 1.1 syntax, meaning no generics or lambdas, but extends Java with, e.g., method closures. A fork that supports generics is being merged.
Boron C Tracing LGPL 3+ An embeddable scripting language similar to Rebol.
Cascalog Clojure JVM's GC Apache License 2.0 Implements Datalog.
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.
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.
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.so embeddable in any C, C++ or other application.
Erlog Erlang None (no collection inside interpreter state) Apache License 2.0 Interprets a subset of standard Prolog.
ephp Erlang None (no collection inside interpreter state) LGPL 2.1 Implements a subset of PHP 5.5.
Espruino C Tracing MPL 2.0 Implements a subset of JavaScript ES5 in a way suitable for embedded hardware with 8+ KiB RAM.
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.
gluon Rust Tracing MIT Statically typed. Inspired by Lua, Haskell, and OCaml. Each executing gluon thread gets a separate heap.
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.
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.
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.
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++.
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.
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.
Lua C Tracing MIT The reference implementation of what is likely the world's most popular embedded scripting language. Fast for an interpreter. 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. Very fast.
luerl Erlang Tracing Apache License 2.0 An implementation of Lua 5.2 in pure Erlang with some features like goto absent.
MicroPython C Tracing MIT Implements the Python 3.4 syntax and some of the core datatypes.
Mono C Tracing MIT and other Implements the CLR.
mruby C Tracing MIT A lightweight implementation of Ruby. Has a compile-time package manager.
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.
otto Go Go's GC MIT Implements ES5 with some limitations.
Pascal Script Object Pascal None (manual MM) Custom non-copyleft 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.
PicoC C None (manual MM) 3-clause BSD Statically typed. Interprets a subset of C.
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.
Ring C Tracing MIT An embeddable applications programming language with a large standard library and GIL-less multithreading.
s7 C Tracing 3-clause BSD Implements a subset of R5RS/R7RS. Descended from TinyScheme.
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.
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.
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.
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.
Wren C Tracing MIT A small class-based performance-oriented scripting language.
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


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 and the standard library, if any, must have a free (libre), non-copyleft or limited-scope copyleft license (e.g., the GNU LGPL or the MPL, but not the GNU GPL). If the main bytecode compiler is a separate program, it must have a license that doesn't automatically apply to its output. Optional add-ons may have any license: from strong copyleft to proprietary. A Datalog implementation must be able to parse Datalog source code; it must not be just an EDSL.