This page provides a starting point for navigating RFCs in the “FIDL” area. It organizes them in various ways and gives an updated status on each, bringing the reader up to speed with FIDL's history and current direction.
Previously, these design documents were called FTPs or FIDL Tuning Proposals. The FTP process was later merged into the RFC process. Because of the way FTPs were renumbered as RFCs, RFC numbers do not imply chronology. However, each individual list on this page shows RFCs in chronological order: by submission date for FTP-turned-RFCs, and by review date for all later RFCs.
This section organizes FIDL RFCs by theme. Each RFC is listed once, under its primary theme, even if it touches on multiple themes.
This section lists RFCs that introduced new feature that are easily visible in the FIDL language. It only includes current features, not obsolete ones.
Feature | RFC | Note |
---|---|---|
struct defaults | RFC-0022 | Default values for struct members |
table | RFC-0047 | Forward and backward compatible data type |
/// | RFC-0055 | Documentation comments |
struct Empty {}; | RFC-0056 | Empty structs |
error | RFC-0060 | Method error result syntax |
union | RFC-0061 | Initially called xunion , replaced the old static unions |
@selector | RFC-0020 | Override method hashing with an explicit selector |
@transitional | RFC-0021 | Attribute for soft transitioning method addition/removal |
compose | RFC-0023 | Renamed interface to protocol , added the compose feature |
bits | RFC-0025 | Bit flags types |
strict , flexible | RFC-0033 | Strict and flexible types |
handle rights | RFC-0028 | Annotate required or excluded handle rights |
service | RFC-0041 | Services are collection of protocols |
alias , type | RFC-0052 | Replaced using aliases with alias and type |
resource | RFC-0057 | Value and resource types |
anonymous layouts | RFC-0050 | Inline type definitions, named contextually or with @generated_name |
@available | RFC-0083 | Version annotations |
Method(table { ... }) | RFC-0087 | Tables and unions as top-level request/response types |
open , closed , ajar | RFC-0138 | Open and closed interactions |
This section gives the current status of all FIDL RFCs.
Legend:
Status | Meaning |
---|---|
Unpublished | Never made public nor formally reviewed |
Withdrawn | Made public, but never formally reviewed |
In review | Made public, review pending |
Implemented | Accepted, implemented, still accurate |
Partially implemented | Accepted and partially implemented, no plans to finish |
Implementation in progress | Accepted, implementation in progress |
Amended | Accepted, still mostly accurate, but amended by a later RFC |
Superseded | Accepted but no longer accurate, superseded by a later RFC |
Rejected | Formally rejected |
Rejected; Superseded | Formally rejected, then superseded by a later RFC |
RFC | Title | Status |
---|---|---|
RFC-0018 | FTP process: A modest proposal | Superseded by RFC-0017 |
RFC-0019 | Type aliases with using | Superseded by RFC-0052 |
RFC-0022 | Default values for struct members | Partially implemented: only in HLCPP, Dart |
RFC-0051 | Safer structs for C++ | Rejected |
RFC-0062 | Method impossible | Rejected |
RFC-0053 | Epitaphs | Implemented |
RFC-0066 | Programmer advisory explicit defaults | Implemented |
RFC-0047 | Tables | Amended by RFC-0116, RFC-0132 |
RFC-0055 | Documentation comments | Amended by RFC-0043 |
RFC-0063 | OrdinalRange | Rejected; Superseded by RFC-0020 |
– | FIDL in FIDL | Unpublished; Protobuf can do this |
RFC-0056 | Empty structs | Implemented |
RFC-0058 | Introduce a deprecated attribute | Superseded by RFC-0083 |
RFC-0060 | Error handling | Implemented |
RFC-0061 | Extensible unions | Implemented |
RFC-0065 | No optional strings or vectors | Rejected |
RFC-0064 | Box<Knox> | Rejected; see also “FIDL large message support” |
– | Sequences | Unpublished; earlier version of “Streams” |
– | Streams | Unpublished; see also measure-tape (a pragmatic solution) |
RFC-0020 | Interface ordinal hashing | Implemented |
RFC-0021 | Soft transitions for methods add and remove | Implemented |
RFC-0023 | Compositional model for protocols | Implemented |
RFC-0045 | Zero-size empty structs | Rejected |
RFC-0025 | Bit flags | Implemented |
RFC-0026 | Envelopes everywhere | Rejected |
RFC-0027 | You only pay for what you use | Implemented |
RFC-0030 | FIDL is little endian | Implemented |
RFC-0031 | Typed epitaphs | Rejected |
RFC-0032 | Efficient envelopes | Rejected; Superseded by RFC-0113 |
RFC-0033 | Handling of unknown fields and strictness | Amended by RFC-0137 |
RFC-0034 | Null terminate strings | Rejected |
RFC-0029 | Increasing method ordinals | Superseded by RFC-0037 |
RFC-0035 | Automatic flow tracing | Rejected |
RFC-0036 | Update to struct declarations | Rejected |
RFC-0037 | Transactional message header v3 | Implemented |
RFC-0038 | Separating layout from constraints | Rejected; Superseded by RFC-0050 |
RFC-0039 | Types come second | Rejected; Superseded by RFC-0050 |
RFC-0028 | Handle rights | Implemented |
RFC-0042 | Non nullable types | Rejected (April Fools) |
RFC-0024 | Mandatory source compatibility | Implemented; see also source_compatibility |
RFC-0040 | Identifier uniqueness | Implemented (rejected at first, later accepted) |
RFC-0041 | Support for unifying services and devices | Partially implemented: only in C++, Rust |
RFC-0044 | Extensible method arguments | Rejected; Superseded by RFC-0087 |
RFC-0043 | Documentation comment format | Implemented |
– | Versioning | Unpublished; Superseded by RFC-0083 |
– | Required table fields | Unpublished |
RFC-0048 | Explicit union ordinals | Implemented |
RFC-0049 | FIDL tuning process evolution | Superseded by RFC-0017 |
– | Unified view of optionality | Unpublished |
– | Iterators | Unpublished; see also measure-tape (a pragmatic solution) |
RFC-0054 | Parameter attributes | Superseded by RFC-0050 |
RFC-0052 | Type aliasing and new types | Implementation in progress |
– | Restrict non-numeric floating point values | Unpublished |
– | Constant expressions | Unpublished |
RFC-0057 | Default no handles | Implemented |
RFC-0050 | Syntax revamp | Amended by RFC-0086, RFC-0087, [RFC-0088] |
– | FIDL text format | Unpublished |
RFC-0059 | Reserved bits in vector, string, and array count fields | Implemented; reserved bits no longer used by LLCPP |
RFC-0017 | The FTP Process is dead, long live the RFC Process! | Implemented |
– | FIDL Large message support | Withdrawn |
RFC-0076 | FIDL API summaries | Implemented |
RFC-0083 | FIDL versioning | Implementation in progress |
RFC-0086 | Updates to RFC-0050: FIDL attributes syntax | Implemented |
[RFC-0088] | Updates to RFC-0050: FIDL bits, enum, and constraints syntax | Rejected |
RFC-0087 | Updates to RFC-0050: FIDL method parameter syntax | Implementation in progress |
RFC-0097 | FIDL Toolchain | Implementation in progress |
RFC-0113 | Efficient envelopes | Implemented |
RFC-0114 | Inlining small values in FIDL envelopes | Implemented |
RFC-0116 | Wire format support for sparser FIDL tables | Rejected |
RFC-0120 | Standalone use of the FIDL wire format | Implementation in progress |
RFC-0131 | Design principles of the FIDL wire format | Implemented |
RFC-0132 | FIDL table size limit | Implemented |
RFC-0137 | Discard unknown data in FIDL | Implementation in progress |
RFC-0138 | Handling unknown interactions | Implementation in progress |
RFC-0149 | FIDL encode validation not mandatory | Implemented |
– | Remove support for FIDL struct defaults | In review |
– | Terminal events | In review |