TL;DR: We're friends with the Scratch Team. It's all cool.
We happily acknowledge our huge debt to Scratch. The first version of Snap!, called BYOB (Build Your Own Blocks), was a modified version of the Scratch 1.4 source code. Our current version does not share any code with any version of Scratch, but we do use their media (costumes and sounds) under license (CC). Our editor still looks like Scratch 1.4 because we like that look!
We made BYOB as a proof of concept, hoping to convince the Scratch Team to accept our ideas about ways to extend Scratch. We're still sad that they chose to move in a different direction, but we're still good friends with them. (They did accept the idea of custom blocks, but at least so far, only for command blocks, not reporters.)
Snap! is not just a copy of Scratch. It is extended with several features that enable it to be used for the serious study of computer science, at secondary school to early university level (ages 11-20, more or less). The most important of these ideas is first class procedures: you can make a procedure (a block or script) the value of a variable, or an item in a list:
or an input to a block, or the value that a reporter reports. This means that users can write control structures such as
for loops in Snap! itself:
Other significant ideas we've added are first class lists, first class sprites with prototype-based inheritance, first class costumes, first class sounds, and first class continuations. Version 6.0 added the extension of scalar functions to vectors and matrices:
For all the details on Snap!, read the Reference Manual or take this guided tour.