A tiny programming language that compiles to WebAssembly.
This is a monorepo managed with pnpm workspaces:
packages/compiler— TinyWhale compiler librarypackages/cli-compiler— Compiler command-line interfacepackages/grammar-test— Grammar testing librarypackages/cli-grammar-test— Grammar testing command-line interfacepackages/diagnostics— Shared diagnostic typespackages/lsp— Language Server Protocol implementationpackages/cli-lsp— Language server command-line interface
- mise — development tool version manager and task runner
- Node.js 26.5.0
- pnpm 11.16.0
-
Install mise if you haven't already:
curl https://mise.run | sh -
Create an ignored
mise.local.tomlso mise can install and activate the project runtimes:[tools] node = "26.5.0" pnpm = "11.16.0"
-
Install the tools and dependencies:
mise install mise run install
All tasks are defined in mise.toml and run via mise:
mise run install— install dependenciesmise run build— build all packagesmise run test— run testsmise run check— lint and format with Biome, applying fixesmise run typecheck— run TypeScript type checkingmise run clean— remove build artifactsmise run generate-grammar— regenerate Ohm grammar bundlesmise run cli <file>— run the TinyWhale compiler CLImise run grammar-test [files]— run grammar testsmise run grammar-analyze <grammar>— analyze a grammar
Use mise run ci for the authoritative full check. It generates the compiler
grammar bundles, builds every package, runs Biome without modifying files,
typechecks every workspace, and runs all configured tests.
package.json is the source of truth for Node and pnpm versions. Keep its
engines and packageManager declarations synchronized with
mise.local.toml. GitHub Actions generates an ephemeral .tool-versions from
those tracked declarations before mise installs the CI runtimes.
MIT