[!warning] Google Summer of Code 2023 is no longer accepting applications.
A list of Google Summer of Code project ideas for Dart.
For GSoC related discussions please use the dart-gsoc group.
Potential mentors
jonasfj@google.com
dacoharkes@google.com
sigurdm@google.com
liama@google.com
yousefi@google.com
mhadaily@gmail.com
bquinlan@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 (please use secret gists, and do not share these with other applicants). Suggested ideas below includes proposed “Good Sample Projects”.
Do not spend too much energy on this piece of sample code, we just want to see that you can code something relevant -- and that this sample code can run and do something non-trivial. 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. Applicants are encouraged to submit draft proposals, linking to Google Docs with permission for mentors to comment. See also the contributor guide on writing a proposal.
IMPORTANT: Remember to submit final proposals before the April 4th deadline.
Description: Package FFIgen makes interop with C and Objective-C seamless, and the (experimental) package JNIgen does the same for Java and Kotlin. However, what about Go?
In this project we would parse Go files and generate C wrappers and Dart bindings to those C wrappers so that developers can easily interop with Go from Dart.
(Alternatively, we could also do this project for another language. IDL, C++, Rust, …)
Good Sample Project: (1) Build a small sample project where you interop with a Go library. (2) Build a prototype for generating the bindings for that library, and (3) use a Go parser to generate those bindings.
jonasfj@google.com
, sigurdm@google.com
Description: When writing Dart code it is useful to write documentation comments, such comments will be included in automatically generated documentation created by dartdoc
. Documentation comments for dartdoc
are written in markdown, which allows authors to embed code samples. This project aims to create tools for testing code samples embedded in documentation comments.
This will likely involve:
package:analyzer
to extract documentation comments.package:markdown
to extract code samples.dart analyze
on the code sample,dart format
, and/or,For this project, we'll finish the dartdoc_test
package, such that it can be used by package authors who wish to test code samples in their documentation comments.
As part of this project, we'll likely have to define conventions for what is expected of a code sample in documentation comments:
main
function?main
to keep it simple?main
?// ignore: unreachable
comment)?Some of these questions might be debated in the project proposal. A project proposal should also discuss how package authors would run the code sample tests. Finally, a project proposal is encouraged to outline implementation stages, including stretch goals.
Good Sample Project: Create a function that given some Dart code will use package:analyzer
to do static analysis of the code and count static errors. Additional step would be to try and use package:analyzer
to extract documentation comments from source code and use package:markdown
to extract code-snippets from source code comments, and then run analysis on the extracted source code snippets. Ideally, all of this could be done, in-memory without writing files to disk.
Possible Mentor(s): bquinlan@google.com
, yousefi@google.com
Difficulty: Hard
Project size: Large (350 hours)
Skills: Dart, Java, Android
Description: Write a HTTP client that conforms to the package:http
Client
interface and uses native Java APIs through package:jnigen
. This will allow us to provide several features requested by our users such as:
KeyStore
PrivateKey
s (#50669)Successfully completely this project will likely involve:
package:jnigen
.package:http
Client
implementation using the interface above.Client
implementation passes the conformance tests.You'll like working on this project because:
A good project proposal will describe what Java APIs are necessary to implement the package:http
Client
interface and an excellent project proposal will discuss what features package:jnigen
needs to use those APIs from Dart.
Good Sample Project: Try writing a small Flutter application that makes HTTP requests using Java API bindings created with package:jnigen
.
Description: Dart 3 introduces a few new language features. There are several features such as Records, pattern matching and new direct platform library interop which potentially helps to improve code readability and better API design for packages.
We would like to explore the possibilities of the new language features that could help to improve packages and create a new API (potentially) or refactor internal coding that make the package to take full advantage of Dart 3. We would like to also prepare a guideline after this refactoring for other maintainers to figure out what could be improved or changed.
We are using Federated plugins, therefore this is likely to involve:
platform_interface
class for each package,Some of these questions might be debated in the project proposal. A project proposal is encouraged to outline implementation stages, including stretch goals.
Good Sample Project: Create new packages for both Device_Info or Connectivity_Plus and redesign part of the APIs including in platform interface and use Dart 3 language features, then create a Flutter project from main branch and then use these packages with latest Flutter and Dart 3 version that uses all APIs.