Kawa is a mostly-compatible implementatation of the Scheme programming language, which has history going back to 1975, is standardized, has been the base for much programming language research, and has dozens of implementations.

Kawa runs on top of the Java platform. The implementation is written in Java and Kawa itself, without native code. Scheme programs have full and convenient access to the huge set of Java libraries.

Kawa programs are fast. A sophisticated compiler, type inference, and optional type declarations means you can write programs that run roughly as fast as Java programs, and much faster than other “scripting languages”.

Kawa uses Unicode internally, and uses the Java facilities to convert files using other character encodings.

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

Kawa provides a framework for implementing other programming languages, and comes with incomplete support for CommonLisp, Emacs Lisp, and EcmaScript, and the draft XML Query language.

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

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

Kawa can be embedded as a scripting language in Java programs.

Kawa has convenient syntax for allocating and initializing objects.

Kawa has some special handling to ease JavaFX programming.

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

Kawa makes it easy to write web page scripts running running on self-configuring web servers and optionally using 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.

Kawa supports Lazy evaluation, with convenient implicit forcing.

You can optionally declare the types of variables.

You can conveniently access Java objects, methods, fields, and classes.