Virtual Machine used to represent, run, and maintain the state of programs for Scratch 3.0
Find a file
2016-06-07 10:49:12 -04:00
playground Merge pull request #55 from tmickel/feature/playground-buttons 2016-06-01 15:37:51 -04:00
src Case problem with blocks.js in index.js 2016-06-06 16:19:57 -04:00
test Test for CREATE event with substack 2016-06-07 10:49:12 -04:00
.eslintrc Fix eslint errors 2016-05-02 11:56:52 -07:00
.gitignore Initial commit 2016-04-08 13:10:37 -04:00
.travis.yml Add travis config 2016-04-18 17:22:23 -04:00
LICENSE Initial commit 2016-03-28 12:53:44 -04:00
Makefile All tests passing 2016-04-26 09:54:14 -04:00
package.json Absolute version number for highlightjs dependency 2016-06-01 13:13:52 -04:00
README.md Update "anatomy of a block" README for new structure 2016-06-06 16:03:40 -04:00
TRADEMARK Initial commit 2016-03-28 12:53:44 -04:00
vm.js Update build for "stack click" 2016-06-01 10:27:11 -04:00
vm.min.js Update build for "stack click" 2016-06-01 10:27:11 -04:00
webpack.config.js AST create / change / move / delete from blockly 2016-04-26 09:49:52 -04:00

scratch-vm

Scratch VM is a library for representing, running, and maintaining the state of computer programs written using Scratch Blocks.

Build Status Dependency Status devDependency Status

Installation

npm install scratch-vm

Setup

var VirtualMachine = require('scratch-vm');
var vm = new VirtualMachine();

// Block events
workspace.addChangeListener(function(e) {
    // Handle "tapping" a block
    if (e instanceof Blockly.Events.Ui && e.element === 'click') {
        var stackBlock = workspace.getBlockById(e.blockId).getRootBlock().id;
        vm.runtime.toggleStack(stackBlock);
    // Otherwise, pass along to the block listener
    } else {
        vm.blockListener(e);
    }
});

// Run threads
vm.runtime.start();

Standalone Build

make build
<script src="/path/to/vm.js"></script>
<script>
    var vm = new window.VirtualMachine();
    // do things
</script>

Abstract Syntax Tree

Overview

The Virtual Machine constructs and maintains the state of an Abstract Syntax Tree (AST) by listening to events emitted by the scratch-blocks workspace via the blockListener. At any time, the current state of the AST can be viewed by inspecting the vm.runtime.blocks object.

Anatomy of a Block

{
    "7AJZR#NA;m*b}R]pdq63": {
      "id": "7AJZR#NA;m*b}R]pdq63",
      "opcode": "control_wait",
      "inputs": {
        "DURATION": {
          "name": "DURATION",
          "block": ",xA8/S!Z6+kR,9dph.rO"
        }
      },
      "fields": {},
      "next": null,
      "topLevel": true
    },
    ",xA8/S!Z6+kR,9dph.rO": {
      "id": ",xA8/S!Z6+kR,9dph.rO",
      "opcode": "math_number",
      "inputs": {},
      "fields": {
        "NUM": {
          "name": "NUM",
          "value": "1"
        }
      },
      "next": null,
      "topLevel": false
    }
  }

Testing

make test
make coverage

Donate

We provide Scratch free of charge, and want to keep it that way! Please consider making a donation to support our continued engineering, design, community, and resource development efforts. Donations of any size are appreciated. Thank you!