Skip to content

Dart GSoC 2022 Project Ideas

Jonas Finnemann Jensen edited this page Feb 12, 2022 · 17 revisions

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
  • ...

Project Application Process

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. 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 April 9th deadline.


Idea: JNI interop for Dart

  • Possible Mentor(s): dacoharkes@google.com
  • Difficulty: Hard
  • Project size: Large
  • Skills: Dart, Java, C

Description: Use dart:ffi to bind Java library in Flutter through JNI. This would ideally encompass ergonomic Dart bindings for JNI C interface and a bindings generator that can scan Java code or JARs and generate Dart bindings which uses JNI.

  1. This project requires a way to scan Java code or JARs. For inspiration: package:ffigen scans C header files with libclang.
  2. Design data structures to hold the information. And generate the C JNI code + Dart bindings.
  3. This project needs an architecture design as well. Does it fit in package:ffigen? Or should we make a new package?
  4. Make the package work for a killer use case. What Java library would you want to use from Dart?

Idea: Detecting Semantic Version Violations

  • Possible Mentor(s): jonasfj@google.com
  • Difficulty: Hard
  • Project size: Large
  • Skills: Dart, Static Analysis

Description: Dart packages on pub.dev use semantic versioning. We should be able to detect obvious compatibility violations. For each version of a package we can generate a JSON file with a summary of public methods/types/properties and their signatures. By comparing the summary of two package versions (which are supposed to be compatible), we should be able to detect obvious cases where semantic versioning was violated because class, member, property or type was removed or changed in a backwards incompatible manner.

Naturally, not all semantic version violations can be detected. But a subset would be detectable. This could be used for scoring on pub.dev, or offered as a utility package authors can run in CI before publishing their package.

Good Sample Project Create a command-line Dart application that given a Dart file will use package:analyzer to print a list of all exported top-level symbols. For example, given retry.dart this application should print two lines containing RetryOptions and retry. Feel free to expand it print additional information about exported symbols, such as type, methods, etc.

🚧 More ideas are coming 🚧

Template for additional ideas

## **Idea:** {{title}}

 - **Possible Mentor(s)**: `{{email}}`
 - **Difficulty**: {{easy | medium | advanced}}
 - **Project size**: {{large | small}}; ...
 - **Skills**: {{keyword}}; ...

**Description**:
{{description}}

**Good Sample Project**
{{how to get started; good first bugs; ideas for code samples; warm-up exercises}}

----
Clone this wiki locally