Features

Runs on the Java platform, with no native code needed.

Extends the Scheme language, following the R7RS specification from 2013. Scheme has many implementations, and is much used in research and teaching.

Programs run fast - roughly as fast as Java programs, and much faster than other “scripting languages”. This is due to a sophisticated compiler, compile-time transformations, type inference, and optional type declarations.

Full convenient and efficient access to the huge set of Java libraries means you can access objects, methods, fields, and classes without run-time overhead.

Start-up times are fast. You don’t have to wait for a lot of initialization. Even if you start with source code, the parser and compiler are fast.

Scripts are simple Kawa source files that can run as an application or command. These are simple to write, start start, and run efficiently, since they’re automatically compiled before execution.

Alternatively, you can embed Kawa as a scripting language for Java applications

Deployment is easy and flexible. You just need the Kawa jar file.

Macros and custom named literals make it easy to extend the syntax, and implement Domain-Specific Languages.

Kawa provides the usual read-eval-print loop, as well as batch modes.

Kawa has builtin pretty-printer support, and fancy formatting.

Kawa supports class-definition facilities, and separately-compiled modules.

You can allocate and initialize objects with a compact “builder” syntax. It works out-of-the-box (with no run-time overhead) on many classes and APIs, but can be customized if need be.

JavaFX programming is simpler.

You can run Kawa programs on Android, and there is special handing to make constructing View objects easier.

Flexible shell-like functionality, including process literals.

Web page scripts are easy to write and install with self-configuring web servers and optionally using servlets and XML literals.

Kawa implements the full numeric tower, including infinite-precision rational numbers and complex numbers. It also supports Quantities with units, such as 3cm.

A lazy value wraps an expression which is evaluated only when it is needed.

Kawa provides a framework for implementing other programming languages, and comes with incomplete support for CommonLisp, Emacs Lisp, and EcmaScript, and XQuery.