8f4e is a stack oriented programming language that I created to perform generative music at algorave events. I wanted an efficient and portable tool for real time audio signal generation and processing. This monorepo contains the compiler, runtimes, and a browser based visual code editor I designed specifically for the 8f4e language.
More details about the language design and documentation can be found at ./docs/README.md
The 8f4e project is organized as an Nx monorepo with the following package hierarchy:
8f4e/
└── packages/
├── compiler (The core compiler that transforms 8f4e code into WebAssembly)
├── compiler-worker (Web Worker wrapper around the compiler for live coding)
├── config (Shared tooling and configuration helpers for the workspace)
├── editor (The main editor package with UI components and state management)
│ └── packages/
│ ├── editor-state (Editor state management)
│ ├── glugglug (2D WebGL graphics utilities)
│ ├── sprite-generator (All UI graphics are generative)
│ ├── state-manager (State manager with subscriptions)
│ └── web-ui (WebGL rendering for the editor interface)
├── runtime-audio-worklet ┐
├── runtime-main-thread-logic │ (Various runtime environments
├── runtime-web-worker-logic │ for different execution contexts)
├── runtime-web-worker-midi ┘
└── stack-config-compiler (Stack-machine-inspired config language compiler)
You can use npx nx graph to explore the relationship between the packages.
-
Install dependencies:
npm install
-
Build all packages:
npx nx run app:build
-
Start the development server:
npx nx run app:dev
The app will be available at http://localhost:3000