30th anniversary tetris in ClojureScript
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
devblog add devblog 8 May 29, 2014
public GitHub Issue #39 - fix issue with velocity.js; update CLJS and librar… Mar 16, 2016
src GitHub Issue #33 - persist theme changes from paused state Jun 10, 2017
.editorconfig add .editorconfig Mar 16, 2016
LICENSE GitHub Issue #39 - fix issue with velocity.js; update CLJS and librar… Mar 16, 2016
README.md point readme back to t3tr0s.com as it's up and running again Jun 8, 2017
example.config.json single player mode at https://t3tr0s.github.io Apr 2, 2017
planning.md add details to README, and split planning into new file May 19, 2014
todo add some todo notes May 22, 2014



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 https://t3tr0s.github.io




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.