Backends

jbark, pbark, interpreters vs compilers, licence, how to ship.

Two interpreters, one syntax

Bark source is backend-agnostic. Write .woof once. Run with Java or Python tooling from github.com/AlexH89/bark.

BackendHostRole
jbarkJavaReference implementation. Maven, ./bin/bark, release JAR.
pbarkPythonSemi-automated port of jbark. PyPI, ./pbark/bin/pbark, python -m pbark.

What interpreter means here

  • Your language (Bark) = what users write (.woof files)
  • Java or Python = the toolbox that reads Bark and runs it

Java and Python are not Bark. They host the programs that implement Bark.

Bark uses interpreters (read and run step by step), not a compile-to-binary pipeline for end users. Small esolangs pick often interpreters because they are fast to build and easy to change. Building a compiler felt like a step too far for me right now.

Java (jbark) quick reference

CommandNotes
./bark story.woofRelease zip (Java 25+)
./gradlew run --args="examples/woof/tutorial.woof"Clone dev loop
./gradlew shadowJar then ./bin/bark …Fat JAR
bark --strict story.woofWarn on no-op lines
bark --list-breedsDump registry
bark --quiet story.woofNo banner

Windows: bark.cmd, gradlew.bat.

Python (pbark) quick reference

cd pbark && pip install -e .
./bin/pbark ../examples/woof/tutorial.woof
CommandNotes
pbark story.woofRun file
pbark --strict story.woofSame flags as jbark
pytest tests/ -qAfter pip install -e ".[dev]"

Licence

AGPL-3.0. Free to use, share, and hack on. Derivatives and network services must stay open. See LICENSE and NOTICE in the repo.

Example commands

# Release or after shadowJar
./bark examples/woof/goodboy.woof
./bark examples/woof/bimba.woof
./bark examples/woof/tutorial.woof
./bark examples/woof/counter-tradition.woof
./bark examples/woof/loops.woof

# Clone (Java)
./gradlew run --args="examples/woof/bimba.woof"

# Clone (Python)
./pbark/bin/pbark examples/woof/bimba.woof

Sample programs on the examples page.