Snap! 12 Release

This is the changelog:

Snap! (BYOB) History

in development:

12.0.0:

  • New Features:
    • global zoom setting (“magnification”), scales everything seamlessly
      • new interactive “Magnification” dialog in the settings menu
      • magnification gestures: shift-scroll on Logo zooms, shift-double-click resets zoom to 1
      • new “zoom” api configuration key
    • templates
      • marking a starter project / puzzle as “template” removes its name when loading it (and lets users create their own projects based on the template)
      • projects based on a template let the user restore the visibility of global blocks in the template palette
      • template-projects can store their magnification level, block fade level, blocks zoom, language, design and theme and propagate them into the projects that are created from them
      • template-projects always open in edit mode (but still auto-run unless supressed)
      • “generate puzzle” automatically turns the project into a template
    • tutorials
      • open and run a scene inside a separate modeless window
      • new “Tutorials” library for positioning and scaling the tutorial window and interacting with the editor
      • “scn” extension category for cloned scenes and tutorials
      • new “scn_scale(num)” extension, scales and animates a launched tutorial, reports the scale if given no number or zero
      • new “scn_exit” extension, closes the tutorial dialog and redisplays the scenes in the corral
      • new “scn_position(pane, x, y)” extension, positions the tutorial dialog into the specified pane
      • new “scn_dimensions(pane)” extension for observing whether ide or tutorial panes have been resized
      • new “‘meta_current(asset)’” extension for tutorial needing to access the IDE for the current sprite, stage, scripts, category or tab
    • unringed blocks as data
      • new “expression” selector in block-attribute (metaprogramming) reporter
      • enables expressions (unringed blocks) to be CALLed and RUN
      • enabled unringed blocks to be shown in and dragged out of speech and result balloons
    • graphics & visualization
      • drawing and writing on sprites: new “(paint) on (surface)” command primitive in the pen category
      • new “pen_path(points, [fill, close]” extension for drawing precise, filled shapes
      • new “Draw Paths” library for directly drawing filled or stroked polylines and polygons without moving the pen sprite
      • new “Shapes” extension for working with geometrical figures, modeled after Pyret’s images. Under construction
    • OOP 2.0 (data objects)
      • “super” calls: using a ring as index inside the “ITEM … OF …” reporter answers a copy of the function (ring) that is bound to the list object in the second slot, enabling polymorphic methods, i.e. message dispatches to a “super class”
    • custom data types
      • include a ring entry named underscore + morph in data to specify a dynamic view
      • new “cst_morph(cst)” extension for specifying custom data type visualizations
      • include an entry named underscore + field in the data to specify a custom data type
      • integrated type-inferral for user defined data types
      • new “custom type” input slot for blocks
    • enforcing data types in input slots
      • new optional “reports” type declaration entry for custom reporters
      • new “enforce types” option for all custom blocks: only lets users drop reporters into input slots whose return type matches that of the slot
      • new general “enforce input types” preference setting for scenes / puzzles / microworlds
    • domain-specific languages (DSL) support
      • support for dynamic dropdown menus and read-only settings in variadic input slots
      • support for variadic upvars in custom blocks
      • new ‘parameter’ custom block input type, same as ‘upvar’, but doesn’t add a script variable when evaluated, supports variadicity
      • support for dynamically setting the contents of expanded variadic upvars and input slots by a user script in the block definition
      • support for user-scriptable rename-menus in upvars, including variadic ones (a single menu is repeated in each non-unevaluated slot, a list of menu-lists whose first item is an empty list gets repeated across all subslots)
      • new “360° angles” dial widget for mathematical bearings (zero is East, counterclockwise) instead of compass bearings
      • new “number unevaluated” special input slot for custom blocks
    • files
      • new general “dta_export(data, name, type)” extension (for csv, json, etc.)
      • new general “dta_import(raw?)” extension (for text files, csv, json etc.)
    • ui
      • change name and color of custom categories
      • new “blocks” and “speaker” symbols, icons for the sprite-editor tabs
      • new “hide empty categories” setting
      • “generate puzzle” automatically hides empty categories
      • added a black-gray-white palette to the bottom of the color picker for color input slots
      • new “blocks only” setting for costomized “functions-first” microworlds
    • more extensions
      • Edge AI Computer Vision extension - thank you, Bernat!
      • new “Tables” extension for working with tabular data sets, modeled after Pyret’s tables. Thanks, Shriram Krishnamurthi for your inspiration, feedback and advice!
      • new reporter version of “let” in the variables declaration extension
      • new “… times …” reporter in the neural networks library for quantifying results
      • new blocks to load costumes and sounds from a url in the web-services library, thanks, @-ego-lay-atman-bay!
      • new “cst_shrink-wrap(cst)” extension
      • new “ide_switch_to_palette(category)” extension
    • new help screens
      • new help screens for “combinations” and
      • “pipe” reporters, thanks, Brian and gang!
    • new set of costumes and backgrounds by Ketrina!
  • Notable Changes:
    • data types
      • enhanced “is … a …?” predicate to support dependent data types and user defined structs (ADTs)
    • ui
      • the green-flag button changes its color to red while any script has an error
      • keep result balloons “attached” to their originating block / script when scrolling
      • added icons to the IDE tabs (scripts, costumes, sounds)
      • added “plus” signs to the buttons in the corral bar to emphasize that a new sprite is created by clicking them
      • flat design mode now (again) supports rounded corners (sigh…)
      • dialog boxes are more bright and their buttons more discernible in bright mode
      • rearranged IDE settings menu items into submenus, thank you, Joan!
      • sprite icons no longer blur when the sprite size is reduced or the zoom level increases
      • sprite icons no longer display graphics effects, but the original costume
      • resizing the browser / window in presentation (“app”) mode scales the stage smoothly
      • removed “stage selected, no motion primitives” text from the palette to support sprite-less microworlds
      • turned “language”, “looks” and “microphone resolution” menus into settings-submenus
      • rearranged some slot types in the long form input dialog so default “Any type” is the first one top left
      • removed old photo costumes of people
    • blocks
      • removed landscape orientation of text-input slots
    • meta-programming
      • silently handle missing variable references in user-scripted dropdowns and expansion subslots by returning an empty list instead
      • removed “static” tag from the block-attribute getter
    • (EDC) Fancy Text
      • added automatic vertical scrolling to “fancy say / think” balloons
      • added optional “max height” input to “fancy say / think” library commands
    • speech recognition
      • new “tts_started” extension, reports (in a separate process) whether the user has started speaking in response to a “tts_recognize” query
      • TTS library: new “started speech response?” predicate
    • neural networks extension
      • added a custom visualization for the neural network data type to the neural networks extensions
      • refined normalization to handle redundant features (columns with all the same value)
    • in other extensions
      • took out rate limit in the Microblocks library, thanks, Bernat!
      • changed the evaluation semantics of the “let” block in the variables declaration extension to enable reuse of previously declared variables inside the same block
  • Notable Fixes:
    • always “normalize” SVGs on import, avoids “cut-off” costume parts
    • frequency distribution analysis library: fixed “plot bars” block to handle zero values gracefully
    • fixed occasional rendering artifacts on screens with a fractional devicePixelRatio
    • fixed some special cases for using “combine” on an empty list, thanks, @-rmunn!
    • neural networks extension: fixed normalization to disregard redundant features and no longer throw a divide-by-zero induced error
    • fixed a variable declaration error in the S4A-Connector extension, thank you, Joan!
  • Documentation Updates:
    • updated API.md with new “zoom” configuration key for global magnification
  • Translation Updates:
    • new Vietnamese translation, thank you, Serge Faure @-seeeerge !!
    • new Western Armenian translation, yay! Thanks to Avag Sayan and the Antrohoos Education Foundation !!
    • new British-English translation, thank you, Mark de Boer !!
    • Polish, thank you, @-P1neF0rest935 !
    • Chinese, thank you, @-Ayist14 !
    • Catalan, thanks, Joan!
    • German

Snap 12 isn’t in development, so you can remove that part.

Anyways, this is an awesome release, shoutout to @jens for all of his hard work.

Everyone, what’s your favourite new feature? Mine’s personally is the _morph feature!

i have too many favorites ngl

Like?

probably the British-English update and UI stuff :smiley:

it kinda annoys me that a normal dictionary with _morph doesn’t work normally, so my favorite is the [overdraw V] on [Sprite V] feature.
could someone explain to me what

this is?

Don’t forget the costumes icon.
Screenshot 2026-05-29 204929

icons!!!

Oh dang, I really need to update snapblocks now (don’t worry, I’ve already started working on it).

Hi, someone had an example of a project with tutorial ?

here:

I hit ctrl+F5 to clear cache

i open a brand new project: v12

i don’t see tutorial lib:

but, if i load the DEV version, i can see the lib…

Thank you

we’re currently exploring tutorials ourselves. We use them extensively for our separate “Snap! Schule” platform (in German), which features custom tailored puzzles-with tutorials for use in school (and the platform also lets you sign up classes of students, and it’s hosted in Germany and aheres to German data privacy laws).

That’ll be your browser stubbornly caching everything it possibly can. Go here and shift-refresh/ctrl-f5 to hard reload the page. This will update the library list, but not necessarily the libraries themselves.

To get the latest version of the streams library, for instance, I had to go to here and hard reload.

To find the link to the library you want to update, search (ctrl+f) here for "name": "[Insert Library Name]" and look at the fileName entry. Go to snap.berkeley.edu/snap/libraries/[insert file name].xml and hard reload.

Thank you very much, it solved my problem !

Using a ring instead of an index in ITEM … OF will give that ring the context of the dictionary provided in the list input:


untitled script pic (13)