github nesbox/TIC-80 v1.3.0
TIC-80 tiny computer 1.3.0

3 hours ago

TIC-80 v1.3.0

TIC-80 v1.3.0 adds MiniScript and Forth runtimes, new audio-analysis APIs, native Metal rendering for macOS/iOS, and a wide set of web, editor, controller, and platform fixes since v1.2.0.

What's new

  • New runtimes: MiniScript and Forth are now supported, with MiniScript updated to the latest MiniScript 2 main. Help/version docs now name both as post-1.2.0 runtimes.
  • Audio APIs: Added VQT audio analysis and spectral whitening APIs, plus raw FFT magnitude APIs fftr and fftrs.
  • Script eval: Python and JavaScript now implement eval; JavaScript also no longer crashes when there is nothing to evaluate.
  • Editor & templates: Python editor now outlines defs/classes; code from codeimport updates before running; new TinyGo-based Go starter template; Zig template updated for Zig 0.17.
  • Web & export: Added a Surf build option, a sokol web system layer, 4M wasm stack plus a check, and HTML export/site-player improvements. A played cart now returns to the browser on CLOSE GAME, and Surf no longer starves the browser or leaks fetch bodies.

Platform

  • Apple: New Metal renderer with native macOS/iOS support; optimized gamepad polling, border rendering, and file-change checks on Metal.
  • Linux/ARM: Added Linux ARM GLESv2 support; Linux icons/mimetypes moved to the hicolor theme.
  • Android: Manifest now uses the Game category and fixes .tic association on Android 12+.
  • Controllers: Dynamic controller assignment; SDL right stick moves the cursor and only shows after first movement.
  • Web/libretro: WASM libretro core no longer fails at runtime; optional libretro environment calls are non-fatal; console add survives Emscripten runtime trimming.
  • Console: Improved eval feedback when no cart is loaded; help tables and VRAM docs cleaned up.

Bug fixes

  • Fixed bookmark panel crash when a bookmark is on a blank line.
  • Fixed Squirrel out-of-bounds array indexing and a scanline/border callback memory leak.
  • Fixed Python sfx() ignoring note/octave/speed from the SFX editor.
  • Fixed world map preview ignoring the map editor BPP setting.
  • Fixed space key with KEYBOARD_LAYOUT_ES after tic_key_iso_extra removal.
  • Fixed code editor tab width after horizontal scroll.
  • Fixed same-platform export preferring an external native template instead of the local one.
  • Fixed JavaScript eval crash when there is nothing to evaluate.
  • Improved code rendering by adjusting viewport handling.
  • Fixed Studio net field declaration and tic80_tick callback declarations.

Build & infrastructure

  • CI now builds main and pull requests instead of every branch, builds players on every build, and restores stubs to releases.
  • Site now consumes per-language HTML pairs on every build.
  • Added a PRO linux-arm64 build; removed GCC 14 from the matrix.
  • Configure now warns when the build has no network.
  • Release tag builds receive Android signing secrets; stub lists include MiniScript and Forth.
  • Release notes now lead with this summary before GitHub's PR list; SECURITY.md no longer pins specific versions.
  • Build asset directory now follows the build itself; toolbar modularized.

Statistics: 62 commits, 54 pull requests, 19 contributors.

On tic80.com

The site moved on too:

  • Games delete and restore. Your own cartridges, from their page or your
    profile: hidden at once, recoverable for 30 days, comments and +1s included.
    An account can delete itself the same way.
  • A notifications page — comments and +1s on your cartridges, with a
    counter in the navigation.
  • A liked-games page — everything you have +1'd, in one place.
  • +1 is open to everyone: the old gate that required your own games to be
    liked first is gone.
  • Sign in with your e-mail as well as your user name.
  • A full-screen player — a game page, and the browser IDE, can open the
    cartridge alone: no site chrome, the player fills the screen, and the game
    starts as soon as the page opens.
  • Every game states the language it is written in.
  • Game pages load a player built for that language — several times smaller
    than the universal one, so they start faster.
  • New games are announced in the community chat again.

