Scratch
A free, block-based visual programming language and online community from MIT designed to teach coding, creativity, and computational thinking to children and beginners
Created by Mitchel Resnick and the Lifelong Kindergarten group (MIT Media Lab)
Scratch is a free, block-based visual programming language and online community created by the Lifelong Kindergarten group at the MIT Media Lab. Instead of typing text, learners assemble programs by dragging and snapping together color-coded graphical blocks that fit only in syntactically valid ways — eliminating the typos, missing semicolons, and cryptic compiler errors that frustrate beginners. Aimed primarily at children aged roughly 8 to 16 but used by people of all ages, Scratch has become the world’s most widely used introduction to programming, with a sprawling online community where millions of users create, share, and remix interactive stories, games, and animations.
History & Origins
Scratch grew out of the MIT Media Lab’s long tradition of building programming tools for children, a lineage that runs back to Seymour Papert’s Logo in the 1960s and continued through StarLogo and the Etoys environment built on Squeak. In 2003, Mitchel Resnick, who leads the Lifelong Kindergarten group, and Yasmin Kafai, then at UCLA, received a U.S. National Science Foundation grant to create a new programming environment that would let young people express themselves creatively with code. The project was developed in close partnership with after-school Computer Clubhouses, where the team watched how children actually wanted to use computers — making animations, games, and interactive art — and designed Scratch around those motivations.
The name evokes the scratching technique used by hip-hop DJs, who remix and combine sounds; in the same spirit, Scratch was built to make it easy to mix and remix media and code. After several years of development and prototyping, Scratch 1.0 was released publicly on May 15, 2007, alongside the scratch.mit.edu website, which from the start tied the language to a social, sharing-focused community rather than treating it as a standalone tool.
Design Philosophy
Resnick has summarized Scratch’s goals with the phrase “low floor, high ceiling, and wide walls”: it should be easy for novices to get started (low floor), allow increasingly sophisticated projects over time (high ceiling), and support many different kinds of projects and interests (wide walls). Underlying this is a broader educational philosophy Resnick calls the “4 P’s of Creative Learning”: Projects, Passion, Peers, and Play. Scratch is meant not merely to teach syntax but to let learners pursue projects they care about, collaborate with others, and learn through tinkering.
Two design decisions flow directly from this philosophy:
- Blocks instead of text. Commands are represented as interlocking puzzle-piece blocks. Their shapes encode the grammar of the language, so a block can only be dropped where it makes sense. This removes whole classes of syntax errors and lets beginners focus on logic and ideas rather than punctuation.
- Immediate, visible results. Programs control sprites on a stage. Clicking blocks runs them instantly, and changes are visible right away, encouraging the rapid experimentation and iteration central to creative learning.
Key Features
| Feature | What it provides |
|---|---|
| Block-based editor | Drag-and-drop, color-categorized blocks that snap together only in valid combinations |
| Sprites and stage | Programmable graphical characters acting on a 2-D stage with costumes, sounds, and backdrops |
| Event-driven model | Scripts triggered by events such as the green-flag start, key presses, clicks, or broadcast messages |
| Concurrency | Multiple scripts and sprites run at once, introducing parallelism in an approachable way |
| Custom blocks | User-defined blocks (procedures) for abstraction and reuse, added in Scratch 2.0 |
| Remixing | Any shared project can be opened, studied, and remixed, with attribution tracked automatically |
| Extensions | Scratch 3.0 connects to hardware (micro:bit, LEGO) and services (translation, text-to-speech) |
A typical Scratch program is a set of scripts attached to sprites. Each script begins with a “hat” block describing when it runs — for example, when green flag clicked — followed by a stack of action blocks. Because many scripts can run simultaneously and communicate through broadcast messages, learners encounter genuine concepts of event handling and concurrency, usually without realizing how advanced those ideas are.
Evolution
Scratch has gone through three major generations, each rebuilt on a different technology:
- Scratch 1.x (2007–2013) was written in Squeak, a Smalltalk-80 dialect, and ran as a desktop application. Scratch 1.4 (2009) was the last and most popular version of this line.
- Scratch 2.0 (2013) moved the editor into the web browser, rebuilt on ActionScript / Adobe Flash. It introduced an online project editor, custom blocks, a backpack for carrying assets between projects, and cloud variables.
- Scratch 3.0 (2019) is a complete rewrite in HTML5 and JavaScript, built on Google’s Blockly framework. It removed the dependency on Flash — which reached end of life on December 31, 2020 — runs on tablets and modern browsers, and added an extension system for hardware and external services. Scratch 3.0 remains the current generation and is updated continuously rather than through large numbered releases.
Governance evolved alongside the software. The Scratch Foundation (originally the Code to Learn Foundation) was established in 2013, and in 2019 the MIT Media Lab formally transferred ownership of Scratch and ScratchJr to this nonprofit, which now stewards the project and keeps it free for everyone.
Current Relevance
Scratch is, by a wide margin, the most popular tool for teaching programming to children. Its online community has grown to reportedly more than 100 million registered users, and by April 2024 they had collectively shared more than one billion projects. It is embedded in school curricula worldwide, used in coding clubs, and frequently the first language encountered in university introductory courses — Harvard’s CS50, for instance, uses Scratch in its opening week before transitioning students to C and Python.
The ideas Scratch popularized have spread far beyond the project itself. Google’s Blockly library — which Scratch 3.0 is built on — powers countless other block-based editors, and the visual-blocks approach has become the default way to introduce coding, from Code.org’s Hour of Code to microcontroller tools like the BBC micro:bit’s MakeCode. Direct descendants and relatives include ScratchJr (for ages 5–7), Berkeley’s Snap! (which extends the model with first-class functions and lists), and the mobile-focused Catrobat.
Why It Matters
Scratch reframed what a “first programming language” could be. By replacing text with blocks, pairing the language with a creative, social community, and grounding the whole design in a clear theory of creative learning, it lowered the barrier to coding for an entire generation. Millions of people wrote their first program in Scratch, and its block-based paradigm has become the near-universal on-ramp to computer science education. Whether or not its users go on to text-based languages, Scratch demonstrated that programming could be playful, expressive, and genuinely for everyone — reshaping how the world introduces people to code.
Timeline
Notable Uses & Legacy
K-12 computer science education
Scratch is one of the most widely used tools for introducing programming in primary and secondary schools, appearing in curricula and coding clubs across the world as a first language for children
Code.org and Hour of Code
Block-based tutorials inspired by and built with Scratch-style editors (and Google's Blockly, which underpins Scratch 3.0) power large-scale introductory coding events reaching millions of students
Harvard CS50
Harvard University's popular introductory computer science course, CS50, has long used Scratch in its first week to teach core programming concepts before moving students to text-based languages such as C and Python
ScratchJr early-childhood learning
A simplified offshoot for ages 5–7, ScratchJr lets pre-readers snap together graphical blocks to animate characters, widely used in early-childhood classrooms
Physical computing and robotics
Scratch 3.0 extensions and derivatives such as mBlock connect block code to hardware like the BBC micro:bit, LEGO Education kits, and Makeblock robots, bridging on-screen coding with the physical world
Creative projects and game design
The Scratch online community hosts millions of shared, remixable animations, interactive stories, art, and games, making the platform as much a creative-media tool as a coding environment