Welcome to

The next-gen LR parser framework for creating elegant and efficient language tools

Get Started Try Playground

Our APIs get out of your way so you can write code

We're building an API-first IDE centered around a Document Object Model (or DOM) for code. We hope to create a new generation of tools that are more trustworthy, transparent, powerful, and approachable in order to make software literacy less rare. We believe when that software literacy is rare the incentives are strong for software to be used to manipulate people rather than to serve them.

Tool Authors

Create and maintain tools with powerful abstractions and simplified workflows.

IDE Developers

Build rich editing experiences with comprehensive language support.

Language Authors

Design and implement languages with sophisticated parsing capabilities.

Roadmap

Building the future of parsing, one milestone at a time

Planned

1.0.0

The first production-grade release

Broader language support

Define the first 1000 languages

More implementations

Port BABLR engine to other runtimes

isValid cache

...for both typed and untyped trees

In Progress

Javascript language support

Our tools should parse our own source code

Spamex

Structural Pattern Matcher EXpressions

Syntax highlighting

A CSS-like system for styling code

Documentation

API docs, guides, architecture and more

Ruby language support

A BABLR grammar for your favorite friendly language

Completed

Shift operation

Enables LR parsing of expressions like 2+2

Unicode support

CSTML identifiers may now contain unicode

Immutable btrees

Amortized-cost changes to wide nodes

Language embedding

Languages can refer to and extend each other

Open Source

Learn about BABLR and its mission. Contribute to our growing community.

Community

Join our Discord to offer feedback, ask questions, and help guide our roadmap.

Documentation

Comprehensive guides and examples to get you started quickly.

Frequently Asked Questions

Get answers to common questions about BABLR and how it can help you build better language tools.

What is BABLR?

BABLR is a new kind of thing that does not quite fit into any category of things that has existed before it. In purpose it is made to be an instrument of code literacy -- a unified toolchain for software developers that supports a new generation of richly visual interfaces for coding. In form BABLR is a collection of scripts and virtual machines written in plain Javascript that run in almost any modern web browser. BABLR is also a community and an ecosystem, including a small but rapidly growing collection of ready-to-use parsers for popular languages.

Why another toolchain?

Existing projects which BABLR competes with generally fit into one of a few categories:
  • Tools for writing Javascript
    • Examples: ESLint, Prettier, Babel
  • Toolchains for writing Javascript
    • Examples: Biome (in Rust), VoidZero (in Rust), Typescript (moving to Go)
  • Toolchains for working with code in any
    • language Examples: ANTLR, TreeSitter, SrcML
BABLR is the first toolchain written in Javascript for working with code in any language.
  • We wanted a "toolchain" so that we could make all our tools dovetail perfectly with each other.
  • We wanted our toolchain to be multilingual so that once we built trust in our tools we could take them with us anywhere.
  • We wanted the toolchain to be written in Javascript so that it would be an asset to anyone with a web browser, and thus would also have the widest possible base of open source contributors and maintainers.

Is BABLR open source?

BABLR code is open source under the MIT License. In addition the project is "open" in the sense that its complete development history is recorded in a public forum (our Discord) where community members are welcome to come and share their experiences and insights for how to improve the product.


Because we need to make money the Silphium Labs team that built BABLR will also start to build closed-source products, yet we believe that BABLR will always be free and open no matter what because we've designed it that way. Insead of centralizing the cost of maintaining an ecosystem on ourselves, we've done everything to ensure that the ownership costs of this system can be distributed between a large number of individuals who may only trust each other provisionally. We've intentially left ourselves with very little "proprietary" leverage by building the kind of products that are complete not when there is nothing more to add, but when there is nothing left to take away.

Is BABLR production-ready?

The answer is conditional, but yes, BABLR is stable enough to use in production.


How our project reaches production stability is a process that often surprises people. We don't write a lot of tests for example, and we often don't do much testing before we ship releases. Instead we test exhaustively after we ship releases, which is the only way we know of knowing for sure that the product we shipped does what we think it does. This tends to separate our releases into two categories: bleeding edge feature releases, and follow-on stability releases. If you're going to deploy a release to production, make sure it's one of the stability releases!


We also don't (usually) practice TDD. If you look at the number of tests we have, it likely won't seem like it's anywhere near enough to keep a project of this size stable! The secret sauce here is that our key invariants aren't written in our test files, they're baked into the core of the implementation. Every time you use the code, you're essentially testing it. To gain confidence in our core, we simply try to use it to do a lot of real work.

Why don't BABLR parsers support error recovery?

Garbage in, garbage out. Keep It Simple, Stupid. Etc.


We don't want to support error recovery in parsers because it's not a game you can win: if you have a scenario where the product breaks because you no longer know what it was the user meant to do, you can't fix that by guessing. The only solution that will fix that problem and keep it fixed is to give the user the ability to express their intended meaning.


Our goal is less to support existing code editors than to start a metamorphasis towards intent-driven IDE design that will spread itself everywhere.

How can I get started using BABLR?

The answer to that depends on what you want to do with it and whether we already have a parser for your language. If we don't have a parser for the language you want to use BABLR with, come talk to us and we may be able to help you get one built quickly. If we do, we have a variety of tutorials that can help walk you through first-time usage.

How can I help the project?

We would love if you wanted to help us reach our goals! We're always looking for both monetary donations and code contributions. If you want to give money we are able to accept such donations through our OpenCollective. If you want to help code, right now we badly need people to try using BABLR to write parsers for more real languges. If you want to show off your mad skillz while putting your knowledge of an existing language like Python, Java, or Ruby, we'd love to see what you can do and are happy to provide any help and support we can. Our writing a parser tutorial is the place to get started.

Still have questions? We'd love to help!