{"adoption": {"forks": 254, "observed_at": "2026-08-28T04:05:24.493588+00:00", "stars": 1703}, "canonical_url": "https://ross.abutalabs.com/products/fabgl", "card": {"archived": false, "artifact_type": "library", "description": "ESP32 Display Controller (VGA, PAL/NTSC Color Composite, SSD1306, ST7789, ILI9341), PS/2 Mouse and Keyboard Controller, Graphics Library, Sound Engine, Game Engine and ANSI/VT Terminal", "domain": ["embedded-systems", "graphics", "hardware", "developer-tools"], "enriched": true, "function": ["graphics", "game-engine", "gui", "audio-processing", "terminal-ui", "sdk"], "health_score": 25, "homepage": "http://www.fabglib.org", "language": "C++", "license": "NOASSERTION", "license_family": "other", "maturity": "active", "member_repos": ["fdivitto/FabGL"], "name": "fdivitto/FabGL", "platform": ["embedded", "cpp", "cross-platform"], "pushed_at": "2025-02-27T08:49:40+00:00", "repo": "fdivitto/FabGL", "stars": 1703, "tags": ["esp32", "vga", "ps2-keyboard", "ps2-mouse", "vt100-terminal", "composite-video", "retro-computing", "sprites", "sound-engine", "ssd1306", "ili9341", "st7789", "game-development"], "topics": ["esp32", "graphics-library", "game-engine", "vt100", "audio-engine", "graphics-engine", "gui", "widget-library", "vga", "mouse", "ps2", "keyboard", "sound", "fabgl", "audio", "emulator", "composite", "ntsc", "pal", "terminal"], "urls": [], "use_cases": ["render graphics on a VGA monitor from an ESP32", "build retro games or emulators on ESP32", "connect a PS/2 keyboard and mouse to ESP32 projects", "create a GUI with windows and widgets on small displays", "implement a VT100/ANSI terminal on ESP32 hardware", "generate multi-channel sound with DAC or sigma-delta output", "drive SSD1306, ST7789, or ILI9341 displays from ESP32"], "what_it_is": "FabGL is a C++ graphics and input library for the ESP32, providing display drivers for VGA, PAL/NTSC composite video, and I2C/SPI LCDs, plus PS/2 keyboard and mouse support. It also bundles an audio engine, a widget-based GUI, a game/emulation engine, and an ANSI/VT terminal emulator.", "when_to_avoid": ["you are not targeting the ESP32 platform", "you need the latest ESP-IDF versions, which leave insufficient free memory for FabGL", "you require a permissive commercial-friendly license without contacting the author (GPL v3)"], "when_to_choose": ["you are building display, input, sound, or retro-computing projects on ESP32", "you need VGA or composite video output with sprites and double buffering", "you want an all-in-one library with GUI, terminal, audio, and game engine support"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/fabgl", "repo": "fdivitto/FabGL", "role": "main", "score": 26}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.493588+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:37:37.653583+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "043d245046aa628e6ccc97bf419cddf985c620655e939d83dc3d2d4f29484a71", "fetched_at": "2026-08-28T04:05:24.493588+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fdivitto/FabGL"}, {"content_hash": "39e3851734c19c0f9fdb1e66ac1e72a34ad5c27b6ed9b8b2c41e336cea6bc39e", "fetched_at": "2026-08-29T11:11:56.649480+00:00", "kind": "homepage", "missing": false, "url": "http://www.fabglib.org"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.493588+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:37:37.653583+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "043d245046aa628e6ccc97bf419cddf985c620655e939d83dc3d2d4f29484a71", "fetched_at": "2026-08-28T04:05:24.493588+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fdivitto/FabGL"}, {"content_hash": "39e3851734c19c0f9fdb1e66ac1e72a34ad5c27b6ed9b8b2c41e336cea6bc39e", "fetched_at": "2026-08-29T11:11:56.649480+00:00", "kind": "homepage", "missing": false, "url": "http://www.fabglib.org"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:37:37.653583+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "043d245046aa628e6ccc97bf419cddf985c620655e939d83dc3d2d4f29484a71", "fetched_at": "2026-08-28T04:05:24.493588+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fdivitto/FabGL"}, {"content_hash": "39e3851734c19c0f9fdb1e66ac1e72a34ad5c27b6ed9b8b2c41e336cea6bc39e", "fetched_at": "2026-08-29T11:11:56.649480+00:00", "kind": "homepage", "missing": false, "url": "http://www.fabglib.org"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.493588+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.493588+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.493588+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:37:37.653583+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "043d245046aa628e6ccc97bf419cddf985c620655e939d83dc3d2d4f29484a71", "fetched_at": "2026-08-28T04:05:24.493588+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fdivitto/FabGL"}, {"content_hash": "39e3851734c19c0f9fdb1e66ac1e72a34ad5c27b6ed9b8b2c41e336cea6bc39e", "fetched_at": "2026-08-29T11:11:56.649480+00:00", "kind": "homepage", "missing": false, "url": "http://www.fabglib.org"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.493588+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.493588+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:37:37.653583+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "043d245046aa628e6ccc97bf419cddf985c620655e939d83dc3d2d4f29484a71", "fetched_at": "2026-08-28T04:05:24.493588+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fdivitto/FabGL"}, {"content_hash": "39e3851734c19c0f9fdb1e66ac1e72a34ad5c27b6ed9b8b2c41e336cea6bc39e", "fetched_at": "2026-08-29T11:11:56.649480+00:00", "kind": "homepage", "missing": false, "url": "http://www.fabglib.org"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.493588+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.493588+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.493588+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:37:37.653583+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "043d245046aa628e6ccc97bf419cddf985c620655e939d83dc3d2d4f29484a71", "fetched_at": "2026-08-28T04:05:24.493588+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fdivitto/FabGL"}, {"content_hash": "39e3851734c19c0f9fdb1e66ac1e72a34ad5c27b6ed9b8b2c41e336cea6bc39e", "fetched_at": "2026-08-29T11:11:56.649480+00:00", "kind": "homepage", "missing": false, "url": "http://www.fabglib.org"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.493588+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:24.493588+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:37:37.653583+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "043d245046aa628e6ccc97bf419cddf985c620655e939d83dc3d2d4f29484a71", "fetched_at": "2026-08-28T04:05:24.493588+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fdivitto/FabGL"}, {"content_hash": "39e3851734c19c0f9fdb1e66ac1e72a34ad5c27b6ed9b8b2c41e336cea6bc39e", "fetched_at": "2026-08-29T11:11:56.649480+00:00", "kind": "homepage", "missing": false, "url": "http://www.fabglib.org"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:37:37.653583+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "043d245046aa628e6ccc97bf419cddf985c620655e939d83dc3d2d4f29484a71", "fetched_at": "2026-08-28T04:05:24.493588+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fdivitto/FabGL"}, {"content_hash": "39e3851734c19c0f9fdb1e66ac1e72a34ad5c27b6ed9b8b2c41e336cea6bc39e", "fetched_at": "2026-08-29T11:11:56.649480+00:00", "kind": "homepage", "missing": false, "url": "http://www.fabglib.org"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:37:37.653583+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "043d245046aa628e6ccc97bf419cddf985c620655e939d83dc3d2d4f29484a71", "fetched_at": "2026-08-28T04:05:24.493588+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fdivitto/FabGL"}, {"content_hash": "39e3851734c19c0f9fdb1e66ac1e72a34ad5c27b6ed9b8b2c41e336cea6bc39e", "fetched_at": "2026-08-29T11:11:56.649480+00:00", "kind": "homepage", "missing": false, "url": "http://www.fabglib.org"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:37:37.653583+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "043d245046aa628e6ccc97bf419cddf985c620655e939d83dc3d2d4f29484a71", "fetched_at": "2026-08-28T04:05:24.493588+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fdivitto/FabGL"}, {"content_hash": "39e3851734c19c0f9fdb1e66ac1e72a34ad5c27b6ed9b8b2c41e336cea6bc39e", "fetched_at": "2026-08-29T11:11:56.649480+00:00", "kind": "homepage", "missing": false, "url": "http://www.fabglib.org"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 8, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2761, "days_push": 552, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 26, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}