{"id":13784076,"url":"https://github.com/toyota-connected/ivi-homescreen","last_synced_at":"2025-05-11T19:32:15.427Z","repository":{"id":38002783,"uuid":"401857289","full_name":"toyota-connected/ivi-homescreen","owner":"toyota-connected","description":"Embedded Flutter runtime targeting Embedded Linux with Wayland","archived":false,"fork":false,"pushed_at":"2025-03-14T23:30:01.000Z","size":17979,"stargazers_count":267,"open_issues_count":2,"forks_count":38,"subscribers_count":18,"default_branch":"v2.0","last_synced_at":"2025-03-15T00:19:58.698Z","etag":null,"topics":["embedded-flutter","embedded-linux","flutter","flutter-embedder","linux","toyota","toyota-flutter","wayland"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/toyota-connected.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-08-31T22:16:24.000Z","updated_at":"2025-03-14T23:30:04.000Z","dependencies_parsed_at":"2024-06-26T19:59:27.165Z","dependency_job_id":"22b88351-c73b-45bd-8407-f53beca14a78","html_url":"https://github.com/toyota-connected/ivi-homescreen","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toyota-connected%2Fivi-homescreen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toyota-connected%2Fivi-homescreen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toyota-connected%2Fivi-homescreen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toyota-connected%2Fivi-homescreen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/toyota-connected","download_url":"https://codeload.github.com/toyota-connected/ivi-homescreen/tar.gz/refs/heads/v2.0","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253621183,"owners_count":21937489,"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":["embedded-flutter","embedded-linux","flutter","flutter-embedder","linux","toyota","toyota-flutter","wayland"],"created_at":"2024-08-03T19:00:35.139Z","updated_at":"2025-05-11T19:32:15.399Z","avatar_url":"https://github.com/toyota-connected.png","language":"C++","funding_links":[],"categories":["Projects"],"sub_categories":[],"readme":"# ivi-homescreen\n\nFlutter Linux CPP Embedder\n\n[![Documentation Status](https://readthedocs.org/projects/ivi-homescreen/badge/?version=latest)](https://ivi-homescreen.readthedocs.io/en/latest/?badge=latest)\n\n#### Discord Server https://discord.gg/V5uWD9fvws\n\n## Highlights\n\n* Desktop Plugin Registry\n    * Flutter Pigeon CPP compatible\n    * Plugins modeled after Window CPP\n    * Plugins enabled/disabled via CMake\n    * Firestore first party compatible\n* Desktop Texture Registry\n    * Camera first party compatible\n    * Video Player first party compatible\n* Platform View Framework\n    * AndroidView widget compatible\n* Backend Support\n    * EGL\n    * Vulkan (first Flutter embedder to support this)\n    * Wayland Leased DRM (coming soon)\n    * DRM/KMS (coming soon)\n* Same source code runs on Desktop and embedded Linux image\n    * Ubuntu 18+\n    * Fedora 33+\n    * Yocto Dunfell/Kirkstone/Scarthgap\n\n## Plugins\n\nivi-homescreen plugins are located at https://github.com/toyota-connected/ivi-homescreen-plugins\n\nThere are two ways to reference this repo:\n\n1. Clone plugins repo to root of ivi-homescreen folder\n2. Set PLUGIN_DIR to repo path. -DPLUGIN_DIR=\u003cmy path\u003e\n\n## Logging\n\nLogging level support\n\n* trace\n* debug\n* info\n* warn\n* error\n* critical\n* off\n\nIf environmental variable SPDLOG_LEVEL is not set, logging defaults to info.\n\nTo set logging to trace use\n\n    SPDLOG_LEVEL=trace\n\nTo set logging to debug use\n\n    SPDLOG_LEVEL=debug\n\n### DLT logging\n\nTo test DLT logging on desktop use the following\n\nUbuntu packages\n\n    sudo apt-get install libdlt-dev dlt-viewer dlt-daemon dlt-tools\n\nFedora packages\n\n    sudo dnf install dlt-libs-devel dlt-daemon dlt-tools\n\n### Logging with DLT\n\nStart new terminal\n\n    dlt-daemon\n\n#### View DLT log output in a terminal\n\nStart new terminal\n\n    dlt-receive -a localhost\n\n## Sanitizer Support\n\nYou can enable the sanitizers with SANITIZE_ADDRESS, SANITIZE_MEMORY, SANITIZE_THREAD or SANITIZE_UNDEFINED options in\nyour CMake configuration. You can do this by passing e.g. -DSANITIZE_ADDRESS=On on your command line.\n\nIf sanitizers are supported by your compiler, the specified targets will be built with sanitizer support. If your\ncompiler has no sanitizing capabilities you'll get a warning but CMake will continue processing and sanitizing will\nsimply just be ignored.\n\n## Backend Support\n\n### EGL Backend\n\nThis is the default build configuration. To manually build EGL Backend use\n\n```\n-DBUILD_BACKEND_WAYLAND_EGL=ON -DBUILD_BACKEND_WAYLAND_VULKAN=OFF\n```\n\n### Vulkan Backend\n\nTo build Vulkan Backend use\n\n```\n-DBUILD_BACKEND_WAYLAND_EGL=OFF -DBUILD_BACKEND_WAYLAND_VULKAN=ON\n```\n\nRunning Vulkan requires an engine version that supports Vulkan. Stable does not yet support Vulkan.\n\n## Bundle File Override Logic\n\nIf an override file is not present, it gets loaded from a default location.\n\n### Optional override files\n\n#### icudtl.dat\n\nBundle Override\n\n    {bundle path}/data/icudtl.dat\n\nYocto Default\n\n    /usr/share/flutter/icudtl.dat\n\nDesktop Default\n\n    /usr/local/share/flutter/icudtl.dat\n\n#### libflutter_engine.so\n\nBundle Override\n\n    {bundle path}/lib/libflutter_engine.so\n\nYocto/Desktop Default - https://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html\n\n## Command Line Options\n\n`help` - Prints all command line options and exits\n\n`-b {path to bundle folder}` - Sets the Bundle Path. A bundle path expects the following folder structure:\n\n```\n  Flutter Application (bundle folder)\n    data/flutter_assets\n    data/icudtl.dat (optional - overrides system path)\n    lib/libapp.so\n    lib/libflutter_engine.so (optional - overrides system path)\n```\n\nIf there are multiple references to this option, it will associate a new view per bundle. This example will open two\nwindows sized 1280x1024 both running the Gallery app:\n\n```\nhomescreen -b $HOME/workspace-automation/app/gallery/.desktop-homescreen -b $HOME/workspace-automation/app/gallery/.desktop-homescreen -w 1280 -h 1024\n```\n\n`-a {int value}` - Sets the Engine's initial state of Accessibility Feature support. Requires an integer value.\n\n`-disable-cursor` - Disables the cursor.\n\n`-d` - Outputs backend debug information. If Vulkan and Validation Layer are available, it will be loaded.\n\n`-f` - Sets the window to fullscreen.\n\n`-w {int value}` - Sets View width. Requires an integer value.\n\n`-h {int value}` - Sets View height. Requires an integer value.\n\n`-i {int value}` - Sets ivi-shell surface ID. Requires an integer value.\n\n`-p {int value}` - Sets Pixel Ratio. Requires a double value.\n\n`-t {String}` - Sets cursor theme to load. e.g. -t DMZ-White\n\n* `--wayland-event-mask` - Sets events to ignore. e.g. --wayland-event-mask pointer-axis, or --wayland-event-mask=\"\n  pointer-axis, touch\"\n\n    * Available parameters are:\n      pointer, pointer-axis, pointer-buttons, pointer-motion, keyboard, touch\n\n* Dart VM arguments - any additional command line arguments not handled get directly passed to the Dart VM instance.\n\n## View Configuration keys\n\n### Global - `[global]`\n\n`app_id` - Sets Application ID. Currently only the primary index app_id value is used.\n\n`cursor_theme` - Sets cursor theme to use. This only applies to command line, and global parameter options.\n\n`disable_cursor` - Disables the cursor. This only applies to command line, and global parameter options.\n\n`debug_backend` - Enables Backend Debug logic.\n\n`wayland_event_mask` - See command line option --wayland-event-mask\n\n`debug_backed` - Prints out debug information relevant to the backend\n\n### View Specific - `[view]`\n\n`vm_args` - Array of strings which get passed to the VM instance as command line arguments.\n\n`window_type` - Currently used for AGL Compositor Window Types. If not running on AGL compositor,\nit will create borderless windows in no particular position.\n\n`width` - sets View width. Requires an integer value.\n\n`height` - sets View height. Requires an integer value.\n\n`output_index` - select logical index of Wayland output to display on\n\n`pixel_ratio` - sets the pixel ratio for Flutter engine instance\n\n`accessibility_features` - Bitmask of Engine Accessibility Features. Requires an integer. See flutter_embedder.h for\nvalid values.\n\n`fullscreen` - Sets window to fullscreen.\n\n`ivi_surface_id` - Sets ivi-shell surface ID.\n\n### AGL Shell `[window_activation_area]`\n\n`x` - x position of activation area\n\n`y` - y position of activation area\n\n`width` - width of activation area\n\n`height` - height of activation area\n\n## config.toml\n\n* Locate config.toml file in the root of your bundle folder\n* Comments work\n* Any combination of values can be defined.\n* Any empty file is valid\n\n### config.toml sample\n\n```\n[global]\napp_id = 'gallery'                 # Application name\ncursor_theme = 'Coolbeans'         # Cursor theme used to load cursor icons from\ndisable_cursor = true              # used to disable cursor\nwayland_event_mask = 'keyboard'    # mask the keyboard event\ndebug_backend = false              # do not print backend debug info\n\n[view]\nwidth = 1920\nheight = 1080\nvm_args = ['--enable-asserts', '--verbose-logging']  # pass parameters to the Dart VM\nwindow_type = 'NORMAL'                               # set window type to Normal\noutput_index = 2                                     # use second logical occuring wayland output\npixel_ratio = 4.5                                    # set flutter engine pixel ratio\nivi_surface_id = 5002                                # set ivi-shell surface id\naccessibility_features = 52                          # set flutter engine accessibility feature flags\nfullscreen = false                                   # do not start in fullscreen\n\n[window_activation_area]\nx = 10        # x location\ny = 10        # y location\nwidth = 1024\nheight = 768\n```\n\n## Parameter loading order\n\nOnly VM Command Line arguments are additive. Meaning all instances of VM command line references will get added\ntogether; JSON view + JSON global + CLI args.\n\nAll other parameters get assigned using the following ordering:\n\n1. TOML Configuration View parameters\n2. TOML Configuration Global (non-view) parameters\n3. Command Line parameters (Overrides anything set in TOML file)\n\n## CMake Build flags\n\n`ENABLE_XDG_CLIENT` - Enable XDG Client. Defaults to ON\n\n`ENABLE_AGL_SHELL_CLIENT` - Enable AGL Client. Defaults to OFF\n\n`ENABLE_IVI_SHELL_CLIENT` - Enable ivi-shell Client. Defaults to OFF\n\n`ENABLE_DRM_LEASE_CLIENT` - Enable drm lease Client. Defaults to OFF\n\n`ENABLE_LTO` - Enable Link Time Optimization. Defaults to OFF\n\n`ENABLE_DLT` - Enable DLT logging. Defaults to OFF\n\n`BUILD_BACKEND_WAYLAND_EGL` - Build Backend for EGL. Defaults to ON\n\n`BUILD_EGL_TRANSPARENCY` - Build with EGL Transparency Enabled. Defaults to ON\n\n`BUILD_EGL_ENABLE_3D` - Build with EGL Stencil, Depth, and Stencil config Enabled. Defaults to ON\n\n`BUILD_EGL_ENABLE_MULTISAMPLE` - Build with EGL Sample set to 4. Defaults to ON\n\n`BUILD_BACKEND_WAYLAND_VULKAN` - Build Backed for Vulkan. Defaults to OFF\n\n`BUILD_BACKEND_HEADLESS_EGL` - Build Headless backend for EGL (OSMesa). Defaults to OFF\n\n`DEBUG_PLATFORM_MESSAGES` - Dump Platform Channel Messages. Defaults to OFF\n\n`BUILD_CRASH_HANDLER` - Build Sentry IO Crash Handler Support. Defaults to OFF\n\n`BUILD_DOCS` - Builds Docs. Defaults to OFF\n\n`BUILD_UNIT_TESTS` - Build Unit Tests. Defaults to OFF\n\n`UNIT_TEST_SAVE_GOLDENS` - Update test goldens. Defaults to OFF\n\n`EXE_OUTPUT_NAME` - Set executable output name. Defaults to `homescreen`\n\n`DISABLE_PLUGINS` - Disables all plugins located in the plugins folder. Defaults to OFF\n\n`BUILD_PLUGIN_AUDIOPLAYERS_LINUX` - Include Audioplayers Linux plugin. Defaults to OFF\n\n`BUILD_PLUGIN_CAMERA` - Include Camera plugin. Defaults to OFF\n\n`BUILD_PLUGIN_CLOUD_FIRESTORE` - Plugin Cloud Firestore. Defaults to OFF\n\n`BUILD_PLUGIN_DESKTOP_WINDOW_LINUX` - Includes Desktop Window Linux Plugin. Defaults to OFF\n\n`BUILD_PLUGIN_FILE_SELECTOR` - Include File Selector plugin. Defaults to OFF\n\n`BUILD_PLUGIN_FIREBASE_AUTH` - Plugin Firebase Auth. Defaults to OFF\n\n`BUILD_PLUGIN_FIREBASE_STORAGE` - Plugin Firebase Storage. Defaults to OFF\n\n`BUILD_PLUGIN_GO_ROUTER` - Includes Go Router Plugin. Defaults to ON\n\n`BUILD_PLUGIN_GOOGLE_SIGN_IN` - Include Google Sign In manager. Defaults to OFF\n\n`BUILD_PLUGIN_INTEGRATION_TEST` - Included Flutter Integration Test support. Defaults to OFF\n\n`BUILD_PLUGIN_PDF` - Include PDF plugin. Defaults to OFF\n\n`BUILD_PLUGIN_SECURE_STORAGE` - Includes Flutter Secure Storage. Defaults to OFF\n\n`BUILD_PLUGIN_URL_LAUNCHER` - Includes URL Launcher Plugin. Defaults to OFF\n\n`BUILD_PLUGIN_VIDEO_PLAYER_LINUX` - Include Video Player plugin. Defaults to OFF\n\n`BUILD_PLUGIN_FILAMENT_VIEW` - Include Filament View plugin. Defaults to OFF\n\n`BUILD_PLUGIN_LAYER_PLAYGROUND_VIEW` - Include Layer Playground View plugin. Defaults to OFF\n\n`BUILD_PLUGIN_NAV_RENDER_VIEW` - Include Navigation Render View plugin. Defaults to OFF\n\n`BUILD_PLUGIN_WEBIVEW_FLUTTER_VIEW` - Includes WebView View Plugin. Defaults to OFF\n\n_**Backend selections (Vulkan, EGL/GLESv2) are mutually exclusive by design.**_\n\n## x86_64 Desktop development notes\n\n### NVidia GL errors\n\nRunning EGL backend on a Lenovo Thinkpad with NVidia drivers may generate many GL runtime errors.\nThis should resolve it:\n\n```\nexport __EGL_VENDOR_LIBRARY_FILENAMES=/usr/share/glvnd/egl_vendor.d/50_mesa.json\n```\n\n## Ubuntu 16-18\n\n### Logging in\n\nLog out if logged in Login screen\nClick on username field\nRight-click on the gear icon below username field, and select \"Ubuntu on Wayland\"\nEnter password and login\n\n## Ubuntu 20+ / Fedora 33+\n\nDefaults to Wayland, no need to do anything special\n\n## Build steps\n\n### Required Packages\n\n    sudo add-apt-repository ppa:kisak/kisak-mesa\n    sudo apt-get update -y\n    sudo apt-get -y install libwayland-dev wayland-protocols \\\n    mesa-common-dev libegl1-mesa-dev libgles2-mesa-dev mesa-utils \\\n    libxkbcommon-dev\n\n### Optional Packages\n\n    # To build doxygen documentation\n    sudo apt-get -y install doxygen\n\n### GCC/libstdc++ Build\n\nWithout plugins\n\n    git clone --recurse-submodules -j8 https://github.com/toyota-connected/ivi-homescreen.git\n    mkdir build \u0026\u0026 cd build\n    cmake ../ivi-homescreen -DCMAKE_STAGING_PREFIX=`pwd`/out/usr/local\n    make install -j\n\nWith plugins\n\n    git clone --recurse-submodules -j8 https://github.com/toyota-connected/ivi-homescreen.git\n    git clone https://github.com/toyota-connected/ivi-homescreen-plugins.git\n    mkdir build \u0026\u0026 cd build\n    cmake ../ivi-homescreen -DCMAKE_STAGING_PREFIX=`pwd`/out/usr/local -DPLUGINS_DIR=`pwd`/ivi-homescreen-plugins\n    make install -j\n\n### Clang/libc++ Build\n\nWithout plugins\n\n    git clone --recurse-submodules -j8 https://github.com/toyota-connected/ivi-homescreen.git\n    mkdir build \u0026\u0026 cd build\n    CC=/usr/bin/clang CXX=/usr/bin/clang++ cmake ../ivi-homescreen -DCMAKE_STAGING_PREFIX=`pwd`/out/usr/local\n    make install -j\n\nWith plugins\n\n    git clone --recurse-submodules -j8 https://github.com/toyota-connected/ivi-homescreen.git\n    git clone https://github.com/toyota-connected/ivi-homescreen-plugins.git\n    mkdir build \u0026\u0026 cd build\n    CC=/usr/bin/clang CXX=/usr/bin/clang++ cmake ../ivi-homescreen -DCMAKE_STAGING_PREFIX=`pwd`/out/usr/local -DPLUGINS_DIR=`pwd`/ivi-homescreen-plugins\n    make install -j\n\n#### Clang Toolchain Setup\n\n    wget https://apt.llvm.org/llvm.sh\n    chmod +x llvm.sh\n    sudo ./llvm.sh 14\n    sudo apt-get install -y libc++-14-dev libc++abi-14-dev libunwind-dev\n\n## CI Example\n\n    https://github.com/toyota-connected-na/ivi-homescreen/blob/main/.github/workflows/ivi-homescreen-linux.yml\n\n## Debian Package\n\n    make package -j\n    sudo apt install ./ivi-homescreen-1.0.0-Release-beta-Linux-x86_64.deb\n\n## Flutter Application\n\n### Running an app\n\nRelease Bundle Folder layout\n\n```\n.desktop-homescreen/\n├── data\n│ ├── flutter_assets\n│ │   └── ... \n│ └── icudtl.dat\n├── default_config.json (optional)\n└── lib\n    ├── libapp.so\n    └── libflutter_engine.so\n```\n\nRunning the bundle above would be\n\n```\nhomescreen --b=`pwd`/.desktop-homescreen --w=1024 --h=768\n```\n\n## workspace-automation provides a flutter workspace setup tool\n\nhttps://github.com/meta-flutter/workspace-automation\n\nExample usage to run gallery application on Linux desktop\n\nRun once\n\n```\ngit clone https://github.com/meta-flutter/workspace-automation\ncd workspace_automation\nsudo ./flutter_workspace.py\n```\n\nRun for each development session, or new terminal window opened\n\n```\nsource ./setup_env.sh\ncd app/gallery\nflutter run -d desktop-homescreen\n```\n\nflutter_workspace.py installs runtime packages, patches source files, compiles projects, etc.\n\n_Note: `sudo` is required to install runtime packages_\n\n## CMAKE dependency paths\n\nPath prefix used to determine required files is determined at build.\n\nFor desktop `CMAKE_INSTALL_PREFIX` defaults to `/usr/local`\nFor target Yocto builds `CMAKE_INSTALL_PREFIX` defaults to `/usr`\n\n## Crash Handler\n\nSentry-native support is available for Crash Handling. This pushes a mini-dump to the cloud for triage and tracking.\n\nTo create user account and get DNS See https://sentry.io/welcome/\n\nCMake Variables\n\n    -DBUILD_CRASH_HANDLER=ON\n    -DCRASH_HANDLER_DSN=\"dsn from your account.  If not defined, can be set at runtime via environment variable\"\n    -DSENTRY_NATIVE_LIBDIR=\"directory where sentry native is installed, will look in CMAKE_INSTALL_PREFIX directory if not defined\"\n    -DCRASHPAD_BINARY_DIR=\"directory where crashpad_handler executable is installed, will look in CMAKE_INSTALL_PREFIX directory if not defined\"\n    -DCRASH_HANDLER_ATTACHMENTS=\"paths to files you'd like to attach to coredump reports, separated by commas (,)\"\n    -DCRASH_HANDLER_TAGS=\"tags to accompany Sentry coredump report in the style of \"TAG_NAME=tagvalue\", multiple tags can be defined separated by commas (,)\"\n\nOptional Environment Variables\n\n    SENTRY_DSN -- Overrides CMake CRASH_HANDLER_DSN value\n    SENTRY_ATTACHMENTS -- Additional file attachments to add to Sentry crash reports (Appended to those defined in CRASH_HANDLER_ATTACHMENTS), multiple files can be defined, separated by commas (,)\n    SENTRY_TAGS -- Additional tags to accompany Sentry crash reports (Appended to those defined in CRASH_HANDLER_TAGS), multiple tags can be defined, separated by commas (,)\n\nTo resolve crash dump stack trace, debug binaries and symbols need to be uploaded to Sentry via sentry-cli tool: https://docs.sentry.io/cli/installation/\n\nRequired source repo:  https://github.com/getsentry/sentry-native\n\n### Example Build steps\n\nsentry build\n\n    git clone https://github.com/getsentry/sentry-native\n    mkdir build \u0026\u0026 cd build\n    cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_STAGING_PREFIX=`pwd`/out/usr\n    make install\n\nivi-homescreen build\n\n    git clone https://github.com/toyota-connected/ivi-homescreen\n    mkdir build \u0026\u0026 cd build\n    cmake .. -DBUILD_CRASH_HANDLER=ON -DCRASH_HANDLER_DSN=\"dsn from your account\"\n    make -j\n    LD_LIBRARY_PATH=\u003csentry staged sysroot install path\u003e/lib homescreen --b=\u003cyour bundle folder\u003e --f\n\n## Yocto recipes\n\n### Scarthgap\n\n    https://github.com/meta-flutter/meta-flutter/tree/scarthgap/recipes-graphics/toyota\n\n### Kirkstone\n\n    https://github.com/meta-flutter/meta-flutter/tree/kirkstone/recipes-graphics/toyota\n\n### Dunfell\n\n    https://github.com/meta-flutter/meta-flutter/tree/dunfell/recipes-graphics/toyota\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftoyota-connected%2Fivi-homescreen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftoyota-connected%2Fivi-homescreen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftoyota-connected%2Fivi-homescreen/lists"}