Development for the official WCA scramble program
Java JavaScript Python HTML CSS Shell
Latest commit f06e62e Dec 7, 2016 @jfly jfly tnoodlejs updated to v0.11.5
Failed to load latest commit information.
fonts Embed an actual font into the pdf. Fixes #191 Aug 31, 2016
git-tools Potential workaround for a slight change in github's upload api. Jan 22, 2016
hello-winstone Added for tnoodle-android. Dec 25, 2013
lib Removing third party stuff that I believe is vestigial. Sep 3, 2014
min2phase Expanded ThreeByThreeCubeFewestMovesTest.jy to actually check for Mar 21, 2016
mootools Added for tnoodle-android. Dec 25, 2013
quercus Added for tnoodle-android. Dec 25, 2013
scrambler-interface Code related to RemoveButton deleted. Fixes #229. Dec 7, 2016
scrambles Change almost all occurrences of "cubing" to "thewca" in light of the Sep 26, 2016
sq12phase Pulled in Chen Shuang's skewb support! There's also more aggressive s… Dec 28, 2013
svglite Added "./tmt jython" command. Jython looks like a pretty cool way to … Jan 5, 2014
threephase Making 1.8 javac happy. Feb 23, 2015
tnoodle-android Rename folders for jitpack, update travis config Mar 28, 2016
tnoodlejs Fixed GWT download url Aug 31, 2016
utils Generalized AlgorithmBuilder test to try applying the same move twice… Feb 5, 2014
wca Change WCA release file name to TNoodle-WCA. Oct 14, 2013
web-utils tnoodle-android no longer depends on gson. Dec 25, 2013
webscrambles Add copies to each round of scrambles, fixes #227 Nov 7, 2016
winstone Fixes #215 by removing 304 errors and preventing caching. Aug 31, 2016
.gitignore Found a bug with 555ni scrambles. Turns out you sometimes need to dis… Jan 5, 2014
.jshintrc "./tmt make dist -p timer" now generates a standalone tnt.html file! Jul 8, 2013
.lvimrc Modified to care about indentation of java files. Also converted Mar 30, 2013
.travis.yml Rename folders for jitpack, update travis config Mar 28, 2016
LICENSE GPLv3 Nov 13, 2014 Tnoodle -> TNoodle, and bumping version number for release. Oct 10, 2016 Ported all python code to use python3! I did it all for the SNI support Sep 28, 2013
TODO Checked something off the TODO Sep 29, 2013
bower.json bumping tnoodle version. Dec 7, 2016
jython Cleaned up jython script a bit. Jan 6, 2014
tmt Tnoodle -> TNoodle, and bumping version number for release. Oct 10, 2016
tnoodle.js tnoodlejs updated to v0.11.5 Dec 7, 2016 Improved performance of the solveIn method. One big thing is that we … Jan 10, 2014 Ported all python code to use python3! I did it all for the SNI support Sep 28, 2013

TNoodle Logo


TNoodle is a collection of speedcubing-related projects, primarily written in Java. In particular, it contains the official WCA scramble program.

Build Status

WCA Scramble Program

The official scramble program for the World Cube Association has been part of the TNoodle project since January 1, 2013. It will contain the sole official scramble program for the foreseeable future.

All WCA official competitions must always use the current version of the official scramble program. This is available from

Note that only the scramble program part of TNoodle is "official". Other TNoodle projects may be convenient for certain uses (including at official competitions), but do not have any official status.

"Scramble Program" vs. "Scrambler"

Officially, TNoodle-WCA is a scramble program, while a scrambler is a human. It is fine to refer to TNoodle as a "scrambler" colloquially, but please try to use the official convention wherever possible.

Project Details

tmt (TNoodleMakeTools) is a python script used to develop TNoodle.


Get a high level view of all the projects that comprise tnoodle by running:

./tmt graph --descriptions

WCA Scramble Program

When you're ready to develop, run the following and then visit http://localhost:2014/scramble/

./tmt make run -p wca

To build a distributable/executable .jar file, run:

./tmt make dist -p wca

You can run the .jar from the commandline using:

java -jar wca/dist/TNoodle-WCA.jar

Important note: You must never use a custom build for any official competitions. Contact the WCA Board and the WRC if you have any questions about this.


First make sure that ./tmt make works. This will involve installing the android sdk and setting up an ANDROID_HOME environment variable.

  • Bump the version number in bower.json.
  • ./tmt release

TNoodle Timer (TNT) and Other Projects

TNoodle contains other distributions, like TNoodle Timer (TNT) as timer.

You can build the timer distribution similarly to wca:

# Build and run directly.
./tmt make run -p timer

# Build to .jar file.
./tmt make dist -p timer

# Run .jar file from commandline
java -jar timer/dist/TNoodle-timer.jar

When TNoodle is running, TNT will be available at http://localhost:2014/tnt.

Other projects can be run similarly, too. Run ./tmt graph --descriptions to see the current list.


  • Each project is a full fledged Eclipse project (they each have a .classpath and .project file). Furthermore, the whole tnoodle directory can be opened as an Eclipse workspace. Simply go to File > Import > Existing Projects into Workspace, and enter your tnoodle directory under "Select root directory". Eclipse should automagically detect all the tnoodle projects.
  • tmt is designed to be efficient about recompiling subprojects. It relies upon timestamps of files to only recompile something when it's strictly necessary. If you use an editor like Vim that writes to .swp files at potentially anytime alongside your source code, this will trick tmt into thinking something needs to be recompiled when it really doesn't. My recommendation is to configure your editor to store all these files in a unified directory that is not part of your tnoodle source tree.