# caffeine-eight

> a 'runtime' parsing expression grammar parser

Latest version **3.0.5** (published 2025-11-07) · ISC license · 0 weekly downloads

## Install

```sh
npm install caffeine-eight
pnpm add caffeine-eight
yarn add caffeine-eight
bun add caffeine-eight
```

## Health

**Score 45/100 (D)** — status: stable.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

## Facts

| | |
|---|---|
| Version | 3.0.5 |
| Published | 2025-11-07 |
| First published | 2017-08-09 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 4 |
| Unpacked size | 250.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | Shane Brinkman-Davis Delamore |
| Maintainers | shanebdavis |

## Links

- npm: https://www.npmjs.com/package/caffeine-eight
- Repository: https://github.com/caffeine-suite/caffeine-suite
- Issues: https:/github.com/caffeine-suite/caffeine-suite/issues
- npm.io page: https://npm.io/package/caffeine-eight

## Dependencies (4)

- [colors](https://npm.io/package/colors.md) ^1.1.2
- [art-class-system](https://npm.io/package/art-class-system.md) ^1.11.16
- [art-standard-lib](https://npm.io/package/art-standard-lib.md) ^1.73.1
- [neptune-namespaces-runtime](https://npm.io/package/neptune-namespaces-runtime.md) ^3.2.8

## Recent versions

- 3.0.5 (latest) — 2025-11-07
- 3.0.4 — 2024-08-16
- 3.0.3 — 2024-05-30
- 3.0.2 — 2022-11-28
- 3.0.1 — 2022-11-28
- 2.7.0 — 2022-11-26
- 2.6.11 — 2022-11-22
- 2.6.10 — 2022-11-21
- 2.6.9 — 2022-11-21
- 2.6.8 — 2022-11-21
- 2.6.7 — 2022-03-13
- 2.6.6 — 2022-03-13
- 2.6.5 — 2020-10-23
- 2.6.4 — 2020-09-26
- 2.6.3 — 2020-09-26
- … 23 more at https://npm.io/package/caffeine-eight/versions

## README

## CaffeineEight [![Build Status](https://travis-ci.org/caffeine-suite/caffeine-eight.svg?branch=master)](https://travis-ci.org/caffeine-suite/caffeine-eight)

Come to C8 because you want an elegant, declarative API that makes parsing as easy as humanly possible. Stay for super powers like detailed parsing errors, predictable [PEG-based](https://en.wikipedia.org/wiki/Parsing_expression_grammar)  parsing and runtime parser extendability.

Unlike other parsing libraries, CaffeineEight is not a parser-generator. There is no build step. Just extend a class, add some rules and you are ready to parse. With CaffeineEight you can create and, more importantly, extend your parsers at runtime.

#### Motivating Example

A complete JSON parser in less than 30 lines of code.

```coffeescript
# CaffeineScript
class JsonParser extends &CaffeineEight.Parser

  @rule
    root: :array :object

    array:
      "'[' _? ']'"
      "'[' _? value commaValue* _? ']'"

    object:
      "'{' _? '}'"
      "'{' _? pair commaPair* _? '}'"

    commaValue: "_? ',' _? value"
    commaPair:  "_? ',' _? pair"
    pair:       "string _? ':' _? value"

    value: :object :array :number :string :true :false :null

    string: /"(?:[^"\\]|\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4}))*"/
    number: /-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/
    true:   /true/
    false:  /false/
    null:   /null/

    _:      /\ +/

.repl()
```

## Goals

* Define PEG parsers 100% in JavaScript
* Runtime-extensible parsers
* Reasonably fast
* No globals - each parser instance parses in its own space

## Features

* Full parsing expression grammar support with memoizing
* Full JavaScript regular expressions support for terminals
* Simple, convention-over-configuration parse-tree class structure
* Human-readable parse-tree dumps
* Detailed information about parsing failures
* Custom sub-parser hooks
  * Which enable indention-based block parsing for languages like Python, CoffeeScript, or my own CaffeineScript

## Learn More

* [Wiki Home](https://github.com/caffeine-suite/caffeine-eight/wiki)

## Rename History

* CaffeineEight was formally called [BabelBridgeJs](https://www.npmjs.com/package/caffeine-eight)
* CaffeineEight was inspired by my earlier [Babel Bridge Ruby Gem](https://github.com/shanebdavis/Babel-Bridge), the JavaScript version turned out to be even more awesome!

---
_Source: https://npm.io/package/caffeine-eight · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
