FAQ

What is Koskari for?

Writing programs in a Lisp that has Python’s libraries, objects, and runtime. It suits code that wants macros, first-class continuations, or ambient async, and code that wants to sit inside an existing Python project: a .ki module imports from Python and imports Python back.

What is it not?

A replacement for Python. Koskari runs its own bytecode on its own evaluator inside CPython, and every value is a Python object. Programs that spend their time in library calls run at the speed of those libraries. On compute-bound kernels Koskari is often faster than the same Python: arithmetic loops, branching, attribute updates, structural match, and recursion. It runs slower where a kernel allocates heavily, does arbitrary-precision arithmetic, or crosses a coroutine boundary one call at a time.

Is it stable?

Koskari is pre-alpha software; 0.2.0 is in development and publishes as weekly snapshots. The language surface may change before 1.0, and the changelog records what did. Release and versioning says what kinds of change to expect.

Which Python versions and platforms?

CPython 3.9 through 3.14, on Linux and macOS, with wheels on PyPI for both. Windows is untested.

Is free-threading supported?

Not yet.

Can Python code call Koskari code?

Yes. After import koskari, a .ki module imports like any other, and its functions and classes are ordinary Python callables. A function that Python calls directly carries @demand above its def so it returns a value rather than a coroutine; see Interop.

Where do I report a bug?

The issue tracker on GitHub. Include the Koskari version, the exact command, the full output, and the smallest .ki file that shows it. For a documentation example that does not run as shown, name the page and the section.

Common problems

koskari: command not found

The command is on your PATH once the package is installed: pip install koskari from PyPI, or pip install -e . in a checkout. A virtual environment has to be activated first.

Build fails: no C compiler, or “requires a compiler with musttail”

The evaluator threads opcode dispatch through guaranteed tail calls, so building from source needs clang, or GCC 15 or newer. The build picks clang when it is on the PATH; set CC to choose.

  • Debian and Ubuntu: sudo apt install clang lld

  • Fedora and RHEL: sudo dnf install clang lld, or GCC 15 from a toolset

  • macOS: xcode-select --install

Installing the PyPI wheel needs no compiler.

A Koskari function returns a coroutine when Python calls it

Every Koskari function can suspend, so a call from plain Python yields a coroutine. Put @demand above the function’s def, or demand at the call. Python’s map, filter, min, max, and list.sort calling a Koskari lambda have the same cause. See Demand, async, and defer.

#{name: "x"} raises NameError

Dict keys are expressions, so name: looks up a variable. Quote a string key: #{"name": "x"}.

[1 2 3] is not a list

Square brackets read like parentheses, so that is a call of 1. A list literal is #[1 2 3].

Elements are separated by whitespace, and a comma sticks to the token in front of it: #[1, 2] reads the symbol 1, and the integer 2.