an open source, portable UI framework that gives developers the superpower to build beautiful, high quality apps for any platform from a single codebase.
Create a structured yet flexible language for web programming. 2. Make Dart feel familiar and natural to programmers and thus easy to learn. 3. Ensure that Dart delivers high performance on all modern web browsers and environments ranging from small handheld devices to server-side execution.
2013년 11월 14일 Dart 1.0 발표 2. Dart Editor 3. Dartuim We started the Dart project because we believe that every developer deserves simplicity, productivity, and performance Dart for the Entire Web , March 25, 2015
programming dead already? https://hub.packtpub.com/is-dart-programming-dead-already/ By Amarabha Banerjee - JULY 26, 2018 Worst Programming Languages to Learn in 2018 https://www.codementor.io/blog/worst-languages-to-learn-3phycr98zk
Dart언어를 선택했나요? 1. 개발 초기에 Flutter Team도 여러가지 언어와 런타임을 고려 2. 다른 언어 대비, Dart 언어가 팀에서 요구와 기준에 대한 점수가 높았다. 2.1. Developer productivity 2.2. Object-orientation 2.3. Predictable, high performance 2.4. Fast allocation 3. JIT & AOT 3.1. Dart 언어로 구성된 소스코드에서 Native Binary파일을 생성하기 위한 AoT 툴체인이 초기에는 없었음. 3.2. Dart 팀과 Flutter 팀과 협력하여 Dart 팀이 AoT 툴체인 개발 3.3. DartVM도 Flutter에 최적화 되도록 개선 작업 가능
Dart언어를 선택했나요? 1. 개발 초기에 Flutter Team도 여러가지 언어와 런타임을 고려 2. 다른 언어 대비, Dart 언어가 팀에서 요구와 기준에 대한 점수가 높았다. 2.1. Developer productivity 2.2. Object-orientation 2.3. Predictable, high performance 2.4. Fast allocation 3. JIT & AOT 3.1. Dart 언어로 구성된 소스코드를 native binary파일을 생성하기위한 AoT 툴체인이 초기에는 없었음. 3.2. Dart팀과 Flutter팀과 협력하여 Dart팀이 AoT 툴체인을 개발. 3.3. DartVM도 Flutter에 최적화되도록 개선작업 가능 var power = (Dart == Google && Flutter == Google)
2.1. Technical debt and team velocity • 가장 중요하게 생각하는것: 프로젝트의 전반적인 속도를 높이는것. ◦ flaky tests와 같은 기술부채 감소 ◦ 새로운 사람들이 팀에 합류하여 프로세스를 개선하는것 ◦ 생산성을 보다 빠르게 높이는것 기술부채와 팀 속도
2.1. Technical debt and team velocity • Velocity 이슈들을 제기하거나 문서화하고 문제를 해결할 수 있는 팀원을 위한 정기 미팅을 시작(진행)할 예정 • 정기 미팅은 Discord상에서 공지 예정 ◦ https://discord.gg/BS8KZyg ◦ https://github.com/flutter/flutter/wiki/Chat 기술부채와 팀 속도
2.1. Technical debt and team velocity • Issue Priorities ◦ P0: The P0 label indicates a critically dire issue such as a build break, regression, or failure in existing features that keeps us from shipping the current build. ◦ Pz: The P1 label indicates that the issue deserves immediate attention, such as one actively blocking a top-tier customer who is trying to ship. ◦ P2: The P2 label indicates that the issue is about to block a top-tier customer or is an important item of technical debt that we want to fix as soon as possible. ◦ P3: The P3 label indicates high-priority issues that are at the top of the work list. This is the highest priority level a bug can have if it isn't affecting a top-tier customer or breaking the build. ◦ P4: The P4 label indicates issues that we agree are important to work on, but not at the top of the work list. This is the default level for bugs. ◦ P5: The P5 label indicates issues we think are valid but not important. ◦ P6: he P6 label indicates valid issues that are unlikely to ever be worked on. 기술부채와 팀 속도
2.2. Performance 1. Shader Compiler Jank를 완벽하게 제거하는 것 ◦ iOS부터 시작해서 Android와 데스크톱 플랫폼으로 확장 2. Web 성능 측면 ◦ WebAssembly(wasm) 지원 3. Multi-threading Rendering Flutter 성능 측면
2.3. Quality 1. Accessibility (접근성) ◦ Flutter 애플리케이션에 쉽게 접근할 수 있도록 지속적 투자 예정 ◦ 모든 플랫폼에서 접근성 지원의 품질 개선 2. Documentation (문서화) ◦ 버그 수정, 소규모 패치의 형태로 이루어질 예정 품질 3. Platform ◦ 빠르게 변화하는 Android, iOS에 대한 지원 ◦ iOS: ▪ Cupertino Widget + Widget 수 증가 ◦ Android: ▪ Predictive Back Gesture ▪ Android handwriting input ▪ Camera 플러그인 CameraX API 마이그레이션
2.3. Quality https://github.com/flutter/flutter/issues/109558 Access: 2023-03-27 Android predictive back gesture Per https://developer.android.com/guide/ navigation/predictive-back-gesture onBackPressed is being deprecated, and we need to switch to OnBackPressedDispatcher and OnBackPressedCallback.
2.4. Security SLSA(Supply chain Levels for Software Artifacts) SLSA is a set of incrementally adoptable security guidelines, established by industry consensus. The standards set by SLSA are guiding principles for both software producers and consumers: producers can follow the guidelines to make their software more secure, and consumers can make decisions based on a software package’s security posture. SLSA’s four levels are designed to be incremental and actionable, and to protect against specific integrity attacks. SLSA 4 represents the ideal end state, and the lower levels represent milestones with corresponding integrity guarantees.
2.4. Security SLSA(Supply chain Levels for Software Artifacts) • Artifact - any file produced as the result of a build pipeline, such as container images, language packages, compiled binaries, etc. • Provenance - metadata about how an artifact was built, including the build process, top-level source, and dependencies • Digest - the result of a cryptographic hash function which produces a fixed-size value uniquely identifying an artifact, such as a SHA-256 hash of a container image • Attestation - a cryptographically signed file recording the provenance of the build pipeline at the time a specific artifact or set of artifacts was produced • Attestor - any system or process that produces an attestation, often included as part of a build pipeline after artifact creation and prior to deployment • Immutable references - an identifier, such as a URL, that is guaranteed to always point to the same, immutable artifact, such as a specific container image or language package • Build integrity - the verification of the output of a build pipeline via attestations https://cloud.google.com/blog/products/application-development/google-introduces-slsa-framework
2.4. Security SLSA(Supply chain Levels for Software Artifacts) Provenance Describe how an artifact or set of artifacts was produced. This predicate is the recommended way to satisfy the SLSA provenance requirements. https://slsa.dev/provenance/v0.1
2.5. Features 1. Popularity ◦ 이슈의 👍(“thumbs-up”)수가 얼마나 있는지 확인 ◦ 우선순위를 정하는데 도움 2. Parity and Portability ◦ 1개의 플랫폼에서 기능을 지원한다면, 어느 플랫폼에서도 지원할 수 있는것이 중요 3. Supporting some other effort ◦ 예) 성능 향상을 가능하게 하는 새로운 기능 Feature를 선정하는 3가지 동기부여 요소
2.5. Features 1. Custom asset transformers, because they enable some performance improvements. 2. Efficient 2D scrolling widgets (e.g. tables and trees), to improve the performance of applications with this kind of interface. 3. Multiple windows, especially for desktop platforms, because this is a very highly requested feature. 4. Platform Views on macOS and Windows, by popular demand. 5. Drag and drop, also by popular demand. 6. Wireless debugging on iOS, our second-most-requested feature. 7. Custom "flutter create" templates, which makes it much easier for third-parties (e.g. the Flame engine) to bootstrap developers. 8. Supporting element embedding (see also #32329), which allows Flutter content to be added to any standard web <div>, by popular demand.
2.5. Features Efficient 2D scrolling widgets (e.g. tables and trees), to improve the performance of applications with this kind of interface. https://github.com/orgs/flutter/projects/32/views/1 Preview: Two-dimensional scrolling in Flutter https://youtu.be/UDZ0LPQq-n8
2.5. Features Multiple windows, especially for desktop platforms, because this is a very highly requested feature.aq https://github.com/flutter/flutter/issues/30701
2.5. Features Multiple windows, especially for desktop platforms, because this is a very highly requested feature.aq https://github.com/orgs/flutter/projects/39/views/1 Preview: Multiple windows on desktop https://www.youtube.com/watch?v=vtB-teu57vw
2.5. Features Multiple windows, especially for desktop platforms, because this is a very highly requested feature.aq The window singleton is deprecated In preparation for supporting multiple views and multiple windows, the window singleton has been deprecated. Code previously relying on the window singleton needs to look up the specific view it wants to operate on via the View.of API or interact with the PlatformDispatcher directly. https://docs.flutter.dev/release/breaking-changes/window-singleton
2.5. Features Multiple windows, especially for desktop platforms, because this is a very highly requested feature.aq https://github.com/flutter/flutter/issues/116929
2.5. Features Platform Views on macOS and Windows, by popular demand. https://github.com/flutter/flutter/issues/108486 https://github.com/flutter/flutter/issues/41722
2.5. Features Drag and drop, also by popular demand. https://github.com/flutter/flutter/issues/30719 https://github.com/flutter/flutter/issues/30719#issuecomment-901185947
2.5. Features Supporting element embedding (see also #32329), which allows Flutter content to be added to any standard web <div>, by popular demand. https://github.com/flutter/flutter/issues/118481 https://flutter-forward-demos.web.app/#/
2.6. Research • 1. Adaptive Layout ◦ 많은 개발자의 니즈. ◦ 인터페이스를 여러번 구현하지 않고 복수의 플랫폼을 지원하는 것 • 2. New graphics backend ◦ 3D를 Flutter Scenes에 통합 ◦ 2023년에는 3D 관련 실험/연구를 진행 예정 ◦ The low-level dart:ui API 및 새로운 shader 기능개선 내부에서 연구되고 있는것
2.6. Research • 3. Wide Color Gamut Support • 4. ICU4C에서 ICU4X로 마이그레이션 ◦ Rust-based ICU Backend • 5. Dart의 새로운 기능을 활용한 Flutter 업데이트 ◦ Record & Pattern을 사용 가능하도록 API 업데이트 ◦ RISC-V 지원하기 위한 toolchain 업데이트 ◦ 플러그인을 위한 새로운 FFI 기능 내부에서 연구되고 있는것
2.6. Research 2020~ ICU4X • 모든 플랫폼의 빌드 파이프라인데 Rust언어를 포함하는 것 • Engine과 Dart FFI 패키지간 Rust 코드를 공유하는 방법 • 각 패키지들의 바이너리 코드에 대한 tree-shaking 방법 https://icu4x.unicode.org/doc/icu/ https://github.com/unicode-org/icu4x Unicode ICU4X 2022
2.6. Research RISC-V The ClockworkPi DevTerm R-01, an experimental RISC-V computer, running a Dart console app. https://medium.com/flutter/whats-next-for-flutter-b94ce089f49c
2.6. Research RISC-V? • RISC (Reduced Instruction Set Computer) • Open Source! • University of California, Berkeley • Espressif - ESP-32 • Google - Titan https://en.wikipedia.org/wiki/RISC-V
2.7. Releases • 2023년 중에 4번의 Stable 배포, 12번의 Beta 배포 예정 • 2023년에는 새로운 기능을 Stable 버전이 아닌 Beta 채널에서 사용할 수 있도록 ◦ Stable 채널에서 기다리기 힘들어요 ◦ Beta 채널을 이용해보세요~ Flutter 출시계획
2.7. Releases The road to Dart3 • Around January/February 2023: Dart 3 alpha released. • Around March/April 2023: Dart 3 beta released. ◦ This release previews the new features in Dart 3. • Around mid 2023: Dart 3 stable released. ◦ Sound null safety becomes the only supported mode.
2.8. Non-goals The list of most popular issues Access: 2023-03-27 https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc
2.8. Non-goals • 1. Web의 Hot Reload 기능 ◦ 현재 플러터 팀의 모든 Web Compiler 전문가들은 Wasm (WebAssembly) 지원을 위한 작업을 진행 중. • 2. Built-in 지원 ◦ Apple Watch ◦ Android Wear ◦ Automotive (IVI와 같은 자동차 플랫폼) 올해 목표하지 않는것들.
2.8. Non-goals Hot Reload on web https://github.com/flutter/flutter/issues/53041 • 현재 이 이슈를 같이 작업할 Volunteered 가 없음. • 장기적인 Web 관련 작업은 wasm에 초점을 맞추고 있기 때문 • 곧 해결될 것으로 보이지 않음. • 기술적으로 어렵고 미묘한 문제 2020
2.8. Non-goals Built-in System - Automotive • Apple CarPlay는 Oğuzhan Atalay가 만든 flutter_carplay를 추천 ◦ CarPlay API 제어를 위한 Flutter API를 제공 ◦ Apple의 API는 템플릿 베이스이다. (Apple's API is template based) ◦ Flutter의 가치를 발휘하지 어려움. (렌더링 엔진, 위젯 프레임워크, 플랫폼 중립성 등) • Android Auto의 경우도 동일 • Oğuzhan Atalay와 함께 협업하여 작업하거나 새로운 플러그인을 만들기를 권장 • CarPlay와 Android Auto가 직접적으로 화면에 픽셀을 그리는 방식을 https://github.com/flutter/flutter/issues/26801#issuecomment-1013565542
2.8. Non-goals Built-in System - watchOS / tvOS • It would involve code changes in the buildroot, and some changes to Dart and Skia ◦ if we aren't totally off Skia and onto Impeller by then • Flutter 엔진에서 일부 리팩토링 작업을 진행중 ◦ macOS, iOS 및 tvOS 또는 watchOS와 같은 embedders 사이에서 더 많은 코드를 공유할 수 있도록 개선할 예정 • Xcode뿐만 아니라 flutter_tool에서도 작동하도록 하기 위해서는 무선 디버깅이 필수적 ◦ TV에 USB 테더 옵션이 없음. • watchOS SDK는 tvOS SDK보다 iOS와 더 다르므로 Flutter 임베더, WKApplication 수명 주기 이벤트 등에서 WatchKit 의미 체계도 구현필요. https://github.com/flutter/flutter/issues/26801#issuecomment-1013565542
2.8. Non-goals 2022 Code Push 2019 • 2019년 이후에도 내부에서 Research는 계속 진행 • Stores(Google Play, App Store등)의 정책이 엄격해 짐 ◦ JS 기반 솔루션이 스토어상에서 환영받고 있지 못함 ◦ 상황상..make sense하지 못 한거 같음 • React Native의 경우 코드 푸시 솔루션을 직접 제공하지 않음 ◦ Microsoft에서 패키지를 제공하고 있음 ◦ 이슈 데이터베이스에 거절된 앱들에 대한 많은 문제보고가 있음 • package:rfw와 같은 UI-push 대체 솔루션이 있음. ◦ 코드푸시를 대채 하기는 어려움
2.8. Non-goals 2019 Flutter Web SEO • 근본적으로 Flutter Web 앱을 HTML로 렌더링하는건 현재 Flutter 아키테척에서 불가능 • 그리고 Flutter Web은 근본적으로 클라이언트 사이드 기술로 설계되어 있음. • Flutter - WebGL, Wasm을 집중
2.8. Non-goals 2023 2019 Flutter Web WASM Flutter, Dart, and WASM-GC: A new model for Web applications by Kevin Moore @ Wasm I/O 2023 https://youtu.be/Nkjc9r0WDNo
of the market ◦ As of January 2023, there are over 700,000 apps in the Play Store that are built with Flutter, and one in five new apps on the Play Store use Flutter ◦ Unlike traditional web frameworks, Flutter looks beyond the DOM and JavaScript to a new generation of Canvas and WebAssembly based APIs. ◦ Ubuntu has contributed the Linux port, and are broadly using it for upcoming releases of their Linux distribution, including their installer and software distribution tooling. https://medium.com/flutter/flutter-in-2023-strategy-and-roadmap-60efc8d8b0c7
of the market https://www.theregister.com/2023/04/04/ubuntu_2304_lunar_lobster_beta/ https://ubuntu.com/blog/whats-new-in-ubuntu-desktop-22-10-kinetic-kudu
Must • migrate our ecosystem to null safety without fragmentation • continue to advance Dart tastefully and carefully • eradicate jank and other performance impediments with minimal customer effort • deliver unparalleled performance on all platforms • reduce or eliminate friction when calling system APIs • build in supply-chain security without impeding non-Google contributors • build an ecosystem that is self-sustaining • maintain and grow our reputation for quality • win a reputation with design agencies and iOS developers • close API and package divergences between platforms • grow the diversity of our community • support or integrate emerging ways of building UI, such as ML code completion and low-code tools. https://medium.com/flutter/flutter-in-2023-strategy-and-roadmap-60efc8d8b0c7
This makes the developer experience one of the most critical aspects of Dart and Flutter. ◦ In 2023, our north star objective remains the growth of active users. ◦ Even a beautifully designed framework or programming language is of limited use without an ecosystem that includes libraries, developer tooling, training and a pervasive developer community. ◦ developer experience is essential to customers choosing us, since there is no platform for which using Dart or Flutter is the default. ▪ In contrast, for example, Swift and SwiftUI are the default solution for iOS development, Kotlin and Jetpack Compose are the default for Android development, HTML and JavaScript are the default for web development, etc. https://medium.com/flutter/flutter-in-2023-strategy-and-roadmap-60efc8d8b0c7
Performance • Mobile ◦ Impeller → iOS → Android • Web ◦ A large re-architecture to target WebAssembly ◦ Support multi-threaded rendering ◦ Reduce downloaded payload sizes to dramatically improve load time ◦ Runtime performance. https://medium.com/flutter/flutter-in-2023-strategy-and-roadmap-60efc8d8b0c7
interoperability • For Android, we want to make it easier for apps to integrate seamlessly with the underlying operating system. This includes ◦ reducing the costs of calling Jetpack libraries ◦ reducing memory buffer copies ◦ making it easier to embed Flutter into existing Android projects. • For iOS, we need to improve our ability to stay up to date with the latest iOS releases, ◦ updates to the Cupertino widget set ◦ modernizing the package ecosystem to use Swift Package Manager ◦ improving performance. ◦ We are also working on improving interop with Swift and Objective-C code through FFI. https://medium.com/flutter/flutter-in-2023-strategy-and-roadmap-60efc8d8b0c7
interoperability • On the web, there is work to reduce the ‘uncanny valley’ syndrome where developers notice differences between Flutter and DOM-based content; ◦ we need to support embedding Flutter into existing web projects through technologies like Web Components; ◦ we need to modernize our JavaScript interop libraries; ◦ we need to continue our work on supporting Wasm, Web Workers, and WebGPU for a more cohesive web experience. • On Windows and macOS, there are third-party libraries for UI (Fluent and macos_ui respectively). However, we need to complete the work we’ve started on platform views so that we can embed content from other SDKs into Flutter apps, as well as improving accessibility and adding multi-window support. https://medium.com/flutter/flutter-in-2023-strategy-and-roadmap-60efc8d8b0c7
interoperability Chrome ships WebGPU After years of development, the Chrome team ships WebGPU which allows high-performance 3D graphics and data-parallel computation on the web. Published on Thursday, April 6, 2023 https://developer.chrome.com/blog/webgpu-release/
Portability • Our primary target in 2023 is WebAssembly, specifically the emerging work around support for garbage collected languages known as WasmGC. • We are also working on supporting new processor architectures. ◦ Desktop-class operating systems are increasingly moving to ARM, and we therefore need to support ARM for those operating systems ◦ RISC-V is an emerging platform that we will continue to investigate so we can support Flutter and Dart in embedded scenarios as well as future potential use in Android https://medium.com/flutter/flutter-in-2023-strategy-and-roadmap-60efc8d8b0c7
Ecosystem • As of November 2022, there are over 15,000 games published to the Play Store using Flutter, which represents 59% growth over the last twelve months. • In 2023, we will release a second vertical toolkit focused on news, developed by a partner and co-funded by and in partnership with the Google News Initiative. https://medium.com/flutter/flutter-in-2023-strategy-and-road map-60efc8d8b0c7
We’ll shift our focus over 2023 away from stable releases as the primary vehicle for announcing new features and towards beta releases as the proving ground, as Chrome does. https://medium.com/flutter/flutter-in-2023-strategy-and-roadmap-60efc8d8b0c7
integration for web and mobile Early to new and emerging architectures Continued focus on developer experience Impeller Shaders for web and mobile 3D support Element embedding JNIgen and FFIgen WebAssembly RISC-V Language features Sound null safety Flutter News Toolkit