diff --git a/python_payload/apps/cap_touch_demo.py b/python_payload/apps/cap_touch_demo.py
index 1252fbae2e34b28a04391bb6e55cbc735d94b999..a3dea8fa3c8c050a24ce03897b4dac2094995342 100644
--- a/python_payload/apps/cap_touch_demo.py
+++ b/python_payload/apps/cap_touch_demo.py
@@ -1,7 +1,7 @@
-from st4m import application, logging
-from st4m.goose import List
-from st4m.ui.ctx import Ctx
-from st4m.input import InputState
+from st3m import application, logging
+from st3m.goose import List
+from st3m.ui.ctx import Ctx
+from st3m.input import InputState
 
 log = logging.Log(__name__, level=logging.INFO)
 log.info("import")
diff --git a/python_payload/apps/demo_worms4.py b/python_payload/apps/demo_worms4.py
index b0d9de8c66a197077a1f87a9faeefea2f2ffbae3..f121b01d455351ecfb01ada1332fdf8d345e940d 100644
--- a/python_payload/apps/demo_worms4.py
+++ b/python_payload/apps/demo_worms4.py
@@ -4,11 +4,11 @@ import time
 import math
 
 # flow3r imports
-from st4m import application
-from st4m import Ctx, InputState
-from st4m.property import BLUE, WHITE
-from st4m.goose import Optional
-from st4m.utils import xy_from_polar
+from st3m import application
+from st3m import Ctx, InputState
+from st3m.property import BLUE, WHITE
+from st3m.goose import Optional
+from st3m.utils import xy_from_polar
 
 
 tau = 2 * math.pi
diff --git a/python_payload/apps/harmonic_demo.py b/python_payload/apps/harmonic_demo.py
index 46398229f4992fe7e078a5a6b94d651504f5d2c3..4f5c3ac541fb90e9ba88820bf888c8d11d06dd5f 100644
--- a/python_payload/apps/harmonic_demo.py
+++ b/python_payload/apps/harmonic_demo.py
@@ -3,9 +3,9 @@ import captouch
 import leds
 import hardware
 
