{"id":19204837,"url":"https://github.com/meshtastic/device-ui","last_synced_at":"2025-05-16T06:02:49.731Z","repository":{"id":224228128,"uuid":"762765597","full_name":"meshtastic/device-ui","owner":"meshtastic","description":"meshtastic device-ui library","archived":false,"fork":false,"pushed_at":"2025-05-12T18:22:33.000Z","size":82110,"stargazers_count":334,"open_issues_count":16,"forks_count":45,"subscribers_count":34,"default_branch":"master","last_synced_at":"2025-05-13T07:13:37.796Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/meshtastic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"mverch67","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"custom":null}},"created_at":"2024-02-24T16:23:34.000Z","updated_at":"2025-05-12T20:24:18.000Z","dependencies_parsed_at":"2024-12-31T09:26:23.044Z","dependency_job_id":"b839d702-61ee-46ce-a854-15390d9ece3e","html_url":"https://github.com/meshtastic/device-ui","commit_stats":{"total_commits":496,"total_committers":6,"mean_commits":82.66666666666667,"dds":0.08669354838709675,"last_synced_commit":"1090b74a55ea4c5b7e10a4e30717655d0c454106"},"previous_names":["mverch67/device-ui","meshtastic/device-ui"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meshtastic%2Fdevice-ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meshtastic%2Fdevice-ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meshtastic%2Fdevice-ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meshtastic%2Fdevice-ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/meshtastic","download_url":"https://codeload.github.com/meshtastic/device-ui/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253969721,"owners_count":21992335,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T13:09:54.138Z","updated_at":"2025-05-16T06:02:45.540Z","avatar_url":"https://github.com/meshtastic.png","language":"C","funding_links":["https://github.com/sponsors/mverch67","https://opencollective.com/meshtastic"],"categories":[],"sub_categories":[],"readme":"#\n\n\u003cdiv align=\"center\"\u003e\n\n\u003cimg alt=\"meshtastic\" src=\"https://avatars.githubusercontent.com/u/61627050?s=200\u0026v=4\" width=\"80\" height=\"80\"\u003e\n\n  \u003ch1 align=\"center\"\u003e Meshtastic device-ui library\u003c/h1\u003e\n  \u003cp style=\"font-size:20px;\" align=\"center\"\u003eA versatile UI library for the \u003ca href=\"https://meshtastic.org\"\u003emeshtastic® project\u003c/a\u003e \u003c/p\u003e\n\u003c/div\u003e\n\n\u003c!--Project specific badges here--\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"\"\u003e\n    \u003cimg alt=\"GitHub last commit\" src=\"https://img.shields.io/github/last-commit/meshtastic/device-ui\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/meshtastic/device-ui/issues\"\u003e\n    \u003cimg alt=\"GitHub issues\" src=\"https://img.shields.io/github/issues/meshtastic/device-ui\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://opencollective.com/meshtastic\"\u003e\n    \u003cimg alt=\"Open Collective backers\" src=\"https://img.shields.io/opencollective/backers/meshtastic?label=support%20meshtastic\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cdiv style=\"text-align: center;\"\u003e\n\n\u003c/div\u003e\n\n## :wave: Introduction\n\n### Meshtastic device-ui library for TFT and OLED screens\n\nThis C++ library is intended to support the following scenarios with enhanced screen UI:\n\n- Integrated with meshtastic firmware for LoRa devices with TFT display (or potentially also OLED +PSRAM)\n- Stand-alone TFT+MCU devices such as WT32-SC01, CYD or T-HMI connected with meshtastic LoRa devices\n- Linux based devices with LoRa shield, e.g Raspberry Pi, Meshstick, Milk-V Duo/Mars with TFT display (hat or diy)\n- Native Linux X11 application with SimRadio e.g. for tests, GUI simulation \u0026 debugging (MQTT only application)\n\n\u003cimg src=\"docs/T-Deck.jpg\" alt=\"scenario 1\" width=\"205\" height=\"150\"\u003e\u003cimg src=\"docs/CYD.png\" alt=\"scenario 2\" width=\"220\" height=\"150\"\u003e\u003cimg src=\"docs/Pi400-TFT.jpg\" alt=\"scenario 3\" width=\"170\" height=\"150\"\u003e\u003cimg src=\"docs/X11.png\" alt=\"scenario 4\" width=\"230\" height=\"150\"\u003e\n\n\u003cp align=\"center\"\u003e\nVectors and icons by \u003ca href=\"https://www.svgrepo.com/\" target=\"_blank\"\u003eSVG Repo\u003c/a\u003e\u003cbr\u003e\nGraphics using \u003ca href=\"https://lvgl.io/\" target=\"_blank\"\u003eLVGL\u003c/a\u003e library\n\u003c/p\u003e\n\n## :pencil: TODOs\n\n### General Architecture\n\n    - [ ] Overall design (MVC approach)\n      - [x] DisplayDriver inheritance hierarchy\n      - [x] DisplayDriver factory\n      - [x] TFT Driver\n      - [ ] OLED Driver\n      - [ ] E-Ink Driver\n      - [x] View hierarchy\n      - [x] View factory\n      - [x] Controller design and interface implementation\n      - [x] Controller \u003c-\u003e model interface\n        - [x] Packet based thread safe interface\n        - [x] serial communication interface\n        - [x] protobuf encoding/decoding\n      - [x] Logging interface\n      - [x] Add lvgl compatible input driver interface\n      - [x] Add interface for persistency\n        - [x] Screen calibration data\n        - [x] Device settings (General)\n        - [x] Message storage\n        - [ ] Serial connection config\n    - [x] Dynamic behavior\n      - [x] Startup config\n      - [x] Restart behavior\n      - [x] Display sleep\n      - [x] Heartbeat timer based on device input actions\n    - [x] Localisation support\n      - [x] German translation\n      - [x] Spanish translation\n      - [x] Portuguese translation\n      - [x] Swedish translation\n      - [x] Norwegian translation\n      - [x] Finnish translation\n      - [x] Polish translation\n      - [x] Portuguese translation\n      - [x] Netherlands translation\n      - [x] Dutch translation\n      - [x] Italian translation\n      - [x] French translation\n      - [x] Russian translation\n      - [x] Slovenian translation\n      - [x] Turkish translation\n      - [x] Greek translation\n      - [x] Ukrainian translation\n    - [ ] Support dynamic OLED / Color(TFT) selection\n    - [x] Add support for UI scaling and try eliminate fixed positioning (lvgl v9)\n    - [x] Allow co-existence of generated files/views by different eez-studio projects\n    - [ ] Fix PSRAM draw buffer issue and do buffer size optimization\n    - [ ] Native lvgl driver support\n      - [ ] TFT drivers\n      - [ ] OLED drivers\n    - [ ] lvgl native driver DMA double-buffering\n    - [ ] E-Ink support\n    - [ ] RP2040 support\n\n### Meshtastic UI (general)\n\n    - [x] Boot screen\n    - [x] Customizable boot screen\n    - [x] Home Screen\n      - [x] Messages info\n      - [x] Nodes info\n      - [x] GPS info\n      - [x] WiFi info\n      - [x] Time and Data\n      - [x] MQTT info\n      - [x] SD card info\n      - [x] Free memory info\n    - [ ] Nodes panel\n      - [x] Scroll display and sorting\n      - [x] Node details\n      - [x] Position data\n      - [x] Telemetry data display\n      - [ ] Repeater support (manual insertion)\n      - [ ] LastHeard \u0026 time source handling improvements\n      - [ ] Remote Node configuration\n      - [x] Filter (offline, unknown, channel, public key, position, hops away, by name)\n      - [x] Highlight (position, telemetry, IAQ, by name)\n    - [x] Group channel panel\n    - [x] Chat panel\n      - [x] Scroll container and messages display\n      - [x] Virtual keyboard\n      - [x] Message acknowledgement\n      - [x] Delete chat\n    - [x] Map\n      - [x] Tiles dynamic loading\n        - [x] SD card\n        - [ ] WLAN\n      - [x] Pan \u0026 Zoom\n      - [x] Node locations\n      - [ ] Location precision\n    - [ ] Settings\n      - [ ] Basic Settings\n        - [x] User name\n        - [x] Region\n        - [x] Modem Preset\n        - [x] Channel\n        - [x] Device Role\n        - [x] Screen Timeout\n        - [x] Screen Calibration\n        - [x] Screen Lock\n        - [x] Brightness\n        - [x] Input Control\n        - [x] Message Alert / Ringtones\n        - [x] Language\n        - [ ] Timezone\n        - [x] Maps\n        - [ ] Audio\n        - [x] NodeDB / Factory Reset\n        - [x] Reboot / Shutdown\n      - [ ] Advanced Settings\n        - [ ] General Settings\n        - [ ] Radio Settings\n        - [ ] Module Settings\n    - [x] Status bar with battery symbol\n    - [x] UI Keyboard navigation \u0026 control\n    - [x] Latin supplemental fonts\n    - [X] Cyrillic font glyphs\n\n### :pager: T-Deck (also covered: unPhone)\n\n    - [x] Firmware project integration\n    - [x] T-Deck UI\n      - [x] 320x240 scalable view\n      - [x] GPS position\n      - [x] Radio frequency display\n      - [x] Offline map display\n    - [x] I2C keyboard input handling\n    - [x] Trackball support (e.g. fast scrolling list views)\n    - [x] SD card support, mainly for offline maps or import/export (keys and channels)\n    - [ ] load custom fonts from SD card\n    - [x] disable screen to temporarily allow other connection (USB serial, BT) to the device\n    - [x] allow bluetooth connection via 'Programming Mode'\n    - [ ] I2S Audio support\n\n### :pager: DIY Mesh-Tab (see \u003ca href=\"[https://github.com/valzzu/Mesh-Tab]\" target=\"_blank\"\u003ehttps://github.com/valzzu/Mesh-Tab\u003c/a\u003e)\n\n    - [x] Mesh-Tab firmware support (320x240 and 320x480)\n      - [x] Generic LGFX Display driver\n      - [x] platformio.ini integration\n    - [x] XPT2046 touch driver\n    - [x] FT6236 touch driver\n    - [x] 320x240 landscape view\n      - [x] 3.2\" TN TFT ST7789 display + XPT2046 touch driver (resistive)\n      - [x] 3.2\" IPS TFT ILI9341 display + XPT2046 touch driver (resistive)\n      - [x] 3.2\" IPS TFT ILI9341 display + FT6236 touch driver (capacitive)\n    - [x] 240x480 portrait view (scaled)\n      - [x] 3.5\" TN TFT ST7789 display + XPT2046 touch driver (resistive)\n      - [x] 3.5\" IPS TFT ILI9341 display + XPT2046 touch driver (resistive)\n      - [x] 3.5\" IPS TFT ILI9488 display + FT6236 touch driver (capacitive)\n      - [x] 4.0\" IPS TFT ILI9488 display + FT6236 touch driver (capacitive)\n    - [x] PWM buzzer\n    - [ ] SD card support (resistive displays)\n    - [ ] SD card support (capacitive displays)\n\n### :watch: T-Watch\n\n    - [ ] T-Watch UI\n      - [ ] 240x240 View\n      - [ ] Clock screen\n    - [ ] Firmware project integration\n    - [ ] Continue work on eez-studio UI screens\n    - [ ] Refactoring of common code with 320x240 view into base class\n\n### OLED\n\n    - [ ] Provide demo for OLED 128x64 screen\n    - [ ] Space and RAM requirements analysis\n\n### :penguin: Portduino (Raspberry / native linux)\n\n    - [x] Project integration into firmware\n    - [x] Display driver run-time configuration interface\n    - [x] Add missing settingsMap entries for DisplayDriverConfig\n    - [x] Integrate lvgl keyboard input driver\n    - [x] Add support for several SPI devices\n    - [ ] Add pwm brightness control\n    - [ ] IP address display (eth/wlan)\n    - [x] Target environment cleanup\n\n### :iphone: Stand-alone Device\n\n    - [x] Dedicated device-ui project\n    - [ ] Sunton/EstarDyn CYD support (320x240) Note: no longer working due to insufficient memory\n    - [x] LilyGo T-HMI support (320x240)\n    - [x] Replicator support (esp32 + nrf52 radio)\n      - [x] Display driver\n      - [X] 480x480 view -\u003e scaled 320x240\n    - [x] WT32-SC01 (Plus) support (480x320)\n      - [x] Display driver\n      - [x] 480x320 view -\u003e scaled 320x240\n    - [ ] image size reduction\n    - [ ] Fix/Workaround serial light sleep UART reading issue (-\u003e firmware)\n    - [ ] Heartbeat timer improvements\n    - [x] Serial data send/receive\n      - [x] UART connection support\n      - [ ] WLAN connection support\n      - [ ] Bluetooth connection support\n    - [ ] Serial Interface configuration UI screen\n    - [ ] Allow serial connection initialisation at runtime\n\n## Architecture Overview device-ui library (Class Diagram)\n\n\u003cimg src=\"docs/class-diagram.png\" alt=\"class diagram\"\u003e\n\n## Stats\n\n![Alt](https://repobeats.axiom.co/api/embed/13969b386b951b28cd1eb19ec1bbcf364318ddf7.svg 'Repobeats analytics image')\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeshtastic%2Fdevice-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmeshtastic%2Fdevice-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeshtastic%2Fdevice-ui/lists"}