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_pxcaused it to wrap and jump down ~8 pixels. Bothssd1306_draw_bmp_pxandssd1306_clear_area_pxnow 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 tossd1306_string_f8x16since it always took a string anyway (breaking change).
New features
-
Signed X clipping (
SSD1306_CLIPPING):ssd1306_draw_bmp_px_clipped()andssd1306_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()andssd1306_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), plusssd1306_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_BMPto 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_font6x8now 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.ymlworkflow builds Doxygen and deploys to GitHub Pages on push to master. pr-checks.ymlnow builds docs on PRs too, uploads an artifact, and posts a comment with a download link for preview.release.ymlhandles the jump from 0.0.4 to 1.0.0 correctly. Iflibrary.jsonalready 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_f8x16renamed tossd1306_string_f8x16ssd1306_string_font6x8parameter is nowconst 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