Want to contribute? Great!
You can help the Dart project in many ways, by giving feedback, improving documentation, contributing code, or asking and answering Dart questions on StackOverflow.
The Dart projects tracks everything from features to bugs using GitHub issues. These are stored across a number of GitHub repos. Start by locating the relevant repo:
dart CLI.Once you have located the repo, you can contribute feedback in several ways:
File a new issue: If you‘ve found a problem or bug in existing code, start by searching the current issues to see if it’s already reported. If not, you can file a new issue.
Upvote existing issue: If you‘re experiencing an issue that has already been reported, or want to indicate interest in an issue tracking a new feature, consider upvoting it to help the Dart team understand its importance. You can upvote an issue by locating it in the GitHub issue tracker, and pressing the “thumbs up” reaction on the issue’s top-most comment. Avoid otherwise empty +1, emoji, or similar comments. The Dart team reviews the highest voted issues on a regular basis for consideration into our roadmap.
Note: Dart currently does not have a formal RFC (request for comments) process to propose larger changes. We hope to add this soon.
For documentation on the dart.dev website, use the links located in the footer of each page:
view source.report an issue.For more information, see Writing for Dart and Flutter websites.
You can improve the API reference docs at api.dart.dev by editing doc comments in the Dart SDK repo. For more information on how to write API docs, see Effective Dart: Documentation.
Please read the instructions below carefully (including the small print and AI contribution guidelines before proceeding.
Before we can use your code, you must sign the Google Individual Contributor License Agreement (CLA), which you can do online. The CLA is necessary mainly because you own the copyright to your changes, even after your contribution becomes part of our codebase, so we need your permission to use and distribute your code. We also need to be sure of various other things—for instance that you‘ll tell us if you know that your code infringes on other people’s patents. You don‘t have to sign the CLA until after you’ve submitted your code for review and a member has approved it, but you must do it before we can put your code into our codebase.
Before you start working on a larger contribution, you should get in touch with us first through the Dart Issue Tracker with your idea so that we can help out and possibly guide you. Coordinating up front makes it much easier to avoid frustration later on.
All submissions, including submissions by project members, require review. We use the same code-review tools and process as the chromium project.
We occasionally take pull requests, e.g., for comment changes, but the main flow is to use the Gerrit review system as explained below.
This repository primarily uses Gerrit for code reviews, rather than GitHub PRs. However, you may submit a GitHub PR , e.g. to edit some API documentation, and it will be automatically converted into a Gerrit change list (a “CL”) by a copybara-service bot. You can find the link to that CL as a comment left on the PR by the bot. Any changes made to the PR after opening will also be sync'ed by the bot into the Gerrit review. The PR will be automatically closed when the CL is reviewed and landed.
In order to submit a patch from a local workspace, you need to install the Chromium depot_tools.
To work with the Dart code, you need to download and build the development branch. Active development of Dart takes place on the main branch, from which we push “green” versions that have passed all tests to dev branch. Complete instructions are found at Getting The Source. You must use the gclient tool (fetch), using git clone will not get you a functional environment!
Create a new branch using git new-branch (this is a command added by the aforementioned depot_tools).
You can be in any branch when you run git new-branch.
git new-branch <feature name> <write code> git commit <write code...> git commit ...
As you work, and before you send a patch for review, you should ensure your branch is merging cleanly to origin/main.
There are multiple ways to do this, but we generally recommend using git rebase-update (another feature added by depot_tools):
git rebase-update
You can run this command from any branch.
This command will fetch origin/main, rebase all your open branches, and delete cleanly merged branches.
Your local workflow may vary.
Upload the patch to Gerrit for review using git cl upload:
# Upload a CL, add reviewers from OWNERS files, and allow automatic submission. git cl upload --send-mail --r-owners --auto-submit
The above command returns a URL for the review. Attach this review to your issue in https://dartbug.com.
To update the CL, just commit your changes and run git cl upload for your branch again.
More detailed instructions for the git cl tools available on https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_creating_uploading_a_cl
Ensure that your change has at least two reviewers who are OWNERS on your CL:
git cl web # opens your review on https://dart-review.googlesource.com
Check the “Reviewers” on the CL, there should be at least two. If there aren‘t, use the “ADD OWNERS” button to add more. If you can’t get enough reviewers, or the reviewers are not responsive, you may add reviewers found in the OWNERS file at the root of the repository to escalate.
It‘s part of a code owner’s responsibility to review changes in their area and help you to get your patch submitted. They may also provide comments, or reject your CL. They can run the presubmit tests on your behalf and submit your patch.
If you have commit access, when the review is done and the patch is good to go, submit the patch on https://dart-review.googlesource.com:
If you do not have commit access, a Dart engineer will commit on your behalf, assuming the patch is reviewed and accepted.
If the author of a patch is not a committer, they will need help landing the patch. Once a patch gets an LGTM, it's easy for a committer to merge it in.
The source code of Dart follows the:
You should familiarize yourself with those guidelines.
All files in the Dart project must start with the following header. If you add a new file please also add this. The year should be a single number (not a range; don‘t use “2011-2012”, even if the original code did). If you edit an existing file you don’t have to update the year.
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file.
PRs prepared using AI tools must follow these requirements:
Because the Dart team’s time is limited, and the capacity for people outside the team to generate plausible-looking code is unlimited, be mindful as a reviewer about what code you choose to review. Consider immediately closing changes that have any of the following red flags:
As always when closing a change, explain why and provide next steps.
As a guiding principle, if at any point in the process you feel that you are getting unfiltered or minimally filtered AI output as code and/or comment responses, ask yourself:
Unless the answer to both questions is yes, the review is not a good use of your time.
This applies even if you are multiple rounds into the review: if the contributor closed the change, would you take it over using an extremely high-latency agent? Beware the sunk cost fallacy.
A common question in discussions around AI policies for open source projects is: “Why have an AI policy at all? Why does it matter how the code was created; shouldn’t the code speak for itself?”
In general, we agree, which is why our policy focuses on behaviors rather than tools. The behaviors that led to the creation of this policy are problematic regardless of whether they are AI-generated or human-generated. However, it is useful to highlight these policies in the context of AI because we have seen that these behaviors are orders of magnitude more common when AI is involved. For example:
Contributions made by corporations are covered by a different agreement than the one above, the Software Grant and Corporate Contributor License Agreement.
We pledge to maintain an open and welcoming environment. For details, see our code of conduct.