• Stars
    star
    1,277
  • Rank 36,858 (Top 0.8 %)
  • Language
  • Created over 8 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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.so embeddable 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.
Luau C Tracing MIT Roblox fork of Lua 5.1 as a scripting language for games to support a gradual type system as well as limiting the set of standard libraries exposed to the users and implements extra sandboxing features to be able to run unprivileged code. Whenever possible, Luau aims to be backwards-compatible with Lua 5.1 and at the same time to incorporate features from later revisions of Lua.
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.
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.
Perl C Ref. counting Artistic License or GPL 3 Embedding Perl in Another Application
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

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

CC0

Disclosure

The curator of this document maintains Picol and has contributed to Jim Tcl.

More Repositories

1

structured-text-tools

A list of command-line tools for manipulating structured text data
6,948
star
2

automatic-api

A list of software that turns your database into a REST/GraphQL API
Go
1,988
star
3

classless-css

A list of classless CSS themes/frameworks with screenshots
HTML
1,928
star
4

compilers-targeting-c

A list of compilers that can generate C code
JavaScript
692
star
5

sqawk

Like awk but with SQL and table joins
Tcl
310
star
6

liveviews

Phoenix LiveView workalikes for different languages and frameworks
243
star
7

hicolor

🎨 Convert images to 15/16-bit RGB color with dithering
C
194
star
8

jsonwatch

Track changes in JSON data from the command line
Rust
165
star
9

unflattener

Make normal maps for 2D art
Python
146
star
10

s2png

Store any data in PNG images
Rust
99
star
11

csv2html

Convert CSV files to HTML tables
Rust
73
star
12

initool

Manipulate INI files from the command line
Standard ML
57
star
13

caddy-markdown-site

Serve Markdown files as HTML pages with CSS using just Caddy
CSS
52
star
14

picol

(Fossil repository mirror) A tiny interpreter
C
32
star
15

jimhttp

A library collection and web microframework
Tcl
28
star
16

tcl-duktape

Tcl bindings for Duktape, an embedded JavaScript interpreter
C
19
star
17

all-caps-basic

(WIP) A compiler written in Awk
Awk
16
star
18

caddy-cgi

An example of how to configure Caddy 1/2 with a FastCGI-to-CGI proxy
Perl
11
star
19

tinyfts

Very small standalone full-text search HTTP/SCGI server
Tcl
10
star
20

messagebox

Display message boxes from Windows batch files and command line programs
Shell
8
star
21

jimsh-static

Jim Tcl static binaries with SQLite 3 for Linux
Dockerfile
7
star
22

tcl-fcgi

FastCGI in pure Tcl
Tcl
6
star
23

2048.tcl

The game of 2048 implemented in Tcl
Tcl
4
star
24

pip-wtenv

Make your script download its dependecies; like pip.wtf but uses venvs
Python
4
star
25

joker-cgi-guestbook

A toy old-school CGI guestbook written in Joker
Clojure
3
star
26

HTMLgen

This is a mirror of the HTMLgen module by Robin Friedrich with the Debian patches
Python
3
star
27

ptjd

A pure Tcl JPEG decoder
Tcl
2
star
28

gpgedit

Edit symmetrically encrypted files
Tcl
2
star
29

fossil-wiki-export

Export a Fossil SCM wiki to Git preserving the revision history
Tcl
2
star
30

circleci-tcl-gcc-autoconf

Docker image for testing Tcl and C code with CircleCI
Dockerfile
2
star
31

klisp

C
2
star
32

empty

(Mirror) An alternative to Expect for *nix shells
C
1
star
33

caddy-deb-opt

Build a deb package to install Caddy in /opt/
Makefile
1
star
34

apache-2.4-webdav

A WebDAV file share/inbox configuration example for Apache 2.4
CSS
1
star
35

tcl86-nsis-installer

Build a Windows installer for Tcl with NSIS
PowerShell
1
star
36

tcl-augeas

Tcl bindings for Augeas
C
1
star