Skip to content

Dart GSoC 2020 Project Ideas

Jonas Finnemann Jensen edited this page Jan 23, 2020 · 17 revisions

Dart GSoC 2020 Project Ideas

A list of Google Summer of Code project ideas for Dart, students are obviously invited to invent additional proposals.

Potential mentors

  • alan.knight@gmail.com
  • bkonyi@google.com
  • dacoharkes@google.com
  • jonasfj@google.com
  • redbrogdon@google.com

Remark, dedicated chat rooms and mailinglist will be created later.

Idea: FFI Bindings generation from header files

  • Possible Mentor(s): dacoharkes@google.com
  • Difficulty: Medium
  • Skills: Dart programming skills; C programming skills.

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.


Idea: Flutter testing sample app

  • Possible Mentor(s): redbrogdon@google.com
  • Difficulty: Medium
  • Skills: Dart, Flutter coding skills.

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.


Idea: Platform channel sample app

  • Possible Mentor(s): redbrogdon@google.com
  • Difficulty: Advanced
  • Skills: Dart programming skills; C programming skills.

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.


Idea: Programmatic YAML modification package

  • Possible Mentor(s): jonasfj@google.com
  • Difficulty: Easy to medium
  • Skills: Parsing; abstract-syntax-trees; programming skills in Dart or similar language.

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.


Idea: TAR-stream reader package

  • Possible Mentor(s): jonasfj@google.com
  • Difficulty: Advanced
  • Skills: Dart programming skills; reading binary data; man files.

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


Idea: SPDX license detection package

  • Possible Mentor(s): jonasfj@google.com
  • Difficulty: Medium
  • Skills: Dart programming skills; text parsing.

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.


Idea: Integrate WASM runtime into Dart VM

  • Possible Mentor(s): ?
  • Difficulty: Advanced
  • Skills: Dart programming skills; C programming skills

Description: Embed WASM runtime (wasmer.io for example) into the Dart VM to allow running of WASM-compiled module along side Dart code.


Template for additional ideas

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

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

**Description**:
{{description}}

----
Clone this wiki locally