TidyBlocks Revisited

Contributions of all kinds are welcome. By offering a contribution, you agree to abide by our Code of Conduct and that your work may be made available under the terms of our license.

  1. To report a bug or request a new feature, please check the list of open issues to see if it's already there, and if not, file as complete a description as you can.

  2. If you have made a fix or improvement, please create a pull request. We will review these as quickly as we can (typically within 2-3 days).


  • npm run build: regenerate dist/tidyblocks.js, then open index.html to see it.

  • npm run watch: regenerate and reload dist/tidyblocks.js whenever files change.

  • npm run coverage: run tests and report code coverage (open coverage/index.html to see results).

  • npm run data: create loadable JSON file for each CSV file in ./data. (These files must be loaded in ./libs/gui.js to be accessible.)

  • npm run docs: regenerate code documentation (open docs/index.html to view).

  • npm run lint: run code style check.

  • npm run test: run tests without code coverage (which is faster).


TidyBlocks uses Blockly for the workspace, React for the user interface, and Jekyll + GitHub Pages for the website as a whole.


  • libs/util.js: low-level utilities.

  • libs/dataframe.js: operations on data tables.

  • libs/expr.js, libs/value.js, and libs.op.js: things that can go in table rows. These may be nested (i.e., add(multiply(2, column('red')), column('blue'))

  • libs/summarize.js: summarization operations (such as sum and max).

  • libs/transform.js: operations on entire tables. These use expressions, summarizers, and statistical tests.

  • libs/pipeline.js: pipelines made up of stages.

  • libs/program.js: programs made up of pipelines.

  • libs/persist.js: convert serialized JSON to programs, pipelines, stages, and expressions.

  • libs/env.js: the runtime environment for a program that stores datasets, records error messages, and so on.

  • libs/gui.js : handle interactions with the user.

  • blocks/*.js: implementation of blocks.

    • blocks/blocks.js: block initialization and code generation entry point.
    • blocks/helper.js: utilities.

Other Files

  • index.html: interface page.

  • index.js: gathers blocks for bundling to create tidyblocks.min.js for testing.

  • test/test_*.js: unit tests.

  • static/css/*.css and static/sass/*: CSS for the user interface.

  • _config.yml: Jekyll configuration file.

  • _data/*, _includes/*, and _layouts/*: Jekyll site generation files.

  • coverage/*: code coverage data generated by npm run coverage.

  • data/*: built-in datasets.

  • docs/*: JSDoc code documentation generated by npm run docs.

  • workspaces/*: small programs to load for interactive testing.

  • guide/*: source for user guide (written with Jekyll).