Скретч  — это визуальная объектно-ориентированная среда программирования для обучения школьников младших и средних классов. Название произошло от слова scratching — техники, используемой хип-хоп-диджеями, которые крутят виниловые пластинки взад-вперёд руками для того, чтобы смешивать музыкальные темы.

Скретч создан как продолжение идей языка Лого и конструктора Лего. Написан на языке Squeak. Скретч разрабатывается небольшой командой программистов для детей в Массачусетском технологическом институте. Текущая версия — 2.0, выпущена 9 мая 2013.

В 2008 году Скретч был портирован для микроконтроллерного модуля Arduino. Проект носит название S4A.

Программы на Скретче состоят из графических блоков, подписи к которым зависят от выбранного для интерфейса языка. Может быть выбран один из 50 языков интерфейса, включая русский. Для подключения интерфейса на новом языке используются стандартные gettext файлы.

Основными компонентами Скретч-программы являются объекты-спрайты. Спрайт состоит из графического представления — набора кадров-костюмов (англ. costume) и сценария-скрипта. Для редактирования костюмов спрайтов в скретч встроен графический редактор (англ. Paint Editor). Действие Скретч-программы происходит насцене (англ. stage) размером 480×360 (условных) пикселей с центром координат в середине сцены.

Для программирования сценариев в скретче используется drag-and-drop-подход: блоки из палитры блоков перетаскиваются в область скриптов.

По функциональному назначению блоки делятся на 8 групп, принадлежность блока к той или иной группе обозначается его цветом.

Группаанглийское названиеЦветПримечание
Движение movement синий управляют движением спрайта
Внешность looks сиреневый управляют внешностью спрайта
Звук sound розовый управляют звуком спрайта
Перо pen зелёный используется для черепашьей графики
Контроль control жёлтый управляющие конструкции, заголовки обработчиков событий
Сенсоры sensing голубой опрос устройств ввода
Операции operators салатовый арифметико-логические операции
Переменные variables оранжевый  

У многих блоков имеется редактируемое белое поле для вводимых скретч-программистом параметров.

Блоки бывают трёх видов: блоки стека, блоки заголовков и блоки ссылок.

Блоки стека (англ. Stack Blocks) сверху имеют выемку, а снизу — выступ, их помощью они объединяются в группу блоков, называемую стеком. Стеки можно копировать и перемещать как единый блок. Особой разновидностью блоков стека являются управляющие конструкции, такие как циклы — они имеют С-образную форму, и могут охватывать собой вложенный стек скретч-блоков.

Блоки заголовков (англ. Hats) имеют выпуклый верхний край и выступ для объединения снизу — они образуют заголовки скретч-стеков. К блокам-заголовкам относятся блоки «когда …» (англ. when …) из группы «Контроль», позволяющие организовать обработчики сообщений: внешних — от клавиатуры и мыши, и внутренних — передаваемых между спрайтами и позволяющих объектно-ориентированное программирование в smalltalk-стиле.

Наконец, блоки ссылок (англ. Reporters) предназначаются для заполнения внутренних полей других блоков.

Язык скретч (как и Лого) оперирует числами, текстовыми строками, логическими значениями, а также списками, играющими роль динамических массивов.

Хотя архитектура Скретч-программ в виде набора спрайтов Скретча, обменивающиеся друг с другом событиями, напоминает объектно-ориентированную,Скретч не является объектно-ориентированным языком: в нём (ни в каком виде) нет механизмов наследования (в последних версиях расширенного диалекта скретча BYOB введено прототипное наследование).