Project Structure
RemixWarp is a multi-repository workspace. Each package is its own Git checkout, and they are placed as siblings in one parent directory so they can link to each other. The parent directory itself is not a repository.
bilup/
├── scratch-gui/ # editor + community site (one webpack build)
├── scratch-vm/ # runtime and compiler; blocks are defined here
├── scratch-blocks/ # the block editor (Blockly fork)
├── scratch-render/ # WebGL stage renderer
├── scratch-paint/ # costume and backdrop editor
├── scratch-audio/ # Web Audio playback
├── packager/ # standalone project packager
├── unpackager/ # inverse of the packager
├── mistwarp-api/ # community platform backend
├── turbowarp-desktop/ # desktop wrapper for the editor
└── docs/ # this documentation site (Docusaurus)
The packages
Scratch is split into packages that each implement one part of the app. RemixWarp forks several of them.
- scratch-gui implements most of the interface (menu bar, sprite list, tabs), wires everything together, and is where addons live. It is a set of React components plus a Redux store. Uniquely to RemixWarp, the same build also ships the community site.
- scratch-vm runs projects. It holds the block definitions (
src/blocks/scratch3_*.js), the extensions (src/extensions/), and the compiler that turns blocks into JavaScript (src/compiler/). - scratch-render draws the stage: sprites, pen, text bubbles, and collision blocks like "touching". Note that overlays such as variable monitors are drawn by scratch-gui, not scratch-render.
- scratch-blocks is the block palette and workspace, a fork of Google Blockly. Edits under its
core/directory require a Closure recompile (see Building and Running). - scratch-paint is the costume and backdrop editor.
- scratch-audio handles sound playback.
Two more support packages are pulled in as npm dependencies rather than local checkouts, but you will see them referenced: scratch-parser (validates sb2/sb3 files) and @turbowarp/scratch-storage (a fetch abstraction for downloading assets).
Inside scratch-gui
scratch-gui is where most editor work happens. The important source directories:
scratch-gui/src/
├── components/ # presentation React components (foo/foo.jsx + foo.css)
├── containers/ # Redux-connected wrappers around components
├── reducers/ # Redux reducers, one file per state slice
├── lib/ # the shared service layer, HOCs, themes, persistence
├── addons/ # the addon system (settings store, window system, addons)
├── playground/ # webpack entry points (editor, player, community, embed, ...)
└── community/ # the community single-page app
components/holds pure UI. Each component is a folder with a.jsxand a matching CSS module.containers/connects components to the Redux store. See The Container Pattern.reducers/is the Redux state. See State Management.lib/is the largest directory: higher-order components underlib/components/, the theme engine underlib/themes/, project persistence underlib/persistence/, plus the RemixWarp service layerslib/community/andlib/rotur/used by both the editor and the community site.addons/is the addon framework, ported from Scratch Addons. See The Addons System.
The build produces several entry points, defined under src/playground/: editor, player, community, fullscreen, embed, addons, and credits. Routing is handled so that /editor serves the editor, /embed.html serves the embed player, and client routes such as /project/* and /explore serve the community app.