Please enable JavaScript to use CodeHS

Tracy the Turtle, a friendly cartoon turtle ready to draw Meet Tracy the Turtle

Code is art you can move

Tracy lives in a Python canvas and draws whatever you describe. Students learn programming by moving a turtle, turning, and painting shapes — the same playful start Seymour Papert imagined for Mathland, now ready for the classroom.

What is Tracy?

A Turtle in a World of Math and Art

Tracy is a Python turtle. You write commands like forward(100) or right(90), press Run, and Tracy draws the result on a canvas. Every program is a picture, and every picture is a chance to reason about angles, distances, patterns, and loops.

That makes Tracy a perfect first step into text-based programming. Beginners see cause and effect immediately: a typo becomes a wobbly line, a loop becomes a spiral, and a function becomes a reusable brushstroke.

Why Tracy Works

Computing, Creativity, Drawing, and Art

Tracy was built around the idea that programming and creative expression belong together. Students write real Python while making flowers, fractals, and animations. The syntax is small, but the canvas is huge.

Inspired by Seymour Papert's Logo turtle and Mathland, Tracy turns the screen into a place to experiment with math: angles become turns, coordinates become positions, and variables become colors and sizes. Students are doing mathematics by making things, not just watching them.

  • Low floor, high ceiling. The first program is three lines long. A few months later students are writing recursive fractals and generative art.
  • Immediate visual feedback. Bugs are visible on the canvas, so debugging feels like adjusting a drawing instead of hunting a hidden error.
  • Real Python from day one. Tracy uses the same variables, loops, functions, and logic students will use in every Python course that follows.
Animated Tracy drawing a colorful pattern on the canvas
Try It Right Now

Draw Your First Flower

This is the real CodeHS editor. Press Run and watch Tracy draw a flower made of circles. Then change the colors, sizes, or number of petals to make it your own. No account, no install.

  • Change color("purple") to your favorite color
  • Try circle(30) after every turn
  • Wrap the code in a for loop to draw more petals
  • Swap begin_fill() and end_fill() for solid shapes
  • Add speed(0) to draw instantly
A Serious Editor for a Playful Turtle

A Real IDE, Sized for a Beginner

Tracy is friendly. The tools around Tracy are the real thing: the same editor students keep using through AP Computer Science, with the controls a first-time programmer actually needs turned on.

Code History

Every revision saves automatically, so students can scrub back through their own history to see how a solution evolved, recover a version that worked, or show their work.

Help When You're Stuck

Plain-language error messages, a built-in documentation tab for every command, and moderated AI hints that nudge toward the fix without handing over the answer.

Runs Anywhere

Works in the browser on any device, Chromebooks included, with nothing to install. Tracy lives in the cloud, so a student's canvas is ready wherever they log in.

Low Floor, High Ceiling

From First Steps to Fractals

Tracy starts with simple movement and grows with the student. The same turtle that draws a square can build a Sierpinski triangle or animate a dozen turtles across the screen.

square.py
# Low floor: a simple square
for i in range(4):
    forward(100)
    right(90)

Four lines of code, one square.

sierpinski.py
# High ceiling: a recursive fractal
def draw_triangle(points, color):
    color(color)
    begin_fill()
    up()
    goto(*points[0])
    down()
    goto(*points[1])
    goto(*points[2])
    goto(*points[0])
    end_fill()

def midpoint(p1, p2):
    return ((p1[0]+p2[0])/2,
            (p1[1]+p2[1])/2)

def sierpinski(points, degree):
    colors = ["blue", "red",
              "green", "yellow",
              "white"]
    draw_triangle(points, colors[degree])
    if degree > 0:
        sierpinski([points[0],
                    midpoint(points[0], points[1]),
                    midpoint(points[0], points[2])],
                   degree - 1)
        sierpinski([points[1],
                    midpoint(points[0], points[1]),
                    midpoint(points[1], points[2])],
                   degree - 1)
        sierpinski([points[2],
                    midpoint(points[2], points[1]),
                    midpoint(points[0], points[2])],
                   degree - 1)

points = [[-150,-100], [0,150], [150,-100]]
sierpinski(points, 4)

Recursion turns the same turtle into fractal art.

Ready to Draw With Tracy?

Free for students and teachers. Start with the Intro to Python with Tracy course or jump straight into the sandbox and make your first masterpiece.