What's Changed

  • Fix #2773: space key broken with KEYBOARD_LAYOUT_ES after tic_key_iso_extra removal by @joshgoebel in #2962
  • Fix #2920: Python sfx() ignores note/octave/speed from SFX editor by @joshgoebel in #2963
  • Fix #1558: world map preview ignores map editor bpp setting by @joshgoebel in #2964
  • fix: squirrel scanline/border callback memory leak (#2825) by @joshgoebel in #2965
  • Update SECURITY.md to remove specific versions by @pixelbath in #2948
  • libretro: don't treat optional environment calls as fatal by @wescopeland in #2980
  • Declare tic80_tick's callbacks as they are defined and called by @annejan in #2981
  • Declare Studio's net field under the condition it is used by @annejan in #2982
  • Fix WASM libretro core build failing at runtime by @Ferk in #2983
  • Fix attempting to out-of-bounds index Squirrel arrays by @swoolcock in #2988
  • Fix bookmark panel crashing if there is a bookmark on a blank line by @swoolcock in #2993
  • [Fix] [Export] prefer local native template for same-platform export by @RDeckard in #2916
  • Fix code editor tab width after horizontal scroll by @RDeckard in #2957
  • web: 4M of stack for the wasm build, and a check on it by @nesbox in #3006
  • ci: build main and pull requests, not every branch by @nesbox in #3008
  • AndroidManifest -> Set to Game category, and fix .tic association on Android 12+ by @imsys in #2956
  • Optimize code rendering by adjusting viewport handling by @Wang-Yue in #2974
  • [SDL] Uses right stick to move cursor + only shows after first move by @imsys in #2936
  • Dynamic controller assignment by @imsys in #2958
  • Change in the index.html file for html exports by @bettywolfy in #2998
  • Adds support for Linux ARM GLESv2 by @imsys in #2912
  • templates: add Go starter project template using TinyGo by @akhenakh in #3002
  • Add raw FFT magnitude APIs fftr and fftrs by @aliceisjustplaying in #3000
  • Add VQT audio analysis and spectral whitening APIs by @aliceisjustplaying in #3001
  • Add MiniScript support by @MineRobber9000 in #2992
  • Forth by @luginf in #2947
  • release: grow the stub lists with MiniScript and Forth by @nesbox in #3009
  • version: a build's asset directory follows from the build itself by @nesbox in #3010
  • help version: name the two runtimes added after 1.2.0 by @nesbox in #3011
  • console: one definition per help table, and VRAM without angle brackets by @nesbox in #3013
  • ci: a PRO linux-arm64 build, and gcc14 out of the matrix by @nesbox in #3014
  • surf: a played cart returns to the browser on CLOSE GAME by @nesbox in #3016
  • Add Metal Renderer and native macOS/iOS support for TIC-80 by @Wang-Yue in #2973
  • ci: the per-language html pairs on every build the site consumes by @nesbox in #3027
  • html: the site's players keep the editors by @nesbox in #3030
  • ci: the players on every build, the stubs back to releases by @nesbox in #3031
  • python: implement eval by @zayfod in #3019
  • js: implement eval, and stop crashing when there is nothing to eval by @zayfod in #3020
  • console: say when eval has no cart to evaluate against by @zayfod in #3022
  • Update MiniScript 2 to latest main by @MineRobber9000 in #3012
  • Always update code from codeimport before running game by @MartinRykfors in #3025
  • console: the add command survives emscripten's runtime trimming by @zayfod in #3018
  • macOS Metal: optimize gamepad polling, border rendering & rate-limit file change checks by @Wang-Yue in #3021
  • Move Linux Icon to hicolor Theme by @amayer5125 in #3026
  • Add Linux Mimetype Icon by @amayer5125 in #3029
  • python: outline the code editor's defs and classes by @zayfod in #3023
  • #3033: warn at configure time when the build has no network by @nesbox in #3034
  • Surf build option by @nesbox in #3041
  • The toolbar becomes a module by @nesbox in #3046
  • sokol: a system layer for the web build by @nesbox in #3048
  • surf: covers stop starving the browser, and a fetch body is freed once by @nesbox in #3049
  • Update Zig template to support Zig 0.17 by @sergeypdev in #3050

New Contributors

Full Changelog: v1.2.0...v1.3.0

Don't miss a new TIC-80 release

NewReleases is sending notifications on new releases.