[!warning] Google Summer of Code 2020 is no longer accepting applications.
The list of accepted projects have been announced on summerofcode.withgoogle.com.
A list of Google Summer of Code project ideas for Dart. Students are welcome to invent additional proposals.
For GSoC related discussions please use the dart-gsoc group.
Potential mentors
alan.knight@gmail.com
bkonyi@google.com
dacoharkes@google.com
jonasfj@google.com
redbrogdon@google.com
brettmorgan@google.com
All projects assume familiarity with Dart (and sometimes Flutter). Aspiring applicants are encouraged to learn Dart and try to write some code.
Applicants are welcome to find and fix bugs in Dart or some of the packages written by the Dart team. However, getting reviews can take a long time as code owners may be busy working on new features. So instead of requiring applicants to fix a good first bug, we suggest that applicants write a working code sample relevant for the proposed project.
The code sample can be attached to the application as a secret gist. Suggested ideas for code samples include:
dart:ffi
to bind a simple C API. (Perhaps compress a string with brotli, or make an HTTP request with libcurl)Do not spend too much energy on this piece of sample code, we just want to see that you can code something relevant. Be aware that we have a limited number of mentors available, and will only be able to accept a few applicants.
Applications can be submitted through the summerofcode.withgoogle.com website. Students are encouraged to submit draft proposals, ideally linking to a Google Docs with permission for mentors to comment. See also the student guide on writing a proposal.
IMPORTANT: Remember to submit final proposals before the March 31st deadline.
alan.knight@gmail.com
Description: The Dart intl_translation package supports the ARB format for reading and writing text and translations. ARB is a simple format, as it is mostly a wrapper around the ICU MessageFormat syntax, but it is not widely used. It would be good to support one or more additional formats. It would also be good to allow users to add formats in their own packages, without modifying intl_translation. XLIFF is one obvious choice, both because it is widely used, and because it is quite a different format. XLIFF has a lot of flexibility, so we would want to look at it in the context of a particular usage, for example, iOS. But other formats are widely used as well.
Getting Started Use intl and intl_translation to produce a small program that runs with translated messages, so you understand the workflow. The parsing is done using a grammar written in petitparser, take a look at that and try writing a simple grammar. Take a brief look at the ARB, MessageFormat and XLIFF (much larger) documentation.
For the proposal, it would be valuable to include:
dacoharkes@google.com
Description: Write a (Dart) program that generates dart:ffi
bindings from a .h-file. A possible approach could be to use the FFI to bind to clang. This would greatly reduce the amount of effort developers using dart:ffi
would have to do. For more info dart-lang/sdk#35843.
Getting Started Write a Dart package that binds to a native library of your choosing to familiarize yourself with Dart and using dart:ffi
. On top of that you could write a small Dart app to showcase using that library.
redbrogdon@google.com
, brettmorgan@google.com
Description: One area in which the Flutter samples repo is lacking is automated testing. We‘ve always wanted a sample app set up to demonstrate the proper techniques for testing Flutter apps -- not so much the testing philosophy involved, but the tech that powers Dart and Flutter’s testing architecture. This project would involve creating a simple sample application for the repo, and include unit, widget, and integration tests as the real prize.
Getting Started Try creating a small sample using DartPad, the online editor for Flutter and Dart:
redbrogdon@google.com
, brettmorgan@google.com
Description: The Flutter samples repo has a few apps that touch on platform channels, but nothing dedicated to the topic. A sample app that showed event channels, method channels, moving structured data, and other related topics would be a welcome addition to the codebase.
Getting Started Try creating a small sample using DartPad, the online editor for Flutter and Dart:
jonasfj@google.com
Description: Write a Dart package for programmatically modifying a YAML file while preserving comments. Figuring out the exact data structure and API for modification is part of this project, though inspiration may be drawn from package:yaml. The goal is to use this for implementing a pub add <package>
command, which modifies the pubspec.yaml
without throwing away comments. Stretch goal might be to preserve as much whitespace and YAML style as possible.
Getting Started Try writing a small sample program that can parse a tiny subset of YAML, or maybe parse a formula like a + b / (c - d)
, or find and fix a bug in package:yaml (maybe search internet for YAML test vectors, and use that to find bugs in package:yaml
). For the proposal, it would be valuable to include:
jonasfj@google.com
Description: Write a Dart package for reading tar archives as a stream of objects, similar to the golang API, and ideally being able to read the same test cases. A critical aspect of a streaming tar-reader is the ability to read a tar-stream Stream<List<int>>
as a stream of file-entries with sub-streams for reading the file contents, such that a reader can read each file as a stream (never loading an entire file into memory at once). This involves reading man-files, and figuring out how to represent all objects (or throw them away). A stretch goal would be to replace the use of native tar
in pub
for reading and writing tar-files. This would naturally include being able to read all packages on pub.dev.
Getting Started Try writing a small sample program that can print the file name and size of the first file in a USTAR tar archive. Link to the sample in a secret gist attached to the project proposal. For the proposal, it would be valuable to include:
pub
we mostly care about ordinary files and folders).jonasfj@google.com
Description: Write a Dart package for detecting SPDX license from a LICENSE
file following the SPDX License List Matching Guidelines. A goal would be properly represent the license of a package on pub.dev with an SPDX identifier. Stretch goal might be to handle LICENSE
files with multiple licenses and display an SPDX license expression on pub.dev.
Getting Started Try writing a small sample program that can fetch one of the SPDX origin files and print it to terminal as markdown. Don't make it too perfect, just figure out how to parse the XML. For the proposal, it would be valuable to include:
bkonyi@google.com
Description: The Flutter repository is lacking any example applications which perform tasks that require background execution. There have been multiple requests for a sample media player application, which would involve building an audio player plugin for both Android and iOS in addition to a UI in Flutter.
Getting Started: Create a simple Flutter application which utilizes method channels to invoke functionality written in native code via Dart (Java or Kotlin for Android, Objective-C or Swift for iOS). This doesn't have to be anything complicated, just enough to experiment with writing code that crosses language boundaries. See Flutter documentation on developing packages and plugins for information needed to get started.
It's also recommended that you read through the article on background execution in Flutter. While this is slightly out of date, the general concepts are still correct and will be important for this project.
## **Idea:** {{title}} - **Possible Mentor(s)**: `{{email}}` - **Difficulty**: {{easy | medium | advanced}} - **Skills**: {{keyword}}; ... **Description**: {{description}} **Getting Started** {{how to get started; good first bugs; ideas for code samples; warm-up exercises}} ----