I'm using snap! in my high school computer science class (11th grade, ~16 years old) and I'd like to reduce the features (~blocks) that snap! provides by default. Reasons:

  1. Simplify the interface
  2. Many blocks are not needed (not "allowed") according to the curriculum
  3. I'd like to have the students see/develop the need for some blocks that simplify tasks ("index of ... in list" would be a good example), and have them implement them on their own.

I started digging through the code, but there has to be an easier way?

  • 1
    $\begingroup$ I'm not super familiar with Snap! but it seems to me like it might be possible simply by removing elements from some of the files in the libraries directory? It appears that this file is a list of what functionality is in which XML file in the library folder. $\endgroup$
    – thesecretmaster
    Commented Mar 17, 2021 at 20:00
  • 3
    $\begingroup$ One of the creators is Brian Harvey of UCBerkeley. He has an active web page there with a visible email address. Maybe he would be willing to help. He is retired but spent his career catering to beginners. $\endgroup$
    – Buffy
    Commented Mar 17, 2021 at 20:42

2 Answers 2


Reviving this old question - there is now a feature to do this. Snap! v7.0 was released in December 2021, and has "block reducing" as described here.

A project creator can (1) create custom block palettes, or (2) filter/hide the blocks that are shown in the block palette. One of the options is to hide all blocks that are unused in the current project. This option can be changed at any time, and stays in place after saving and sharing the project.

This feature is as an easy way to produce a smaller, more focused environment to code in. That could easily be used for pedagogical reasons: remove distractions for novices; create a Parsons Problem; force students to build the blocks they need to get a job done; etc.

This feature is called a Snap! "microworld," maybe a reference to the early computing-education idea from Seymour Papert.

Release notes: https://github.com/jmoenig/Snap/releases/tag/v7.0.0

  • 1
    $\begingroup$ If OP is still around, I hope that they accept this answer. $\endgroup$
    – Ben I.
    Commented Dec 22, 2021 at 21:12
  • $\begingroup$ looks pretty promising! $\endgroup$
    – Jasper
    Commented Dec 23, 2021 at 7:58

This is a bit of a frame-challenge, but what I'm understanding from your question is that your goals here are to: 1) Not overwhelm your students and avoid them getting lost in a plethora of blocks they won't need, 2) Force students to understand how to implement more complex blocks themselves.

Have you considered instead of providing a restricted version of the language (which, could be complex to install and update and ensure every student is using the same version of), simply providing a list of "recommended" blocks? This could help to achieve your first goal, to act to guide students as to what they'll need for an assignment and avoid them being overwhelmed. And, this still allows students who want to explore a larger set of the languages features to do so if they want, something which I think should be encouraged.

As for your second goal, this depends on your class but it may be effective to simply create an assignment around implementing more complex built-in blocks and enforce the restriction specifically for that assignment.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.