Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?


We re-created Tetris™ in ClojureScript. We mainly did this to produce the pleasure and to celebrate the 30th anniversary of its original release in 1984. Our remake enabled us to host a small, local tournament to share a montage of the game's history. Choose from 10 themes representing the popular versions from its past.


In the beginning, we worked on the game at least once a week. It got pretty crazy at the end closer to deadline, but our initial process is documented in blogs below:

  • DevBlog 1 - data, collision, rotation, drawing
  • DevBlog 2 - basic piece control
  • DevBlog 3 - gravity, stack, collapse, hard-drop
  • DevBlog 4 - ghost piece, flash before collapse
  • DevBlog 5 - game over animation, score
  • DevBlog 6 - level speeds, fluid drop, improve collapse animation, etc.
  • DevBlog 7 - draw next piece, tilemap for themes
  • DevBlog 8 - allow connected tiles for richer graphics
  • Day 9 - live board broadcasting (no blog)
  • Day 10 - chat room, more tilemaps, page layouts (no blog)
  • Day 11 - page routing, username (no blog)
  • Day N - socket netcode, spectate mode, MC controls, key-repeat control, chatroom, authentic theming, history graphs, ...


In the end, we wrapped up what we learned into an educational resource:

Development Setup

  1. Install Leiningen and Node.js.

  2. Run the following in the project directory

    # install node.js dependencies
    npm install
    # install grunt
    npm install -g grunt-cli
    # compile LESS file
    # compile ClojureScript files (this may take a minute)
    lein clean && lein cljsbuild once
    # copy the example config file (edit as needed)
    cp example.config.json config.json
    # start the node.js server
    node server.js
  3. Open http://localhost:1984 in your browser.

If you want a REPL connected to the browser for interactive testing:

lein repl
> (brepl)


To deploy a single-player build to




All code licensed under the terms of the MIT License.

The image files of past versions of the games (ie: the tilemap files) belong to their respective copyright holders.

Tetris is a registered trademark of The Tetris Company.


30th anniversary tetris in ClojureScript







No releases published


No packages published