How to run BQN

CBQN is the primary offline implementation. Scripts in this repository start with #! /usr/bin/env bqn in order to look up the user's bqn executable, which is expected to be CBQN.

Third-party packages are available for Windows and a few Linux distributions. Because they run on an unknown target system, none of these packages are built with the highest-performance settings. If you need top speed (you probably don't!) you should compile CBQN for the target hardware instead.

OS/distro Package Type
Windows download WinBQN Binary
Arch AUR cbqn-git Source
Nix cbqn Source/Binary
Guix cbqn Source/Binary

For tools related to running BQN, see the editor plugins and fonts page.

All these websites run BQN (on your computer, except Attempt This Online):

Link Style Engine Comments
Online REPL One-shot JS "Explain", error marker
BQNPAD Session JS, Wasm Preview, syntax coloring
Attempt This Online TIO CBQN Server-side
Do Stuff Online TIO JS
Razetime Session JS
ktye/zoo Session JS Many array languages
Observable Notebook JS For import in Observable
BQN-80 One-shot JS Create animations

Further details in the sections below.

Self-hosted BQN

This version of BQN is implemented mainly in BQN itself, but a host language supplies basic functionality and can also replace primitives for better performance. This also allows embedding, where programs in the host language can include BQN code. It fully supports all functionality specified so far. System value support varies as it's implemented separately in each host.

Support in the following languages has been implemented (details in the subsections below):

Javascript

The file docs/bqn.js is zero-dependency Javascript, and can be loaded from HTML or Node.js. For command line use, call the Node.js script bqn.js, passing a file and •args, or -e to execute all remaining arguments directly and print the results.

CBQN

C sources are kept in the CBQN repository, but it also depends on bytecode from the BQN sources here. Running make gets a working copy right away with saved bytecode. Then to use the latest bytecode, call $ ./BQN genRuntime /BQN, where /BQN points to this repository, and run make again.

CBQN is developed on Linux, and as-is will only run on Unix-like systems (including macOS). To run on Windows, WSL has the best support but there are also native builds based on each of Cygwin and Mingw here.

genRuntime can also be run with another BQN implementation (the Node.js one works but takes up to a minute), and plain ./genRuntime uses your system's bqn executable. I symlink /CBQN/BQN to ~/bin/bqn so I can easily use CBQN for scripting.

CBQN has native support for most primitive functionality and falls back to the self-hosted runtime to fill the gaps. The most important operations are fast, and it's almost always possible to write code that sticks to them. However, some cases, particularly those that deal with multiple axes, are much slower (although still fine for most use cases).

dzaima/BQN

dzaima/BQN is an implementation in Java created by modifying the existing dzaima/APL, and should be easy to run on desktop Linux and Android. It was historically the main implementation, but is now updated only to stay up to date with language changes. Major missing functionality is dyadic Depth () and set functions ⊐⊒∊⍷ with rank >1, and there are various small differences from the BQN spec, mostly to do with rank, handling of atoms, fills, and headers. It uses UTF-16 instead of UTF-32, so that characters like 𝕩 don't behave correctly.

To get an executable that works like CBQN, make a script with the following contents. Scripts may use #! /usr/bin/env dbqn to run with dzaima/BQN specifically, but this is rare now (in this repository, only test/dzaima does it).

#! /bin/bash

java -jar /path/to/dzaima/BQN/BQN.jar "$@"

If compiled with Native Image, nBQN can be used directly instead.

BQN2NGN

BQN2NGN is a prototype implementation in Javascript built to experiment with the language. It's now abandoned.