campaign Firmware v3.00 just landed — big performance gains and a headp of new features! Install nowarrow_forward

Welcome to Badgeware!

Badgeware is a MicroPython-powered platform for our family of programmable badges — Tufty, Badger, and Blinky. Write a short Python script, copy it to your badge over USB, and it runs. No toolchains, no compilers, no fuss.

Your badge comes preloaded with a set of apps, but the real fun starts when you write your own. Everything is built around a simple loop: draw to the screen, call badge.update() to show the frame and read the buttons, then go round again — and you've got an app. If you've ever written a few lines of Python, you already have everything you need to get started.

This site is your guide. You'll find step-by-step tutorials to get you up and running, feature guides that go deeper on topics like sprites, text, and vector shapes, and a full API reference for when you need the details. Whether you're building a name badge for a conference, a tiny game to pass the time, or a dashboard that pulls live data over Wi-Fi — it all starts here.

New here? Head straight to Meet your badge to get acquainted with the hardware.

Meet the badges

There are three badges in the family, each with its own kind of display — but they all run the same Badgeware API, so code you write for one will mostly work on the others. Where they differ is resolution, colour, and how the screen refreshes.

Tufty Badger Blinky
The versatile all-rounder — smooth, vivid, and up for anything graphical. The low-power one — sips battery and idles for up to 100 days. The little showpiece — tiny, bright, and made to be worn.
Full-colour IPS LCD E-paper display Greyscale LED matrix
320×240 (or 160×120) 264×176 39×26
Full RGB colour Black, white + 2 greys Bright white LEDs
Redraws continuously Updates on demand, sleeps between Redraws continuously
Great for games, animation, and rich UIs Great for name badges, dashboards, and e-readers Great for scrolling text, pixel art, and notifications

Shared hardware

Despite their different displays, all three badges share the same core hardware and software platform:

Processor RP2350 dual-core ARM Cortex-M33 @ 200MHz with hardware floating point
Memory 16MB flash for firmware, code, and assets, plus 8MB PSRAM for runtime use
Connectivity 2.4GHz Wi-Fi and Bluetooth 5 for downloading data, syncing, or communicating between badges
Power 1000mAh rechargeable battery with USB-C charging
Expansion Qw/ST port for connecting breakout accessories, SWD port for debugging
Inputs Five front-facing buttons, plus RESET and BOOTSEL on the back
Software The same Badgeware MicroPython API, so code written for one badge runs on the others with minimal changes
Disk Mode Double-tap RESET to mount the badge as a USB drive, drag your files on, eject, and go

A taste of Badgeware

Every app is a loop that draws a frame, then calls badge.update() to show it. Here's a quick example — a bouncing ball with a greeting, in about 20 lines:

x, y = 80, 60
dx, dy = 2, 1

screen.font = font.smart

while True:
    x, y = x + dx, y + dy
    if x < 5 or x > screen.width - 5:  dx = -dx
    if y < 5 or y > screen.height - 5: dy = -dy

    screen.pen = color.navy
    screen.clear()

    screen.pen = color.orange
    screen.circle(x, y, 10)

    screen.pen = color.white
    screen.text("Hello, Badgeware!", 24, 50)

    badge.update()

That's a complete, runnable app — copy it onto your badge and it just works. Everything else builds on these ideas: drawing to the screen, reading buttons, and calling badge.update() each time round the loop.

Where to next

  • Meet your badge — a quick tour of the hardware and what it can do.
  • Creating your first app — turn your code into a real app: the folder layout, an icon, and installing it on your badge.
  • Coding for the different badges — how Tufty, Badger, and Blinky differ, and how to write code that runs on all three.
  • Guides — go deeper on sprites, text, vector shapes, animation, and more.
  • API reference — the details, for when you need them.

Happy hacking!