EndBASIC

BASIC interpreter + DOS environment, reimagined.

Launch interpreter

Back to basics

EndBASIC is an interpreter for a BASIC-like language and is inspired by Amstrad's Locomotive BASIC 1.1 and Microsoft's QuickBASIC 4.5. Like the former, EndBASIC intends to provide an interactive environment that seamlessly merges coding with immediate visual feedback. Like the latter, EndBASIC offers higher-level programming constructs and strong typing.

EndBASIC's primary goal is to offer a simplified and restricted DOS-like environment to learn the foundations of programming and computing, and focuses on features that quickly reward the learner. These include a built-in text editor, commands to manipulate the screen, commands to interact with shared files, and even commands to interact with the hardware of a Raspberry Pi.

Read the motivation letter Read the docs Launch interpreter

Play and edit games

A major goal of EndBASIC is to provide a playful environment in which to recreate old-style and simple videogames with ease, all while learning the foundations of programming. Proof of this is that, in just a couple hundred lines of code, you can replicate classics like Pong, Arkanoid, or Snake, and even implement more complex programs like Conway's Game of Life.

Built for the web and the cloud

EndBASIC is a web-native application that runs locally on your browser thanks to WASM. This allows you to enjoy the environment without having to install anything on your computer, and also lets you run the interpreter on mobile devices.

And... what are your creations if you are not able to share them with the world? In the 1980s, people shared their programs as magazine listings and you'd have to painfully type them in. That's a thing of the past though: EndBASIC lets you share your programs via a cloud file sharing service.

Learn how to share

Tinker with hardware

Outside of the web, EndBASIC can run as a local application on your desktop OS and currently supports Linux, macOS, Windows, and many other Unix-like systems. For the most part, the web and local interfaces expose the exact same features---with exceptions around hardware management.

Speaking of hardware management, EndBASIC is the perfect companion for a Raspberry Pi. With support for graphics, GPIO, and even an LCD, you can set up an exciting playful toy. Control physical buttons and LEDs, or run the aforementioned games on a tiny portable device.

Download prebuilt binaries Learn to control hardware

Embed the interpreter in Rust

async fn parse_sample_input_and_extract_values() {
    const INPUT: &str = r#"

        foo_value = 123
        enable_bar = (foo_value > 122)
        'enable_baz = "this is commented out"
    "#;

    let mut machine = Machine::default();
    machine.exec(&mut INPUT.as_bytes())).await.unwrap();

    println!("foo_value is {}", machine.get_var_as_int("foo_value").unwrap());
    println!("enable_bar is {}", machine.get_var_as_bool("enable_bar").unwrap());
    machine.get_var_as_string("enable_baz").unwrap_err();
}

EndBASIC is a modern Rust implementation of a retro language, but that doesn't mean it is stuck with just writing old programs. With a tiny and clean core, the interpreter can be embedded into your own compiled programs to extend them with a scripting language. The EndBASIC VM starts empty and you can precisely decide which commands and functions to expose within in, allowing for safe execution of untrusted code.

Oh, and by the way: EndBASIC is free software.

Learn more about embedding Check it out in GitHub!