# Building The New In-Vehicle Infotainment Demo For Automotive Grade Linux

> A practical guide to building and deploying a Flutter IVI demo on Automotive Grade Linux with a Raspberry Pi 5

- Source: https://verygood.ventures/blog/vgv-builds-new-automotive-grade-linux-flutter-demo/
- Published: 2026-09-30
- Author: Jorge Coca
- Tags: VGV, Flutter, Automotive Grade Linux

---

One of the most exciting things about Flutter is building products beyond mobile apps. After all, anywhere where you see a screen, you should be able to create Flutter apps for it. And most of us, when we are not looking at our phones, or our computers, we still spend a few hours per week *"looking"* at a different screen: our vehicles, and their In-Vehicle Infotainment (IVI) systems. And, of course, you can create that whole experience with Flutter and [Automotive Grade Linux](https://www.automotivelinux.org/), the industry-standard open platform used by many automakers and suppliers to enable rapid development of new features and technologies for vehicles.

We joined the project in [Spring of 2026](https://verygood.ventures/blog/vgv-joins-automotive-grade-linux-flutter-has-never-been-more-ready-for-the-road/), and we will be debuting a new demo during this year's [AGL All Members Meeting Europe 2026 in Berlin](https://events.linuxfoundation.org/agl-amm-europe/).

If you're interested in building your own IVI project on top of AGL, this guide should contain all the information you need to get you started.

## The Reference Hardware

AGL can run in many different hardware hosts, but my favorite one, as it is very accessible and affordable, is the Raspberry Pi 5. I have tried both the 1GB and 8GB RAM models, and both will do quite well for the majority of the use cases you can imagine.

![Raspberry Pi 5 8GB of RAM](/assets/images/blog/vgv-builds-new-automotive-grade-linux-flutter-demo/rpi5.avif)

In order to have a realistic IVI experience, you will need also a touchscreen. I'm particularly fond of the 10.1" form factor, and a quick Amazon search should give you an array of options to choose from. 

In my case, I have [MAGEX 10.1" Multi-Touch Screen with Audio support](https://www.amazon.com/dp/B0FN81KTHW?ref=ppx_yo2ov_dt_b_fed_asin_title&th=1) that I like a lot, as it offers a case for the Pi, multi-touch support and audio output in one single device, which makes it perfect for testing, but also to use as demo hardware at conferences and booths.

![10.1" Multi Touch Screen for Raspberry Pi 5](/assets/images/blog/vgv-builds-new-automotive-grade-linux-flutter-demo/touchscreen.avif)

Finally, you will need an SD Card that can hose the operating system and the Flutter app. Mine is 32GB, and there's definitely extra storage in there.

Needless to say, you don't need any hardware to get you started, as you can create AGL emulators within your computer, but in my opinion, the best developer experience when building for a vehicle is when you can deploy to the hardware directly.

## Is It As Simple As Targeting Linux?

The answer is no. When you run `flutter run -d linux` you are targeting Flutter's GTK desktop embedder, but AGL does not use that embedder. AGL images run their own [Wayland](https://wayland.freedesktop.org/) compositor, and expect Flutter apps to be hosted by a purpose-built embedder like [ivi-homescreen](https://github.com/toyota-connected/ivi-homescreen), as we will see in this guide.

## Where Do We Start?

There are multiple ways to run your Flutter app inside a custom embedder, and this guide only covers one of those options. I will be relying on the custom tools built by our colleagues at [Toyota](https://flutter.dev/showcase/toyota); after all, they are the major automaker shipping Flutter to millions of drivers. 

We will be using the following tools:

- [meta-flutter](https://github.com/meta-flutter/meta-flutter): A Yocto layer that bakes the Flutter engine, embedders, and your apps into embedded Linux images like AGL.
- [ivi-homescreen](https://github.com/toyota-connected/ivi-homescreen): Toyota Connected's C++ Flutter embedder that hosts Flutter apps directly on Wayland, DRM/KMS, or Vulkan with no GTK involved.
- [emb_cli](https://github.com/toyota-connected/emb_cli): A Dart CLI that sets up an embedded Flutter workspace and cross-compiles AOT app bundles for ivi-homescreen, ported from meta-flutter's workspace-automation scripts.

This guide will also assume that you will be deploying from Ubuntu (Resolute Raccoon is the version I'm using).

If you already have an existing Flutter app that you want to port to AGL, you will need to validate that all your dependencies have Linux support. And, even if all your dependencies have Linux support, you might encounter issues. Here you can find a list of the most important plugins that require platform code to be officially supported: [IVI Homescreen Plugins](https://github.com/toyota-connected/ivi-homescreen-plugins/tree/v2.0/plugins)

If you don't have an existing app, go ahead and run `flutter create your_app`. 

### Setting Up Your Environment

When building a Flutter app for AGL, the coding process won't change: after all, widgets are portable across platorms, unit and widget are headless, and your building process is done inside your IDE... I mean, your agentic workflows.

However, the infrastructure is completely different. First of all, you will need to flash your SD card with Automotive Grade Linux. You can do so with `kas` or `bitbake`, completely up to you. This setup changes from time to time, so it is best to check the [latest documentation](https://docs.automotivelinux.org/en/unagi/#04_Developer_Guides/03_AGL_Application_Development/Develop_using_Flutter/01_Flutter_Workspace/) from the AGL team.

Once you do that, you can use `emb_cli` to cross-compile the Flutter app's AOT bundle, and push it to your new target:

```bash
emb cross . --target <agl_target> \
            --build \
            --backend wayland \
            --workspace <your_workspace> \
            --app <your_app_directory> \
            --mode release \
            --deploy <pi_ssh_location>
```

In order to get your `agl_target`, running `emb cross . --list-targets` might offer you some information about where your AGL-flavored image is located.

As for your `pi_ssh_location`, most of the times you will find at `your_username@raspberrypi.local` if you are connected to the same network.

Once this command completes successfully, your AOT bundle will be now located inside your Raspberry Pi's SD card. It is time to launch the app.

From within IVI homescreen, you can just invoke `homescreen` to launch your experience:

```bash
sudo ./homescreen -b . --fullscreen
```

![IVI running on AGL, built by Very Good Ventures](/assets/images/blog/vgv-builds-new-automotive-grade-linux-flutter-demo/ivi.png)

From here, it's all the same process. Iterate. Compile. Deploy. Repeat.

And the best part of it, is that the whole UI is still the Flutter wdiget system we are all used to use in mobile, web, and desktop.

## Extra Bonus: Shipping To Any Embedded Device

The tools mentioned above (`meta-flutter`, `ivi-homescreen` and `emb_cli`) aren't AGL exclusive. For example, our good friends from NuStep run all the gym and PT hardware equipment with Flutter, as shown this year at Fluttercon USA 2026.

[Video](https://www.youtube.com/watch?v=zfWY3XyatWA)

## One More Thing

This would not be a VGV demo withot the code being open sourced, which can be found at [VGVentures/agl_ivi_flutter_demo](https://github.com/VGVentures/agl_ivi_flutter_demo).

So, now that you know all this, the sky is the limit. Time to build. Let's go!

## Frequently Asked Questions

### What hardware do I need to build a Flutter IVI demo for Automotive Grade Linux?

A Raspberry Pi 5 (1GB or 8GB RAM both work well for most use cases), a touchscreen such as a 10.1" multi-touch display, and an SD card of at least 32GB to host the OS and the Flutter app. Hardware isn't required to get started, since AGL emulators can run on a computer, but deploying directly to hardware gives the most realistic developer experience.

### Can I just run flutter run -d linux to target Automotive Grade Linux?

No. That command targets Flutter's GTK desktop embedder, but AGL images run their own <a href="https://wayland.freedesktop.org/">Wayland</a> compositor and expect Flutter apps to be hosted by a purpose-built embedder like <a href="https://github.com/toyota-connected/ivi-homescreen">ivi-homescreen</a> instead.

### What tools does Very Good Ventures use to deploy Flutter to Automotive Grade Linux?

Three tools built by Toyota Connected: <a href="https://github.com/meta-flutter/meta-flutter">meta-flutter</a>, a Yocto layer that bakes the Flutter engine, embedders, and apps into embedded Linux images like AGL; <a href="https://github.com/toyota-connected/ivi-homescreen">ivi-homescreen</a>, a C++ Flutter embedder that hosts apps directly on Wayland, DRM/KMS, or Vulkan with no GTK involved; and <a href="https://github.com/toyota-connected/emb_cli">emb_cli</a>, a Dart CLI that sets up an embedded Flutter workspace and cross-compiles AOT app bundles for ivi-homescreen.

### Is this Flutter embedded workflow limited to Automotive Grade Linux?

No. meta-flutter, ivi-homescreen, and emb_cli aren't AGL-exclusive. NuStep, for example, uses the same tools to run its gym and PT hardware equipment with Flutter, as shown at Fluttercon USA 2026.
