-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Dart GSoC 2024 Project Ideas
A list of Google Summer of Code project ideas for Dart.
For GSoC related discussions please use the dart-gsoc group.
Potential mentors
- Jonas Jensen (jonasfj)
[email protected]
- Daco Harkes (dcharkes)
[email protected]
- Hossein Yousefi (HosseinYousefi)
[email protected]
- Chinmoy Chakraborty (chinmoy12c)
[email protected]
- Liam Appelbe (liamappelbe)
[email protected]
- Prerak Mann (mannprerak2)
[email protected]
- Jackson Gardner (eyebrowsoffire)
[email protected]
- Camille Simon (camsim99)
[email protected]
- Brian Quinlan (bquinlan)
[email protected]
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 2nd deadline.
- Possible Mentor(s): @dcharkes @mannprerak2 @eyebrowsoffire
- Difficulty: Hard
- Project size: Large (350 hours)
- Skills: C, WASM, Web development, Dart
Description:
Original idea: A web interface in which you paste a C header in a textbox on the left, and it outputs dart:ffi
bindings generated by package:ffigen
in a textbox on the right. (Inspiration is https://godbolt.org/ which does this for a C file on the left and assembly on the right.)
In order to avoid needing a server to do the backend, we'd like to compile the Dart code in package:ffigen
and libclang
to WASM. That way everything can run in the browser.
Good Sample Project:
- Compile some C code to WASM and call it from a web app.
- Compile some Dart code to WasmGC and call it from a web app.
- Explore compiling libclang from the llvm repository to WASM.
- Possible Mentor(s): @liamappelbe
- Difficulty: Hard
- Project size: Large (350 hours)
- Skills: Swift
Description:
package:ffigen
allows Dart to interact with ObjC. Swift modules can be invoked from ObjC (and Dart through ffi),
but only if the classes and methods have been annotated with @objc
. So if a user wants to interact with a Swift
module they don't own from Dart, they need to write a wrapper module that mirrors the API, but has @objc
annotations.
It should be possible to write a tool that can automatically generate this ObjC compatibility wrapper. The official Swift parsing library is written in Swift, so the tool should probably also be written in Swift. In fact, the candidate doesn't even really need any Dart experience, just Swift and maybe a little bit of ObjC.
Good Sample Project: Use the Swift parsing library to load a module and print some of its metadata (e.g. print a list of the classes in the module).
- Possible Mentor(s): @HosseinYousefi
- Difficulty: Hard
- Project size: Large (350 hours)
- Skills: Dart, Java
Description: Add the ability to rename, exclude, convert to operators, add members, and generally transform the classes and methods using visitor pattern. Something like this:
Config(
visitors: [Foo2BarRenamer()], // User passes the visitor to config
);
class Foo2BarRenamer extends JnigenVisitor {
void visitClass(Class c) {
if (c.name == 'foo') c.name = 'bar';
c.visitMethods(this);
// ...
}
// ...
}
Good Sample Project: Create a simple renamer/excluder visitor, so JNIgen users can pass that in, and rename/exclude classes, methods, and fields. You will have to create a user-facing AST that wraps the original AST. For the sample project, the wrapper AST could only expose name
or included
properties.
-
Possible Mentor(s):
[email protected]
,[email protected]
-
Difficulty: Hard
-
Project size: Large (350 hours)
-
Skills: Dart, Java, Android
Description: Write a flutter plugin that wraps the OkHttp package using package:jnigen
and implements the package:http
Client
interface. Time permitting, the plugin will also implement the package:web_socket_channel
WebSocketChannel
interface. This will allow us to provide several features requested by our users such as:
- Support for
KeyStore
PrivateKey
s (#50669) - Support for the system proxy (#50434)
- Support for user-installed certificates (#50435)
Successfully completely this project will likely involve:
- Determining exactly what APIs should be make available in Dart.
- Creating a JNI bindings for those APIs using
package:jnigen
. - Creating a
package:http
Client
implementation using those bindings. - Verifying that the
Client
implementation passes the conformance tests.
You'll like working on this project because:
- It will be easy to implement incrementally. After the basic functionality is present, more advanced APIs can be added as time permits.
- There are existing conformance tests to validate the correctness of the work.
- Dart users want it!
A good project proposal will describe what Java APIs are necessary to implement the package:http
Client
interface e.g. OkHttpClient.newCall()
. An excellent proposal will use asynchronous APIs.
Good Sample Project: Try writing a small Flutter application that makes HTTP requests using OkHttp bindings created with package:jnigen
. You can use package:cronet_http
and package:java_http
as starting points.
Tip
Look at the package:cronet_http
jnigen.yaml and
build.gradle files.
Copy this template.
- Possible Mentor(s):
- Difficulty: Easy / Hard
- Project size: Small (90) / Medium (175 hours) / Large (350 hours)
- Skills: ...
Description: ...
Good Sample Project: ...
Important
The wiki has moved to https://github.com/dart-lang/sdk/tree/main/docs; please don't edit the pages here.