SandCastleIcon.png This article has links to websites or programs outside of Scratch and Wikipedia. Remember to stay safe while using the internet, as we cannot guarantee the safety of other websites.
Archive.png This article or section documents something not included in the current version of Scratch (3.0). It is only useful from a historical perspective.

Morphic is a graphics system used by Scratch 1.x which uses graphical objects called Morphs for simplified GUI-building. It was originally developed by Randy Smith and John Maloney (a Scratch Team member and Squeak developer) for the programming language Self, but later rewritten in Squeak.

Morphic Inheritance

Morphic systems have an inheritance system: a morph can inherit from another, improving on the parent. Morphic inheritance begins at the root class Morph. Each Morph is a subclass of Morph either directly or indirectly. For example, the hypothetical ResizeHandleMorph is a subclass of DraggableObjectMorph which is a subclass of Morph.

An example of inheritance

A hypothetical inheritance of Morphs is shown below:

            CompoundMorph  (contains  many  Morphs)
                        FrameMorph  (rectangular  frame,  resizable  and  draggable)
                                    WorldMorph  (contains  all  other  Morphs)
                        WindowMorph  (graphical  window)
            DraggableMorph  (is  draggable)
                                    WindowResizeHandleMorph  (for  windows)

Inheritance is used to either improve upon a morph or specialize it for some purpose. The base Morphs should have lots of simple functionality which is then used by higher-level Morphs, which reduces code redundancy.


Morphic.js is a Morphic environment written entirely in JavaScript using only the HTML5 Canvas APIs. It was created by Jens Mönig for BYOB 4.0 (a.k.a Snap!), but has found other uses on the website, such as the HTML Viewer, now JsScratch. Morphic.js was inspired by the Squeak Morphic system.

Some help can be found here[dead link].

Creating Morphs in Squeak

Via Code

A morph is a special form of a generic Class, but it is a subclass of Morph rather than Object (root class). To open a new Morph, use the code (for a BouncingAtomsMorph):

BouncingAtomsMorph new openInWorld.

To create customized morphs, see Squeak Tutorial: Morphic classes.

Via GUI editing

To access the Scratch Morphs, one must first use the Shift-Click R method and turn fill screen off.

Open the World menu and pick the choice labeled "new morph..."

Clicking on that option then opens the "Add a new morph" menu. This has a list of all subclasses of Morph on which if you click, you get an instance of that morph to place anywhere on the World.

See Also