Bblog

What's in the box: 29 packages

Sprites, particles, state machines, GPS, LoRa, Wi-Fi and the boards themselves. Every part of Deki beyond the core is a package, and a project takes only the ones it uses.

posted
by
DevKirbyrawr
read
3 min
An emitter and the particles leaving it.

The Deki engine on its own is small on purpose: objects, components, the lifecycle and the asset system. Everything you see and everything that talks to hardware is a package. Open the Package Manager, add one, and its components are in the inspector. Leave one out and it is not in the firmware.

Drawings of twelve of the packages: 2d, particles, tween, fsm, input, rendering, gps, lora, wifi, imu, esp32-integration and sdl3-integration

Here is what there is today.

Making things move

  • 2d: sprites, text (bitmap fonts, and TTF baked in the editor), sprite-sheet animation, gradients, 9-slice panels, buttons, scrolling, clipping and rollers.
  • particles: emitters with shapes, gravity, drag and modifiers over each particle’s life, built as a node graph.
  • tween: 30-odd easing curves, from the inspector or from code.
  • fsm: state machines drawn on a canvas, each state with its own flow of actions.
  • input: touch, mouse, keys, trackballs and I2C keyboards, routed to whatever component wants them.
  • rendering: the camera and the renderer the rest draw through.
  • 3d: experimental, software-rasterised meshes sharing the 2D framebuffer, with .obj import.
  • nodegraph: the graph canvas particles and state machines are drawn on, for any package that wants one.
  • tiledmapeditor-integration: drop in a map made in Tiled and it streams in chunks.

Talking to the world

  • gps: any NMEA receiver. It finds the receiver’s speed by itself and reports satellites and altitude as well as the position.
  • lora: new in this release. Sends and receives with a Semtech SX1262, the duty cycle enforced.
  • wifi and ble: Wi-Fi and Bluetooth LE behind one interface each, with the board supplying the radio.
  • http and json: fetch something and read it.
  • imu, rtc, audio and sdcard: motion, time, sound and storage.
  • i2c, i2s, uart and gpio: the buses the rest sit on, configured once per board.

Running somewhere

  • esp32-integration: builds and flashes through ESP-IDF, from the editor.
  • lovyangfx-integration: SPI, parallel and QSPI displays and their touch panels.
  • sdl3-integration and desktop-integration: a window, input and files on Windows and Linux.
  • tactility-integration: a Deki game as an app inside the Tactility firmware, launched from its home screen instead of flashed on its own.
  • lilygo-boards: two boards ready to build for, the T-Deck Plus and the T-Display S3 AMOLED. A board is a package too, and adding one is mostly a description of its hardware.

How a project gets them

A project names the packages it uses and the editor fetches the rest: each package lists what it needs, and those come too. They are installed from git tags listed in the registry, so a project builds the same next year as it does today. When you build for a device, a package feature nothing in the project uses is left out of the firmware.

Every package is its own repository under Apache 2.0, and the catalog has a page for each. Missing one? A package is a folder with a package.json and some C++; the existing ones are the best examples.

← all posts