Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesdays at 10am PT. Older video versions available there too.
Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.
>There is so much undocumented in our service, including poor records of new features, nonexistent or outdated info on our dependencies, or even essential things like best practices for testing, a lot of time is wasted in syncs trying to find the right information
QA Loops
Waiting for spec
> At Amazon? Meetings, approval, talking to 10 different stakeholders because changing the color of a button affects 15 micro services
Writing tests
Deployment/build speed
Scope creep
> The human tendency to stuff last-minute items into the crevices of their luggage minutes before leaving for the airport manifests itself at software companies as scope creep.
Unclear requirements
Excessive meetings
Motivation
>honest answer is i was on ads
>and thatâs a very old / complicated / large stack(edited)
>and i didnât understand it
>my friends on younger teams seemed happier, i was miserable
Azure Container Apps has rolled out support for Azure Key Vault certificates on both the individual app and environment levels. This improvement makes it easier than ever for developers to manage authentication and certificates for their applications. This blog post will introduce certificate management in Container Apps and the benefits of storing your credentials in Key Vault. For detailed documentation on this feature, check here.
Intro to certificate management
Secure communication across services requires the constant management of information such as secrets, credentials, certificates, and keys. They have to be maintained with regular updates, renewals, and monitoring. Vulnerabilities like pushing a private connection string to the cloud are easy to create but difficult to detect and fix.
Container Apps has always provided options for certificate management such as Container App Managed Certificates. The support for Key Vault improves on that because it simplifies tasks like autorotation and follows security best practices by using managed identities to manage certificates.
Why Key Vault?
Key Vaultâs certificate management service is powerful and comprehensive, allowing for everything from automatic renewal to setting up notifications around lifecycle events. That means that once a developer has integrated Key Vault into their project, they can stop thinking about maintaining the security of their application and focus on writing code.
Access to Key Vault leverages managed identities, which follows Azure security best practices.
Get started with certificate management
Now, we will walk through an overview of how to connect to Azure Key Vault using the Azure CLI and Portal. To follow this tutorial, you will need a Key Vault, certificate, and an environment-level managed identity â all with correct permissions configured. Detailed documentation, including how to set-up necessary resources and permissions, can be found here.
Portal
Navigate to your Container Apps Environment and open the âCertificatesâ blade. Navigate to the âBring your own certificates (.pfx)â tab.
Select âAdd certificateâ and for âSourceâ, select âImport from Key Vaultâ. Go through the process of selecting your Key Vault and certificate.
You will then be asked for the managed identity you want to use for authentication. You will be able to use either a System assigned or User assigned identity. Click âAddâ and if all permissions are correctly configured for your Key Vault and managed identity, your certificate should be successfully imported.
CLI
If you haven't already, download version 0.3.49 or higher of the containerapp extension to the Azure CLI. Check the version of your extension with this command:
az extension list-available --output table | findstr containerapp
Run the following CLI command to add a certificate:
Congratulations, you have just set up certificate management through Key Vault for your application! You should now have a better understanding of the benefits of certificate management for your Container App. Thank you for reading!
Our 10 top projects, and how to stay involved with sustainability games
We asked the Flutter and Global Citizen communities to come together to build epic Flutter games that focused on helping the planet. Hundreds of innovative game projects were submitted by thousands of passionate developers spanning over 50 countries.
Each project aimed to empower players with knowledge and actions that can protect our planet. From resource conservation to combating pollution, these games have raised our collective awareness of pressing environmental issues while being genuinely fun to play! Weâre deeply inspired by the incredible ideas and passion of the entries.
One last drumroll for our Top 10
For 103 days, these project teams have ideated, built, sought feedback on, and refined their projects. The resultâââexciting games that encourage us all to think more deeply about the ways we can live more sustainably. Here they are, in alphabetical order!
Charming design and collectible elements that effectively communicate its core message about the limitations of recycling and thinking critically about environmental issues.
Waste sorting game with a creative approach to recycling education, featuring distinctive pixel art visuals.
We look forward to hanging out with these teams in New York City for a day of workshops and more in the Google offices and to celebrate with 60,000 other Global Citizens at Global Citizen Festival 2024!
But these are just 10 of over 30 teams that won prizes from the Global Gamers Challenge, including other members of the Top 20, who youâll see in the Honorable Mentions list. Head to flutter.dev/global-gamers/#winners to see all of them!
Congratulations to all of the winners!
It doesnât end here
by Lisa Pak, Head of Operations at Playing 4 the Planet Alliance
The Global Gamers Challenge might be drawing to a close, but the sustainable games movement doesnât end here. The games built during this challenge, and similar challenges like the Global Game Jam, have the potential to reach millions of players, creating a ripple effect of positive environmental change throughout the world.
To stay connected with this burgeoning movement:
Join the community: Consider joining online communities and forums dedicated to eco-conscious game design. These spaces offer invaluable opportunities to share your work and exchange ideas with fellow developers
Keep playing sustainability games: Keep an eye out for popular games that include green activations in the form of time limited events, challenges, and new levels, to engage their players on this important topic. Our goal is to reach as many people as possible, and these could be a great source of inspiration.
Make your own voice heard: Write about your experiences with sustainability game development, mentor aspiring developers, or organize your own initiatives. In sharing your knowledge and expertise, whether technical or environmental, you not only support the growth of the community but also inspire others to create games that make a positive impact on the planet.
Keep building
by Clayton Whittle, Co-Chair, Climate SIG
Sustainability in gaming includes promoting the movement itself, prioritizing climate and sustainability concerns in your teamâs game design practice, and persisting as ambassadors for a sustainability games industry.
Green game design is an evolving field, with increasingly refined practices for creating games that yield tangible and measurable impact. While there are no universal rules for crafting a green game, adhering to standard guidelines can significantly benefit any game design team.
Know your audience: Effective sustainability games begin with understanding your audienceâs needs and capabilities. Since sustainability games aim to transform players in some way, understanding your audience is crucial for guiding this transformation. Without knowing where your audience stands initially, itâs challenging to lead them to a desired endpoint.
Be specific: Focus your message to increase its effectiveness. Trying to change a playerâs entire worldview with one game is unrealistic. Instead, identify specific areas where change makes sense.
Promote effective actions: Equip players with actionable knowledge. Teach them impactful actions they can take to make a difference. Players are more likely to engage if they see how their actions can influence ecosystems or society on a large scale.
Beware of greenwashing: Avoid superficial sustainability efforts. Greenwashing involves token sustainability elements that donât genuinely integrate sustainability issues. While adding green artwork or naming a character âCaptain Recycleâ might seem appealing, players see through these superficial connections if the gameplay or narrative lacks meaningful sustainability actions.
Remember, there are countless ways to develop impactful green games. Your ideas and designs might extend beyond this guidance into uncharted territories. What works for your team depends on your mission and audience. However, incorporating these principles into your design discussions help ensure that your team remains focused on its impact mission.
How Flutter can help
Here are a couple ways that Flutter can help you spend less time worrying about where your game will run, and more time designing an impactful experience for your mission and audience.
Flutter is productive: Single codebase development with Flutter means you can write your game just one time, and deploy it across platforms. Features like stateful hot reload help you iterate quickly, speeding up your development flow.
Flutter is easy to learn: Even if youâre not a professional game developer, Starting with Flutter can be easier than with traditional game development tools. We also offer several resources, like game templates as part of the Flutter Casual Games Toolkit that give you a launching pad to boost your game development skills.
Thank you all for joining us on this journey! We canât wait to see what you build next!
WebAssembly, Graphics rendering enhancements, and more options for AI integration
Welcome back for another exciting Flutter stable release! This time, weâre thrilled to present Flutter 3.22. Weâre bringing WebAssembly to the stable channel, a fully featured Vulkan backend for Impeller on Android, promising smoother graphics and a major performance boost. Weâre also introducing streamlined workflows with new widget state properties, dynamic view sizing, and improved form validation. But thatâs not allâââyouâll find flavor-conditional asset bundling, a preview of Vertex AI for Firebase in Dart, and updated DevTools to make your life easier.
In just a few months since our last update, weâve merged an impressive 1595 pull requests from the Flutter community, with 37 new community members contributing to Flutter for the first time!
So, dive in and discover all the new features and enhancements that the Flutter community has brought to this latest release!
WebAssembly
With the release of Flutter 3.22, Wasm is now available on the stable channel, offering significant performance improvements. In our internal benchmarks using Chrome on an M1 MacBook, the Wonderous appâs frame rendering time improved by 2x on average and 3x in worst-case scenarios.
These enhancements are vital for apps with animations and rich transitions, where maintaining a smooth frame rate is essential. Wasm helps achieve this by reducing performance bottlenecks, resulting in smoother animations and transitions. To start using Wasm with your Flutter web apps, check out our Dart Wasm documentation and Flutter Wasm documentation. For the full announcement, visit the Flutter at Google I/O blog post.
Engine
Flutter 3.22 introduces significant updates to Impeller, the rendering engine that powers your Flutter applications. Key highlights include the completion of the Vulkan backend on Android for smoother graphics and improved performance, ongoing optimizations for blur effects and complex path rendering, and a new experimental API for testing with Impeller. In line with our roadmap, weâre committed to enhancing Impellerâs quality and performance, including completing the iOS migration to Impeller and expanding Android support.
Impeller
Vulkan backend feature complete on Android
In this release, Impellerâs Vulkan backend for Android is feature complete. In particular, in the past few months, the team has been hard at work completing the implementation of fast advanced blends, support for custom fragment shaders with the FragmentProgram API, PlatformView support (though it requires a small API migration), and fully implementing all blur styles.
Android preview
In the 3.19 stable release, after releasing improvements in Impellerâs OpenGL backend, we invited users to try out Impeller on Android devices both with and without Vulkan support. Over the past few months, after evaluating the performance of the OpenGL backend and estimating the remaining work on the Vulkan backend, we have decided to focus our efforts on making the Vulkan backend production ready first.
Impeller solves the issue of shader compilation jank. Additionally, in our benchmarks it outperforms the legacy renderer on average, 90th, and 99th percentile frame times. We therefore believe that the performance of the Vulkan backend on Android is acceptable. In this release (3.22), an app that opts-in to Impeller will use the Vulkan backend where available. In a future release, this will become the default. When an app that opts-in to Impeller runs on a device that doesnât support Vulkan, Flutter will gracefully fall back automatically to using OpenGL ES with Skia. No action is necessary on your part. In the future, when we believe the OpenGL ES Impeller backend is production ready, this fallback will also use Impeller.
As the Impeller preview on Android continues through the 3.22 stable cycle, we request that Flutter developers upgrade to the latest stable version, and file issues about any shortcomings noticed when Impeller is enabled. Feedback at this stage is invaluable to ensuring that Impeller is successful on Android and that we will be able to confidently make it the default renderer in a release later this year. The Android hardware ecosystem is very diverse. For that reason, the most helpful feedback about Impeller should include detailed information about the specific device and Android version where issues occurred.
Blur performance improvements
Blur has been reimplemented in Impeller for both iOS and Android. In particular, the new approach, which is similar to Skiaâs, reduces the CPU and GPU time of blurs by nearly half in benchmarks.
The chart below shows worst-case, 99%-ile, 90%-ile, and average frame rasterization times and GPU frame times in ms on an iPhone 11 device in a pathological benchmark intended to highlight blur performance. After rewriting Impellerâs blur, both the CPU and GPU cost of backdrop filter blurs has been nearly halved. This scale of this improvement translates to non-pathological cases as well, as would appear in typical apps.
Stencil-then-Cover
Impeller on both iOS and Android has moved to a new rendering strategy based on the Stencil-then-Cover approach described in the chapter âDrawing Filled, Concave Polygons Using the Stencil Bufferâ in the OpenGL Redbook. Team members discussed more on this technique as it applies to Flutter in GitHub issue #123671.
This approach solves the issue where the raster thread was spending too much time calculating tessellations for complex paths on the CPU for example, SVGs and Lottie animations. After the change, the total frame time (UI thread on the CPU + raster thread on the CPU + GPU work) is much lower for frames that contain complex paths. Users will notice that Lottie animations and other complex paths render more smoothly, with lower CPU utilization, and slightly higher GPU utilization.
While pleased with these improvements, there is still more work to do. Among other opportunities, we are aware that polyline generation remains prominent in CPU profiles, and we intend to investigate shifting this work to the GPU, as well.
New API
While still experimental, flutter test now accepts the --enable-impeller flag, which exercises Impeller using the Vulkan backend.
Framework
Widget state properties
MaterialState has been moved outside of the Material library and renamed WidgetState, in order to make it available to Cupertino, the base Flutter framework, and package authors. For more information on migrating to the new WidgetState, see the migration guide.
Dynamic view sizing
Enhancements to dynamic view sizing benefits developers building responsive layouts, ensuring better UI adaptability across various device screens.
Improved form validation
Thanks to the contributions of Flutter community member SharbelOkzan, Flutter 3.22 comes with more flexible form validation methods allowing developers to create more robust user input handling, enhancing both usability and security.
Covariants in 2DÂ APIs
Reducing the need for type casts in 2D graphics APIs simplifies development workflows and enhances performance, important for games and complex animations.
Users can now configure Dart packages to transform their appâs assets as they are bundled. For more information, check out Transforming assets a built time.
Android
Deep linking
Deep links can significantly improve the user experience in your Flutter app, acting as shortcuts that seamlessly guide users to specific content within your app, boosting engagement, and driving sales. While Universal Links for iOS and App Links for Android are highly recommended for their security and user-friendly nature, setting them up can be a bit tricky.
In the last Flutter stable release, we introduced a deep link validator tool within DevTools that supports checking web configuration for Android apps. In this version, we added a new set of features to help verify setups within your Android manifest files.
Flutter now adds more support for Androidâs upcoming predictive back feature, where users can peek at the previous route or even the previous app during a back gesture. This is still behind a feature flag on Android devices, but you can find details on how to try it out yourself on GitHub.
Flutter tool enforces version requirements on Gradle, AGP, Java, and Kotlin
In this release, the Flutter tool enforces a policy regarding the versions that it supports for Gradle, the Android Gradle Plugin (AGP), Java, and Kotlin. Initially, the tool only provides warnings.
Currently, the supported version ranges are as follows:
GradleâââFully supported 7.0.2 to current, warn otherwise
AGPâââFully supported 7.0.0 to current, warn otherwise
JavaâââFully supported Java 11 to current, warn otherwise
KotlinâââFully supported 1.5.0 to current, warn otherwise
In the next major release these warnings will become errors, which can be overridden with the flag --android-skip-build-dependency-validation. More generally speaking, the tool provides a warning for at least one release before fully dropping support (generating an error) for a given version of these dependencies.
This policy was discussed in an associated design spec. Comments and feedback are always welcome.
Support for using Gradle Kotlin DSL in Gradle build scripts on Android
Gradle Kotlin DSL is now supported in Flutter, providing an alternative to the traditional Gradle Groovy DSL. This support allows for a better code editing experience, featuring auto-completion, quick access to documentation, source navigation, and context-aware refactoring.
This initial support was contributed by GitHub user bartekpacia. Developers can now choose to rewrite their Gradle build scripts in Kotlin to take advantage of these benefits, although the Flutter tool doesnât yet allow for selecting Kotlin over Groovy when using flutter create.
Heads up for all Flutter app developers! If youâre using Flutter to build apps that rely on native Android components (like maps, web views, or certain UI elements), we have some important news.
Due to a bug in Android 14, apps built with older versions of Flutter might not work properly on devices running this new Android version.
Flutter 3.22 fixes this issue and improves the overall performance of these native components in your Android apps. So, to ensure your app runs smoothly on all Android devices, make sure to rebuild and release your app with Flutter 3.22.
This update also includes behind-the-scenes improvements to make platform views on Android more reliable and performant overall.
End of support for KitKat
Flutterâs minimum supported Android version is now Lollipop (API 21). Beginning with Flutterâs 3.22 stable release, Flutter will no longer work on devices running Android KitKat (API 19). For more details, see our deprecation guide.
iOS
Platform view performance
We understand that platform view performance on iOS has been a pain point for many Flutter developers. This has been especially noticeable within scroll views when using platform views.
Recent updates directly address these concerns, with significant improvements in scenarios like embedding multiple inline ads within an article. Here are some key improvements in our benchmark:
Reduced GPU usage: GPU usage has been reduced by 50%, leading to less power consumption and a potentially smoother user experience.
Improved frame rendering: Average frame render times have decreased by 1.66ms (33%).
Minimized jank: Worst-case frame render times have been reduced by 3.8ms (21%).
If youâve previously experienced performance challenges when using multiple platform views (like ads, maps, etc) within scrolling views, these optimizations offer the potential for a more fluid and responsive scrolling experience. Please give it a try and let us know what you think.
Ecosystem
Vertex AI for Firebase Dart SDK preview release
The Vertex AI for Firebase product has been released to public preview and includes the Dart SDK. This enables you to use the Gemini API to build generative AI features for your Dart or Flutter app, with production, performance and enterprise scale in mind. The SDK is integrated with Firebase App Check, which protects your API calls, and safeguards your backend infrastructure from serious threats like billing fraud, phishing, and app impersonation. Jump into the Getting Started for Dart and start using it with no cost with a promo code
The Google AI Dart SDK remains available, and is recommended for prototyping only. Google AI has free-of-charge access (within limits and where available) and pay-as-you-go pricing. If you have been prototyping with the Google AI Dart SDK, and are ready to migrate to Vertex AI for Firebase, check out the migration guide.
DevTools updates
We continue to improve DevTools, the suite of performance and debugging tools for Dart and Flutter. This release includes performance improvements, general polish, and new features like including CPU samples in the timeline, advanced filtering, and support for importing and exporting memory snapshots.
Other notable improvements were shipped with the devtools_extensions and devtools_app_shared packages that support DevTools extension authors. We added support for connecting an extension to the new Dart Tooling Daemon (DTD), which allows DevTools extensions to access public methods registered by other DTD clients, such as an IDE, as well as allowing access to a minimal file system API for interacting with the development project.
To learn more about all the updates included in Flutter 3.22 check out the release notes for DevTools 2.32.0, 2.33.0, and 2.34.1.
Google Mobile Ads SDK for Flutter
For those of you monetizing your Flutter apps with Ads, weâve got some exciting news: Google Mobile Ads for Flutter has just released a major update to version 5.0.1!
Enhanced support for User Messaging Platform (UMP) SDK: The update adds support for the latest APIs from the Android UMP SDK version 2.2.0 and iOS UMP SDK version 2.4.0. The UMP SDK is crucial for complying with privacy regulations, making it easier for you to obtain user consent for personalized ads. This new version introduces several new APIs to simplify the consent gathering process.
Expanded mediation partners: Weâve broadened your ad monetization horizons by offering integrations with popular ad partners, including Unity, Meta, AppLovin, Iron Source, Mintegral, Pangle, DT Exchange, InMobi, and Liftoff. You can now maximize your app revenue with expanded mediation options and simplified implementation.
We encourage you to try out these new features in your Flutter apps and let us know which other mediation partners youâd like to see us support. Your feedback is invaluable as we continue to enhance the Google Mobile Ads SDK for Flutter.
Breaking Changes and Deprecations
ColorScheme.fromSeed
If the seedColor used in ColorScheme.fromSeed has a high chroma value, the resulting ColorScheme might produce pastel palettes that lack vibrancy. To ensure the output colors closely match the intended feel of the seed color, consider setting dynamicSchemeVariant to DynamicSchemeVariant.fidelity or DynamicSchemeVariant.content. These options generate palettes that more closely align with the original seed color.
Removal of v1 Android embedding
Deletion of version one of the Android embedding is under way. This will likely have no effect on most apps, as
Version two has been the default for many years
The Flutter tool would already block building version one apps, unless specifically overridden with the flag -- ignore-deprecation.
This release breaks Flutter tool support for v1 apps completely. It is no longer possible to override.
Plugin authors, please note: when the v1 android embedding was initially deprecated a migration doc was written for plugin authors at https://docs.flutter.dev/release/breaking-changes/plugin-api-migration. As part of this migration, it was recommended that plugin authors keep support for apps using the v1 embedding, by including in their *Plugin.java a method with the signature
public static void registerWith(@NonNull io.flutter.plugin.common.PluginRegistry.Registrar registrar)
We plan to fully delete the v1 Android embedding in the next release, at which point plugins that include a method with this signature will no longer compile (as it makes reference to a type from the v1 android embedding).
It currently serves no purpose, as this release has broken apps using the v1 embedding. We recommend that plugin authors release updated versions of their plugins with the v1 code removed as soon as possible, to avoid breakage in future versions of Flutter. For an example, check out PR 6494, which removed the plugins maintained by the Flutter team.
Deprecations removed in 3.22
Breaking changes in this release include deprecated APIs that expired after the release of v3.19. To see all affected APIs, along with additional context and migration guidance, see the deprecation guide for this release. Many of these are supported by Flutter fix, including quick fixes in the IDE. Bulk fixes can be evaluated and applied with the dart fix command-line tool.
At the heart of Flutterâs success is youâââour amazing community. This release wouldnât be possible without your countless contributions and unwavering passion. From the bottom of our hearts, thank you.
Ready to explore Flutter 3.22? Dive into the full release notes and changelog, fire up your terminal, and run flutter upgrade. We canât wait to see what you build!
Whatâs new in Flutter 3.22 was originally published in Flutter on Medium, where people are continuing the conversation by highlighting and responding to this story.
Major milestones for Flutter web apps, graphics performance upgrades, productivity experiments, and more
Itâs been a particularly busy last few months in Dart & Flutter air traffic control, but weâre happy to announce that Flutter 3.22 and Dart 3.4 have landed and are available today, just in time for this yearâs Google I/O!
We remain committed to providing a strong language and framework pairing, enabling you to build beautiful, rich, and fast apps from a single, shared code baseâââso you can deliver apps to users on mobile, web, and desktopâââwithout having to fragment your product roadmap.
Flutter 3.22 and Dart 3.4 offer performance improvements and platform-specific refinements that bring us closer to that vision. Weâre particularly excited to share more about our journey with Wasm, but youâll find so much more, including an improved Impeller rendering engine, smoother visuals and reduced CPU usage on iOS, enhanced platform navigation with Androidâs predictive back gesture, expanded monetization options with the Google Mobile Ads SDK, and a new powerful deep link validator in DevTools. Dart developers will enjoy streamlined API migration with dart fix directly in the IDE and new DevTools capabilities for advanced profiling. Plus, you can now preview the Vertex AI for Firebase Dart SDK, integrating AI-powered features with robust security measures.
Today, weâll also spotlight top companies using Flutter to increase productivity and build performant experiences. Weâll highlight just a few particularly exciting features that move us closer to our goal to deliver native-like performance across platforms, and include selected updates on our investments in productivity, developer experience, and games.
If you want more details on everything included in the releases, check out the dedicated Flutter and Dart posts. Itâs time to Dash!
Flutter in action
Flutter developers are busy launching large, new apps into the app stores. Letâs look at a few.
Helping large, enterprise-scale applications deliver on mobile and the web
In the United Kingdom, financial institution Virgin Money is using Flutter across their suite of mobile banking and credit card apps to unify app development processes, speed up change, and enable an industry-leading user experience.
US insurance company GEICO recently shared that Flutter helped them improve branded user experiences across iOS, Android, and the web, reduce the size of their codebase, and increase development efficiency, all at scale.
Universal Studios Destinations & Experiences released new Flutter mobile apps for their Hollywood, Osaka, and Orlando parks. Watch the video below to learn why they chose Flutter and to see how itâs performing so far.
Going beyond mobile and the web
The Canonical team has been working with Flutter since 2021 to enable support for the Flutter ecosystem in Ubuntu. Over the past year the Canonical team has rebuilt the Ubuntu Installer from the ground up with Flutter.
LG has chosen Flutter to enhance their smart TV operating system, webOS. Flutterâs performance, productivity, and strong ecosystem allow LG to rapidly develop and deploy webOS system apps that run smoothly. By 2025, Flutter will power system apps on tens of millions of LG TVs worldwide.
Weâre inspired by these success stories, and are committed to making Flutter even better. Letâs dive into the latest product updates to show what weâre doing to enable you to build even more amazing apps, games, and experiences.
WebAssembly: Chasing native performance on the web
Today weâre announcing support in our stable release for compiling Flutter web apps to WebAssembly (Wasm). This is an exciting new instruction format for web browsers, which provides a portable, platform neutral, binary code format.
Our support for Wasm has been a deep, multi-year investment. First we partnered with the Chrome team on defining support in WebAssembly for high-level, managed languages like Dart, which commonly use garbage collection. This resulted in the WasmGCproposal, which is now a full and finalized standard, with runtime implementations available in Chrome (Chromium 119 and later) and Firefox (120 and later), and with other browser vendors expected to follow. Next, we added a brand new Dart compiler backend to generate WasmGC code, and the Dart & Flutter teams collaborated to run both the compiled app code and the Flutter rendering engine as Wasm modules with efficient Wasm to Wasm interop.
So whatâs the net result? Weâre seeing much improved performance, approaching what we have on mobile and desktop devices running machine code. In our internal benchmarks (in Chrome on an M1 MacBook), the frame rendering time of Wonderous improved by 2x in the general case and by 3x for the 99% worst case performance. Improved rendering performance is critical in demanding apps that feature animations and rich transitions, where exceeding the frame budget (the time allocated to render the next frame) causes very visible jank. Wasm has the potential to eliminate that, as illustrated by the juxtaposition below of the Wonderous app running with our traditional JS compilation compared to Wasm compilation.
Dart macros: raising the development abstraction level
Weâre committed to providing a best-in-class developer experience. That means tackling long standing pain-points for Dart developers, like serializing JSONÂ data.
Itâs a prevalent pattern thatâs equal parts trivial and tedious. Current solutions mean either slogging through encoding and decoding boilerplate manually, or layering on extra tooling in the form of code generation solutions like the JsonSerializable package.
Today, weâre announcing a preview of a better option for JSON: the JsonCodable macro.
Macros are code that creates more code. Theyâre like code generation, except the macro system is built into Dart and happens in real-time as you are editing and running the code. Itâs an integrated experience without delays, fully supporting our existing developer workflows such as hot reload, as illustrated by this screencast:
Weâre excited to see macros solve all kinds of problems for our developers. Take, for example, data classes, the highest voted Dart language feature. Beyond specific applications, our eventual goal is to have a macro system in Dart that allows users to create their own macros and raise the abstraction level of Dart programming.
Designing and implementing such a powerful macro system is a large task, so there is currently no date set for a stable releaseâââfor more details check out the Dart 3.4 post. In the meantime, try out a preview of the JsonCodable macro today. For more information, check out macros documentation.
New resources for Flutter game development
Weâre seeing promising results from our early investment in games, including success stories from industry leaders like Etermax and Supercell, who are each leveraging Flutterâs power and flexibility to efficiently deliver delightful user experiences and expand their reach.
Today, weâre excited to continue to build on that momentum with these new resources for Flutter game developers:
The SoLoud audio engine is now available: Weâve collaborated with the Flutter community (@Marco Bavagnoli) to create a free and portable audio engine that delivers low-latency, high-performance sound, essential for many games. We also created a new sound and music codelab that uses SoLoud.
A new guide for optimizing Flutter web-based game loading speed: Long load times are a major deterrent in web-based games. Follow this guide (authored by Cheng Lin) to optimize your loading speed so that players donât abandon your game because it loads slowly.
Empowering sustainable game development
In January 2024, inspired by the story behind their use of Flutter, we partnered with Global Citizen to challenge our communities to design, build, and publish sustainability games using Flutter. These games are meant to inspire and empower players to take small, but meaningful actions for the environment. Today, weâre announcing the 10Â winners.
Congrats to all of the winners!
Much more to explore
Thatâs all we have time to spotlight today, but there are many more exciting improvements that we didnât touch on. Here are a few more things to know:
You canpreviewthe Vertex AI for Firebase Dart SDK to use the Gemini API for AI-driven features in a Dart or Flutter app. The SDK is integrated with Firebase App Check, which protects your API calls, and safeguards your backend infrastructure from serious threats like billing fraud, phishing, and app impersonation. For details, see our AIÂ page.
Androidâs predictive back gesture is now supported both when navigating within a Flutter app, and when navigating to another app or to the homescreen.
Platform views on iOS have been performance optimized, reducing CPU usage by up to 50%.
The Google Mobile Ads SDK has been extended to support more ad partners and mediation options.
DevTools has a new deep link validator that helps you identify and troubleshoot errors in Android deep link configuration, so you can more easily connect web experiences to a Flutter app.
Dart fix, our API migration tool, can now be invoked directly from the IDE.
DevTools now supports advanced filtering and CPU samples in the timeline.
As always, weâre incredibly grateful for your continued support, passion, enthusiasm, and feedback. This project wouldnât be possible without you, and we canât wait to see how you continue to push Flutter forward.
Flutter over and out. We hope to see you on board again soon!