Flow Improvement Proposals (FLIPs) serve as a platform for engaging the Flow community in development, harnessing the collective ideas, insights, and expertise of contributors and experts while ensuring widespread communication of design changes.
Each FLIP delineates a proposed alteration to the Flow protocol, governance, or application-level standards with the objective of enhancing the Flow ecosystem and protocol. These proposals are open to submission by anyone and are subject to the FLIP process described below.
To differentiate FLIPs from the onflow/flow repository, a separate repository has been created to house them. Currently, the legacy FLIPs reside in the flips directory and will be gradually relocated to their appropriate sub-directories.
Application FLIPs are standards for applications built on top of FLOW. This could be token standards, contract interface standards, common design patterns that can benefit from social consensus etc. Application standards should not create protocol changes in themselves, and if they rely on any new protocol features that feature should be written up in its own protocol flip.
Governance FLIPs are proposals to take governance actions on the network, for instance changing staking rules, admitting new node operators to the allowlist, adjusting fees, or taking various actions with the the service account.
Protocol FLIPs affect the core Flow protocol. This may include items such as: new algorithms which are required for any flow client to work on the network, payload API changes, cryptographic methods, etc.
Cadence changes will currently fall under Protocol FLIPs because they are tightly coupled with the FVM.
-
- FLIP 703: Mutability Restrictions
- FLIP 718: Cadence Storage API Improvements
- FLIP 722: Optional References to Indexed Accesses
- FLIP 729: Improve Cadence Numeric Supertypes
- FLIP 941: Reference Creation Semantics
- FLIP 1056: View Functions
- FLIP 11: Attachments
- FLIP 13: Change Cadence for-loop semantics
- FLIP 40: Interface inheritance in Cadence
- FLIP 43: Change the syntax for function types
- FLIP 53: AuthAccount Capabilities
-
- FLIP 99: Storage Fees
- FLIP 324: Self-Ejection (feature for the core protocol)
- FLIP 343: Handing Messages from Networking Layer to Engines (Core Protocol)
- FLIP 660: Variable Transaction fees
- FLIP 677: Execution State Synchronization Protocol
- FLIP 753: Variable Transaction Fees - Execution Effort I.
- FLIP 1057: Automated Slot Assignment
- FLIP 57: Access Node Staking Minimum
- FLIP 73: Event Streaming API (alpha version)
Everyone is welcome to propose and provide feedback on a FLIP.
A FLIP author writes and champions the proposal through the process.
A FLIP sponsor who is a maintainer, supports the FLIP and shepherds it through the review process.
A review committee is a group of maintainers who are responsible for the strategic direction of components, subcomponents, and public APIs. They have the responsibility to accept or reject the adoption of the FLIP via a community vote.
A FLIP is a document that describes a requirement and the proposed changes that will solve it. Specifically, the FLIP will:
- be formatted according to the FLIP template
- be submitted as a pull request
- be subject to thorough community discussion and review prior to acceptance or rejection
- for ease of tracking open flips that are currently in the process of discussion and refinement or implementation, we have a dedicated issue for each FLIP,
which is closed when the flip reaches either the
Rejected
orReleased
stage (no further updates to the FLIP)
- Before submitting a new FLIP, check for prior proposals, the Flow community forum and ask in the Discord server. The idea may have been proposed before or may be in active discussion. Consider contributing or giving feedback to existing proposals.
- If a new proposal is appropriate, propose a rough sketch of the idea in the forum Flow community forum and engage in discussion with the community, project contributors, and maintainers, to get early feedback.
- Continue to expand the rough sketch into a draft using the FLIP template and further refine the proposal on the forums.
- After writing the FLIP draft, gather feedback from project contributors and maintainers before submitting it.
Once the FLIP is ready for review:
-
Recruit a sponsor from the community. A sponsor would usually be a past FLIP author or a core community member who has expertise in the topic that your FLIP concerns, and may help streamline the review process and moderate the discussion with the community.
-
Create an issue by using one of the FLIP issue templates based on the type of the FLIP -
application
,governance
,cadence
orprotocol
. The title of the issue should be the title of your FLIP, e.g., "Dynamic Inclusion fees".Then submit the issue and note the issue number that gets assigned. For example, for issue #166, the issue number is
166
.Comment: The reason we are creating an issue first is to track the progress of the various flips that are currently under discussion, refinement or being implemented. Hence, from looking at the open https://github.com/onflow/flips/issues you get a concise overview of all FLIPs that you can contribute to, either to helping to refine proposal or contribute to its implementation.
-
Create your FLIP as a pull request to this repository (
onflow/flips
).Name your FLIP file using the template
YYYYMMDD-descriptive-name.md
, where YYYYMMDD is the date of submission, and ‘descriptive-name’ relates to the title of your FLIP. For instance, if your FLIP is titled "Event Streaming API", you might use the filename20180531-event-streaming-api.md
. If you have images or other auxiliary files, create a directory of the formYYYYMMDD-descriptive-name
in which to store those files.Use the issue number generated in step 2 as the FLIP number.
Mention the FLIP issue by copying the GitHub URL or the issue in the comment section.
At the top of the PR identify how long the comment period will be. This should be a minimum of two weeks from posting the PR.
-
Send a message to the #developers channel on Discord with a brief description, a link to the PR and a request for review
Note - The Author can decide whether they'd like the community discussion to occur within the Github PR or forum post. This choice can be indicated in the FLIP template's final section, titled "Questions and discussion.
-
The FLIP author and sponsor should actively engage in community discussions, providing thorough responses to inquiries and addressing any concerns raised by community members in a timely and respectful manner.
-
The sponsor may request a review committee meeting after sufficient discussion has taken place. This meeting will include the FLIP author, core contributors and interested community members. If discussion is lively, wait until it has settled before going to review. The goal of the review meeting is to resolve minor issues; consensus should be reached on major issues beforehand.
-
Community may approve the FLIP, reject it, or require changes before it can be considered again. FLIPs will be merged into this repository (
onflow/flips
), stating the outcome of the review process (approval, rejection), once known. -
Update the status of the FLIP issue under the "FLIPs Tracker" project as per the outcome of step 7 (
Accepted
orRejected
). If you do not have the permission, you may need to ask the sponsor to assist you. -
Implementations of a successful FLIP should reference it in their documentation, and work with the sponsor to successfully land the code.
Note that While implementation code is not necessary to start the FLIP process, its existence in full or part may help the design discussion.
If in any doubt about this process, feel free to ask on Discord,
the community forum, or file an issue in this repository
(onflow/flow
).
- Draft: The FLIP is in its early stage and is being ideated.
- Proposed: The FLIP has been proposed and is awaiting review.
- Rejected: The FLIP has been reviewed and rejected.
- Accepted: The FLIP has been accepted and is either awaiting implementation or is actively being implemented.
- Implemented: All changes for the FLIP have been implemented and merged into the main branch of the respective repositories.
- Released: The FLIP is live on Flow mainnet.
As the purpose of FLIPs is to ensure the community is well represented and served by new changes to Flow, it is the responsibility of community members to participate in reviewing FLIPs where they have an interest in the outcome.
Community members should:
- provide feedback as soon as possible to allow adequate time for consideration
- read FLIPs thoroughly before providing feedback
- be civil and constructive
The constitution of a review committee may change according to the particular governance style and leadership of each project. For the core Flow Protocol, the committee will exist of contributors to Flow who have expertise in the domain area concerned.
Review committees must:
- ensure that substantive items of public feedback have been accounted for
- add their meeting notes as comments to the PR
- provide reasons for their decisions
If a review committee requires changes before acceptance, it is the responsibility of the sponsor to ensure these are made and seek subsequent approval from the committee members.
A sponsor is a Flow maintainer responsible for ensuring the best possible outcome of the FLIP process.
In particular this includes:
- advocating for the proposed design
- guiding the FLIP to adhere to existing design and style conventions
- guiding the review committee to come to a productive consensus
- if the FLIP is approved and moves to implementation:
- ensuring proposed implementation adheres to the design
- liaison with appropriate parties to successfully land implementation
- update the status of the issue created for the FLIP for the Flip tracker project.
While we encourage and celebrate every contributor, the bar for FLIP acceptance should be kept intentionally high. A design may be rejected or need significant revision at any one of these stages:
- initial design conversations on the Flow community forum or Discord server
- failure to recruit a sponsor
- critical objections during the feedback phase
- failure to achieve consensus during the design review
- concerns raised during implementation (e.g., inability to achieve backwards compatibility, concerns about maintenance appearing once a partial implementation is available)
If this process is functioning well, FLIPs are expected to fail in the earlier, rather than later, stages.
Use the template from GitHub, being sure to follow the naming conventions described above.
FLIPs should be evaluated for their impact on the three pillars of Flow. These are:
- Community - consider how the FLIP will impact the ability for others to participate in the ongoing design and operation of the Flow network and the applications which depend on it.
- Empowerment - consider how the FLIP will improve the economic opportunity for creators, contributors and participants in the community. The FLIP should result in a net positive on the marginal benefits and costs to all the impacted individuals (who choose to register their preference/vote on an issue).
- Reliability - and finally, think about how the FLIP will impact the consistency, observability, verifiability, and overall performance of the Flow network for its users.
Note: the FLIP process and guidelines were adapted from the wonderful RFC process created by the TensorFlow community. ❤️
This work, "Flow Improvement Proposals", is a derivative of "The TensorFlow RFC process" by The TensorFlow Authors, used under CC BY 4.0.