LOGO, implemented in Scratch, with Kitten Graphics™. Try this: make "size 100 to square repeat 4 [ fd :size rt 90 ] end repeat 10 [ square rt 36 make "size :size - 10 ] Also, try this: repeat 360 [ fd 1 rt 1 ] And compare execution speed to a "native" Scratch program. Press the flag to clear all variables and procedures you have created and start over from a clean slate. Limitations: Only global variables are supported. User defined procedures can't take arguments (but they can use the globals). You can't define a procedure and use it in the same command. For example, this won't work: to square repeat 4 [ fd 100 rt 90 ] end square The only primitives supported are: fd, rt, lt, bk, cs, repeat, repcount, make, to, add, subtract, multiply, divide. Also, the binary operators +, -, /, and * will work in expressions. These are equivalent: fd add 50 50 fd 50 + 50 More complicated expressions (fd 10 + 10 * 10) will work, but the order of operations is a bit weird. Use the "functional" syntax (fd add 10 multiply 10 10) if this is a problem.