Skip to content

Release v1.0.0

Latest

Choose a tag to compare

@github-actions github-actions released this 31 Mar 19:50
· 3 commits to master since this release

v1.0.0 - The "it's been six years, stop calling it 0.x" release

Release Date: March 31, 2026

The library has been around since 2020, and the API hasn't broken in a while, so v1.0.0 felt overdue. This release closes five open issues (#4, #6, #10, #19, #20), trims about 60 bytes of flash through internal cleanup, and adds optional features behind compile-time flags so you only pay for what you use.

Bug fixes

  • Sprites dropped down at negative X (#20): Drawing a sprite with a negative X coordinate via ssd1306_draw_bmp_px caused it to wrap and jump down ~8 pixels. Both ssd1306_draw_bmp_px and ssd1306_clear_area_px now bounds-check X properly.

  • Garbled text from ssd1306_char_f8x16: An uninitialized loop counter could produce corrupted output. Fixed, and the function is now renamed to ssd1306_string_f8x16 since it always took a string anyway (breaking change).

New features

  • Signed X clipping (SSD1306_CLIPPING): ssd1306_draw_bmp_px_clipped() and ssd1306_clear_area_px_clipped() let sprites smoothly enter and exit the screen from the left edge using signed X coordinates. Opt-in via build flag.

  • Page compositing (SSD1306_COMPOSITING): ssd1306_compose_bmp_px() and ssd1306_send_buf() merge overlapping sprites into a small buffer before sending, so they don't erase each other on shared pages. This is the direct fix for the sprite flicker in #19.

  • Fast fillscreen (SSD1306_FAST_FILLSCREEN): 4x-unrolled fillscreen loop. Opt-in via build flag.

  • Contrast and sleep: ssd1306_set_contrast() for brightness control (#4), plus ssd1306_display_off() / ssd1306_display_on() for sleep mode (~1 uA draw).

  • Opt-out flags: SSD1306_NO_FONT_6X8, SSD1306_NO_FONT_8X16, SSD1306_NO_DRAW_BMP to strip things you don't need from the build.

Internal cleanup (~60 bytes flash saved)

  • Removed an unused I2C read path from I2CStart
  • Merged duplicate I2C start functions into one shared helper
  • Shared init loop across all three init functions
  • ssd1306_string_font6x8 now sends the whole string in a single I2C transaction instead of start/stop per character (smaller and faster)
  • Dead code removal in ssd1306_draw_bmp

Documentation

The README used to be a long API reference. Now it links to a proper documentation site built with Doxygen. Every public function, macro, and class has doc comments, plus five guide pages: getting started, SSD1306 architecture, feature flags, examples walkthrough, and a v0.x to v1.0 migration guide.

The architecture page now covers how to initialize 128x32 displays (#10) and confirms SSD1315 compatibility (#6) - both were previously answered in issues but never written down anywhere findable.

CI/CD

  • New docs.yml workflow builds Doxygen and deploys to GitHub Pages on push to master.
  • pr-checks.yml now builds docs on PRs too, uploads an artifact, and posts a comment with a download link for preview.
  • release.yml handles the jump from 0.0.4 to 1.0.0 correctly. If library.json already has a different version than the latest tag, it uses that instead of auto-incrementing.

Examples

Five new examples ship with this release, including three full games (Tiny Bomber, Tiny Gilbert, Space Invaders) and two demos showing the new clipping and compositing features. Each example has an animated GIF in its directory.

Breaking changes

  • ssd1306_char_f8x16 renamed to ssd1306_string_f8x16
  • ssd1306_string_font6x8 parameter is now const char *s

See the migration guide for details.

Contributors

Thanks to @bkumanchik for the bug reports (#19, #20) that drove the sprite fixes and new features, @mechengineermike for requesting contrast control (#4), @B3B3K for figuring out the 128x32 init sequence (#10), and @justdomyself for the SSD1315 question (#6).

And always, @Lorandil, for your continued support towards the development.


Full Changelog: v0.0.4...v1.0.0