-from st4m.ui.ctx import Ctx
-from st4m.goose import List
-from st4m.input import InputState
+from st3m.ui.ctx import Ctx
+from st3m.goose import List
+from st3m.input import InputState
 
 chords = [
     [-4, 0, 3, 8, 10],
@@ -16,7 +16,7 @@ chords = [
 ]
 
 
-from st4m.application import Application
+from st3m.application import Application
 
 
 class HarmonicApp(Application):
diff --git a/python_payload/apps/melodic_demo.py b/python_payload/apps/melodic_demo.py
index 78000e5dd3dfa0a5e71fcc7f5b6d829670edc470..5c3d2110aca1c7581804ff4d3423cbbc369cf6b6 100644
--- a/python_payload/apps/melodic_demo.py
+++ b/python_payload/apps/melodic_demo.py
@@ -3,9 +3,9 @@ from hardware import *
 import captouch
 import leds
 
-from st4m.goose import List
-from st4m.input import InputState
-from st4m.ui.ctx import Ctx
+from st3m.goose import List
+from st3m.input import InputState
+from st3m.ui.ctx import Ctx
 
 octave = 0
 synths: List[tinysynth] = []
@@ -78,7 +78,7 @@ def foreground() -> None:
     adjust_playing_field_to_octave()
 
 
-from st4m.application import Application
+from st3m.application import Application
 
 
 # TODO(q3k): properly port this app
diff --git a/python_payload/apps/nick.py b/python_payload/apps/nick.py
index 085f6cdfb4fd7b412f4ed273e295d0e610b16cc2..476fabc022235bbc141a11a7976f9721e4e68f2d 100644
--- a/python_payload/apps/nick.py
+++ b/python_payload/apps/nick.py
@@ -1,8 +1,8 @@
-from st4m.application import Application
-from st4m.property import PUSH_RED, GO_GREEN, BLACK
-from st4m.goose import Dict, Any
-from st4m.ui.ctx import Ctx
-from st4m.input import InputState
+from st3m.application import Application
+from st3m.property import PUSH_RED, GO_GREEN, BLACK
+from st3m.goose import Dict, Any
+from st3m.ui.ctx import Ctx
+from st3m.input import InputState
 import leds
 
 import json
diff --git a/python_payload/main.py b/python_payload/main.py
index b8c9d4de6e5c5240d94e4e3102ac70cd2152262f..44d53748545c61df99df44963980060cac5dce5e 100644
--- a/python_payload/main.py
+++ b/python_payload/main.py
@@ -2,23 +2,23 @@ import time, gc
 
 ts_start = time.time()
 
-from st4m import logging
+from st3m import logging
 
 log = logging.Log(__name__, level=logging.INFO)
 log.info(f"starting main")
 log.info(f"free memory: {gc.mem_free()}")
 
-import st4m
+import st3m
 
-from st4m.goose import Optional, List, ABCBase, abstractmethod
-from st4m.ui.view import View, ViewManager, ViewTransitionBlend
-from st4m.ui.menu import (
+from st3m.goose import Optional, List, ABCBase, abstractmethod
+from st3m.ui.view import View, ViewManager, ViewTransitionBlend
+from st3m.ui.menu import (
     MenuItemBack,
     MenuItemForeground,
     MenuItemNoop,
 )
 
-from st4m.ui.elements.menus import FlowerMenu, SimpleMenu, SunMenu
+from st3m.ui.elements.menus import FlowerMenu, SimpleMenu, SunMenu
 
 log.info("import apps done")
 log.info(f"free memory: {gc.mem_free()}")
@@ -26,7 +26,7 @@ ts_end = time.time()
 log.info(f"boot took {ts_end-ts_start} seconds")
 
 # TODO persistent settings
-from st4m.system import audio, captouch
+from st3m.system import audio, captouch
 
 log.info("calibrating captouch, reset volume")
 captouch.calibration_request()
@@ -95,7 +95,7 @@ menu_main = SunMenu(
 
 vm.push(menu_main)
 
-reactor = st4m.Reactor()
+reactor = st3m.Reactor()
 reactor.set_top(vm)
 # reactor.set_top(pr)
 reactor.run()
diff --git a/python_payload/main_st4m.py b/python_payload/main_st4m.py
deleted file mode 100644
index 437e8e2b02984326a3e7e83a377f7792ede1602c..0000000000000000000000000000000000000000
--- a/python_payload/main_st4m.py
+++ /dev/null
@@ -1,275 +0,0 @@
-"""
-Experimental/Research UI/UX framework (st4m).
-
-To run, rename this file to main.py.
-
-See st4m/README.md for more information.
-"""
-
-
-import st4m
-
-from st4m.goose import Optional, List, ABCBase, abstractmethod
-from st4m.ui.view import View, ViewManager, ViewTransitionBlend
-from st4m.ui.menu import (
-    MenuItem,
-    MenuController,
-    MenuItemBack,
-    MenuItemForeground,
-    MenuItemNoop,
-)
-from st4m import Responder, InputState, Ctx
-
-import math, hardware
-
-from st4m.ui.elements.menus import SunMenu, SimpleMenu
-
-vm = ViewManager(ViewTransitionBlend())
-
-menu_music = SimpleMenu(
-    [
-        MenuItemBack(),
-        MenuItemNoop("Harmonic"),
-        MenuItemNoop("Melodic"),
-        MenuItemNoop("TinySynth"),
-        MenuItemNoop("CrazySynth"),
-        MenuItemNoop("Sequencer"),
-    ],
-    vm,
-)
-
-menu_apps = SimpleMenu(
-    [
-        MenuItemBack(),
-        MenuItemNoop("captouch"),
-        MenuItemNoop("worms"),
-    ],
-    vm,
-)
-
-
-class USBIcon(Responder):
-    """
-    Found in the bargain bin at an Aldi Süd.
-    """
-
-    def draw(self, ctx: Ctx) -> None:
-        ctx.gray(1.0)
-        ctx.arc(-90, 0, 20, 0, 6.28, 0).fill()
-        ctx.line_width = 10.0
-        ctx.move_to(-90, 0).line_to(90, 0).stroke()
-        ctx.move_to(100, 0).line_to(70, 15).line_to(70, -15).line_to(100, 0).fill()
-        ctx.move_to(-50, 0).line_to(-10, -40).line_to(20, -40).stroke()
-        ctx.arc(20, -40, 15, 0, 6.28, 0).fill()
-        ctx.move_to(-30, 0).line_to(10, 40).line_to(40, 40).stroke()
-        ctx.rectangle(40 - 15, 40 - 15, 30, 30).fill()
-
-    def think(self, ins: InputState, delta_ms: int) -> None:
-        pass
-
-
-class REPLIcon(Responder):
-    def draw(self, ctx: Ctx) -> None:
-        ctx.gray(1.0)
-        ctx.line_width = 10.0
-        for i in range(3):
-            x = i * 40
-            ctx.move_to(-60 + x, -60).line_to(0 + x, 0).line_to(-60 + x, 60).stroke()
-
-    def think(self, ins: InputState, delta_ms: int) -> None:
-        pass
-
-
-class Sun(Responder):
-    """
-    A rotating sun widget.
-    """
-
-    def __init__(self) -> None:
-        self.x = 0.0
-        self.y = 0.0
-        self.size = 50.0
-        self.ts = 1.0
-
-    def think(self, ins: InputState, delta_ms: int) -> None:
-        self.ts += delta_ms
-        pass
-
-    def draw(self, ctx: Ctx) -> None:
-        nrays = 10
-        angle_per_ray = 6.28 / nrays
-        for i in range(nrays):
-            angle = i * angle_per_ray + self.ts / 4000
-            angle %= 3.14159 * 2
-
-            if angle > 2 and angle < 4:
-                continue
-
-            ctx.save()
-            ctx.rgb(0.5, 0.5, 0)
-            ctx.line_width = 30
-            ctx.translate(-120, 0).rotate(angle)
-            ctx.move_to(20, 0)
-            ctx.line_to(260, 0)
-            ctx.stroke()
-            ctx.restore()
-
-        ctx.save()
-        ctx.rgb(0.92, 0.89, 0)
-        ctx.translate(-120, 0)
-
-        ctx.arc(self.x, self.y, self.size, 0, 6.29, 0)
-        ctx.fill()
-        ctx.restore()
-
-
-class MainMenu(MenuController):
-    """
-    A circular menu with a rotating sun.
-    """
-
-    __slots__ = (
-        "_ts",
-        "_sun",
-    )
-
-    def __init__(self, items: List[MenuItem], vm: ViewManager) -> None:
-        self._ts = 0
-        self._sun = Sun()
-        super().__init__(items, vm)
-
-    def think(self, ins: InputState, delta_ms: int) -> None:
-        super().think(ins, delta_ms)
-        self._sun.think(ins, delta_ms)
-        self._ts += delta_ms
-
-    def _draw_text_angled(
-        self, ctx: Ctx, text: str, angle: float, activity: float
-    ) -> None:
-        size = lerp(20, 40, activity)
-        color = lerp(0, 1, activity)
-        if color < 0.01:
-            return
-
-        ctx.save()
-        ctx.translate(-120, 0).rotate(angle).translate(140, 0)
-        ctx.font_size = size
-        ctx.rgba(1.0, 1.0, 1.0, color).move_to(0, 0).text(text)
-        ctx.restore()
-
-    def draw(self, ctx: Ctx) -> None:
-        ctx.gray(0)
-        ctx.rectangle(-120, -120, 240, 240).fill()
-
-        self._sun.draw(ctx)
-
-        ctx.font_size = 40
-        ctx.text_align = ctx.CENTER
-        ctx.text_baseline = ctx.MIDDLE
-
-        angle_per_item = 0.4
-
-        current = self._scroll_controller.current_position()
-
-        for ix, item in enumerate(self._items):
-            rot = (ix - current) * angle_per_item
-            self._draw_text_angled(ctx, item.label(), rot, 1 - abs(rot))
-
-
-class SimpleMenu(MenuController):
-    """
-    A simple line-by-line menu.
-    """
-
-    def draw(self, ctx: Ctx) -> None:
-        ctx.gray(0)
-        ctx.rectangle(-120, -120, 240, 240).fill()
-
-        ctx.text_align = ctx.CENTER
-        ctx.text_baseline = ctx.MIDDLE
-
-        current = self._scroll_controller.current_position()
-
-        ctx.gray(1)
-        for ix, item in enumerate(self._items):
-            offs = (ix - current) * 30
-            size = lerp(30, 20, abs(offs / 20))
-            ctx.font_size = size
-            ctx.move_to(0, offs).text(item.label())
-
-
-menu_music = SimpleMenu(
-    [
-        MenuItemBack(),
-        MenuItemNoop("Harmonic"),
-        MenuItemNoop("Melodic"),
-        MenuItemNoop("TinySynth"),
-        MenuItemNoop("CrazySynth"),
-        MenuItemNoop("Sequencer"),
-    ],
-    vm,
-)
-
-menu_apps = SimpleMenu(
-    [
-        MenuItemBack(),
-        MenuItemNoop("captouch"),
-        MenuItemNoop("worms"),
-    ],
-    vm,
-)
-
-menu_main = SunMenu(
-    [
-        MenuItemForeground("Music", menu_music),
-        MenuItemForeground("Apps", menu_apps),
-        MenuItemNoop("Settings"),
-    ],
-    vm,
-)
-
-vm.push(menu_main)
-
-
-class Viewport(Responder):
-    def __init__(self, vm: ViewManager) -> None:
-        self.vm = vm
-        self.usb = USBIcon()
-        self.repl = REPLIcon()
-        self.visible: List[Responder] = []
-
-    def think(self, ins: InputState, delta_ms: int) -> None:
-        self.vm.think(ins, delta_ms)
-
-        self.visible = []
-        usb = hardware.usb_connected()
-        console = hardware.usb_console_active()
-        if not usb:
-            console = False
-        if usb:
-            self.visible.append(self.usb)
-        # if console:
-        #    self.visible.append(self.repl)
-
-        for v in self.visible:
-            v.think(ins, delta_ms)
-
-    def draw(self, ctx: Ctx) -> None:
-        self.vm.draw(ctx)
-
-        nicons = len(self.visible)
-        dist = 20
-        width = (nicons - 1) * dist
-        x0 = width / -2
-        for i, v in enumerate(self.visible):
-            x = x0 + i * dist
-            ctx.save()
-            ctx.translate(x, -100)
-            ctx.scale(0.1, 0.1)
-            v.draw(ctx)
-            ctx.restore()
-
-
-reactor = st4m.Reactor()
-reactor.set_top(Viewport(vm))
-reactor.run()
diff --git a/python_payload/mypystubs/hardware.pyi b/python_payload/mypystubs/hardware.pyi
index e6aab870e8d8385648cb89201c571abf521ad9bd..267e3628a78cbfc7d48e86b5e514c0ba3518d484 100644
--- a/python_payload/mypystubs/hardware.pyi
+++ b/python_payload/mypystubs/hardware.pyi
@@ -1,6 +1,6 @@
 import time
 
-from st4m.ui.ctx import Ctx
+from st3m.ui.ctx import Ctx
 
 def freertos_sleep(ms: int) -> None: ...
 def get_ctx() -> Ctx: ...
diff --git a/python_payload/st3m/__init__.py b/python_payload/st3m/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..d10e6483253ff0043a008d0b091fffb787b948c2
--- /dev/null
+++ b/python_payload/st3m/__init__.py
@@ -0,0 +1,11 @@
+from st3m.reactor import Reactor, Responder
+from st3m.ui.ctx import Ctx
+from st3m.input import InputState, InputController
+
+__all__ = [
+    "Reactor",
+    "Responder",
+    "InputState",
+    "InputController",
+    "Ctx",
+]
diff --git a/python_payload/st4m/application.py b/python_payload/st3m/application.py
similarity index 81%
rename from python_payload/st4m/application.py
rename to python_payload/st3m/application.py
index 165ab5fccca80f811e964e5b82d764c6784c1aed..0ea4e0372beebcce3f4d7caec117d09e8267290a 100644
--- a/python_payload/st4m/application.py
+++ b/python_payload/st3m/application.py
@@ -1,6 +1,6 @@
-from st4m.ui.view import ViewWithInputState, ViewTransitionSwipeRight, ViewManager
-from st4m.input import InputState
-from st4m.goose import Optional
+from st3m.ui.view import ViewWithInputState, ViewTransitionSwipeRight, ViewManager
+from st3m.input import InputState
+from st3m.goose import Optional
 
 
 class Application(ViewWithInputState):
diff --git a/python_payload/st4m/goose.py b/python_payload/st3m/goose.py
similarity index 99%
rename from python_payload/st4m/goose.py
rename to python_payload/st3m/goose.py
index 8fb29609b4f36d94518a1b54729918f629f4ef7a..979cba2e7154855955355f70b7c4bc52d84fcab5 100644
--- a/python_payload/st4m/goose.py
+++ b/python_payload/st3m/goose.py
@@ -1,5 +1,5 @@
 """
-Goose implements Goose Typing (tm), a set of shims which allows the st4m
+Goose implements Goose Typing (tm), a set of shims which allows the st3m
 codebase to use both Python type annotations, Abstract Base Classes and run
 under Micropython.
 """
diff --git a/python_payload/st4m/input.py b/python_payload/st3m/input.py
similarity index 99%
rename from python_payload/st4m/input.py
rename to python_payload/st3m/input.py
index b85f918a762d464e46f9eefa6605ae88002fffcc..6842b50839f475cd1db1034454c3582ac337b2dc 100644
--- a/python_payload/st4m/input.py
+++ b/python_payload/st3m/input.py
@@ -1,5 +1,5 @@
-from st4m.goose import List, Optional, Enum, Tuple
-from st4m.ui.ctx import Ctx
+from st3m.goose import List, Optional, Enum, Tuple
+from st3m.ui.ctx import Ctx
 
 import hardware
 import captouch
diff --git a/python_payload/st4m/logging.py b/python_payload/st3m/logging.py
similarity index 97%
rename from python_payload/st4m/logging.py
rename to python_payload/st3m/logging.py
index a5e37649846aea70c8a8b7dbc1dd0653dc118dc8..64fce19d9334ba22ce5e75840c59bd53f677265a 100644
--- a/python_payload/st4m/logging.py
+++ b/python_payload/st3m/logging.py
@@ -1,6 +1,6 @@
 import sys
 import time
-from st4m.goose import Enum
+from st3m.goose import Enum
 
 
 class Level(Enum):
diff --git a/python_payload/st4m/property.py b/python_payload/st3m/property.py
similarity index 100%
rename from python_payload/st4m/property.py
rename to python_payload/st3m/property.py
diff --git a/python_payload/st4m/reactor.py b/python_payload/st3m/reactor.py
similarity index 95%
rename from python_payload/st4m/reactor.py
rename to python_payload/st3m/reactor.py
index 30f1e22436571b98b4c33b9762ed2bdc92b246b3..0957f7f99df8f89e4312f61a3654ec59a0944a28 100644
--- a/python_payload/st4m/reactor.py
+++ b/python_payload/st3m/reactor.py
@@ -1,6 +1,6 @@
-from st4m.goose import ABCBase, abstractmethod, List, Optional
-from st4m.input import InputState
-from st4m.ui.ctx import Ctx
+from st3m.goose import ABCBase, abstractmethod, List, Optional
+from st3m.input import InputState
+from st3m.ui.ctx import Ctx
 
 import time, hardware
 
@@ -50,7 +50,7 @@ class Responder(ABCBase):
 
 class Reactor:
     """
-    The Reactor is the main Micropython scheduler of the st4m system and any
+    The Reactor is the main Micropython scheduler of the st3m system and any
     running payloads.
 
     It will attempt to run a top Responder with a fixed tickrate a framerate
diff --git a/python_payload/st4m/system.py b/python_payload/st3m/system.py
similarity index 100%
rename from python_payload/st4m/system.py
rename to python_payload/st3m/system.py
diff --git a/python_payload/st4m/ui/__init__.py b/python_payload/st3m/ui/__init__.py
similarity index 100%
rename from python_payload/st4m/ui/__init__.py
rename to python_payload/st3m/ui/__init__.py
diff --git a/python_payload/st4m/ui/ctx.py b/python_payload/st3m/ui/ctx.py
similarity index 98%
rename from python_payload/st4m/ui/ctx.py
rename to python_payload/st3m/ui/ctx.py
index 7119f205d3157721035212e87c4654de555a034d..094e336084c0debaa18ad62f7e613436f1027524 100644
--- a/python_payload/st4m/ui/ctx.py
+++ b/python_payload/st3m/ui/ctx.py
@@ -1,14 +1,14 @@
-from st4m.goose import ABCBase, abstractmethod, List
+from st3m.goose import ABCBase, abstractmethod, List
 
 
 class Ctx(ABCBase):
     """
-    Ctx is the rendering/rasterization API used by st4m.
+    Ctx is the rendering/rasterization API used by st3m.
 
     It's a WebCanvas-style vector API, with an implicit pen which can be moved
     and can draw lines, arcs, text, etc.
 
-    In st4m, the Ctx object is backed by a drawlist generator. That is, any
+    In st3m, the Ctx object is backed by a drawlist generator. That is, any
     operation performed on the ctx object will cause an entry to be added to an
     in-memory draw list. Then, when the rasterizer is ready, it will rasterize
     said drawlist to pixels in a separate thread.
diff --git a/python_payload/st4m/ui/elements/__init__.py b/python_payload/st3m/ui/elements/__init__.py
similarity index 100%
rename from python_payload/st4m/ui/elements/__init__.py
rename to python_payload/st3m/ui/elements/__init__.py
diff --git a/python_payload/st4m/ui/elements/menus.py b/python_payload/st3m/ui/elements/menus.py
similarity index 92%
rename from python_payload/st4m/ui/elements/menus.py
rename to python_payload/st3m/ui/elements/menus.py
index 7afab42b6131e091d0bda9a8697496f31baf2708..69f3414daf631a8876a7e9f21022af6801cab150 100644
--- a/python_payload/st4m/ui/elements/menus.py
+++ b/python_payload/st3m/ui/elements/menus.py
@@ -1,11 +1,11 @@
-from st4m.goose import Optional, List, ABCBase, abstractmethod
-from st4m.ui.view import ViewManager
-from st4m.ui.elements.visuals import Sun, GroupRing, FlowerIcon
-from st4m.ui.menu import MenuController, MenuItem
+from st3m.goose import Optional, List, ABCBase, abstractmethod
+from st3m.ui.view import ViewManager
+from st3m.ui.elements.visuals import Sun, GroupRing, FlowerIcon
+from st3m.ui.menu import MenuController, MenuItem
 
-from st4m import Ctx, InputState
+from st3m import Ctx, InputState
 
-from st4m.utils import lerp, tau
+from st3m.utils import lerp, tau
 import math
 
 
diff --git a/python_payload/st4m/ui/elements/visuals.py b/python_payload/st3m/ui/elements/visuals.py
similarity index 96%
rename from python_payload/st4m/ui/elements/visuals.py
rename to python_payload/st3m/ui/elements/visuals.py
index 64f68d045e1b2fef7c714ac6624f505d594eaab9..760801a86422419f7b1cf442032ffbe4f900605c 100644
--- a/python_payload/st4m/ui/elements/visuals.py
+++ b/python_payload/st3m/ui/elements/visuals.py
@@ -1,7 +1,7 @@
-from st4m.utils import xy_from_polar, tau
-from st4m.property import PUSH_RED, GO_GREEN, BLACK
-from st4m.goose import List, Optional
-from st4m import Responder, Ctx, InputState
+from st3m.utils import xy_from_polar, tau
+from st3m.property import PUSH_RED, GO_GREEN, BLACK
+from st3m.goose import List, Optional
+from st3m import Responder, Ctx, InputState
 
 
 import random
diff --git a/python_payload/st4m/ui/interactions.py b/python_payload/st3m/ui/interactions.py
similarity index 98%
rename from python_payload/st4m/ui/interactions.py
rename to python_payload/st3m/ui/interactions.py
index 0bfcb74ef3eb89bd8c6bf5c0a6916ee63d0006cc..488d4648e649e8430d4823b1bd6f513b41ce8b18 100644
--- a/python_payload/st4m/ui/interactions.py
+++ b/python_payload/st3m/ui/interactions.py
@@ -1,11 +1,11 @@
-import st4m
+import st3m
 
-from st4m.input import InputState
-from st4m.ui.ctx import Ctx
-from st4m import Responder
+from st3m.input import InputState
+from st3m.ui.ctx import Ctx
+from st3m import Responder
 
 
-class ScrollController(st4m.Responder):
+class ScrollController(st3m.Responder):
     """
     ScrolLController is a controller for physically scrollable one-dimensional
     lists.
diff --git a/python_payload/st4m/ui/menu.py b/python_payload/st3m/ui/menu.py
similarity index 93%
rename from python_payload/st4m/ui/menu.py
rename to python_payload/st3m/ui/menu.py
index e076dedd52dce11e28f6bb4ca76de0c89384d636..329e90e55b692353d48241f1a5048ea10fb0fc57 100644
--- a/python_payload/st4m/ui/menu.py
+++ b/python_payload/st3m/ui/menu.py
@@ -1,17 +1,17 @@
-import st4m
+import st3m
 
-from st4m import Responder
-from st4m.goose import ABCBase, abstractmethod, List, Optional
-from st4m.input import InputState, InputController
-from st4m.ui.view import (
+from st3m import Responder
+from st3m.goose import ABCBase, abstractmethod, List, Optional
+from st3m.input import InputState, InputController
+from st3m.ui.view import (
     ViewWithInputState,
     View,
     ViewManager,
     ViewTransitionSwipeLeft,
     ViewTransitionSwipeRight,
 )
-from st4m.ui.interactions import ScrollController
-from st4m.ui.ctx import Ctx
+from st3m.ui.interactions import ScrollController
+from st3m.ui.ctx import Ctx
 
 
 class MenuItem(ABCBase):
diff --git a/python_payload/st4m/ui/view.py b/python_payload/st3m/ui/view.py
similarity index 97%
rename from python_payload/st4m/ui/view.py
rename to python_payload/st3m/ui/view.py
index da1948874465ab3cded8816ebe7f9582b0cd50d6..752f9d63bc242590ca85db5ee313fc0df5fece75 100644
--- a/python_payload/st4m/ui/view.py
+++ b/python_payload/st3m/ui/view.py
@@ -1,7 +1,7 @@
-from st4m.reactor import Responder
-from st4m.goose import ABCBase, abstractmethod, Optional, List
-from st4m.input import InputState, InputController
-from st4m.ui.ctx import Ctx
+from st3m.reactor import Responder
+from st3m.goose import ABCBase, abstractmethod, Optional, List
+from st3m.input import InputState, InputController
+from st3m.ui.ctx import Ctx
 
 
 class View(Responder):
diff --git a/python_payload/st4m/utils.py b/python_payload/st3m/utils.py
similarity index 100%
rename from python_payload/st4m/utils.py
rename to python_payload/st3m/utils.py
diff --git a/python_payload/st4m/README.md b/python_payload/st4m/README.md
deleted file mode 100644
index f1aafcbdb4226fbeddf9005a9c3bc56a97b012e7..0000000000000000000000000000000000000000
--- a/python_payload/st4m/README.md
+++ /dev/null
@@ -1,24 +0,0 @@
-st4m
-====
-
-Experimental, heavily-typed flow3r UI/UX framework.
-
-Proof of concept of:
- 1. Strongly typed Python (using MyPy) which is also used as docs.
- 2. A deep class hierarchy that is still performant enough.
- 3. Pretty UX.
-
-Does not implement application lifecycle, but that could be built upon
-View/ViewWithInput.
-
-Should be trickle-merged into st3m.
-
-Typechecking
-------------
-
-    MYPYPATH=$(pwd)/python_payload/mypystubs mypy python_payload/main_st4m.py --strict
-
-Running
--------
-
-Move `main_st4m.py` to `main.py` then either run on badge or in simulator.
diff --git a/python_payload/st4m/__init__.py b/python_payload/st4m/__init__.py
deleted file mode 100644
index 2aaabd2b504060d133ef481606cb34633af7feff..0000000000000000000000000000000000000000
--- a/python_payload/st4m/__init__.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from st4m.reactor import Reactor, Responder
-from st4m.ui.ctx import Ctx
-from st4m.input import InputState, InputController
-
-__all__ = [
-    "Reactor",
-    "Responder",
-    "InputState",
-    "InputController",
-    "Ctx",
-]