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.
By theme
This section organizes FIDL RFCs by theme. Each RFC is listed once, under its primary theme, even if it touches on multiple themes.
Governance
- RFC-0018: FTP process: A modest proposal
- RFC-0049: FIDL tuning process evolution
- RFC-0017: The FTP Process is dead, long live the RFC Process!
- RFC-0131: Design principles of the FIDL wire format
Evolvability
- RFC-0047: Tables
- (Rejected) RFC-0063: OrdinalRange
- RFC-0058: Introduce a deprecated attribute
- RFC-0061: Extensible unions
- RFC-0020: Interface ordinal hashing
- RFC-0021: Soft transitions for methods add and remove
- RFC-0033: Handling of unknown fields and strictness
- RFC-0029: Increasing method ordinals
- RFC-0037: Transactional message header v3
- RFC-0024: Mandatory source compatibility
- RFC-0040: Identifier uniqueness
- RFC-0048: Explicit union ordinals
- RFC-0083: FIDL versioning
- (Rejected) RFC-0116: Wire format support for sparser FIDL tables
- RFC-0132: FIDL table size limit
- RFC-0138: Handling unknown interactions
Expressivity
- RFC-0019: Type aliases with using
- RFC-0022: Default values for struct members
- RFC-0066: Programmer advisory explicit defaults
- (Rejected) RFC-0065: No optional strings or vectors
- (Rejected) RFC-0064: Box<Knox>
- RFC-0023: Compositional model for protocols
- (Rejected) RFC-0042: Non nullable types
- RFC-0041: Support for unifying services and devices
- (Rejected) RFC-0044: Extensible method arguments
- RFC-0054: Parameter attributes
- RFC-0052: Type aliasing and new types
- RFC-0137: Discard unknown data in FIDL
- RFC-0160: Remove support for FIDL struct defaults
Syntax
- (Rejected) RFC-0036: Update to struct declarations
- (Rejected) RFC-0038: Separating layout from constraints
- (Rejected) RFC-0039: Types come second
- RFC-0050: Syntax revamp
- RFC-0086: Updates to RFC-0050: FIDL attributes syntax
- (Rejected) RFC-0088: Updates to RFC-0050: FIDL bits, enum, and constraints syntax
- RFC-0087: Updates to RFC-0050: FIDL method parameter syntax
Ergonomics
- RFC-0053: Epitaphs
- RFC-0056: Empty structs
- RFC-0060: Error handling
- RFC-0025: Bit flags
- (Rejected) RFC-0031: Typed epitaphs
- RFC-0057: Default no handles
- RFC-0196: FIDL large messages
Domain
Performance
- (Rejected) RFC-0045: Zero-size empty structs
- (Rejected) RFC-0026: Envelopes everywhere
- RFC-0027: You only pay for what you use
- (Rejected) RFC-0032: Efficient envelopes
- (Rejected) RFC-0035: Automatic flow tracing
- RFC-0113: Efficient envelopes
- RFC-0114: Inlining small values in FIDL envelopes
- RFC-0149: FIDL encode validation not mandatory
Safety & security
- (Rejected) RFC-0051: Safer structs for C++
- (Rejected) RFC-0062: Method impossible
- (Rejected) RFC-0034: Null terminate strings
- RFC-0028: Handle rights
Tooling
Documentation
Simplify design space
By language feature
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 |
---|---|---|
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 |
Current status
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 |
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 | Superseded by RFC-0160 |
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 |
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 |
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 |
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 |
– | 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; Superseded by RFC-0196 |
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 |
RFC-0160 | Remove support for FIDL struct defaults | Implemented |
RFC-0190 | FIDL support for syscalls | Implementation in progress |
RFC-0196 | FIDL large messages | Implementation in progress |
– | A JSON representation for FIDL | In review |
– | FIDL complex constants | In review |
– | FIDL language support plans | In review |
– | Terminal events | In review |