
[{"content":"Bitsy is a tiny game engine for small games, worlds and stories. You paint rooms out of 8×8 pixel tiles, put characters and items in them, write what the characters say, and link rooms together. There is no code to write.\nA Bitsy room is 16×16 tiles of 8×8 pixels, which is exactly 128×128 pixels: the size of the VGC Zero screen. Games you make in the editor run on the handheld at their native resolution through Citsy, our Bitsy player.\nOpen the editor # The Bitsy editor is built into the Chili platform as the Creator.\nCreate an account on the Chili platform and verify your email address. You can open the editor without verifying, but you need a verified address to save. Sign in and open the Creator. You start with a new game. Changes save to your account automatically; the editor shows whether it is saving, saved, or could not save. Every game you save appears in the Projects tab of your profile. Choose New game there to start another one. Inside the editor, the game window\u0026rsquo;s load game lists the games saved on your account so you can switch between them.\nA tour of the editor # The editor is made of windows (the Bitsy editor calls them cards). The toolbar along the right edge shows or hides each one, and you can drag a window by its title bar to move it.\nThe room, paint and colors windows in a new game Window What it is for game Your game\u0026rsquo;s title, saving and loading (to your Chili account or as a file), and game settings like the font. room The game world. Place tiles, sprites and items, and switch between rooms. paint Draw the avatar, tiles, sprites and items. colors Edit the color palettes rooms use. dialog Write what sprites and items say, and add logic like conditions and variables. exits \u0026amp; endings Link rooms together and add endings. inventory Set what the player starts with, and watch items and variables while you play. find Search everything in your game by name. documentation The upstream Bitsy reference. Each window\u0026rsquo;s ? button opens its page. tune and blip Write background music for rooms and short sound effects. record gif Record a GIF of your game while it plays. The play button (the green triangle at the top of the toolbar) switches between editing and playing your game. Press it again to stop and go back to editing.\nEach window has its own page under Editor tools.\nThe words Bitsy uses # Avatar: the character the player controls. There is one per game. Tile: a piece of scenery. A tile can be a wall that the avatar cannot walk through. Sprite: a character or object the avatar can walk into to start a conversation. Item: something the avatar picks up by walking over it. It goes into the inventory. Exit: a spot in a room that moves the avatar to another room. Ending: a spot that ends the game with a final message. Next # Start building the world in Rooms.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/getting-started/","section":"Docs","summary":"What Bitsy is, how to open the editor in the Chili Creator, and a tour of its windows.","title":"Getting started with Bitsy","type":"docs"},{"content":" Play mode starts at the title screen The play button, the green triangle at the top of the toolbar, runs your game inside the room window. The window\u0026rsquo;s title bar turns red and reads playing\u0026hellip;. Press play again to stop and go back to editing.\nThe Creator plays your game with Citsy, the engine that runs Bitsy games on VGC Zero, so what you see here is what the handheld shows.\nControls # Action Keyboard VGC Zero Walk Arrow keys or WASD D-pad Talk, advance dialog Z A While you play # save image appears in the toolbar. It saves the current frame as your game\u0026rsquo;s cover picture on the platform. The inventory window updates live, so you can watch items and variables change. record gif can capture a GIF of what is on screen. Play always starts from the beginning: the title, then the room the avatar starts in.\nSee also: Test and publish your game.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/tools/play-mode/","section":"Docs","summary":"The play button: try your game in the editor with the same engine VGC Zero uses.","title":"Play mode","type":"docs"},{"content":" The game window, save tab The game window holds everything about the game as a whole. The text box at the top is the game\u0026rsquo;s title, the first thing the player sees when the game starts. Below it are three tabs.\nsave # Row Buttons What they do profile save game, load game Save to your Chili account, or open another game saved there. Changes also save to your account automatically. .html save game, load game Download the game as a web page anyone can open in a browser, or open such a file. .bitsy save data, load data Download the game as a plain text .bitsy file, or open one. This is the file VGC Zero plays. new game resets everything and starts an empty game. Save or download first if you want to keep what you have.\nload data also opens .bitsy files made in the standard Bitsy editor at bitsy.org.\nsettings # tool settings: the editor\u0026rsquo;s language, and whether font data shows in the data tab. game settings: the font (ASCII Small, Unicode European Small or Large, Unicode Asian, Arabic, or a custom .bitsyfont), text direction (left to right or right to left), and text mode: default draws text at 2× pixel size, chunky at 1×. export settings: the page color and size used when you save as .html. data # The raw text of your game in the .bitsy format. You can edit it directly, but be careful: a mistake here can break the game. Download a .bitsy backup first.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/tools/game/","section":"Docs","summary":"Your game’s title, saving and loading, game settings like the font, and the raw game data.","title":"Game","type":"docs"},{"content":"A room is one screen of your game: a 16×16 grid of tiles. A new game starts with one room, the avatar, a sample tile, a sample sprite and a sample item.\nA wall tile in the paint window, with walls turned on in the room window Paint a room # In the paint window, choose tile. A new game has one tile; draw on the large grid to change it. Click a pixel to fill it, click it again to clear it. In the room window, open the edit tab and make sure paint is selected. Click a square in the room to place the selected tile there. Click it again to remove it. To use a different tile, choose it in the paint window first. Use the arrows to step through your drawings, or add (the plus) to make a new one. pick in the room window selects the drawing you click on, so you can paint with it.\nTip: give drawings names in the text box at the top of the paint window. Names make them easy to find later in the find window and in dialog.\nWalls # Tick wall in the paint window to make the current tile solid. The avatar cannot walk onto a wall tile. Use walls for the edges of the room, trees, furniture and anything else the player should walk around.\nThe room window can highlight every wall tile: in its edit tab, turn on walls. grid next to it shows or hides the tile grid.\nAdd more rooms # The room window has the same arrows and buttons as the other windows: step to the previous or next room, add a room, duplicate the current one, or delete it. Name each room so you can tell them apart when you link them with exits.\nRooms are not connected until you add exits.\nColors # Each room uses a palette of three colors:\nbackground color for empty space and the unfilled pixels of every drawing, tile color for tiles, sprite color for the avatar, sprites and items. Edit a palette in the colors window: pick one of the three slots, then choose a color with the picker or type a hex code. You can add more palettes and choose which one a room uses in the room window\u0026rsquo;s colors tab. Different palettes per room are an easy way to make a forest feel different from a cave.\nAnimation # Tick animation in the paint window to give a drawing a second frame. Bitsy switches between frame 1 and frame 2 about every 400 milliseconds. Use it for water, flickering torches, or a character that bobs while it waits.\nNext # Draw the player and the characters they meet in The avatar and sprites.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/rooms/","section":"Docs","summary":"Paint a room from tiles, make walls, add more rooms, and pick colors.","title":"Rooms","type":"docs"},{"content":" The room window with the example room of a new game The room window is your game world. Each room is a 16×16 grid of 8×8 tiles, which is exactly the 128×128 screen of VGC Zero.\nThe room bar # The text box at the top is the room\u0026rsquo;s name. The buttons next to it step to the previous and next room, add a room, duplicate the current one, delete it, and open find to jump to any room.\nedit tab # paint: click a square to place the drawing selected in the paint window. Click it again to remove it. pick: click something in the room to select it in the paint window. exits \u0026amp; endings: select and move the exits and endings in this room. See exits \u0026amp; endings. grid and walls: show the tile grid, and highlight tiles marked as walls. Placing the avatar moves it; the room it is in is where the game starts. A sprite can only be in one place in the whole game, so placing it again moves it. Items and tiles can be placed as often as you like.\ncolors tab # Pick the color palette this room uses. Palettes are edited in the colors window.\ntune tab # Pick the background music that plays in this room, or none. Tunes are made in the tune window.\navatar tab # Pick a different drawing for the avatar while it is in this room, for example a swimming avatar in a water room.\nSee also: Rooms.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/tools/room/","section":"Docs","summary":"Place tiles, sprites and items, add rooms, and set each room’s colors, music and avatar.","title":"Room","type":"docs"},{"content":" The avatar # The avatar selected in the paint window The avatar is the character the player moves around. There is exactly one.\nIn the paint window, choose avatar and draw your character on the grid. In the room window, pick the paint tool and click where the avatar should start. The avatar moves to that spot; the room you place it in is the room the game starts in. The avatar uses the room\u0026rsquo;s sprite color. To make it look different in one room, open the room window\u0026rsquo;s avatar tab and choose another drawing for that room.\nSprites # Sprites are the characters and objects the avatar can talk to: a cat, a sign, a stranger by the fire. When the avatar walks into a sprite it does not move; instead the sprite\u0026rsquo;s dialog appears.\nIn the paint window, choose sprite. Draw on the grid, or press add to make a new sprite. Give it a name, like cat. In the room window, click where the sprite should stand. A sprite can be placed only once in your whole game. If you need the same character in two rooms, duplicate the sprite and place the copy.\nWhat the sprite says # With the sprite selected in the paint window, the dialog window shows its text. Type what it should say, then press play and walk into it to try it out. Dialogue covers longer conversations, choices and conditions.\nTips # Keep characters inside 8×8. Small drawings read well at 128×128; a clear silhouette matters more than detail. Use animation so characters feel alive, even if frame 2 only moves one pixel. Signs, books and notes on a wall make good sprites: anything the player should \u0026ldquo;read\u0026rdquo; can be a sprite. Next # Give the player things to collect in Items.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/avatar-and-sprites/","section":"Docs","summary":"Draw the player character, choose where they start, and add characters for them to talk to.","title":"The avatar and sprites","type":"docs"},{"content":"Items are things the avatar picks up by walking over them: keys, flowers, coins, cups of tea. A picked-up item disappears from the room and is added to the player\u0026rsquo;s inventory.\nThe tea item in the paint window, and the inventory window Add an item # In the paint window, choose item. Draw it, or press add to make a new one, and give it a name like key. In the room window, click to place it. Unlike sprites, you can place the same item as many times as you like, in any room. The pick-up message # An item has dialog too: it is shown when the avatar picks it up. Select the item in the paint window and write something in the dialog window, like \u0026ldquo;You found a rusty key.\u0026rdquo;\nThe inventory # The inventory window has two tabs:\nitems shows how many of each item the player has. While editing, these are the counts the player starts with. While playing, they update live, which helps when you test. variables holds named values your dialog can read and change. See Dialogue. Use items in your game # Items do nothing on their own. They become useful when dialog or endings check them:\nA guard who only lets you pass when you have a key. A sprite who says something different once you have collected three flower items. An ending that only triggers when you carry the treasure. The next two guides show how: conditions in Dialogue, and locked exits and endings in Exits and endings.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/items/","section":"Docs","summary":"Add items the player picks up, set a starting inventory, and use items to unlock things.","title":"Items","type":"docs"},{"content":"Dialog is the text that appears when the avatar talks to a sprite, picks up an item, or reaches an ending. The game\u0026rsquo;s title, set at the top of the game window, is the first thing the player sees.\nWrite simple dialog # Select a sprite or item in the paint window. The dialog window shows its text. Type what it says. Long text wraps onto several pages automatically; the player presses a button to advance. On VGC Zero the player advances dialog with A. In the web player it is Z, and arrow keys or WASD move.\nText effects # Select some text and use text effects to make it wavy, shaky, rainbow-colored, or a different color from the palette. Effects work best on a word or two, for emphasis.\nAdd blocks # Press add in the dialog window to add more than plain text. The options are grouped:\nThe add menu in the dialog window dialog: another block of text, or a pagebreak to start a new page. lists: text that changes each time the player talks to the sprite. sequence list goes through each item once, then keeps repeating the last one. Good for a conversation that moves forward. cycle list repeats its items in order, forever. shuffle list picks one at random each time. branching list shows the first branch whose condition is true. Branches can check an item count or a variable. room actions: move the player to another room (exit), end the game, lock / unlock an exit or ending, or change the room\u0026rsquo;s palette or the avatar. sound actions: play a blip or change the tune. item and variable actions: give or take items, show how many of an item the player has, or set and change variables. Each block has its own controls in the dialog window, so you build logic by clicking rather than typing code. If you are curious, show code reveals the Bitsy script behind it.\nExample: a door guard # A guard who only lets the player through with a key:\nDraw a guard sprite and place it in a doorway. In the guard\u0026rsquo;s dialog, add a branching list from lists with an item branch: if key in inventory is at least 1. In that branch, write \u0026ldquo;Ah, you have the key. Go ahead.\u0026rdquo; and add an exit from room actions that moves the player to the next room. In the default branch, write \u0026ldquo;Nobody passes without a key.\u0026rdquo; Now scatter a key item somewhere in the first room and play it through.\nVariables # Variables remember things the player has done that are not items, like whether they have already met someone. Create them in the variables tab of the inventory window, change them with set variable value or change variable value, and check them with a variable branch.\nPreview while you write # Press preview in the dialog window to see the text the way it appears in the game, or press play and walk into the sprite.\nNext # Connect your rooms and finish the story in Exits and endings.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/dialogue/","section":"Docs","summary":"Write what sprites and items say: pages, text effects, sequences, and conditions on items and variables.","title":"Dialogue","type":"docs"},{"content":" A two-way exit with its exit options open The exits \u0026amp; endings window lists the exits and endings in the current room. The bar at the top steps through them (previous, next), adds a new one, duplicates or deletes the selected one.\nAdding # Press add and choose:\nexit: a two-way door. It has an exit and a return exit. one-way exit: goes one way only. ending: ends the game with its dialog. Markers # Each end of an exit is a marker with a small preview of its room and its coordinates.\nmove: then click in the room window to place the marker. Click the preview to open the marker\u0026rsquo;s room first if it belongs in another room. The pencil edits the room and x, y coordinates as numbers. The gear shows or hides that end\u0026rsquo;s exit options. Exit options # transition effect: none, fade (white), fade (black), wave, tunnel, or slide up, down, left or right. The return exit has its own. exit dialog: text or script that runs when the avatar steps on the exit. add narration adds a line like \u0026ldquo;You walk through the doorway\u0026rdquo;. add lock adds a script that only lets the player through with an item, and otherwise keeps the exit locked. Endings have an ending dialog instead: the final text of the game. Endings can be locked the same way.\nSee also: Exits and endings.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/tools/exits-and-endings/","section":"Docs","summary":"Connect rooms with exits, add endings, pick transitions, and lock doors.","title":"Exits \u0026 endings","type":"docs"},{"content":"Exits move the avatar from one room to another. Endings finish the game. Both live in the exits \u0026amp; endings window; open it from the toolbar or from the room window.\nA two-way exit: both ends are marked in the room Add an exit # Open the room the exit starts in. In the exits \u0026amp; endings window, press add and choose: exit: a two-way door. Walking onto one end takes you to the other, and back again. one-way exit: takes the player to the destination, with no way back through it. Each end of the exit is a marker with a small room preview. For each one, press move and then click a square in the room to place it. To place the destination in another room, click the marker\u0026rsquo;s preview to open that room, then place it there. When the avatar steps onto an exit, it appears at the other end in the destination room. Put the destination one step inside the new room, not on top of its own return exit, or the player bounces straight back.\nThe arrows in the window step through the exits and endings in the current room. duplicate and delete work on the selected one.\nTransitions # Open an exit\u0026rsquo;s options to pick a transition effect: fade to white or black, wave, tunnel, or slide in any direction. A two-way exit has separate options for the return trip. Slides work well for walking between neighboring areas; fades suit doors and stairs.\nAdd an ending # Press add and choose ending. Press move and click where the ending should be. Write the ending\u0026rsquo;s text in the ending dialog box under the marker. It is the last thing the player reads. When the avatar steps onto an ending, its text plays and the game ends. The player can then start again from the beginning.\nA game can have several endings, for example one for each choice the player makes.\nExit dialog and locked doors # Open an exit\u0026rsquo;s options to give it an exit dialog, which plays when the avatar steps on it. There are two presets:\nadd narration: a line of text, like \u0026ldquo;You walk through the doorway\u0026rdquo;. add lock: the door only opens if the player has an item. The preset checks for an item, unlocks the exit and says \u0026ldquo;The key opens the door!\u0026rdquo; if the player has one, and otherwise keeps it locked with \u0026ldquo;The door is locked\u0026hellip;\u0026rdquo;. Change the item and the text in the dialog editor to fit your game. Endings can be locked the same way through their dialog. The lock is set with the lock / unlock action from room actions; see Dialogue for how branches and actions work.\nYou can also move the player or end the game from dialog directly, with the exit and end room actions. That is how a sprite can send the player somewhere after a conversation.\nNext # Play your game, save it, and put it on VGC Zero in Test and publish.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/exits-and-endings/","section":"Docs","summary":"Link rooms together with exits and transitions, and end your game.","title":"Exits and endings","type":"docs"},{"content":" The paint window with the cat sprite selected The paint window is where you draw everything in your game. Every drawing is 8×8 pixels.\nDrawing types # Choose what to draw with the buttons at the top:\navatar: the player\u0026rsquo;s character. There is only one, so the list buttons are disabled. tile: scenery. sprite: characters and objects the player can talk to. item: things the player picks up. Below them, the text box is the drawing\u0026rsquo;s name, followed by previous, next, add, duplicate, delete, and find.\nDrawing # Click a pixel to fill it with the drawing color, click it again to clear it. You can click and drag to draw lines. grid shows or hides the pixel grid.\nDrawings use their room\u0026rsquo;s palette: tiles use the tile color, and the avatar, sprites and items use the sprite color. Unfilled pixels show the background color.\nOptions # The options under the grid depend on the drawing type:\nwall (tiles only): makes the tile solid, so the avatar can\u0026rsquo;t walk onto it. dialog (sprites and items): what the sprite says when the avatar bumps into it, or the message shown when an item is picked up. The buttons next to it open the full dialog window. animation: adds a second frame. The drawing switches between frame 1 and frame 2 about every 400 ms, and preview shows the animation. blip (sprites and items): a sound effect that plays when the avatar interacts with it. Blips are made in the blip window. See also: The avatar and sprites and Items.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/tools/paint/","section":"Docs","summary":"Draw the avatar, tiles, sprites and items, and set walls, animation, dialog and sounds.","title":"Paint","type":"docs"},{"content":" The colors window with the default blueprint palette The colors window edits palettes. Every palette has three colors:\nbackground color: empty space, and the unfilled pixels of every drawing. tile color: tiles. sprite color: the avatar, sprites and items. Editing a palette # Select one of the three colors. Pick a new color on the wheel, adjust how light or dark it is with the slider, or type a hex code like #0052cc in the box underneath. The room window updates as you go.\nMore palettes # The palette bar works like the others: the name box, previous, next, add, duplicate, delete, and find. Choose which palette a room uses in the room window\u0026rsquo;s colors tab, so each room can have its own mood.\nTips # Keep strong contrast between the background and sprite colors so characters stand out on the small screen. A palette with a dark background and light sprites reads well on the VGC Zero display. Games can use extended palettes with more colors through the raw game data, but three colors are what the editor is built around. See also: Rooms.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/tools/colors/","section":"Docs","summary":"Make and edit the three-color palettes your rooms use.","title":"Colors","type":"docs"},{"content":" Test in the editor # Play mode, with the inventory window open to watch item counts Press play (the green triangle at the top of the toolbar) to play from the start. The Creator runs your game with Citsy, the same engine that runs it on VGC Zero, so what you see is what the handheld shows. Press play again to stop and go back to editing.\nAction Keyboard VGC Zero Walk Arrow keys or WASD D-pad Talk, advance dialog Z A While you play:\nKeep the inventory window open to watch item counts and variables change. Walk into every sprite and through every exit at least once. Reach every ending. If a locked exit or branch never opens, check the condition in the dialog. When a moment looks good, press save image while the game is playing. It saves that frame as your game\u0026rsquo;s cover picture on the platform.\nSave and back up # Your game saves to your Chili account automatically while you edit. Your saved games are in the Projects tab of your profile.\nTo keep a copy of your own, open the game window, go to its save tab, and choose save data under .bitsy. That downloads your game as a plain text .bitsy file. load data opens a .bitsy file, including games made in the standard Bitsy editor at bitsy.org.\nPublish to the platform # Publishing takes two steps: release the game, then list it on the marketplace. You need a verified email address for both.\nRelease. Open your profile, go to Projects, and choose Release on the game. Releasing turns the project into a finished game. It is not on the marketplace yet. List. On your profile, open your released game\u0026rsquo;s Listing. Set a price, free or at least €1, and publish it. The first time, you accept the seller terms. Players can then find the game on the marketplace, add it to their library, play it in the browser, and download its .bitsy file. You can update or unlist the listing later. The platform help article List a game for sale has the details on pricing and payouts.\nPlay it on VGC Zero # VGC Zero plays Bitsy games with the Citsy player.\nGet your game\u0026rsquo;s .bitsy file: save data in the editor, or Download .bitsy from the game\u0026rsquo;s page on the marketplace. Flash the Citsy player if it is not on your handheld yet: download the VGC build from the citsy-32blit releases, hold BOOT, tap RESET, and copy the .uf2 file to the drive that appears. See Announcing Citsy for more ways to flash it. Copy the .bitsy file onto the SD card. Start Citsy. Your game appears in the launcher list next to the bundled games. Choose it and press A. Press MENU in a game to pause, restart, or go back to the launcher.\nNo handheld yet? Drop the .bitsy file into the web player or the desktop build of Citsy to see it the way VGC Zero shows it.\nShare it # Show your game in the forum or on Discord. We love seeing what people make.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/test-and-publish/","section":"Docs","summary":"Playtest in the editor, release and list your game on the marketplace, and play it on VGC Zero.","title":"Test and publish your game","type":"docs"},{"content":" The dialog window editing the cat sprite\u0026rsquo;s dialog The dialog window edits the text your game shows, and the logic around it. Every sprite, item, exit and ending can have a dialog; the dialog bar at the top steps through all of them by name.\nSelecting a sprite or item in the paint window opens its dialog here.\nWriting text # Type in a text block. Long text wraps onto pages automatically, and the player advances with A on VGC Zero or Z on a keyboard. Select some text to apply text effects: wavy, shaky, rainbow, or a palette color.\nadd # add inserts a new block below. The choices are:\nGroup Blocks dialog dialog (a plain text block) and pagebreak (starts a new page). lists sequence list (each line once, then repeats the last), cycle list (loops), shuffle list (random each time), and branching list (shows the first branch whose condition is true: an item branch, a variable branch, or the default branch). room actions exit (move the player to a room and position, with an optional transition), end (stop the game), lock / unlock (for exits and endings), palette (change the room\u0026rsquo;s colors), avatar (change the avatar\u0026rsquo;s drawing). sound actions blip (play a sound effect) and tune (change the music). item and variable actions set item count, increase item count, decrease item count, say item count, set variable value, change variable value. Each block has its own controls, so you build logic by clicking instead of typing code.\nOther controls # show code shows the Bitsy script behind the blocks. You can edit it directly. preview shows the text the way it looks in the game. The pencil button keeps showing the dialog of whatever drawing is selected in the paint window. See also: Dialogue.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/tools/dialog/","section":"Docs","summary":"Write and script what sprites, items, exits and endings say, with lists, branches and actions.","title":"Dialog","type":"docs"},{"content":" The tune window with a bar of the finale fanfare The tune window writes background music. A tune is made of bars; each room can play one tune, picked in the room window\u0026rsquo;s tune tab.\nPlaying and bars # play plays the tune from the selected bar, and loop repeats the current bar. bar 1 / 4 shows which bar is selected. The arrows move the bar left or right, + adds an empty bar at the end, the copy button duplicates the selected bar to the end, and the bin removes it. compose # Click and drag in the grid to draw notes. Higher rows are higher notes.\nnote draws notes. blip inserts the selected blip as a note. The strum menu sets how chords are played: off, up, down, or with a big or small interval. instrument # Choose the tone of the melody and harmony: tone A (square wave), tone B or tone C (thinner pulse waves), and the harmony\u0026rsquo;s strum pattern.\nstyle # speed: slow, medium, fast or turbo (60 to 160 bpm). mood: cheery (major key) or gloomy (minor key). Switching transposes the whole tune. VGC Zero plays tunes on its two square-wave channels, so what you hear in the editor is close to the handheld.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/tools/tune/","section":"Docs","summary":"Write background music for your rooms.","title":"Tune","type":"docs"},{"content":" The blip window with the meow sound effect The blip window makes short sound effects. Attach a blip to a sprite or item in the paint window, and it plays when the avatar interacts with it. Blips can also be used as notes in a tune.\nEditing a blip # The play button plays the blip. blip-o-matic generates a new sound from a category: pick up, greeting, bloop, bleep, magic, meow, random, or mutate (a variation on the current blip). The button next to it regenerates. pitch: higher or lower. length: how long it plays. speed: how quickly the pitch changes. The bar at the top names the blip and has the usual previous, next, add, duplicate, delete and find buttons.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/tools/blip/","section":"Docs","summary":"Make short sound effects for sprites, items and tunes.","title":"Blip","type":"docs"},{"content":"A reference page for each window in the Bitsy editor in the Chili Creator, in the order they appear in the toolbar on the right edge of the editor. Each toolbar button shows or hides its window, every window can be dragged by its title bar, and each window\u0026rsquo;s ? button opens the upstream Bitsy documentation for it.\nThe editor with the toolbar expanded to show tool names The ‹ button at the top of the toolbar expands it to show each tool\u0026rsquo;s name.\nNew to Bitsy? Start with the tutorials, then come back here when you want the details of one tool.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/tools/","section":"Docs","summary":"A reference page for each window in the Bitsy editor in the Chili Creator, in the order they appear in the toolbar on the right edge of the editor. Each toolbar button shows or hides its window, every window can be dragged by its title bar, and each window’s ? button opens the upstream Bitsy documentation for it.\n","title":"Editor tools","type":"docs"},{"content":" The find window showing everything in a new game The find window lists everything in your game: drawings, rooms, palettes, dialogs, tunes and blips.\nType in find by name or ID to filter the list. The category buttons show only one kind: all, avatar, tile, sprite, item, room, colors, dialog, tune or blip. Click a result to select it in its own window. Things that are currently selected are highlighted. The magnifying glass button in every other window opens find already filtered to that window\u0026rsquo;s category.\nNaming your drawings, rooms and dialogs makes find much more useful as a game grows.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/tools/find/","section":"Docs","summary":"Search everything in your game by name and jump straight to it.","title":"Find","type":"docs"},{"content":" The inventory window, items tab The inventory window has two tabs.\nitems # Every item in your game with a count. While editing, the count is how many the player starts with, usually 0. While playing, the counts update live as the player picks things up, so you can check your item logic.\nvariables # Named values your dialog can read and change, like met_the_cat or coins. Add a variable here and set its starting value. While playing, the values update live.\nUse variables for anything the game should remember that is not a physical item: whether a door is open, how many times the player has talked to someone, or which path they chose.\nSee also: Items.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/tools/inventory/","section":"Docs","summary":"Set starting items and variables, and watch them change while you play.","title":"Inventory","type":"docs"},{"content":" The record gif window The record gif window captures your game as an animated GIF, handy for sharing on the forum, Discord, or your marketplace page.\nStart play mode. Press start recording, play the part you want to show, then press stop recording. The GIF takes a moment to encode. Press download gif to save it. snapshot saves a single picture of the current room instead. The button next to it switches the snapshot mode.\nTo set your game\u0026rsquo;s cover picture on the platform, use save image in play mode instead.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/tools/record-gif/","section":"Docs","summary":"Record a GIF or take a snapshot of your game while it plays.","title":"Record gif","type":"docs"},{"content":"","date":"14 October 2026","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"News, launches and dev logs from the chilichip team.\n","date":"14 October 2026","externalUrl":null,"permalink":"/posts/","section":"Blog","summary":"News, launches and dev logs from the chilichip team.\n","title":"Blog","type":"posts"},{"content":"","date":"14 October 2026","externalUrl":null,"permalink":"/tags/chilichip-os/","section":"Tags","summary":"","title":"Chilichip-Os","type":"tags"},{"content":"","date":"14 October 2026","externalUrl":null,"permalink":"/","section":"chilichip: pocket game consoles you can play, make and hack","summary":"","title":"chilichip: pocket game consoles you can play, make and hack","type":"page"},{"content":"","date":"14 October 2026","externalUrl":null,"permalink":"/tags/console/","section":"Tags","summary":"","title":"Console","type":"tags"},{"content":"","date":"14 October 2026","externalUrl":null,"permalink":"/tags/games/","section":"Tags","summary":"","title":"Games","type":"tags"},{"content":"Kacper is the founder of chilichip. These are his posts.\n","date":"14 October 2026","externalUrl":null,"permalink":"/authors/kacper/","section":"Authors","summary":"Kacper is the founder of chilichip. These are his posts.\n","title":"Kacper Akdağ-Ochnik","type":"authors"},{"content":"Turn on a VGC Zero and say hello to ChiliChip OS! Your console now has a proper home: a bold, chili-red home screen with all your games lined up and ready to play. No more one game at a time. Put as many games on it as you like and pick one whenever you want.\nThe ChiliChip OS home screen Your games, front and center # Every game you install gets its own big cover on the home screen. Flick left and right to browse, press A to play. Fresh games show up first, followed by the ones you played most recently, so your favourites are always close by.\nScroll through your games and press A to play Want to know more about a game? Press Y for its info card: who made it, which version you have and what it is about. You can also delete a game from there when you need the space.\nGame info, one button away Adding games is drag and drop # Plug your VGC Zero into a computer and a drive called CHILICHIP pops up. Drop your games onto it, eject, and watch the console install them with a little progress bar. That\u0026rsquo;s it. Updating a game works the same way, and your progress comes along for the ride.\nIf a file isn\u0026rsquo;t a game or something went wrong, the console tells you in plain words and leaves the file where it is.\nPause anytime # Tap the HOME button in the middle of a game to pause it. From there you can turn the volume up or down, change the brightness, check your battery and head back home. Hold HOME to jump straight back to the home screen.\nYour progress is safe # Games can now save when you quit, so you won\u0026rsquo;t lose your run just because you went back home. Saves stay put when you update a game. And if you delete a game, the console asks whether you also want to throw away its save, just in case you change your mind later.\nSettings made simple # The last tile on the home screen (or the MENU button) opens Settings. Set your brightness and volume once and every game uses them. Turn on screen sleep and the screen dims and turns off after a while when you are not playing, which keeps your battery happy. Press any button to wake it up. You can also see how much space you have left and which version of ChiliChip OS you are running.\nSettings: brightness, volume, screen sleep and more What\u0026rsquo;s next # ChiliChip OS is the start of something we are really excited about. It is the home your games will land in when you make them in our no-code game creator or pick them up on the platform. We are still testing it on more consoles, so expect a few rounds of polish.\nGot a VGC Zero? Give it a spin and tell us what you think! Come chat in the community forum, say hi on Discord, or open an issue on GitHub.\n","date":"14 October 2026","externalUrl":null,"permalink":"/posts/chilichip-os/","section":"Blog","summary":"Turn on a VGC Zero and say hello to ChiliChip OS! Your console now has a proper home: a bold, chili-red home screen with all your games lined up and ready to play. No more one game at a time. Put as many games on it as you like and pick one whenever you want.\n","title":"Meet ChiliChip OS: a real home for your games","type":"posts"},{"content":"","date":"14 October 2026","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"14 October 2026","externalUrl":null,"permalink":"/tags/vgc-zero/","section":"Tags","summary":"","title":"Vgc-Zero","type":"tags"},{"content":" Lay roads, zone land, watch it grow. click to focus Open game in a new tab How to play # Move the cursor around the 32×32 map with the arrow keys. The view scrolls when you reach the edge. Press X (B) to switch tools: road, residential, commercial and industrial zones, and the bulldozer. Press Z (A) to build on grass, or to clear a tile with the bulldozer. Each build costs money. Zones only grow when they touch a road. Homes need jobs, and shops and factories need people. Every month you collect taxes and pay road upkeep. Press V (Y) to see the city stats. Key Button Arrow keys / WASD D-pad Z A (build) X B (next tool) V Y (stats) On mobile the embedded game is hidden; use the button to open it in a new tab.\nAbout the game # A small city builder in the spirit of the original SimCity, made for the 128×128 screen of VGC Zero. You start with $5000, build roads and residential, commercial and industrial zones, and a monthly simulation grows each zone through three building levels while the population and your budget change. Built with the chili-chip 32blit SDK for the handheld, desktop, and the web.\nSource code # chili-chip/chili-city C\u0026#43;\u0026#43; 1 0 ","date":"11 October 2026","externalUrl":null,"permalink":"/games/chili-city/","section":"Games","summary":"Lay roads, zone land and watch your city grow. A tiny city builder for VGC Zero","title":"Chili City","type":"games"},{"content":"","date":"11 October 2026","externalUrl":null,"permalink":"/tags/city-builder/","section":"Tags","summary":"","title":"City Builder","type":"tags"},{"content":"","date":"11 October 2026","externalUrl":null,"permalink":"/tags/game/","section":"Tags","summary":"","title":"Game","type":"tags"},{"content":"Every game here runs in your browser, on your phone with touch controls, and on VGC Zero. Pick one and press play.\n","date":"11 October 2026","externalUrl":null,"permalink":"/games/","section":"Games","summary":"Every game here runs in your browser, on your phone with touch controls, and on VGC Zero. Pick one and press play.\n","title":"Games","type":"games"},{"content":"","date":"11 October 2026","externalUrl":null,"permalink":"/tags/simulation/","section":"Tags","summary":"","title":"Simulation","type":"tags"},{"content":"","date":"10 October 2026","externalUrl":null,"permalink":"/tags/community/","section":"Tags","summary":"","title":"Community","type":"tags"},{"content":"","date":"10 October 2026","externalUrl":null,"permalink":"/tags/creator/","section":"Tags","summary":"","title":"Creator","type":"tags"},{"content":"","date":"10 October 2026","externalUrl":null,"permalink":"/tags/platform/","section":"Tags","summary":"","title":"Platform","type":"tags"},{"content":"","date":"10 October 2026","externalUrl":null,"permalink":"/tags/store/","section":"Tags","summary":"","title":"Store","type":"tags"},{"content":"Big week, chili fam: the chili platform is open! It is our home for everything VGC Zero: a studio, a community and soon a store, all in one place. Pull up a chair, make an account and look around. We will show you what is inside.\nThe home page of the chili platform What is inside # The studio. Make your own game with our no-code game creator, right in your browser. Soon it will tell you when your game is saved, and warn you before you leave without saving.\nThe game creator, right in your browser The community. Chat in the forum, share your games, and write your posts with simple formatting and a live preview as you type.\nThe very first thread in the community forum The shop, coming soon. Our store is getting its final polish before it opens. Soon you will be able to browse by category, search, and check out, and digital games will skip the address step. We will let you know the moment it is ready.\nFind your way around # Not sure where to start? The home page has a \u0026ldquo;Start here\u0026rdquo; row, live games from the marketplace and fresh forum threads. Make it yours in settings: your profile, avatar, privacy and preferences. If you get stuck, the help center has your back. Want the latest news? Sign up for the newsletter at the bottom of any page.\nThe help center Still a preview, and we are still tidying # We are calling this an open preview, and we mean it. Things are still being fixed and polished. If something looks broken or confusing, please tell us. That is exactly what this preview is for.\nComing soon: sign in with GitHub or Google, a better sales panel for sellers, and more community features like following creators and getting notifications.\nTell us what you think # You are the reason we are building this, so please poke around and tell us what you love and what feels off. Start a thread in the community forum, come say hi on Discord, or open an issue on GitHub.\n","date":"10 October 2026","externalUrl":null,"permalink":"/posts/platform-open/","section":"Blog","summary":"Big week, chili fam: the chili platform is open! It is our home for everything VGC Zero: a studio, a community and soon a store, all in one place. Pull up a chair, make an account and look around. We will show you what is inside.\n","title":"The chili platform is open. Come on in!","type":"posts"},{"content":"Make small adventure games without writing code. These guides walk through the Bitsy editor in the Chili Creator, from your first room to a game you can sell on the marketplace and play on VGC Zero. Read them in order the first time; each one builds on the last.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/bitsy/","section":"Docs","summary":"Make small adventure games without writing code. These guides walk through the Bitsy editor in the Chili Creator, from your first room to a game you can sell on the marketplace and play on VGC Zero. Read them in order the first time; each one builds on the last.\n","title":"Bitsy","type":"docs"},{"content":"","date":"9 October 2026","externalUrl":null,"permalink":"/tags/bitsy/","section":"Tags","summary":"","title":"Bitsy","type":"tags"},{"content":"","date":"9 October 2026","externalUrl":null,"permalink":"/tags/dialogue/","section":"Tags","summary":"","title":"Dialogue","type":"tags"},{"content":"Documentation for our projects: the VGC Zero console, the Game SDK and making Bitsy games.\n","date":"9 October 2026","externalUrl":null,"permalink":"/docs/","section":"Docs","summary":"Documentation for our projects: the VGC Zero console, the Game SDK and making Bitsy games.\n","title":"Docs","type":"docs"},{"content":"","date":"9 October 2026","externalUrl":null,"permalink":"/tags/editor/","section":"Tags","summary":"","title":"Editor","type":"tags"},{"content":"","date":"9 October 2026","externalUrl":null,"permalink":"/tags/endings/","section":"Tags","summary":"","title":"Endings","type":"tags"},{"content":"","date":"9 October 2026","externalUrl":null,"permalink":"/tags/exits/","section":"Tags","summary":"","title":"Exits","type":"tags"},{"content":"","date":"9 October 2026","externalUrl":null,"permalink":"/tags/getting-started/","section":"Tags","summary":"","title":"Getting-Started","type":"tags"},{"content":"","date":"9 October 2026","externalUrl":null,"permalink":"/tags/items/","section":"Tags","summary":"","title":"Items","type":"tags"},{"content":"","date":"9 October 2026","externalUrl":null,"permalink":"/tags/marketplace/","section":"Tags","summary":"","title":"Marketplace","type":"tags"},{"content":"","date":"9 October 2026","externalUrl":null,"permalink":"/tags/rooms/","section":"Tags","summary":"","title":"Rooms","type":"tags"},{"content":"","date":"9 October 2026","externalUrl":null,"permalink":"/tags/sprites/","section":"Tags","summary":"","title":"Sprites","type":"tags"},{"content":"","date":"9 October 2026","externalUrl":null,"permalink":"/tags/tutorial/","section":"Tags","summary":"","title":"Tutorial","type":"tags"},{"content":"","date":"6 October 2026","externalUrl":null,"permalink":"/tags/arcade/","section":"Tags","summary":"","title":"Arcade","type":"tags"},{"content":"","date":"6 October 2026","externalUrl":null,"permalink":"/tags/puzzle/","section":"Tags","summary":"","title":"Puzzle","type":"tags"},{"content":"","date":"6 October 2026","externalUrl":null,"permalink":"/tags/shooter/","section":"Tags","summary":"","title":"Shooter","type":"tags"},{"content":"","date":"6 October 2026","externalUrl":null,"permalink":"/tags/snake/","section":"Tags","summary":"","title":"Snake","type":"tags"},{"content":" Eat them apples! click to focus Open game in a new tab How to play # Pick Play on the title screen with Z (A). Arrow keys move through the menu. Steer with the arrow keys. Quick double turns are remembered, so tight U-turns work. Eat red apples to grow. Every fifth apple a golden apple appears for a few seconds and is worth five apples. The snake, and the music, speed up as you grow. Don\u0026rsquo;t bite yourself. With Walls on, the edges are deadly too; with them off you wrap around. Esc (MENU) pauses. Make the top five and you get to enter your initials. Key Button Arrow keys / WASD D-pad Z A (select) X B (back) Esc MENU (pause) On mobile the embedded game is hidden; use the button to open it in a new tab.\nOptions # Speed: slow, normal or fast. Apples are worth 50, 100 or 150 points, plus 50 with walls on. Walls: wrap around the edges, or crash into them. Music and Sound on or off. Settings and high scores are saved. About the game # A snake game for VGC Zero with an animated title screen, a demo snake playing in the background, a top-five high score table, particles, screen shake and an original chiptune soundtrack synthesised live on the console\u0026rsquo;s audio channels. Built with the chili-chip 32blit SDK for the handheld, desktop, and the web.\nSource code # chili-chip/chili-snake snek C\u0026#43;\u0026#43; 0 0 ","date":"6 October 2026","externalUrl":null,"permalink":"/games/snek/","section":"Games","summary":"Eat them apples! Polished snake for VGC Zero","title":"Snek","type":"games"},{"content":" Stack the falling blocks. Clear the lines. Don’t let the pile reach the top. click to focus Open game in a new tab How to play # Pick Play on the title screen with Z (A). Arrow keys move through the menu. Guide each piece into the 10-wide well. Complete a row to clear it. Up hard-drops the piece, holding Down soft-drops it. Z rotates right and X rotates left. Pieces kick off walls and the stack when they rotate. C (X button) puts the piece on hold for later, once per piece. The ghost outline shows where the piece will land. Every 10 lines the level goes up, the pieces fall faster and the music speeds up. Esc (MENU) pauses. Make the top five and you get to enter your initials. Key Button Action Left / Right D-pad Move Down D-pad Soft drop Up D-pad Hard drop Z A Rotate right / select X B Rotate left / back C or V X or Y Hold Esc MENU Pause On mobile the embedded game is hidden; use the button to open it in a new tab.\nScoring # Clear Points × level Single 100 Double 300 Triple 500 Tetris (4 lines) 800 T-spin single / double / triple 800 / 1200 / 1600 Back-to-back Tetrises and T-spins score 1.5×, clearing lines with consecutive pieces adds a combo bonus, and drops earn 1 point per row (2 for a hard drop).\nOptions # Start level from 1 to 15. Music, Sound and Ghost piece on or off. Settings and high scores are saved. About the game # A Tetris for VGC Zero with a chili twist: an animated title screen, modern rules (SRS rotation with wall kicks, 7-bag randomiser, hold, ghost piece, lock delay), next-three preview, line-clear flashes, particles and screen shake on a Tetris, a pause menu and a top-five high score table. The soundtrack is synthesised live on the console\u0026rsquo;s audio channels: an original title theme, \u0026ldquo;Chili Habanera\u0026rdquo;, and a new arrangement of the folk song Korobeiniki in game. Built with the chili-chip 32blit SDK for the handheld, desktop, and the web.\nSource code # chili-chip/chili-tetris Tetris game for vgc zero C\u0026#43;\u0026#43; 0 0 ","date":"6 October 2026","externalUrl":null,"permalink":"/games/tetris/","section":"Games","summary":"Stack, clear, repeat. Polished Tetris with a chili twist for VGC Zero","title":"Tetris","type":"games"},{"content":" The galaxy is in danger! The evil aliens are invading, and it\u0026rsquo;s up to you to stop them. click to focus Open game in a new tab How to play # Pick Play on the title screen with Z (A). Arrow keys move through the menu. Fly with the arrow keys and hold Z (A) to fire. Clear wave after wave of alien formations. Every fifth wave a boss shows up. Shot-down enemies sometimes drop power-ups: weapon upgrade, rapid fire, shield, repair, extra life and bonus coins. Chain kills quickly for a combo multiplier, and finish a wave without getting hit for a bonus. Esc (MENU) pauses. Make the top five and you get to enter your initials. Key Button Arrow keys / WASD D-pad Z A (fire / select) X B (back) Esc MENU (pause) Options # Music and Sound on or off. Ship: pick one of five ship colours. Settings and high scores are saved. About the game # Ultra Hyper Space Super Fighters TURBO. An arcade shooter for VGC Zero with endless waves of enemy formations, five enemy types, bosses with bullet patterns, four weapon levels, shields, a top-five high score table, explosions, particles and screen shake, and an original chiptune soundtrack synthesised live on the console\u0026rsquo;s audio channels. Built with the chili-chip 32blit SDK for the handheld, desktop, and the web.\nSource code # chili-chip/chili-space-fighter Ultra Hyper Space Super Fighters TURBO C\u0026#43;\u0026#43; 0 0 ","date":"6 October 2026","externalUrl":null,"permalink":"/games/space-fighter/","section":"Games","summary":"Ultra Hyper Space Super Fighters TURBO: stop the alien invasion","title":"Ultra Hyper Space Super Fighters TURBO","type":"games"},{"content":"","date":"15 September 2026","externalUrl":null,"permalink":"/tags/32blit/","section":"Tags","summary":"","title":"32blit","type":"tags"},{"content":"","date":"15 September 2026","externalUrl":null,"permalink":"/tags/adventure/","section":"Tags","summary":"","title":"Adventure","type":"tags"},{"content":"🚀 Today we’re launching citsy — a native C++ runtime for Bitsy games, built for VGC Zero.\nBitsy is the little engine for little games, worlds, and stories. Its rooms are 16×16 tiles of 8×8 pixels. That is exactly 128×128 — the same resolution as VGC Zero’s screen, and the same room size as the Chili Room Editor. No scaling tricks. One pixel on the editor is one pixel on the handheld.\nThe citsy-32blit launcher on a 128×128 canvas (web build) TL;DR # Author a game at bitsy.org, export a .bitsy file, and play it on VGC Zero, 32blit, desktop, or the web. The engine is headless C++20; a 32blit host drawn from our game template maps buttons, blits the framebuffer, and plays square-wave audio.\nPlay in the browser Why Bitsy belongs on VGC Zero # VGC Zero is a pocket-scale, open hardware handheld. Games should be small enough to carry, share, and finish. Bitsy already lives in that world:\nFixed 128×128 world — 16 tiles × 8 pixels, native on the VGC display Tiny text files — a whole adventure is a .bitsy export you can drop on an SD card No C++ required to author — paint rooms, dialog, and items in the Bitsy editor Deterministic simulation — rooms, exits, inventory, and dialog scripts with a predictable update order The official Bitsy runtime is JavaScript in the browser. That is perfect for the editor. It is the wrong shape for an RP2350 with hundreds of kilobytes of RAM. citsy is a clean-room C++ reimplementation of the engine: parse the file, simulate the world, write a 128×128 color-index buffer. It is not affiliated with Adam Le Doux or the official Bitsy project; .bitsy files from the editor are the interchange format.\nTwo repositories # Piece Role citsy Headless engine. No window, no GPU, no audio library. Implements a Host System API the front-end fills in. citsy-32blit 32blit player. Implements citsy::Host, a retro launcher, and RP2350 glue. Same binary targets desktop SDL and VGC Zero. The core library never links 32blit. Each frame the host reports time and six logical buttons (Up Down Left Right Ok Menu). The engine steps movement, collisions, dialog, transitions, and two square-wave channels, then calls present() with the palette and buffers. The player palettes that 128×128 index buffer and integer-scales it — 1× on the OLED.\nMossland, one of the bundled games, running through the citsy compositor Play it now # The web build is live. Click to focus, then use the keys below.\nclick to focus Open game in a new tab Controls # Action VGC Zero / 32blit Desktop / web Move cursor / walk D-pad Arrows or WASD Confirm / interact A Z Back / cancel B X Settings X or MENU (launcher) C or Escape Pause overlay MENU in-game Escape or 2 The launcher lists bundled Mossland and Sandbox. Press A to start a game. MENU opens Resume / Restart / Exit.\nPause overlay: freeze simulation, restart the same .bitsy file, or return to the launcher Make a game, skip the toolchain # Open bitsy.org and paint a room. Export a .bitsy file. Play it: Web / desktop — drop the file next to the binary (or in games/) and pick it in the launcher, or pass --launch_path /path/to/game.bitsy VGC Zero — extra .bitsy files on the filesystem / SD card show up in the same list Flash — grab a UF2 from the citsy-32blit releases and copy it to the Pico while it is in BOOTSEL You do not need our C++ SDK to author a citsy game. You need it if you want to embed the engine in your own host.\nWhat the engine already does # Development was staged. Phases 0–4 of the engine roadmap are in:\nParser \u0026amp; model — palettes, tiles, sprites, items, rooms, dialog, variables, endings, tunes, blips Playable core — avatar movement, wall collision, room compositing, exits, linear dialog Scripting — variables, conditionals, inventory give/take, {end} / {exit} Polish — 400 ms flipbook animation, fade/wave/tunnel/slide transitions, custom fonts, RTL text, two sound channels 32blit player — load from packed assets, disk, or --launch_path Extended palettes (COL n), comma-separated and legacy room formats, and .bitsyfont glyphs are supported. Compatibility is fixture-tested against sample games in CI — no GPU required (MockHost records every frame).\nEngine docs live at teriyakigod.github.io/citsy.\nThe handheld host # citsy-32blit is generated from our game template and built with the chili-chip 32blit SDK. On device it is a 128×128 launcher designed around the VGC board (Waveshare RP2350 Plus, SSD1351 OLED):\nGame carousel with status bar (title, session clock, battery) Settings sliders for volume and brightness, persisted to 32blit save slot 0 Battery sense on GPIO26 / ADC0 (1/3 divider); USB vs LiPo shown in the header Software brightness veil on OLED (no backlight pin); PWM if you wire one Square-wave audio on the two 32blit PWM channels, gated when paused Latest player release: v0.1.2. CI publishes artifacts for the same six targets as our other SDK games:\nVGC Zero (RP2350 UF2) 32blit (STM32) Web (Emscripten) Windows macOS Linux Player docs: citsy.chilichip.eu/docs.\nFlash a VGC breadboard # cmake --preset vgc cmake --build --preset vgc cp out/build/vgc/citsy-32blit.uf2 /media/$USER/RP2350/ Or download citsy-32blit-v0.1.2-VGC.zip from GitHub Releases. Hold BOOT, tap RESET, copy the UF2. On chili-chip VGC units you can also hold X and press power. See the breadboard prototype guide and the VGC notes in the SDK.\nEmbed it yourself # The public API is small. Link citsy, implement citsy::Host, and feed it a file:\nauto engine = citsy::Engine::from_file(\u0026#34;my_game.bitsy\u0026#34;); MyHost host; engine.start(host); while (engine.is_running()) { engine.update(host); // calls host.present() } CMake for a consumer project:\nadd_subdirectory(path/to/citsy) target_link_libraries(my_app PRIVATE citsy) Getting started, Host API, and the Bitsy data model are in the citsy docs.\nSource # chili-chip/citsy Bitsy game engine clone, written in modern C++ C\u0026#43;\u0026#43; 0 0 chili-chip/citsy-32blit C\u0026#43;\u0026#43; 0 0 citsy-32blit is MIT-licensed. Games you make in the Bitsy editor remain yours.\nTry it # Open the web player Citsy on the games page Questions, .bitsy files, and hardware notes are welcome on Discord.\n","date":"15 September 2026","externalUrl":null,"permalink":"/posts/citsy-engine/","section":"Blog","summary":"🚀 Today we’re launching citsy — a native C++ runtime for Bitsy games, built for VGC Zero.\nBitsy is the little engine for little games, worlds, and stories. Its rooms are 16×16 tiles of 8×8 pixels. That is exactly 128×128 — the same resolution as VGC Zero’s screen, and the same room size as the Chili Room Editor. No scaling tricks. One pixel on the editor is one pixel on the handheld.\n","title":"Announcing Citsy: Bitsy on VGC Zero","type":"posts"},{"content":" A little engine for little games — running natively on VGC Zero’s 128×128 screen. click to focus Open game in a new tab How to play # Arrow keys or WASD move the cursor and walk. Press Z for A (confirm / interact / advance dialog). Press X for B (back / cancel). Press C or Escape for settings from the launcher. Press Escape or 2 in-game for the pause overlay (Resume / Restart / Exit). On mobile the embedded player is hidden; use the button to open it in a new tab.\nThe launcher ships with Mossland and Sandbox. Drop your own .bitsy export next to the desktop binary, in a games/ folder, or on the handheld’s SD card and it appears in the same list.\nMossland, a bundled Bitsy adventure About the player # Citsy is a headless C++ reimplementation of the Bitsy engine. citsy-32blit is the 32blit host: it maps VGC Zero / desktop controls, blits the 128×128 framebuffer, and plays square-wave audio. Rooms are 16×16 tiles of 8×8 pixels — native resolution on the console.\nRead the launch post: Announcing Citsy: Bitsy on VGC Zero.\nSource code # chili-chip/citsy Bitsy game engine clone, written in modern C++ C\u0026#43;\u0026#43; 0 0 chili-chip/citsy-32blit C\u0026#43;\u0026#43; 0 0 ","date":"15 September 2026","externalUrl":null,"permalink":"/games/citsy/","section":"Games","summary":"A native Bitsy player with a 128×128 retro launcher. Author games at bitsy.org, export a .bitsy file, and play on VGC Zero, 32blit, desktop, or the web.","title":"Citsy","type":"games"},{"content":"","date":"15 September 2026","externalUrl":null,"permalink":"/tags/citsy/","section":"Tags","summary":"","title":"Citsy","type":"tags"},{"content":"","date":"15 September 2026","externalUrl":null,"permalink":"/tags/engine/","section":"Tags","summary":"","title":"Engine","type":"tags"},{"content":"","date":"20 January 2026","externalUrl":null,"permalink":"/tags/api/","section":"Tags","summary":"","title":"Api","type":"tags"},{"content":"API reference documentation for the Game SDK, detailing the available classes, functions, and modules to help you develop games for the VGC Zero console.\n","date":"20 January 2026","externalUrl":null,"permalink":"/docs/game-sdk/api/","section":"Docs","summary":"API reference documentation for the Game SDK, detailing the available classes, functions, and modules to help you develop games for the VGC Zero console.\n","title":"API Reference","type":"docs"},{"content":"","date":"20 January 2026","externalUrl":null,"permalink":"/tags/development/","section":"Tags","summary":"","title":"Development","type":"tags"},{"content":"Guides and documentation for the Game SDK, including setup instructions, API references, and development tips to help you create games for the VGC Zero console. VGC Zero\u0026rsquo;s SDK is based on the 32blit SDK, extended with additional features and tools tailored for VGC Zero development.\n","date":"20 January 2026","externalUrl":null,"permalink":"/docs/game-sdk/","section":"Docs","summary":"Guides and documentation for the Game SDK, including setup instructions, API references, and development tips to help you create games for the VGC Zero console. VGC Zero’s SDK is based on the 32blit SDK, extended with additional features and tools tailored for VGC Zero development.\n","title":"Game SDK","type":"docs"},{"content":"","date":"20 January 2026","externalUrl":null,"permalink":"/tags/graphics/","section":"Tags","summary":"","title":"Graphics","type":"tags"},{"content":"This section covers the graphics capabilities and API of the Game SDK for VGC Zero. It includes information on basics of drawing and drawing shapes.\nDrawing basics # The Game SDK provides a variety of functions for drawing shapes, images, and text to the screen.\nThe screen is an instance of a Surface class, stored in a global variable - which means you can access it directly from anywhere in your code.\nThe Surface class represents a 2D drawing surface, and provides methods for rendering graphics.\nThe Pen class represents a color, which can be created using RGB values or predefined colors.\nBelow are listed all the drawing functions available in the SDK. You can call those methods on any Surface instance.\nYou should call all drawing functions within the render function, which is called once per frame.\nvoid render(uint32_t time) { // Drawing code goes here } Tip Use blit namespace to avoid prefixing all calls with blit::.\nusing namespace blit; Setting the pen color # Before drawing, you need to set the pen color. To set the current pen color, create a Pen object and assign it to the pen property of the Surface.\nscreen.pen = Pen(255, 0, 0); // Set pen color to red Clearing the screen # To clear the screen, you can use the clear() method.\nscreen.pen = Pen(0, 0, 0); // Set pen color to black screen.clear(); // Clear the screen (fill with black) This fills the entire surface with the current pen color. Drawing shapes # You can draw various shapes using the following methods:\nPixel # To draw a single pixel on the surface, use the pixel() method. This method takes one parameter: a Point object representing the coordinates of the pixel to draw.\nscreen.pixel(Point \u0026amp;p)\nscreen.pen = Pen(0, 0, 0); // Set pen color to black screen.clear(); // Clear the screen (fill with black) screen.pen = Pen(255, 0, 0); // Set pen color to red screen.pixel(Point(64, 64)); // Draw a pixel (red) at (64, 64) Red pixel drawn at (64, 64) Rectangle # To draw a filled rectangle on the surface, use the rectangle() method. This method takes one parameter: a Rect object representing the position and size of the rectangle to draw.\nscreen.rectangle(Rect \u0026amp;r)\nscreen.pen = Pen(0, 0, 0); // Set pen color to black screen.clear(); // Clear the screen (fill with black) screen.pen = Pen(255, 0, 0); // Set pen color to red screen.rectangle(Rect(10, 10, 50, 100)); // Draw a red rectangle at (10,10) with width 50 and height of 100 screen.pen = Pen(0, 0, 255); // Set pen color to blue screen.rectangle(Rect(80, 10, 34, 15)); // Draw a blue rectangle at (80,10) with width 34 and height of 15 screen.pen = Pen(0, 255, 0); // Set pen color to green screen.rectangle(Rect(46, 50, 20, 40)); // Draw a green rectangle at (46,50) with width 20 and height of 40 Three rectangles drawn in red, blue, and green Tip Notice how the rectangles overlap. The last rectangle drawn appears on top of the previous one. This is because drawing operations are performed in the order they are called.\nVertical span # To draw a vertical line segment, use v_span(). The Point sets the starting coordinate, and the int16_t value sets how many pixels to draw downward from that point.\nscreen.v_span(Point p, int16_t c)\nscreen.pen = Pen(0, 0, 0); screen.clear(); screen.pen = Pen(255, 255, 0); screen.v_span(Point(64, 20), 80); // Draw a vertical yellow span 80 pixels tall starting at (64, 20) Horizontal span # To draw a horizontal line segment, use h_span(). The Point sets the starting coordinate, and the int16_t value sets how many pixels to draw to the right from that point.\nscreen.h_span(Point p, int16_t c)\nscreen.pen = Pen(0, 0, 0); screen.clear(); screen.pen = Pen(255, 0, 255); screen.h_span(Point(20, 64), 100); // Draw a horizontal magenta span 100 pixels wide starting at (20, 64) Line # To draw a straight line between two points, use the line() method.\nscreen.line(const Point \u0026amp;p1, const Point \u0026amp;p2)\nscreen.pen = Pen(255, 255, 255); screen.line(Point(10, 10), Point(120, 90)); // Draw a white line from (10, 10) to (120, 90) Circle # To draw a circle outline, use the circle() method. Pass the center Point and a radius in pixels.\nscreen.circle(const Point \u0026amp;c, int32_t r)\nscreen.pen = Pen(0, 200, 255); screen.circle(Point(64, 64), 30); // Draw a cyan circle centered at (64, 64) with radius 30 Triangle # To draw a triangle connecting three points, use the triangle() method.\nscreen.triangle(Point p1, Point p2, Point p3)\nscreen.pen = Pen(255, 128, 0); screen.triangle(Point(30, 90), Point(90, 20), Point(140, 110)); // Draw an orange triangle Polygon # To draw a polygon from a list of points, use the polygon() method with a std::vector\u0026lt;Point\u0026gt;.\nscreen.polygon(std::vector\u0026lt;Point\u0026gt; p)\nscreen.pen = Pen(0, 255, 128); screen.polygon({ Point(30, 60), Point(70, 30), Point(110, 60), Point(100, 110), Point(40, 110) }); // Draw a green pentagon ","date":"20 January 2026","externalUrl":null,"permalink":"/docs/game-sdk/api/graphics_shapes/","section":"Docs","summary":"This section covers the graphics capabilities and API of the Game SDK for VGC Zero. It includes information on basics of drawing and drawing shapes.\nDrawing basics # The Game SDK provides a variety of functions for drawing shapes, images, and text to the screen.\n","title":"Graphics - shapes","type":"docs"},{"content":"This section covers sprite handling and rendering capabilities of the Game SDK for VGC Zero. It includes information on loading sprites from assets, drawing them in various ways, and managing sprite collections.\nSprite sheets # 32blit supports 128×128 pixel sprite sheets containing 64 8×8 sprites. The engine is optimized for these dimensions, though larger assets can be represented using multiple sheets.\nSince 32blit has no hardware sprite engine, there is no hard limit on displayed sprites. However, excessive sprite use will impact framerate.\nLoading sprites # Sprites are typically loaded via the asset pipeline, which converts PNG images into packed, palette-based assets.\nUsing the asset pipeline # Given an assets/sprites.png file (128×128 pixels), define it in assets.yml:\nassets.cpp: assets/sprites.png: name: asset_sprites Register the asset in CMakeLists.txt:\nblit_assets_yaml(application-name assets.yml) Include the generated header and load the sprite sheet in your init() function:\n#include \u0026#34;assets.hpp\u0026#34; void init() { screen.sprites = Surface::load(asset_sprites); } Manual sprite loading # You can also load sprites manually if you have packed sprite data:\nSurface *more_sprites; void init() { more_sprites = Surface::load(packed_data); } Since the sprite sheet is a Surface, it can be copied using blit():\n// Copy an 8x8 region from the sprite sheet to screen screen.blit(more_sprites, Rect(0, 0, 8, 8), Point(0, 0)); Tip blit() offers more flexibility than sprite drawing functions and can copy non-aligned regions, though with a slight performance cost.\nDrawing sprites # By index # A 128×128 sprite sheet contains 64 8×8 sprites numbered 0–63 from left to right, top to bottom. Sprite 0 is top-left; sprite 7 is top-right. The next row starts at sprite 8.\nDraw a sprite by index at a given point:\nscreen.sprite(uint8_t index, Point p)\nscreen.sprite(1, Point(30, 30)); // Draw sprite 1 at (30, 30) By location # Sprites can be addressed by column (0–15) and row (0–15). A Point specifies the location on the sprite sheet, and another Point specifies the screen position.\nscreen.sprite(Point(0, 1), Point(30, 30)); // Draw sprite at row 0, column 1, to screen (30, 30) In groups # Use a Rect to draw multiple sprites at once. The Rect specifies the starting column/row and the width/height in sprite units.\nDraw the first four sprites of the top row:\nscreen.sprite(Rect(0, 0, 4, 1), Point(0, 0)); // 4 wide, 1 tall Draw a 2×2 grid of the four top-left sprites:\nscreen.sprite(Rect(0, 0, 2, 2), Point(0, 0)); // 2 wide, 2 tall Using a tilemap # For large groups of sprites (such as level layouts), use a TileMap—a 2D array of tile IDs with optional attribute flags. This approach is more efficient for managing complex sprite-based scenes.\nSee the TileMap documentation for details on construction and rendering.\n","date":"20 January 2026","externalUrl":null,"permalink":"/docs/game-sdk/api/graphics_sprites/","section":"Docs","summary":"This section covers sprite handling and rendering capabilities of the Game SDK for VGC Zero. It includes information on loading sprites from assets, drawing them in various ways, and managing sprite collections.\n","title":"Graphics - sprites","type":"docs"},{"content":"This section covers the graphics capabilities and API of the Game SDK for VGC Zero, focusing on text rendering. It includes information on how to draw text, manage fonts, and utilize text-related features available to developers.\nFonts # The 32blit engine supplies functions for drawing text to any surface using built-in fonts or TTF/image fonts processed via the asset pipeline.\nBuilt-in fonts # Three built-in fonts are available out of the box:\nMinimal Font: minimal_font Outline Font: outline_font Fat Font: fat_font Custom fonts # Custom fonts can be added with the 32blit asset pipeline. TTF files are recognized and converted automatically. GIF and PNG images are also supported and should define individual characters in a single row with regular spacing.\nTTF fonts # Define the font in assets.yml and set the desired height (bitmap is baked to this size):\nfont_asset.cpp: PressStart2P-Regular.ttf: name: custom_font_data height: 8 This tells the builder to produce font_asset.cpp/font_asset.hpp containing custom_font_data rendered at 8 px height.\nPNG/GIF fonts # Bitmap fonts are transformed from a single-row image containing regularly spaced characters. Width per character is image_width / num_chars; height is the image height. Images usually contain 96 characters (! through ~), but this is configurable. Optional settings: space_width (defaults to 3 px) and vertical_spacing for line gaps. Variable width is inferred by scanning filled pixels.\nExample assets.yml:\nfont_asset.cpp: 12x8font.png: name: custom_font_data type: font/image vertical_spacing: 0 space_width: 4 Using custom fonts # After asset build, include and construct the Font:\n#include \u0026#34;font_asset.hpp\u0026#34; const Font custom_font(custom_font_data); Use the custom font when drawing text:\nstd::string text = \u0026#34;This text uses\\nan imported\\nTrueType font.\u0026#34;; screen.text(text, custom_font, Point(0, 0), true); Tip Add the asset build step to CMake: blit_assets_yaml(text assets.yml).\nDrawing text # Two overloads render text: one constrained to a Rect (with wrapping/alignment) and one starting from a Point.\nText in a rectangle # Wrap and align text within a bounding box.\nvoid text(std::string_view message, const Font \u0026amp;font, const Rect \u0026amp;r, bool variable = true, TextAlign align = TextAlign::top_left);\nRect text_rect(10, 10, 100, 40); bool variable_width = true; screen.text(\u0026#34;Hello world\u0026#34;, minimal_font, text_rect, variable_width, TextAlign::center_center); Text at a point # Draw text anchored at a point (top-left by default); alignment offsets relative to that point.\nvoid text(std::string_view message, const Font \u0026amp;font, const Point \u0026amp;p, bool variable = true, TextAlign align = TextAlign::top_left);\nscreen.text(\u0026#34;Score: 42\u0026#34;, minimal_font, Point(10, 80)); Rect/Point position # Using a Rect defines a container with explicit edges. Alignment is resolved against that box. A Point defines an origin; for example, right-aligned text draws to the left of the point.\nFixed vs variable width # Fixed width: every character is the same width (useful for HUD counters where width must be predictable). Variable width: improves readability when text can flow or wrap. Alignment # Alignment is set via the fifth argument to screen.text using TextAlign flags. Common options:\nHorizontal: TextAlign::left, TextAlign::center_h, TextAlign::right Vertical: TextAlign::top, TextAlign::center_v, TextAlign::bottom Shorthands: top_left, center_left, bottom_left, top_center, center_center, bottom_center, top_right, center_right, bottom_right Example:\nscreen.text(text, minimal_font, text_rect, variable_width, TextAlign::center_center); Masking/Clipping # Text obeys the current clip rectangle. Set screen.clip to confine rendering.\nOther text functions # Get text size # Measure text before drawing to help with layout.\nSize measure_text(std::string_view message, const Font \u0026amp;font, bool variable = true);\nSize size = screen.measure_text(\u0026#34;Hello\u0026#34;, minimal_font); // size.w and size.h in pixels Wrap text # Wrap text to a width (optionally at word boundaries) before drawing.\nstd::string wrap_text(std::string_view message, int32_t width, const Font \u0026amp;font, bool variable = true, bool words = true);\nstd::string wrapped = screen.wrap_text( \u0026#34;This is a long line that needs wrapping.\u0026#34;, 120, minimal_font, true, true ); screen.text(wrapped, minimal_font, Rect(10, 120, 120, 80)); ","date":"20 January 2026","externalUrl":null,"permalink":"/docs/game-sdk/api/graphics_text/","section":"Docs","summary":"This section covers the graphics capabilities and API of the Game SDK for VGC Zero, focusing on text rendering. It includes information on how to draw text, manage fonts, and utilize text-related features available to developers.\n","title":"Graphics - text","type":"docs"},{"content":"","date":"20 January 2026","externalUrl":null,"permalink":"/tags/sdk/","section":"Tags","summary":"","title":"Sdk","type":"tags"},{"content":"","date":"20 January 2026","externalUrl":null,"permalink":"/tags/text/","section":"Tags","summary":"","title":"Text","type":"tags"},{"content":"","date":"16 December 2025","externalUrl":null,"permalink":"/tags/basics/","section":"Tags","summary":"","title":"Basics","type":"tags"},{"content":"This section covers the basic concepts and components of the Game SDK for VGC Zero. Understanding these fundamentals will help you effectively utilize the SDK to create engaging games for the console.\nProject Structure # A typical game project using the Game SDK has the following structure:\nproject_root/ # Root directory of your game project ├── .github/ # GitHub configuration files (e.g., workflows) ├── assets/ # Game assets like images, sounds, and fonts ├── build/ # Build artifacts ├── build.vgc/ # VGC Zero-specific build files ├── .gitignore # Git ignore rules ├── assets.yml # Asset configuration file ├── CMakeLists.txt # CMake build configuration ├── game.cpp # Main game source file ├── game.hpp # Header file for game declarations ├── LICENSE # License information for the project ├── metadata.yml # Metadata file containing game information └── README.md # Project documentation file Game Metadata # The metadata.yml file contains essential information about your game, such as its title, author, version, and description. This metadata is used by the VGC Zero console to display game information.\ntitle: My awesome game description: An exciting game made for VGC Zero. author: chilichip splash: file: assets/no-image.png icon: file: assets/no-icon.png version: v1.0.0 category: game url: https://github.com/example/my-awesome-game title, description, author, version, category, and url provide basic details about the game, while splash and icon specify the paths to the game\u0026rsquo;s splash screen and icon images, respectively.\nAsset Management # Assets such as images, sounds, and fonts are stored in the assets/ directory. The assets.yml file is used to define and manage these assets, specifying their types and properties.\nassets.cpp: assets/no-image.png: # specify path to asset name: asset_no_image # give asset a variable name assets/no-icon.png: name: asset_no_icon assets/sprites.png: name: asset_sprites In this example, three assets are defined: no-image.png, no-icon.png, and sprites.png, each assigned a variable name for use in the game\u0026rsquo;s code.\nYou can include these assets in your game code with:\n#include \u0026#34;assets.hpp\u0026#34; then load them into memory with:\nscreen.sprites = Surface::load(asset_sprites); This will load the sprites.png asset as a sprite sheet that can be used for rendering sprites in your game.\nGame Loop # The core of your game logic is implemented in the game loop, which consists of three main functions: init(), update(), and render().\ninit(): This function is called once when the game starts. Use it to initialize game variables, load assets, and set up the initial game state.\nupdate(uint32_t time): This function is called repeatedly to update the game state. It receives the elapsed time since the game started, allowing you to implement game logic, handle input, and update animations.\nrender(uint32_t time): This function is called to render the game\u0026rsquo;s graphics. It also receives the elapsed time, which can be used for time-based animations and effects.\nHere is a minimal example of a game source file game.cpp:\n#include \u0026#34;game.hpp\u0026#34; using namespace blit; void init() { set_screen_mode(ScreenMode::hires); // Set screen mode // Initialize game state } void update(uint32_t time) { // Update game logic } void render(uint32_t time) { screen.clear(); // Clear the screen // Render game graphics } Expand this basic structure to implement your game\u0026rsquo;s unique features and mechanics.\nHeader file # It\u0026rsquo;s common practice to separate declarations from implementations in C++ by using header files. In this case, you can create a game.hpp file to declare your game functions and any global variables or constants.\n#include \u0026#34;32blit.hpp\u0026#34; // Other includes // Function declarations ","date":"16 December 2025","externalUrl":null,"permalink":"/docs/game-sdk/api/basics/","section":"Docs","summary":"This section covers the basic concepts and components of the Game SDK for VGC Zero. Understanding these fundamentals will help you effectively utilize the SDK to create engaging games for the console.\n","title":"Game SDK basics","type":"docs"},{"content":"This guide will help you get started with setting up your development environment on Linux and creating your first game for the VGC Zero console.\nPrerequisites # Some experience writing/compiling C/C++ software is required.\nYou\u0026rsquo;ll need to install:\nGit CMake (at least 3.9) Make (or another build tool like Ninja) Python (at least 3.6) + pip The 32blit tools GCC SDL2 + SDL2_image + SDL2_net U can install all of these on Ubuntu/Debian with:\nsudo apt install git gcc g++ gcc-arm-none-eabi cmake make \\ python3 python3-pip python3-setuptools \\ libsdl2-dev libsdl2-image-dev libsdl2-net-dev unzip Then install the 32blit tools:\npip install 32blit Building and running locally # Clone the SDK repository\ngit clone https://github.com/chili-chip/32blit-sdk Create a new game project using our game template\nUse this template button Or you can clone one of our sample games, like chili tetris.\ngit clone https://github.com/chili-chip/chili-tetris Your directory structure should look like this:\nproject_root/ ├── 32blit-sdk/ └── your-project/ Build the game\ncd your-project mkdir build cd build cmake .. make Run the game locally\n./game This will launch the game in a window on your desktop using SDL2. Now you can test and develop your game locally before deploying it to the VGC Zero hardware.\nBuilding for VGC Zero # Get necessary tools\npico-sdk pico-extras Clone the pico-sdk and pico-extras repositories:\ngit clone https://github.com/raspberrypi/pico-sdk git clone https://github.com/raspberrypi/pico-extras Your directory structure should look like this:\nproject_root/ ├── 32blit-sdk/ ├── pico-sdk/ ├── pico-extras/ └── your-project/ Create a build directory\ncd your-project mkdir build.vgc cd build.vgc Configure the build for VGC Zero\nRun cmake with the board and platform specified:\ncmake .. \\ -D32BLIT_DIR=../../32blit-sdk \\ -DPICO_SDK_PATH=../../pico-sdk \\ -DPICO_BOARD=chilichip_vgc \\ -DPICO_PLATFORM=rp2350-arm-s \\ -DCMAKE_TOOLCHAIN_FILE=../../32blit-sdk/pico2.toolchain Adjust paths if your SDKs are located elsewhere relative to your project directory.\nBuild the game for VGC Zero\nmake This will produce a .uf2 file in the build.vgc directory.\nFlashing to VGC Zero # Connect your VGC Zero to your computer via USB. Put the VGC Zero into bootloader mode by holding down the BOOT button while plugging it in. Your computer should recognize the VGC Zero as a removable drive named RP2350. Copy the generated .uf2 file from the build.vgc directory to the RP2350 drive. The console will reboot and run your game. Troubleshooting # If pip installs to a directory not on PATH:\nexport PATH=$PATH:~/.local/bin ","date":"16 December 2025","externalUrl":null,"permalink":"/docs/game-sdk/quickstart/linux-quickstart/","section":"Docs","summary":"This guide will help you get started with setting up your development environment on Linux and creating your first game for the VGC Zero console.\nPrerequisites # Some experience writing/compiling C/C++ software is required.\n","title":"Linux quickstart","type":"docs"},{"content":"Here you\u0026rsquo;ll find quickstart guides to help you set up your development environment and start creating games for VGC Zero. Select the guide for your platform below to get started.\n","date":"16 December 2025","externalUrl":null,"permalink":"/docs/game-sdk/quickstart/","section":"Docs","summary":"Here you’ll find quickstart guides to help you set up your development environment and start creating games for VGC Zero. Select the guide for your platform below to get started.\n","title":"Quickstart","type":"docs"},{"content":"","date":"16 December 2025","externalUrl":null,"permalink":"/tags/quickstart/","section":"Tags","summary":"","title":"Quickstart","type":"tags"},{"content":"","date":"2 November 2025","externalUrl":null,"permalink":"/tags/breadboard/","section":"Tags","summary":"","title":"Breadboard","type":"tags"},{"content":"","date":"2 November 2025","externalUrl":null,"permalink":"/tags/hardware/","section":"Tags","summary":"","title":"Hardware","type":"tags"},{"content":"","date":"2 November 2025","externalUrl":null,"permalink":"/tags/open-source/","section":"Tags","summary":"","title":"Open-Source","type":"tags"},{"content":"","date":"2 November 2025","externalUrl":null,"permalink":"/tags/prototype/","section":"Tags","summary":"","title":"Prototype","type":"tags"},{"content":"Everything you need to know about VGC Zero — the ultra-portable, open-source game console. Learn how to set it up, use it, and create your own games.\n","date":"2 November 2025","externalUrl":null,"permalink":"/docs/vgc-zero/","section":"Docs","summary":"Everything you need to know about VGC Zero — the ultra-portable, open-source game console. Learn how to set it up, use it, and create your own games.\n","title":"VGC Zero","type":"docs"},{"content":"Build your own VGC Zero breadboard prototype with our open-source design files and step-by-step instructions today!\nBill of Materials # To assemble your own VGC Zero breadboard prototype, you will need the following components:\nRaspberry Pi Pico 2 W Microcontroller - Raspberry Pi Official Website ST7735S 1.44\u0026quot; 128x128 SPI TFT Display - AliExpress Audio Amplifier Module (e.g., HXJ8002) - AliExpress Speaker (32 Ohm, ~0.5W) - AliExpress Tactile Push Buttons - AliExpress Breadboard and Jumper Wires - AliExpress Schematic Diagram # Below is the schematic diagram for the VGC Zero breadboard prototype. This diagram illustrates how to connect all the components together.\nSimple Schematic # Simple Schematic Diagram of VGC Zero Breadboard Prototype Kicad Schematic # Coming soon!\nAssembly Instructions # Set Up the Breadboard: Place the Raspberry Pi Pico 2 W on the breadboard. Connect the Display: Wire the ST7735S display to the Raspberry Pi Pico according to the schematic. Add the Audio Module: Connect the audio amplifier module and speaker to the Raspberry Pi Pico. Install Buttons: Place the tactile push buttons on the breadboard and wire them to the appropriate GPIO pins on the Raspberry Pi Pico. Software Instructions # Ready-Made Games # To get started quickly, you can download pre-compiled games for the VGC Zero from our GitHub page: chilichip\nChoose a game repository. For example, the \u0026ldquo;Chili Game of Life\u0026rdquo; can be found at chili-game-of-life. Download the compiled UF2 file from the repository\u0026rsquo;s releases section. Connect your Raspberry Pi Pico 2 W to your computer while holding the BOOTSEL button to enter bootloader mode. Copy the UF2 file to the Raspberry Pi Pico drive that appears on your computer. Done! The game should start running on your VGC Zero breadboard prototype. Self-Development # To develop your own games for the VGC Zero, follow these steps:\nSet Up the Development Environment: Follow the instructions in the chilichip\u0026rsquo;s 32blit SDK repository to set up your development environment. 32blit SDK Create a New Project: Use the game template to create a new repository for your game. Game Template Write Your Game Code: Implement your game logic using C++ and the 32blit SDK APIs. Build the game with CMake: Use CMake to compile your game into a UF2 file. Flash the Game: Connect your Raspberry Pi Pico 2 W in bootloader mode and copy the UF2 file to the device. Test and Iterate: Run your game on the VGC Zero breadboard prototype and make adjustments as needed. ","date":"2 November 2025","externalUrl":null,"permalink":"/docs/vgc-zero/vgc-breadboard/","section":"Docs","summary":"Build your own VGC Zero breadboard prototype with our open-source design files and step-by-step instructions today!","title":"VGC Zero - Breadboard Prototype","type":"docs"},{"content":"🚀 Today we’re launching the Chili Room Editor — a focused, zero-install, in‑browser tool for building small retro‑style rooms for our sdk.\nIt’s intentionally minimal: drop in a tileset, paint two layers, export a deterministic C header. No build chain, no project scaffolding, no fluff.\nTL;DR # Use a 128px‑wide tileset → paint a 16×16 room (two layers) → export a ready‑to‑include header with static arrays. Fast loop, predictable output.\nChili Room Editor (initial release)\nLaunch Goals # Speed: iterate on room layouts in seconds. Determinism: exported header stays stable in git diffs. Zero friction: one page, no login, no server-side state. Key Features (v1) # Tileset Handling # PNG upload (must be 128px wide, height up to 128px). Selectable tile size: 8, 16, or 32 (must divide 128). Automatic slicing into a clickable palette. Safe re-slicing without losing existing map (out-of-range tiles auto-cleared). Local persistence of the tileset (base64 in storage) with a manual clear option. Palette \u0026amp; Brush # Generated buttons for each tile. Visual highlighting of the active brush. Erase mode toggle (sets cells to -1). Map Editing # Fixed 16x16 room grid. Pixel-crisp rendering (integer scaling, disables smoothing). Click \u0026amp; drag painting (mouse + touch). Background color picker (stored and exported as a hex literal). Grid overlay for alignment. Layers # Two layers (0 = base, 1 = overlay). Layer switching buttons with highlight. Per-layer mini previews plus a combined composite preview. Clear current layer only (confirmation guarded). Persistence # Tileset image, tile size, layers, and background color auto-saved. Legacy single-layer migration supported. Export # Generates a C header snippet: Dimensions (ROOM_W, ROOM_H) LAYER_COUNT Background color literal One static const int array per layer (flattened row-major) Copy to clipboard, inline preview (alert), or direct .h download. Data Representation # Empty cell: -1 Arrays sized ROOM_W * ROOM_H Macro-friendly formatting for your engine. Rendering Details # Layer order: lower index first. Palette and map both avoid interpolation. Device pixel ratio handling to reduce blur. Quick Start # Export a 128px‑wide tileset (Aseprite etc.). Load it → choose tile size (8 / 16 / 32). Paint base layer (terrain) then overlay (objects / props). Pick a background color. Export header → drop into your project. Include arrays directly in your room loader. Why It Helps (VGC / 32blit) # Removes manual tile index bookkeeping. Deterministic arrays keep diffs clean → easy reviews. Encourages small, memory‑friendly content chunks. Instant iteration before asset pipelines exist. Future‑proof: export format is scriptable for later tooling. Roadmap (Planned / Candidate) # Collision mask layer Animated tile flags / frame groups Fill / rectangle / line tools Tileset metadata (naming / grouping) Multi‑room project export bundle Undo/redo (lightweight history ring) Optional compressed export (delta / RLE) Known Limitations (v1) # No undo/redo yet Single fixed room size (16×16) Two layers only Raw int arrays (no compression) No collision or metadata layer yet Export Format Snapshot # Outputs a header with:\n#define ROOM_W 16 #define ROOM_H 16 #define LAYER_COUNT 2 static const int ROOM_BG_COLOR = 0xFF0F0F0F; // example static const int layer0[ROOM_W * ROOM_H] = { /* row-major data */ }; static const int layer1[ROOM_W * ROOM_H] = { /* row-major data */ }; Values are stable unless you repaint; re‑slicing prunes invalid tiles to -1.\nFeedback Wanted # If you try it and something slows you down—tell us. Highest priorities will be workflow friction, collision data, and multi‑room flows.\nTry It Now # Use it directly in your browser—no install:\nOpen the Room Editor ","date":"28 September 2025","externalUrl":null,"permalink":"/posts/map-editor/","section":"Blog","summary":"🚀 Today we’re launching the Chili Room Editor — a focused, zero-install, in‑browser tool for building small retro‑style rooms for our sdk.\nIt’s intentionally minimal: drop in a tileset, paint two layers, export a deterministic C header. No build chain, no project scaffolding, no fluff.\n","title":"Announcing the Chili Room Editor","type":"posts"},{"content":"","date":"28 September 2025","externalUrl":null,"permalink":"/tags/map-editor/","section":"Tags","summary":"","title":"Map-Editor","type":"tags"},{"content":"","date":"28 September 2025","externalUrl":null,"permalink":"/tags/tilemap/","section":"Tags","summary":"","title":"Tilemap","type":"tags"},{"content":"","date":"28 September 2025","externalUrl":null,"permalink":"/tags/tools/","section":"Tags","summary":"","title":"Tools","type":"tags"},{"content":"","date":"21 September 2025","externalUrl":null,"permalink":"/tags/automaton/","section":"Tags","summary":"","title":"Automaton","type":"tags"},{"content":"","date":"21 September 2025","externalUrl":null,"permalink":"/tags/controls/","section":"Tags","summary":"","title":"Controls","type":"tags"},{"content":" “The rules of Life were designed to be as simple as possible, and yet allow for surprising complexity.” — John Horton Conway click to focus Open game in a new tab How to play # Press ESC for the MENU button action (restart simulation with random seed). On mobile the embedded game is hidden; use the button to open it in a new tab.\nAbout the game # Conway\u0026rsquo;s Game of Life is a cellular automaton devised by the British mathematician John Horton Conway in 1970. It is a zero-player game, meaning that its evolution is determined by its initial state, requiring no further input. The game consists of a grid of cells that can be in one of two states: alive or dead. The state of each cell changes over discrete time steps according to a set of simple rules based on the states of its eight neighbors. These rules lead to complex and often unpredictable patterns, making the Game of Life a fascinating subject for study in mathematics, computer science, and artificial life.\nSource code # chili-chip/chili-game-of-life Game of life C\u0026#43;\u0026#43; 0 0 ","date":"21 September 2025","externalUrl":null,"permalink":"/games/game-of-life/","section":"Games","summary":"Create and observe evolving cell patterns in Conway’s Game of Life. Experiment with the grid and discover how each generation changes according to simple rules.","title":"Conway's Game of Life","type":"games"},{"content":"","date":"21 September 2025","externalUrl":null,"permalink":"/tags/mobile/","section":"Tags","summary":"","title":"Mobile","type":"tags"},{"content":"We are excited to announce that all games made using our SDK are now fully playable on mobile devices!\nWith the introduction of touch controls, you can enjoy our games on the go, whether you\u0026rsquo;re using a smartphone or a tablet.\nScreenshot of a minesweeper game on a mobile device with touch controls\nThis update makes our platform more accessible than ever, bringing the same great gameplay experience to mobile users.\nAnd mobile is just one piece of the puzzle — games created with our SDK are now built for six platforms in total:\nWindows macOS Linux 32blit console (stm32) Web Chilichip’s VGC Zero console 👉 Try it now:\nPlay Minesweeper ","date":"21 September 2025","externalUrl":null,"permalink":"/posts/mobile-controls/","section":"Blog","summary":"We are excited to announce that all games made using our SDK are now fully playable on mobile devices!\nWith the introduction of touch controls, you can enjoy our games on the go, whether you’re using a smartphone or a tablet.\n","title":"Play on mobile devices","type":"posts"},{"content":"","date":"21 September 2025","externalUrl":null,"permalink":"/tags/web/","section":"Tags","summary":"","title":"Web","type":"tags"},{"content":"","date":"20 September 2025","externalUrl":null,"permalink":"/tags/logic/","section":"Tags","summary":"","title":"Logic","type":"tags"},{"content":" Flag the mines, clear the board, beat your best time. click to focus Open game in a new tab How to play # Pick a Level on the title screen with the arrow keys, then Play with Z (A). Each number tells you how many mines touch that cell. Your first reveal is always safe and always opens an area. Z (A) reveals a cell, X (B) plants or lifts a flag. Press Z or X on a number once all its mines are flagged to open every cell around it at once (chording). Clear every safe cell to win. Make the top five for your level and you get to enter your initials. Esc (MENU) pauses. The board is hidden while paused, so no peeking. Key Button Arrow keys / WASD D-pad (hold to repeat) Z A (reveal / select) X B (flag / back) Esc MENU (pause) On mobile the embedded game is hidden; use the button to open it in a new tab.\nLevels # Level Board Mines Easy 9x9 10 Medium 12x12 24 Hard 16x15 40 Expert 16x15 50 Each level keeps its own top-five best times, games won and win streaks. Music and Sound can be turned off in the menu, and everything is saved.\nAbout the game # The classic Minesweeper for VGC Zero, with ripple reveals, a chain-reaction explosion, confetti when you clear the board, a board that plays itself behind the menus and an original chiptune soundtrack synthesised live on the console\u0026rsquo;s audio channels. Built with the chili-chip 32blit SDK for the handheld, desktop, and the web.\nSource code # chili-chip/chili-minesweeper Minesweeper game made for VGC zero using blit32 sdk C\u0026#43;\u0026#43; 0 0 ","date":"20 September 2025","externalUrl":null,"permalink":"/games/minesweeper/","section":"Games","summary":"Flag the mines, clear the board, beat your best time. Classic Minesweeper for VGC Zero","title":"Minesweeper","type":"games"},{"content":" VGC Zero: The Ultra-Portable Keychain Video Game Console # VGC Zero visualization (not final hardware) VGC Zero is a pocket‑scale handheld you can actually carry everywhere. Clip it to your keys, plug in, code a game, share it—same device. Retro vibe, modern internals, fully hackable.\nHighlights # What it feels like to own \u0026amp; build on VGC Zero:\nAlways‑with‑you size: lives on your keychain, not a drawer Hack-first mindset: hardware + firmware intentionally open Fast iteration loop: edit → flash → run in seconds Unique input: rotary encoder enables scroll, spin, dial mechanics Audio flexibility: speaker for casual play, jack/Bluetooth for focus Community moddable shells \u0026amp; CAD from day one Teaches embedded concepts without overwhelming complexity Designed for sharing: small game binaries, simple packaging Runs on approachable tooling (forked 32blit SDK + Python/C++) Development Status # We have built two prototypes so far, and both run games. Our work can be tracked on our github.\nVGC Zero breadboard prototype (not final hardware) Prototype hardware # The first prototype was built on a breadboard (see the breadboard guide):\nComponent Part MCU Raspberry Pi Pico 2 W (RP2350) Display 1.44\u0026quot; 128×128 colour TFT, ST7735S driver, SPI Audio HXJ8002 amplifier module + small speaker Controls Tactile buttons + rotary encoder The current prototype is the v1.1.4 PCB (vgc-zero-hardware):\nComponent Part MCU Waveshare RP2350-Plus module (RP2350, Pico-compatible) Display Waveshare 1.5\u0026quot; RGB OLED module, 128×128, SSD1351 driver, SPI Audio Buzzer Controls 10 tactile buttons Power USB through the MCU module, slide power switch Other Status LED, 3 GPIO pin headers The v1.1.4 board has no battery, charger, headphone jack, rotary encoder or PSRAM yet. The next PCB revision moves to a TFT IPS display and adds audio filtering and a real-time clock.\nFirst public hardware target: 2027.\nWe’re fully open hardware + open source:\nSchematics, PCB, enclosure CAD: to be published under a permissive license. Bootloader, firmware, SDK, tools, sample games: open repo with documented changes. Wireframe of VGC Zero PCB (not final hardware) What’s Coming Next # Rolling out soon:\nHardware pinout \u0026amp; electrical notes Firmware architecture overview SDK \u0026amp; API reference Game packaging / distribution workflow Contribution \u0026amp; hacking guides DIY Builds # We’ll publish guides to assemble a working prototype from off‑the‑shelf parts (MCU module, 128×128 display, buttons, audio + power). Expect:\nParts list + sourcing Wiring / pinout diagrams Flashing + first boot Optional add‑ons (rotary encoder, low‑power tweaks, audio variants) Build early. Hack freely. Give feedback before the compact edition lands.\nTarget Specs # These are the planned specs for the final VGC Zero, not the current prototype.\nComponent Specification CPU RP2350 @ 150MHz RAM 520KB on-chip + 16MB PSRAM Storage 16MB Flash Display 128×128 color TFT IPS Audio Mono speaker, 3.5mm jack, Bluetooth audio Battery Target up to ~9 hours Controls D‑Pad, A, B, START, MENU, 2 shoulders, rotary encoder Connectivity Wi‑Fi + Bluetooth Charging USB‑C Why It’s Different # Fully open. Small enough to carry daily. A rotary encoder adds an input axis most micro handhelds skip. You can fork firmware, design cases, and ship your own games without a gatekeeper.\nMake \u0026amp; Share Games # SDK features (work in progress):\nC++ \u0026amp; Python game development Rotary encoder + button input APIs Asset + build tooling Packaging \u0026amp; distribution flow Automated CI:\nGames auto-build via GitHub Actions targeting 6 platforms with artifacts you can download directly from each release: VGC Zero 32blit (console) Web Windows Linux MacOS Based on a fork of the 32blit SDK with:\nRP2350 hardware bring‑up \u0026amp; memory layout changes 128×128 display timings + driver tweaks Rotary encoder input layer Power management hooks Expanded audio path (speaker / jack / Bluetooth) We plan to upstream improvements where feasible with clear divergence docs.\nchili-chip/32blit-sdk chilichip\u0026rsquo;s fork of 32blit SDK C 1 1 Play Sample Games # Minesweeper Conway\u0026rsquo;s Game of Life Community # Join us on Discord to discuss VGC Zero, share ideas, and get involved in development.\n","date":"17 September 2025","externalUrl":null,"permalink":"/docs/vgc-zero/discover-vgc-zero/","section":"Docs","summary":"VGC Zero: The Ultra-Portable Keychain Video Game Console # VGC Zero visualization (not final hardware) VGC Zero is a pocket‑scale handheld you can actually carry everywhere. Clip it to your keys, plug in, code a game, share it—same device. Retro vibe, modern internals, fully hackable.\n","title":"Discover VGC Zero","type":"docs"},{"content":"","date":"17 September 2025","externalUrl":null,"permalink":"/tags/gaming/","section":"Tags","summary":"","title":"Gaming","type":"tags"},{"content":"","date":"17 September 2025","externalUrl":null,"permalink":"/tags/hello/","section":"Tags","summary":"","title":"Hello","type":"tags"},{"content":"We’re an indie electronics collective growing bold ideas at the intersection of innovation and play.\nAt Chilichip, every circuit we design is shaped by curiosity, creativity, and a love for nature’s simplicity.\nWe’re not chasing the next gadget fad.\nWe’re building devices that feel personal, thoughtful, and a little bit spicy.\nThis is just the beginning — and we’d love to have you along for the ride. 🚀\n— The Chilichip Team\n","date":"17 September 2025","externalUrl":null,"permalink":"/posts/hello-world/","section":"Blog","summary":"We’re an indie electronics collective growing bold ideas at the intersection of innovation and play.\nAt Chilichip, every circuit we design is shaped by curiosity, creativity, and a love for nature’s simplicity.\n","title":"Hello world from chilichip","type":"posts"},{"content":"","date":"17 September 2025","externalUrl":null,"permalink":"/tags/keychain/","section":"Tags","summary":"","title":"Keychain","type":"tags"},{"content":"","date":"17 September 2025","externalUrl":null,"permalink":"/tags/portable/","section":"Tags","summary":"","title":"Portable","type":"tags"},{"content":" Who we are # chilichip is an indie electronics company. We make open source software and hardware, and we like it a little bit spicy.\nRight now we are building the chilichip console: a pocket game console that comes with a no-code game creator. You make a game in your browser on the chili platform, then play it on the console. The platform is also where you buy the hardware, get games and meet the community.\nEverything we make is open source. The code, the boards and the docs are all on GitHub.\nWhat Where The console and its prototype, VGC Zero VGC Zero docs Games for the console Games Making your own games Game SDK docs, Bitsy docs News and dev logs Blog Chat with us Discord The team # KA Kacper Akdağ-Ochnik Founder and head engineer\nKacper started chilichip and builds it from the hardware up. He designs the console boards, writes the Game SDK and the firmware, and makes the retro games that run on chilichip. He also works on the chili platform and on citsy, our Bitsy game engine. GitHub PF Paweł Frankowski Cloud engineer and software lead\nPaweł leads the software side. He keeps the chili platform running in the cloud: the backend, the marketplace and the store. He reviews most of the code that ships, across the platform, the creator and this website. When something breaks at night, Paweł is usually the one who already knows why. GitHub E Eli Hardware and design engineer\nEli loves doing hardware, artsy games and fun concepts. Get in touch # Email us at chilichipelectronics@gmail.com, or say hi on Discord.\n","externalUrl":null,"permalink":"/about/","section":"chilichip: pocket game consoles you can play, make and hack","summary":"Who we are # chilichip is an indie electronics company. We make open source software and hardware, and we like it a little bit spicy.\n","title":"About chilichip","type":"page"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"}]