diff --git a/src/syscall/zx/fidl/bindingstest/impl.go b/src/syscall/zx/fidl/bindingstest/impl.go
index 4f5ecd8..3520df6 100644
--- a/src/syscall/zx/fidl/bindingstest/impl.go
+++ b/src/syscall/zx/fidl/bindingstest/impl.go
@@ -20,7 +20,7 @@
 )
 
 type TestSimple struct {
-	_ struct{} `fidl:"s,8,8" fidl2:"s,8,8"`
+	_ struct{} `fidl:"s,8,8" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"8"`
 	X int64    `fidl:"0"`
 }
 
@@ -31,7 +31,7 @@
 }
 
 type TestSimpleBool struct {
-	_ struct{} `fidl:"s,1,1" fidl2:"s,1,1"`
+	_ struct{} `fidl:"s,1,1" fidl_size_v1_no_ee:"1" fidl_alignment_v1_no_ee:"1"`
 	X bool     `fidl:"0"`
 }
 
@@ -42,7 +42,7 @@
 }
 
 type TestAlignment1 struct {
-	_ struct{} `fidl:"s,8,4" fidl2:"s,8,4"`
+	_ struct{} `fidl:"s,8,4" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"4"`
 	X int8     `fidl:"0"`
 	Y int8     `fidl:"1"`
 	Z uint32   `fidl:"4"`
@@ -55,7 +55,7 @@
 }
 
 type TestAlignment2 struct {
-	_ struct{} `fidl:"s,20,4" fidl2:"s,20,4"`
+	_ struct{} `fidl:"s,20,4" fidl_size_v1_no_ee:"20" fidl_alignment_v1_no_ee:"4"`
 	A uint32   `fidl:"0"`
 	B uint32   `fidl:"4"`
 	C int8     `fidl:"8"`
@@ -74,7 +74,7 @@
 }
 
 type TestFloat1 struct {
-	_ struct{} `fidl:"s,4,4" fidl2:"s,4,4"`
+	_ struct{} `fidl:"s,4,4" fidl_size_v1_no_ee:"4" fidl_alignment_v1_no_ee:"4"`
 	A float32  `fidl:"0"`
 }
 
@@ -85,7 +85,7 @@
 }
 
 type TestFloat2 struct {
-	_ struct{} `fidl:"s,8,8" fidl2:"s,8,8"`
+	_ struct{} `fidl:"s,8,8" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"8"`
 	A float64  `fidl:"0"`
 }
 
@@ -96,7 +96,7 @@
 }
 
 type TestFloat3 struct {
-	_ struct{} `fidl:"s,32,8" fidl2:"s,32,8"`
+	_ struct{} `fidl:"s,32,8" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"8"`
 	A float32  `fidl:"0"`
 	B float64  `fidl:"8"`
 	C uint64   `fidl:"16"`
@@ -110,7 +110,7 @@
 }
 
 type TestArray1 struct {
-	_ struct{} `fidl:"s,5,1" fidl2:"s,5,1"`
+	_ struct{} `fidl:"s,5,1" fidl_size_v1_no_ee:"5" fidl_alignment_v1_no_ee:"1"`
 	A [5]int8  `fidl:"0"`
 }
 
@@ -121,7 +121,7 @@
 }
 
 type TestArray2 struct {
-	_ struct{}   `fidl:"s,16,8" fidl2:"s,16,8"`
+	_ struct{}   `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	A float64    `fidl:"0"`
 	B [1]float32 `fidl:"8"`
 }
@@ -133,7 +133,7 @@
 }
 
 type TestArray3 struct {
-	_ struct{}  `fidl:"s,24,8" fidl2:"s,24,8"`
+	_ struct{}  `fidl:"s,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	A int32     `fidl:"0"`
 	B [3]uint16 `fidl:"4"`
 	C uint64    `fidl:"16"`
@@ -146,7 +146,7 @@
 }
 
 type TestArray4 struct {
-	_ struct{} `fidl:"s,9,1" fidl2:"s,9,1"`
+	_ struct{} `fidl:"s,9,1" fidl_size_v1_no_ee:"9" fidl_alignment_v1_no_ee:"1"`
 	A [9]bool  `fidl:"0"`
 }
 
@@ -157,7 +157,7 @@
 }
 
 type TestString1 struct {
-	_ struct{} `fidl:"s,32,8" fidl2:"s,32,8"`
+	_ struct{} `fidl:"s,32,8" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"8"`
 	A string   `fidl:"0,"`
 	B *string  `fidl:"16,"`
 }
@@ -169,7 +169,7 @@
 }
 
 type TestString2 struct {
-	_ struct{}  `fidl:"s,32,8" fidl2:"s,32,8"`
+	_ struct{}  `fidl:"s,32,8" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"8"`
 	A [2]string `fidl:"0,"`
 }
 
@@ -180,7 +180,7 @@
 }
 
 type TestString3 struct {
-	_ struct{}   `fidl:"s,64,8" fidl2:"s,64,8"`
+	_ struct{}   `fidl:"s,64,8" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"8"`
 	A [2]string  `fidl:"0,4" fidl2:"4"`
 	B [2]*string `fidl:"32,4" fidl2:"4"`
 }
@@ -192,7 +192,7 @@
 }
 
 type TestStringWithBound struct {
-	_ struct{} `fidl:"s,16,8" fidl2:"s,16,8"`
+	_ struct{} `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	A string   `fidl:"0,8" fidl2:"8"`
 }
 
@@ -203,7 +203,7 @@
 }
 
 type TestOptStringWithBound struct {
-	_ struct{} `fidl:"s,16,8" fidl2:"s,16,8"`
+	_ struct{} `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	A *string  `fidl:"0,8" fidl2:"8"`
 }
 
@@ -214,7 +214,7 @@
 }
 
 type TestVector1 struct {
-	_ struct{} `fidl:"s,64,8" fidl2:"s,64,8"`
+	_ struct{} `fidl:"s,64,8" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"8"`
 	A []int8   `fidl:"0,"`
 	B *[]int16 `fidl:"16,"`
 	C []int32  `fidl:"32,2" fidl2:"2"`
@@ -228,7 +228,7 @@
 }
 
 type TestVector2 struct {
-	_ struct{}    `fidl:"s,64,8" fidl2:"s,64,8"`
+	_ struct{}    `fidl:"s,64,8" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"8"`
 	A [2][]int8   `fidl:"0,"`
 	B [][]int8    `fidl:"32,2," fidl2:"2,"`
 	C []*[]string `fidl:"48,2,2,5" fidl2:"2,2,5"`
@@ -241,7 +241,7 @@
 }
 
 type TestStruct1 struct {
-	_ struct{}    `fidl:"s,16,8" fidl2:"s,16,8"`
+	_ struct{}    `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	A TestSimple  `fidl:"0"`
 	B *TestSimple `fidl:"8"`
 }
@@ -253,7 +253,7 @@
 }
 
 type TestStruct2 struct {
-	_ struct{}     `fidl:"s,88,8" fidl2:"s,88,8"`
+	_ struct{}     `fidl:"s,88,8" fidl_size_v1_no_ee:"88" fidl_alignment_v1_no_ee:"8"`
 	A TestArray1   `fidl:"0"`
 	B TestFloat1   `fidl:"8"`
 	C TestVector1  `fidl:"16"`
@@ -267,7 +267,7 @@
 }
 
 type EmptyStruct struct {
-	_ struct{} `fidl:"s,1,1" fidl2:"s,1,1"`
+	_ struct{} `fidl:"s,1,1" fidl_size_v1_no_ee:"1" fidl_alignment_v1_no_ee:"1"`
 }
 
 var _mEmptyStruct = _bindings.CreateLazyMarshaler(EmptyStruct{})
@@ -277,7 +277,7 @@
 }
 
 type TestUnion1 struct {
-	_ struct{} `fidl:"s,24,8" fidl2:"s,24,8"`
+	_ struct{} `fidl:"s,24,8" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"8"`
 	A Union1   `fidl:"0"`
 	B *Union1  `fidl:"16"`
 }
@@ -289,7 +289,7 @@
 }
 
 type TestUnion2 struct {
-	_ struct{}  `fidl:"s,32,8" fidl2:"s,32,8"`
+	_ struct{}  `fidl:"s,32,8" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"8"`
 	A []Union1  `fidl:"0,"`
 	B []*Union1 `fidl:"16,"`
 }
@@ -301,7 +301,7 @@
 }
 
 type XUnion1Struct struct {
-	_  struct{} `fidl:"s,24,8" fidl2:"s,24,8"`
+	_  struct{} `fidl:"s,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	Xu XUnion1  `fidl:"0"`
 }
 
@@ -312,7 +312,7 @@
 }
 
 type XUnion1AsUnionStruct struct {
-	_    struct{}       `fidl:"s,16,8" fidl2:"s,16,8"`
+	_    struct{}       `fidl:"s,16,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	Xuau XUnion1AsUnion `fidl:"0"`
 }
 
@@ -322,8 +322,30 @@
 	return _mXUnion1AsUnionStruct
 }
 
+type UnionInsideUnionStruct struct {
+	_ struct{}         `fidl:"s,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	U UnionInsideUnion `fidl:"0"`
+}
+
+var _mUnionInsideUnionStruct = _bindings.CreateLazyMarshaler(UnionInsideUnionStruct{})
+
+func (msg *UnionInsideUnionStruct) Marshaler() _bindings.Marshaler {
+	return _mUnionInsideUnionStruct
+}
+
+type XUnionInsideXUnionStruct struct {
+	_ struct{}           `fidl:"s,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	U XUnionInsideXUnion `fidl:"0"`
+}
+
+var _mXUnionInsideXUnionStruct = _bindings.CreateLazyMarshaler(XUnionInsideXUnionStruct{})
+
+func (msg *XUnionInsideXUnionStruct) Marshaler() _bindings.Marshaler {
+	return _mXUnionInsideXUnionStruct
+}
+
 type TestXUnion1 struct {
-	_ struct{} `fidl:"s,48,8" fidl2:"s,48,8"`
+	_ struct{} `fidl:"s,48,8" fidl_size_v1_no_ee:"48" fidl_alignment_v1_no_ee:"8"`
 	A XUnion1  `fidl:"0"`
 	B *XUnion1 `fidl:"24"`
 }
@@ -335,7 +357,7 @@
 }
 
 type TestXUnion2 struct {
-	_ struct{}   `fidl:"s,32,8" fidl2:"s,32,8"`
+	_ struct{}   `fidl:"s,32,8" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"8"`
 	A []XUnion1  `fidl:"0,"`
 	B []*XUnion1 `fidl:"16,"`
 }
@@ -347,7 +369,7 @@
 }
 
 type StrictXUnion1Struct struct {
-	_  struct{}      `fidl:"s,24,8" fidl2:"s,24,8"`
+	_  struct{}      `fidl:"s,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	Xu StrictXUnion1 `fidl:"0"`
 }
 
@@ -358,7 +380,7 @@
 }
 
 type TestStrictXUnion1 struct {
-	_ struct{}       `fidl:"s,48,8" fidl2:"s,48,8"`
+	_ struct{}       `fidl:"s,48,8" fidl_size_v1_no_ee:"48" fidl_alignment_v1_no_ee:"8"`
 	A StrictXUnion1  `fidl:"0"`
 	B *StrictXUnion1 `fidl:"24"`
 }
@@ -370,7 +392,7 @@
 }
 
 type TestStrictXUnion2 struct {
-	_ struct{}         `fidl:"s,32,8" fidl2:"s,32,8"`
+	_ struct{}         `fidl:"s,32,8" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"8"`
 	A []StrictXUnion1  `fidl:"0,"`
 	B []*StrictXUnion1 `fidl:"16,"`
 }
@@ -382,7 +404,7 @@
 }
 
 type TestHandle1 struct {
-	_ struct{}   `fidl:"s,16,4" fidl2:"s,16,4"`
+	_ struct{}   `fidl:"s,16,4" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"4"`
 	A _zx.Handle `fidl:"0,0" fidl2:"0"`
 	B _zx.Handle `fidl:"4,1" fidl2:"1"`
 	C _zx.VMO    `fidl:"8,0" fidl2:"0"`
@@ -396,7 +418,7 @@
 }
 
 type TestHandle2 struct {
-	_ struct{}     `fidl:"s,32,8" fidl2:"s,32,8"`
+	_ struct{}     `fidl:"s,32,8" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"8"`
 	A []_zx.Handle `fidl:"0,1,0" fidl2:"1,0"`
 	B []_zx.VMO    `fidl:"16,1,1" fidl2:"1,1"`
 }
@@ -408,7 +430,7 @@
 }
 
 type TestInterface1 struct {
-	_ struct{}              `fidl:"s,16,4" fidl2:"s,16,4"`
+	_ struct{}              `fidl:"s,16,4" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"4"`
 	A Test1Interface        `fidl:"0"`
 	B Test1Interface        `fidl:"4"`
 	C Test1InterfaceRequest `fidl:"8,0" fidl2:"0"`
@@ -422,7 +444,7 @@
 }
 
 type TestSimpleTable struct {
-	_     struct{}    `fidl:"s,16,8" fidl2:"s,16,8"`
+	_     struct{}    `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	Table SimpleTable `fidl:"0"`
 }
 
@@ -433,7 +455,7 @@
 }
 
 type TestOlderSimpleTable struct {
-	_     struct{}         `fidl:"s,16,8" fidl2:"s,16,8"`
+	_     struct{}         `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	Table OlderSimpleTable `fidl:"0"`
 }
 
@@ -444,7 +466,7 @@
 }
 
 type TestNewerSimpleTable struct {
-	_     struct{}         `fidl:"s,16,8" fidl2:"s,16,8"`
+	_     struct{}         `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	Table NewerSimpleTable `fidl:"0"`
 }
 
@@ -455,7 +477,7 @@
 }
 
 type TestWithTableAndInt struct {
-	_     struct{}    `fidl:"s,24,8" fidl2:"s,24,8"`
+	_     struct{}    `fidl:"s,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	Table SimpleTable `fidl:"0"`
 	Foo   uint64      `fidl:"16"`
 }
@@ -467,7 +489,7 @@
 }
 
 type Int64Struct struct {
-	_ struct{} `fidl:"s,8,8" fidl2:"s,8,8"`
+	_ struct{} `fidl:"s,8,8" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"8"`
 	X int64    `fidl:"0"`
 }
 
@@ -478,7 +500,7 @@
 }
 
 type TestFuchsiaIoReadAtResponse struct {
-	_    struct{} `fidl:"s,24,8" fidl2:"s,24,8"`
+	_    struct{} `fidl:"s,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	S    int32    `fidl:"0"`
 	Data []uint8  `fidl:"8,8192" fidl2:"8192"`
 }
@@ -490,7 +512,7 @@
 }
 
 type TestFuchsiaIoWriteAtRequest struct {
-	_      struct{} `fidl:"s,24,8" fidl2:"s,24,8"`
+	_      struct{} `fidl:"s,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	Data   []uint8  `fidl:"0,8192" fidl2:"8192"`
 	Offset uint64   `fidl:"16"`
 }
@@ -502,7 +524,7 @@
 }
 
 type InterfaceConfig struct {
-	_               struct{}        `fidl:"s,48,8" fidl2:"s,48,8"`
+	_               struct{}        `fidl:"s,48,8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
 	Name            string          `fidl:"0,"`
 	IpAddressConfig IpAddressConfig `fidl:"16"`
 }
@@ -514,7 +536,7 @@
 }
 
 type TestAddEthernetDeviceRequest struct {
-	_               struct{}                `fidl:"s,72,8" fidl2:"s,72,8"`
+	_               struct{}                `fidl:"s,72,8" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"8"`
 	TopologicalPath string                  `fidl:"0,"`
 	Config          InterfaceConfig         `fidl:"16"`
 	Device          EthernetDeviceInterface `fidl:"64"`
@@ -527,7 +549,7 @@
 }
 
 type TestPackageResolverResolveRequest struct {
-	_            struct{}                       `fidl:"s,40,8" fidl2:"s,40,8"`
+	_            struct{}                       `fidl:"s,40,8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
 	PackageUrl   string                         `fidl:"0,"`
 	Selectors    []string                       `fidl:"16,,"`
 	UpdatePolicy UpdatePolicy                   `fidl:"32"`
@@ -541,7 +563,7 @@
 }
 
 type UpdatePolicy struct {
-	_                struct{} `fidl:"s,2,1" fidl2:"s,2,1"`
+	_                struct{} `fidl:"s,2,1" fidl_size_v1_no_ee:"2" fidl_alignment_v1_no_ee:"1"`
 	FetchIfAbsent    bool     `fidl:"0"`
 	AllowOldVersions bool     `fidl:"1"`
 }
@@ -563,7 +585,7 @@
 )
 
 type Union1 struct {
-	I_union1Tag `fidl:"u,16,8" fidl2:"u,16,8"`
+	I_union1Tag `fidl:"u,16,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	A           [3]int8     `fidl:"1140208200"`
 	B           TestSimple  `fidl:"1101191659"`
 	C           *TestSimple `fidl:"310804024"`
@@ -628,7 +650,7 @@
 )
 
 type XUnion1AsUnion struct {
-	I_xUnion1AsUnionTag `fidl:"u,16,8" fidl2:"u,16,8"`
+	I_xUnion1AsUnionTag `fidl:"u,16,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	A                   [3]int8    `fidl:"1815116267"`
 	B                   TestSimple `fidl:"219568201"`
 	D                   float32    `fidl:"1047172132"`
@@ -671,6 +693,46 @@
 	return _u
 }
 
+type I_unionInsideUnionTag uint32
+
+const (
+	_ I_unionInsideUnionTag = iota
+	UnionInsideUnionA
+	UnionInsideUnionB
+)
+
+type UnionInsideUnion struct {
+	I_unionInsideUnionTag `fidl:"u,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	A                     float32        `fidl:"1274799307"`
+	B                     XUnion1AsUnion `fidl:"340650192"`
+}
+
+func (u *UnionInsideUnion) Which() I_unionInsideUnionTag {
+	return u.I_unionInsideUnionTag
+}
+
+func (u *UnionInsideUnion) SetA(a float32) {
+	u.I_unionInsideUnionTag = UnionInsideUnionA
+	u.A = a
+}
+
+func UnionInsideUnionWithA(a float32) UnionInsideUnion {
+	var _u UnionInsideUnion
+	_u.SetA(a)
+	return _u
+}
+
+func (u *UnionInsideUnion) SetB(b XUnion1AsUnion) {
+	u.I_unionInsideUnionTag = UnionInsideUnionB
+	u.B = b
+}
+
+func UnionInsideUnionWithB(b XUnion1AsUnion) UnionInsideUnion {
+	var _u UnionInsideUnion
+	_u.SetB(b)
+	return _u
+}
+
 type I_simpleUnionTag uint32
 
 const (
@@ -683,7 +745,7 @@
 )
 
 type SimpleUnion struct {
-	I_simpleUnionTag `fidl:"u,24,8" fidl2:"u,24,8"`
+	I_simpleUnionTag `fidl:"u,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	I32              int32        `fidl:"2133387115"`
 	I64              int64        `fidl:"809723265"`
 	S                Int64Struct  `fidl:"1133668882"`
@@ -759,7 +821,7 @@
 )
 
 type IpAddressConfig struct {
-	I_ipAddressConfigTag `fidl:"u,28,4" fidl2:"u,28,4"`
+	I_ipAddressConfigTag `fidl:"u,28,4" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	PaddingSize24Align4  [6]uint32 `fidl:"1850696643"`
 	Dhcp                 bool      `fidl:"500027731"`
 }
@@ -800,7 +862,7 @@
 )
 
 type XUnion1 struct {
-	I_xUnion1Tag  `fidl:"x,24,8" fidl2:"x,24,8"`
+	I_xUnion1Tag  `fidl:"x,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	I_unknownData []byte
 	A             [3]int8    `fidl:"416714395" fidl2:"416714395"`
 	B             TestSimple `fidl:"863456686" fidl2:"863456686"`
@@ -857,6 +919,58 @@
 	return _u
 }
 
+type I_xUnionInsideXUnionTag uint32
+
+const (
+	XUnionInsideXUnion_unknownData = 0          // 0x00000000
+	XUnionInsideXUnionA            = 1100463121 // 0x4197bc11
+	XUnionInsideXUnionB            = 796211677  // 0x2f7539dd
+)
+
+type XUnionInsideXUnion struct {
+	I_xUnionInsideXUnionTag `fidl:"x,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	I_unknownData           []byte
+	A                       float32 `fidl:"1100463121" fidl2:"1100463121"`
+	B                       XUnion1 `fidl:"796211677" fidl2:"796211677"`
+}
+
+func (_m *XUnionInsideXUnion) Which() I_xUnionInsideXUnionTag {
+	switch _m.I_xUnionInsideXUnionTag {
+	case 1100463121:
+		return XUnionInsideXUnionA
+	case 796211677:
+		return XUnionInsideXUnionB
+	default:
+		return XUnionInsideXUnion_unknownData
+	}
+}
+
+func (_m *XUnionInsideXUnion) Ordinal() uint32 {
+	return uint32(_m.I_xUnionInsideXUnionTag)
+}
+
+func (_m *XUnionInsideXUnion) SetA(a float32) {
+	_m.I_xUnionInsideXUnionTag = XUnionInsideXUnionA
+	_m.A = a
+}
+
+func XUnionInsideXUnionWithA(a float32) XUnionInsideXUnion {
+	var _u XUnionInsideXUnion
+	_u.SetA(a)
+	return _u
+}
+
+func (_m *XUnionInsideXUnion) SetB(b XUnion1) {
+	_m.I_xUnionInsideXUnionTag = XUnionInsideXUnionB
+	_m.B = b
+}
+
+func XUnionInsideXUnionWithB(b XUnion1) XUnionInsideXUnion {
+	var _u XUnionInsideXUnion
+	_u.SetB(b)
+	return _u
+}
+
 type I_strictXUnion1Tag uint32
 
 const (
@@ -866,8 +980,7 @@
 )
 
 type StrictXUnion1 struct {
-	I_strictXUnion1Tag `fidl:"x!,24,8" fidl2:"x!,24,8"`
-	I_unknownData      []byte
+	I_strictXUnion1Tag `fidl:"x!,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	A                  [3]int8    `fidl:"1988029217" fidl2:"1988029217"`
 	B                  TestSimple `fidl:"1259078458" fidl2:"1259078458"`
 	D                  float32    `fidl:"881204552" fidl2:"881204552"`
@@ -915,7 +1028,7 @@
 }
 
 type SimpleTable struct {
-	_        struct{} `fidl:"t,16,8" fidl2:"t,16,8"`
+	_        struct{} `fidl:"t,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	X        int64    `fidl:"1" fidl2:"1"`
 	XPresent bool
 	Y        int64 `fidl:"5" fidl2:"5"`
@@ -971,7 +1084,7 @@
 }
 
 type OlderSimpleTable struct {
-	_        struct{} `fidl:"t,16,8" fidl2:"t,16,8"`
+	_        struct{} `fidl:"t,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	X        int64    `fidl:"1" fidl2:"1"`
 	XPresent bool
 }
@@ -1001,7 +1114,7 @@
 }
 
 type NewerSimpleTable struct {
-	_        struct{} `fidl:"t,16,8" fidl2:"t,16,8"`
+	_        struct{} `fidl:"t,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	X        int64    `fidl:"1" fidl2:"1"`
 	XPresent bool
 	Y        int64 `fidl:"5" fidl2:"5"`
@@ -1094,7 +1207,7 @@
 )
 
 type test1EchoRequest struct {
-	_  struct{} `fidl:"s,16,0" fidl2:"s,16,0"`
+	_  struct{} `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	In *string  `fidl:"0,"`
 }
 
@@ -1105,7 +1218,7 @@
 }
 
 type test1EchoResponse struct {
-	_   struct{} `fidl:"s,16,0" fidl2:"s,16,0"`
+	_   struct{} `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	Out *string  `fidl:"0,"`
 }
 
@@ -1116,7 +1229,7 @@
 }
 
 type test1SurpriseResponse struct {
-	_   struct{} `fidl:"s,16,0" fidl2:"s,16,0"`
+	_   struct{} `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	Foo string   `fidl:"0,"`
 }
 
diff --git a/src/syscall/zx/fidl/bindingstest/test.test.fidl b/src/syscall/zx/fidl/bindingstest/test.test.fidl
index c60bc85..e03fbb2 100644
--- a/src/syscall/zx/fidl/bindingstest/test.test.fidl
+++ b/src/syscall/zx/fidl/bindingstest/test.test.fidl
@@ -152,6 +152,24 @@
     XUnion1AsUnion xuau;
 };
 
+union UnionInsideUnion {
+    float32 a;
+    XUnion1AsUnion b;
+};
+
+struct UnionInsideUnionStruct {
+    UnionInsideUnion u;
+};
+
+xunion XUnionInsideXUnion {
+    float32 a;
+    XUnion1 b;
+};
+
+struct XUnionInsideXUnionStruct {
+    XUnionInsideXUnion u;
+};
+
 struct TestXUnion1 {
     XUnion1 a;
     XUnion1? b;
diff --git a/src/syscall/zx/fidl/conformance/impl.go b/src/syscall/zx/fidl/conformance/impl.go
index 39bc0c4..a5adbc1 100644
--- a/src/syscall/zx/fidl/conformance/impl.go
+++ b/src/syscall/zx/fidl/conformance/impl.go
@@ -16,8 +16,333 @@
 	_bindings "syscall/zx/fidl"
 )
 
+type MyBool struct {
+	_     struct{} `fidl:"s,1,1" fidl_size_v1_no_ee:"1" fidl_alignment_v1_no_ee:"1"`
+	Value bool     `fidl:"0"`
+}
+
+var _mMyBool = _bindings.CreateLazyMarshaler(MyBool{})
+
+func (msg *MyBool) Marshaler() _bindings.Marshaler {
+	return _mMyBool
+}
+
+type MyByte struct {
+	_     struct{} `fidl:"s,1,1" fidl_size_v1_no_ee:"1" fidl_alignment_v1_no_ee:"1"`
+	Value uint8    `fidl:"0"`
+}
+
+var _mMyByte = _bindings.CreateLazyMarshaler(MyByte{})
+
+func (msg *MyByte) Marshaler() _bindings.Marshaler {
+	return _mMyByte
+}
+
+type MyInt8 struct {
+	_     struct{} `fidl:"s,1,1" fidl_size_v1_no_ee:"1" fidl_alignment_v1_no_ee:"1"`
+	Value int8     `fidl:"0"`
+}
+
+var _mMyInt8 = _bindings.CreateLazyMarshaler(MyInt8{})
+
+func (msg *MyInt8) Marshaler() _bindings.Marshaler {
+	return _mMyInt8
+}
+
+type MyInt16 struct {
+	_     struct{} `fidl:"s,2,2" fidl_size_v1_no_ee:"2" fidl_alignment_v1_no_ee:"2"`
+	Value int16    `fidl:"0"`
+}
+
+var _mMyInt16 = _bindings.CreateLazyMarshaler(MyInt16{})
+
+func (msg *MyInt16) Marshaler() _bindings.Marshaler {
+	return _mMyInt16
+}
+
+type MyInt32 struct {
+	_     struct{} `fidl:"s,4,4" fidl_size_v1_no_ee:"4" fidl_alignment_v1_no_ee:"4"`
+	Value int32    `fidl:"0"`
+}
+
+var _mMyInt32 = _bindings.CreateLazyMarshaler(MyInt32{})
+
+func (msg *MyInt32) Marshaler() _bindings.Marshaler {
+	return _mMyInt32
+}
+
+type MyInt64 struct {
+	_     struct{} `fidl:"s,8,8" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"8"`
+	Value int64    `fidl:"0"`
+}
+
+var _mMyInt64 = _bindings.CreateLazyMarshaler(MyInt64{})
+
+func (msg *MyInt64) Marshaler() _bindings.Marshaler {
+	return _mMyInt64
+}
+
+type MyUint8 struct {
+	_     struct{} `fidl:"s,1,1" fidl_size_v1_no_ee:"1" fidl_alignment_v1_no_ee:"1"`
+	Value uint8    `fidl:"0"`
+}
+
+var _mMyUint8 = _bindings.CreateLazyMarshaler(MyUint8{})
+
+func (msg *MyUint8) Marshaler() _bindings.Marshaler {
+	return _mMyUint8
+}
+
+type MyUint16 struct {
+	_     struct{} `fidl:"s,2,2" fidl_size_v1_no_ee:"2" fidl_alignment_v1_no_ee:"2"`
+	Value uint16   `fidl:"0"`
+}
+
+var _mMyUint16 = _bindings.CreateLazyMarshaler(MyUint16{})
+
+func (msg *MyUint16) Marshaler() _bindings.Marshaler {
+	return _mMyUint16
+}
+
+type MyUint32 struct {
+	_     struct{} `fidl:"s,4,4" fidl_size_v1_no_ee:"4" fidl_alignment_v1_no_ee:"4"`
+	Value uint32   `fidl:"0"`
+}
+
+var _mMyUint32 = _bindings.CreateLazyMarshaler(MyUint32{})
+
+func (msg *MyUint32) Marshaler() _bindings.Marshaler {
+	return _mMyUint32
+}
+
+type MyUint64 struct {
+	_     struct{} `fidl:"s,8,8" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"8"`
+	Value uint64   `fidl:"0"`
+}
+
+var _mMyUint64 = _bindings.CreateLazyMarshaler(MyUint64{})
+
+func (msg *MyUint64) Marshaler() _bindings.Marshaler {
+	return _mMyUint64
+}
+
+type MyFloat32 struct {
+	_     struct{} `fidl:"s,4,4" fidl_size_v1_no_ee:"4" fidl_alignment_v1_no_ee:"4"`
+	Value float32  `fidl:"0"`
+}
+
+var _mMyFloat32 = _bindings.CreateLazyMarshaler(MyFloat32{})
+
+func (msg *MyFloat32) Marshaler() _bindings.Marshaler {
+	return _mMyFloat32
+}
+
+type MyFloat64 struct {
+	_     struct{} `fidl:"s,8,8" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"8"`
+	Value float64  `fidl:"0"`
+}
+
+var _mMyFloat64 = _bindings.CreateLazyMarshaler(MyFloat64{})
+
+func (msg *MyFloat64) Marshaler() _bindings.Marshaler {
+	return _mMyFloat64
+}
+
+type ThreeByte struct {
+	_     struct{} `fidl:"s,3,1" fidl_size_v1_no_ee:"3" fidl_alignment_v1_no_ee:"1"`
+	Elem1 uint8    `fidl:"0"`
+	Elem2 uint8    `fidl:"1"`
+	Elem3 uint8    `fidl:"2"`
+}
+
+var _mThreeByte = _bindings.CreateLazyMarshaler(ThreeByte{})
+
+func (msg *ThreeByte) Marshaler() _bindings.Marshaler {
+	return _mThreeByte
+}
+
+type FiveByte struct {
+	_     struct{} `fidl:"s,8,4" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"4"`
+	Elem1 uint32   `fidl:"0"`
+	Elem2 uint8    `fidl:"4"`
+}
+
+var _mFiveByte = _bindings.CreateLazyMarshaler(FiveByte{})
+
+func (msg *FiveByte) Marshaler() _bindings.Marshaler {
+	return _mFiveByte
+}
+
+type ThreeByteInStruct struct {
+	_     struct{}  `fidl:"s,9,1" fidl_size_v1_no_ee:"9" fidl_alignment_v1_no_ee:"1"`
+	Elem1 ThreeByte `fidl:"0"`
+	Elem2 ThreeByte `fidl:"3"`
+	Elem3 ThreeByte `fidl:"6"`
+}
+
+var _mThreeByteInStruct = _bindings.CreateLazyMarshaler(ThreeByteInStruct{})
+
+func (msg *ThreeByteInStruct) Marshaler() _bindings.Marshaler {
+	return _mThreeByteInStruct
+}
+
+type FiveByteInStruct struct {
+	_     struct{} `fidl:"s,24,4" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"4"`
+	Elem1 FiveByte `fidl:"0"`
+	Elem2 FiveByte `fidl:"8"`
+	Elem3 FiveByte `fidl:"16"`
+}
+
+var _mFiveByteInStruct = _bindings.CreateLazyMarshaler(FiveByteInStruct{})
+
+func (msg *FiveByteInStruct) Marshaler() _bindings.Marshaler {
+	return _mFiveByteInStruct
+}
+
+type ThreeByteInVector struct {
+	_     struct{}    `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Elems []ThreeByte `fidl:"0,"`
+}
+
+var _mThreeByteInVector = _bindings.CreateLazyMarshaler(ThreeByteInVector{})
+
+func (msg *ThreeByteInVector) Marshaler() _bindings.Marshaler {
+	return _mThreeByteInVector
+}
+
+type FiveByteInVector struct {
+	_     struct{}   `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Elems []FiveByte `fidl:"0,"`
+}
+
+var _mFiveByteInVector = _bindings.CreateLazyMarshaler(FiveByteInVector{})
+
+func (msg *FiveByteInVector) Marshaler() _bindings.Marshaler {
+	return _mFiveByteInVector
+}
+
+type ThreeByteInArray struct {
+	_     struct{}     `fidl:"s,9,1" fidl_size_v1_no_ee:"9" fidl_alignment_v1_no_ee:"1"`
+	Elems [3]ThreeByte `fidl:"0"`
+}
+
+var _mThreeByteInArray = _bindings.CreateLazyMarshaler(ThreeByteInArray{})
+
+func (msg *ThreeByteInArray) Marshaler() _bindings.Marshaler {
+	return _mThreeByteInArray
+}
+
+type FiveByteInArray struct {
+	_     struct{}    `fidl:"s,24,4" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"4"`
+	Elems [3]FiveByte `fidl:"0"`
+}
+
+var _mFiveByteInArray = _bindings.CreateLazyMarshaler(FiveByteInArray{})
+
+func (msg *FiveByteInArray) Marshaler() _bindings.Marshaler {
+	return _mFiveByteInArray
+}
+
+type Int64Struct struct {
+	_ struct{} `fidl:"s,8,8" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"8"`
+	X int64    `fidl:"0"`
+}
+
+var _mInt64Struct = _bindings.CreateLazyMarshaler(Int64Struct{})
+
+func (msg *Int64Struct) Marshaler() _bindings.Marshaler {
+	return _mInt64Struct
+}
+
+type TestInlineXUnionInStruct struct {
+	_      struct{}     `fidl:"s,56,8" fidl_size_v1_no_ee:"56" fidl_alignment_v1_no_ee:"8"`
+	Before string       `fidl:"0,"`
+	Xu     SampleXUnion `fidl:"16"`
+	After  string       `fidl:"40,"`
+}
+
+var _mTestInlineXUnionInStruct = _bindings.CreateLazyMarshaler(TestInlineXUnionInStruct{})
+
+func (msg *TestInlineXUnionInStruct) Marshaler() _bindings.Marshaler {
+	return _mTestInlineXUnionInStruct
+}
+
+type TestOptionalXUnionInStruct struct {
+	_      struct{}      `fidl:"s,56,8" fidl_size_v1_no_ee:"56" fidl_alignment_v1_no_ee:"8"`
+	Before string        `fidl:"0,"`
+	Xu     *SampleXUnion `fidl:"16"`
+	After  string        `fidl:"40,"`
+}
+
+var _mTestOptionalXUnionInStruct = _bindings.CreateLazyMarshaler(TestOptionalXUnionInStruct{})
+
+func (msg *TestOptionalXUnionInStruct) Marshaler() _bindings.Marshaler {
+	return _mTestOptionalXUnionInStruct
+}
+
+type TestStrictXUnionInStruct struct {
+	_  struct{}           `fidl:"s,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Xu SampleStrictXUnion `fidl:"0"`
+}
+
+var _mTestStrictXUnionInStruct = _bindings.CreateLazyMarshaler(TestStrictXUnionInStruct{})
+
+func (msg *TestStrictXUnionInStruct) Marshaler() _bindings.Marshaler {
+	return _mTestStrictXUnionInStruct
+}
+
+type TestFlexibleXUnionInStruct struct {
+	_  struct{}     `fidl:"s,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Xu SampleXUnion `fidl:"0"`
+}
+
+var _mTestFlexibleXUnionInStruct = _bindings.CreateLazyMarshaler(TestFlexibleXUnionInStruct{})
+
+func (msg *TestFlexibleXUnionInStruct) Marshaler() _bindings.Marshaler {
+	return _mTestFlexibleXUnionInStruct
+}
+
+type Length2StringWrapper struct {
+	_             struct{} `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Length2String string   `fidl:"0,2" fidl2:"2"`
+}
+
+var _mLength2StringWrapper = _bindings.CreateLazyMarshaler(Length2StringWrapper{})
+
+func (msg *Length2StringWrapper) Marshaler() _bindings.Marshaler {
+	return _mLength2StringWrapper
+}
+
+type StringWrapper struct {
+	_   struct{} `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Str string   `fidl:"0,"`
+}
+
+var _mStringWrapper = _bindings.CreateLazyMarshaler(StringWrapper{})
+
+func (msg *StringWrapper) Marshaler() _bindings.Marshaler {
+	return _mStringWrapper
+}
+
+type StructWithOptionals struct {
+	_   struct{}               `fidl:"s,104,8" fidl_size_v1_no_ee:"112" fidl_alignment_v1_no_ee:"8"`
+	S   EmptyStruct            `fidl:"0"`
+	S2  *EmptyStruct           `fidl:"8"`
+	T   TableWithEmptyStruct   `fidl:"16"`
+	Xu  XUnionWithEmptyStruct  `fidl:"32"`
+	Xu2 *XUnionWithEmptyStruct `fidl:"56"`
+	U   UnionWithEmptyStruct   `fidl:"80"`
+	U2  *UnionWithEmptyStruct  `fidl:"96"`
+}
+
+var _mStructWithOptionals = _bindings.CreateLazyMarshaler(StructWithOptionals{})
+
+func (msg *StructWithOptionals) Marshaler() _bindings.Marshaler {
+	return _mStructWithOptionals
+}
+
 type TestXUnionInTable struct {
-	_     struct{}      `fidl:"s,16,8" fidl2:"s,16,8"`
+	_     struct{}      `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	Value XUnionInTable `fidl:"0"`
 }
 
@@ -28,7 +353,7 @@
 }
 
 type InterfaceConfig struct {
-	_               struct{}        `fidl:"s,48,8" fidl2:"s,48,8"`
+	_               struct{}        `fidl:"s,48,8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
 	Name            string          `fidl:"0,"`
 	IpAddressConfig IpAddressConfig `fidl:"16"`
 }
@@ -40,7 +365,7 @@
 }
 
 type TestAddEthernetDeviceRequest struct {
-	_                   struct{}        `fidl:"s,72,8" fidl2:"s,72,8"`
+	_                   struct{}        `fidl:"s,72,8" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"8"`
 	TopologicalPath     string          `fidl:"0,"`
 	Config              InterfaceConfig `fidl:"16"`
 	ThisShouldBeAHandle uint32          `fidl:"64"`
@@ -53,7 +378,7 @@
 }
 
 type NodeAttributes struct {
-	_                struct{} `fidl:"s,56,8" fidl2:"s,56,8"`
+	_                struct{} `fidl:"s,56,8" fidl_size_v1_no_ee:"56" fidl_alignment_v1_no_ee:"8"`
 	Mode             uint32   `fidl:"0"`
 	Id               uint64   `fidl:"8"`
 	ContentSize      uint64   `fidl:"16"`
@@ -70,7 +395,7 @@
 }
 
 type FileGetAttrResponse struct {
-	_          struct{}       `fidl:"s,64,8" fidl2:"s,64,8"`
+	_          struct{}       `fidl:"s,64,8" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"8"`
 	S          int32          `fidl:"0"`
 	Attributes NodeAttributes `fidl:"8"`
 }
@@ -82,7 +407,7 @@
 }
 
 type UnionWithBoundStringStruct struct {
-	_ struct{}             `fidl:"s,24,8" fidl2:"s,24,8"`
+	_ struct{}             `fidl:"s,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	V UnionWithBoundString `fidl:"0"`
 }
 
@@ -92,8 +417,93 @@
 	return _mUnionWithBoundStringStruct
 }
 
+type EmptyStruct struct {
+	_ struct{} `fidl:"s,1,1" fidl_size_v1_no_ee:"1" fidl_alignment_v1_no_ee:"1"`
+}
+
+var _mEmptyStruct = _bindings.CreateLazyMarshaler(EmptyStruct{})
+
+func (msg *EmptyStruct) Marshaler() _bindings.Marshaler {
+	return _mEmptyStruct
+}
+
+type EmptyStructSandwich struct {
+	_      struct{}    `fidl:"s,40,8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
+	Before string      `fidl:"0,"`
+	Es     EmptyStruct `fidl:"16"`
+	After  string      `fidl:"24,"`
+}
+
+var _mEmptyStructSandwich = _bindings.CreateLazyMarshaler(EmptyStructSandwich{})
+
+func (msg *EmptyStructSandwich) Marshaler() _bindings.Marshaler {
+	return _mEmptyStructSandwich
+}
+
+type Uint8Uint16Uint32Uint64 struct {
+	_  struct{} `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	F1 uint8    `fidl:"0"`
+	F2 uint16   `fidl:"2"`
+	F3 uint32   `fidl:"4"`
+	F4 uint64   `fidl:"8"`
+}
+
+var _mUint8Uint16Uint32Uint64 = _bindings.CreateLazyMarshaler(Uint8Uint16Uint32Uint64{})
+
+func (msg *Uint8Uint16Uint32Uint64) Marshaler() _bindings.Marshaler {
+	return _mUint8Uint16Uint32Uint64
+}
+
+type Uint64Uint32Uint16Uint8 struct {
+	_  struct{} `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	F1 uint64   `fidl:"0"`
+	F2 uint32   `fidl:"8"`
+	F3 uint16   `fidl:"12"`
+	F4 uint8    `fidl:"14"`
+}
+
+var _mUint64Uint32Uint16Uint8 = _bindings.CreateLazyMarshaler(Uint64Uint32Uint16Uint8{})
+
+func (msg *Uint64Uint32Uint16Uint8) Marshaler() _bindings.Marshaler {
+	return _mUint64Uint32Uint16Uint8
+}
+
+type StructOfSimpleTable struct {
+	_     struct{}    `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Table SimpleTable `fidl:"0"`
+}
+
+var _mStructOfSimpleTable = _bindings.CreateLazyMarshaler(StructOfSimpleTable{})
+
+func (msg *StructOfSimpleTable) Marshaler() _bindings.Marshaler {
+	return _mStructOfSimpleTable
+}
+
+type SimpleTableThenUint64 struct {
+	_      struct{}    `fidl:"s,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Table  SimpleTable `fidl:"0"`
+	Number uint64      `fidl:"16"`
+}
+
+var _mSimpleTableThenUint64 = _bindings.CreateLazyMarshaler(SimpleTableThenUint64{})
+
+func (msg *SimpleTableThenUint64) Marshaler() _bindings.Marshaler {
+	return _mSimpleTableThenUint64
+}
+
+type StructOfTableWithStringAndVector struct {
+	_     struct{}                 `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Table TableWithStringAndVector `fidl:"0"`
+}
+
+var _mStructOfTableWithStringAndVector = _bindings.CreateLazyMarshaler(StructOfTableWithStringAndVector{})
+
+func (msg *StructOfTableWithStringAndVector) Marshaler() _bindings.Marshaler {
+	return _mStructOfTableWithStringAndVector
+}
+
 type StructWithInt struct {
-	_ struct{} `fidl:"s,4,4" fidl2:"s,4,4"`
+	_ struct{} `fidl:"s,4,4" fidl_size_v1_no_ee:"4" fidl_alignment_v1_no_ee:"4"`
 	X int32    `fidl:"0"`
 }
 
@@ -104,7 +514,7 @@
 }
 
 type StructWithArrays struct {
-	_                 struct{}          `fidl:"s,120,8" fidl2:"s,120,8"`
+	_                 struct{}          `fidl:"s,120,8" fidl_size_v1_no_ee:"120" fidl_alignment_v1_no_ee:"8"`
 	ArrInt            [2]int32          `fidl:"0"`
 	ArrString         [2]string         `fidl:"8,"`
 	ArrNullableString [2]*string        `fidl:"40,"`
@@ -120,7 +530,7 @@
 }
 
 type StructWithVectors struct {
-	_                 struct{}         `fidl:"s,112,8" fidl2:"s,112,8"`
+	_                 struct{}         `fidl:"s,112,8" fidl_size_v1_no_ee:"112" fidl_alignment_v1_no_ee:"8"`
 	VecEmpty          []int32          `fidl:"0,"`
 	VecInt            []int32          `fidl:"16,"`
 	VecString         []string         `fidl:"32,,"`
@@ -136,523 +546,6 @@
 	return _mStructWithVectors
 }
 
-type EmptyStruct struct {
-	_ struct{} `fidl:"s,1,1" fidl2:"s,1,1"`
-}
-
-var _mEmptyStruct = _bindings.CreateLazyMarshaler(EmptyStruct{})
-
-func (msg *EmptyStruct) Marshaler() _bindings.Marshaler {
-	return _mEmptyStruct
-}
-
-type EmptyStructSandwich struct {
-	_      struct{}    `fidl:"s,40,8" fidl2:"s,40,8"`
-	Before string      `fidl:"0,"`
-	Es     EmptyStruct `fidl:"16"`
-	After  string      `fidl:"24,"`
-}
-
-var _mEmptyStructSandwich = _bindings.CreateLazyMarshaler(EmptyStructSandwich{})
-
-func (msg *EmptyStructSandwich) Marshaler() _bindings.Marshaler {
-	return _mEmptyStructSandwich
-}
-
-type Uint8Uint16Uint32Uint64 struct {
-	_  struct{} `fidl:"s,16,8" fidl2:"s,16,8"`
-	F1 uint8    `fidl:"0"`
-	F2 uint16   `fidl:"2"`
-	F3 uint32   `fidl:"4"`
-	F4 uint64   `fidl:"8"`
-}
-
-var _mUint8Uint16Uint32Uint64 = _bindings.CreateLazyMarshaler(Uint8Uint16Uint32Uint64{})
-
-func (msg *Uint8Uint16Uint32Uint64) Marshaler() _bindings.Marshaler {
-	return _mUint8Uint16Uint32Uint64
-}
-
-type Uint64Uint32Uint16Uint8 struct {
-	_  struct{} `fidl:"s,16,8" fidl2:"s,16,8"`
-	F1 uint64   `fidl:"0"`
-	F2 uint32   `fidl:"8"`
-	F3 uint16   `fidl:"12"`
-	F4 uint8    `fidl:"14"`
-}
-
-var _mUint64Uint32Uint16Uint8 = _bindings.CreateLazyMarshaler(Uint64Uint32Uint16Uint8{})
-
-func (msg *Uint64Uint32Uint16Uint8) Marshaler() _bindings.Marshaler {
-	return _mUint64Uint32Uint16Uint8
-}
-
-type Length2StringWrapper struct {
-	_             struct{} `fidl:"s,16,8" fidl2:"s,16,8"`
-	Length2String string   `fidl:"0,2" fidl2:"2"`
-}
-
-var _mLength2StringWrapper = _bindings.CreateLazyMarshaler(Length2StringWrapper{})
-
-func (msg *Length2StringWrapper) Marshaler() _bindings.Marshaler {
-	return _mLength2StringWrapper
-}
-
-type StringWrapper struct {
-	_   struct{} `fidl:"s,16,8" fidl2:"s,16,8"`
-	Str string   `fidl:"0,"`
-}
-
-var _mStringWrapper = _bindings.CreateLazyMarshaler(StringWrapper{})
-
-func (msg *StringWrapper) Marshaler() _bindings.Marshaler {
-	return _mStringWrapper
-}
-
-type StructOfSimpleTable struct {
-	_     struct{}    `fidl:"s,16,8" fidl2:"s,16,8"`
-	Table SimpleTable `fidl:"0"`
-}
-
-var _mStructOfSimpleTable = _bindings.CreateLazyMarshaler(StructOfSimpleTable{})
-
-func (msg *StructOfSimpleTable) Marshaler() _bindings.Marshaler {
-	return _mStructOfSimpleTable
-}
-
-type SimpleTableThenUint64 struct {
-	_      struct{}    `fidl:"s,24,8" fidl2:"s,24,8"`
-	Table  SimpleTable `fidl:"0"`
-	Number uint64      `fidl:"16"`
-}
-
-var _mSimpleTableThenUint64 = _bindings.CreateLazyMarshaler(SimpleTableThenUint64{})
-
-func (msg *SimpleTableThenUint64) Marshaler() _bindings.Marshaler {
-	return _mSimpleTableThenUint64
-}
-
-type StructOfTableWithStringAndVector struct {
-	_     struct{}                 `fidl:"s,16,8" fidl2:"s,16,8"`
-	Table TableWithStringAndVector `fidl:"0"`
-}
-
-var _mStructOfTableWithStringAndVector = _bindings.CreateLazyMarshaler(StructOfTableWithStringAndVector{})
-
-func (msg *StructOfTableWithStringAndVector) Marshaler() _bindings.Marshaler {
-	return _mStructOfTableWithStringAndVector
-}
-
-type ThreeByte struct {
-	_     struct{} `fidl:"s,3,1" fidl2:"s,3,1"`
-	Elem1 uint8    `fidl:"0"`
-	Elem2 uint8    `fidl:"1"`
-	Elem3 uint8    `fidl:"2"`
-}
-
-var _mThreeByte = _bindings.CreateLazyMarshaler(ThreeByte{})
-
-func (msg *ThreeByte) Marshaler() _bindings.Marshaler {
-	return _mThreeByte
-}
-
-type FiveByte struct {
-	_     struct{} `fidl:"s,8,4" fidl2:"s,8,4"`
-	Elem1 uint32   `fidl:"0"`
-	Elem2 uint8    `fidl:"4"`
-}
-
-var _mFiveByte = _bindings.CreateLazyMarshaler(FiveByte{})
-
-func (msg *FiveByte) Marshaler() _bindings.Marshaler {
-	return _mFiveByte
-}
-
-type ThreeByteInStruct struct {
-	_     struct{}  `fidl:"s,9,1" fidl2:"s,9,1"`
-	Elem1 ThreeByte `fidl:"0"`
-	Elem2 ThreeByte `fidl:"3"`
-	Elem3 ThreeByte `fidl:"6"`
-}
-
-var _mThreeByteInStruct = _bindings.CreateLazyMarshaler(ThreeByteInStruct{})
-
-func (msg *ThreeByteInStruct) Marshaler() _bindings.Marshaler {
-	return _mThreeByteInStruct
-}
-
-type FiveByteInStruct struct {
-	_     struct{} `fidl:"s,24,4" fidl2:"s,24,4"`
-	Elem1 FiveByte `fidl:"0"`
-	Elem2 FiveByte `fidl:"8"`
-	Elem3 FiveByte `fidl:"16"`
-}
-
-var _mFiveByteInStruct = _bindings.CreateLazyMarshaler(FiveByteInStruct{})
-
-func (msg *FiveByteInStruct) Marshaler() _bindings.Marshaler {
-	return _mFiveByteInStruct
-}
-
-type ThreeByteInVector struct {
-	_     struct{}    `fidl:"s,16,8" fidl2:"s,16,8"`
-	Elems []ThreeByte `fidl:"0,"`
-}
-
-var _mThreeByteInVector = _bindings.CreateLazyMarshaler(ThreeByteInVector{})
-
-func (msg *ThreeByteInVector) Marshaler() _bindings.Marshaler {
-	return _mThreeByteInVector
-}
-
-type FiveByteInVector struct {
-	_     struct{}   `fidl:"s,16,8" fidl2:"s,16,8"`
-	Elems []FiveByte `fidl:"0,"`
-}
-
-var _mFiveByteInVector = _bindings.CreateLazyMarshaler(FiveByteInVector{})
-
-func (msg *FiveByteInVector) Marshaler() _bindings.Marshaler {
-	return _mFiveByteInVector
-}
-
-type ThreeByteInArray struct {
-	_     struct{}     `fidl:"s,9,1" fidl2:"s,9,1"`
-	Elems [3]ThreeByte `fidl:"0"`
-}
-
-var _mThreeByteInArray = _bindings.CreateLazyMarshaler(ThreeByteInArray{})
-
-func (msg *ThreeByteInArray) Marshaler() _bindings.Marshaler {
-	return _mThreeByteInArray
-}
-
-type FiveByteInArray struct {
-	_     struct{}    `fidl:"s,24,4" fidl2:"s,24,4"`
-	Elems [3]FiveByte `fidl:"0"`
-}
-
-var _mFiveByteInArray = _bindings.CreateLazyMarshaler(FiveByteInArray{})
-
-func (msg *FiveByteInArray) Marshaler() _bindings.Marshaler {
-	return _mFiveByteInArray
-}
-
-type MyBool struct {
-	_     struct{} `fidl:"s,1,1" fidl2:"s,1,1"`
-	Value bool     `fidl:"0"`
-}
-
-var _mMyBool = _bindings.CreateLazyMarshaler(MyBool{})
-
-func (msg *MyBool) Marshaler() _bindings.Marshaler {
-	return _mMyBool
-}
-
-type MyByte struct {
-	_     struct{} `fidl:"s,1,1" fidl2:"s,1,1"`
-	Value uint8    `fidl:"0"`
-}
-
-var _mMyByte = _bindings.CreateLazyMarshaler(MyByte{})
-
-func (msg *MyByte) Marshaler() _bindings.Marshaler {
-	return _mMyByte
-}
-
-type MyInt8 struct {
-	_     struct{} `fidl:"s,1,1" fidl2:"s,1,1"`
-	Value int8     `fidl:"0"`
-}
-
-var _mMyInt8 = _bindings.CreateLazyMarshaler(MyInt8{})
-
-func (msg *MyInt8) Marshaler() _bindings.Marshaler {
-	return _mMyInt8
-}
-
-type MyInt16 struct {
-	_     struct{} `fidl:"s,2,2" fidl2:"s,2,2"`
-	Value int16    `fidl:"0"`
-}
-
-var _mMyInt16 = _bindings.CreateLazyMarshaler(MyInt16{})
-
-func (msg *MyInt16) Marshaler() _bindings.Marshaler {
-	return _mMyInt16
-}
-
-type MyInt32 struct {
-	_     struct{} `fidl:"s,4,4" fidl2:"s,4,4"`
-	Value int32    `fidl:"0"`
-}
-
-var _mMyInt32 = _bindings.CreateLazyMarshaler(MyInt32{})
-
-func (msg *MyInt32) Marshaler() _bindings.Marshaler {
-	return _mMyInt32
-}
-
-type MyInt64 struct {
-	_     struct{} `fidl:"s,8,8" fidl2:"s,8,8"`
-	Value int64    `fidl:"0"`
-}
-
-var _mMyInt64 = _bindings.CreateLazyMarshaler(MyInt64{})
-
-func (msg *MyInt64) Marshaler() _bindings.Marshaler {
-	return _mMyInt64
-}
-
-type MyUint8 struct {
-	_     struct{} `fidl:"s,1,1" fidl2:"s,1,1"`
-	Value uint8    `fidl:"0"`
-}
-
-var _mMyUint8 = _bindings.CreateLazyMarshaler(MyUint8{})
-
-func (msg *MyUint8) Marshaler() _bindings.Marshaler {
-	return _mMyUint8
-}
-
-type MyUint16 struct {
-	_     struct{} `fidl:"s,2,2" fidl2:"s,2,2"`
-	Value uint16   `fidl:"0"`
-}
-
-var _mMyUint16 = _bindings.CreateLazyMarshaler(MyUint16{})
-
-func (msg *MyUint16) Marshaler() _bindings.Marshaler {
-	return _mMyUint16
-}
-
-type MyUint32 struct {
-	_     struct{} `fidl:"s,4,4" fidl2:"s,4,4"`
-	Value uint32   `fidl:"0"`
-}
-
-var _mMyUint32 = _bindings.CreateLazyMarshaler(MyUint32{})
-
-func (msg *MyUint32) Marshaler() _bindings.Marshaler {
-	return _mMyUint32
-}
-
-type MyUint64 struct {
-	_     struct{} `fidl:"s,8,8" fidl2:"s,8,8"`
-	Value uint64   `fidl:"0"`
-}
-
-var _mMyUint64 = _bindings.CreateLazyMarshaler(MyUint64{})
-
-func (msg *MyUint64) Marshaler() _bindings.Marshaler {
-	return _mMyUint64
-}
-
-type MyFloat32 struct {
-	_     struct{} `fidl:"s,4,4" fidl2:"s,4,4"`
-	Value float32  `fidl:"0"`
-}
-
-var _mMyFloat32 = _bindings.CreateLazyMarshaler(MyFloat32{})
-
-func (msg *MyFloat32) Marshaler() _bindings.Marshaler {
-	return _mMyFloat32
-}
-
-type MyFloat64 struct {
-	_     struct{} `fidl:"s,8,8" fidl2:"s,8,8"`
-	Value float64  `fidl:"0"`
-}
-
-var _mMyFloat64 = _bindings.CreateLazyMarshaler(MyFloat64{})
-
-func (msg *MyFloat64) Marshaler() _bindings.Marshaler {
-	return _mMyFloat64
-}
-
-type StructWithOptionals struct {
-	_   struct{}               `fidl:"s,104,8" fidl2:"s,104,8"`
-	S   EmptyStruct            `fidl:"0"`
-	S2  *EmptyStruct           `fidl:"8"`
-	T   TableWithEmptyStruct   `fidl:"16"`
-	Xu  XUnionWithEmptyStruct  `fidl:"32"`
-	Xu2 *XUnionWithEmptyStruct `fidl:"56"`
-	U   UnionWithEmptyStruct   `fidl:"80"`
-	U2  *UnionWithEmptyStruct  `fidl:"96"`
-}
-
-var _mStructWithOptionals = _bindings.CreateLazyMarshaler(StructWithOptionals{})
-
-func (msg *StructWithOptionals) Marshaler() _bindings.Marshaler {
-	return _mStructWithOptionals
-}
-
-type Int64Struct struct {
-	_ struct{} `fidl:"s,8,8" fidl2:"s,8,8"`
-	X int64    `fidl:"0"`
-}
-
-var _mInt64Struct = _bindings.CreateLazyMarshaler(Int64Struct{})
-
-func (msg *Int64Struct) Marshaler() _bindings.Marshaler {
-	return _mInt64Struct
-}
-
-type TestInlineXUnionInStruct struct {
-	_      struct{}     `fidl:"s,56,8" fidl2:"s,56,8"`
-	Before string       `fidl:"0,"`
-	Xu     SampleXUnion `fidl:"16"`
-	After  string       `fidl:"40,"`
-}
-
-var _mTestInlineXUnionInStruct = _bindings.CreateLazyMarshaler(TestInlineXUnionInStruct{})
-
-func (msg *TestInlineXUnionInStruct) Marshaler() _bindings.Marshaler {
-	return _mTestInlineXUnionInStruct
-}
-
-type TestOptionalXUnionInStruct struct {
-	_      struct{}      `fidl:"s,56,8" fidl2:"s,56,8"`
-	Before string        `fidl:"0,"`
-	Xu     *SampleXUnion `fidl:"16"`
-	After  string        `fidl:"40,"`
-}
-
-var _mTestOptionalXUnionInStruct = _bindings.CreateLazyMarshaler(TestOptionalXUnionInStruct{})
-
-func (msg *TestOptionalXUnionInStruct) Marshaler() _bindings.Marshaler {
-	return _mTestOptionalXUnionInStruct
-}
-
-type TestStrictXUnionInStruct struct {
-	_  struct{}           `fidl:"s,24,8" fidl2:"s,24,8"`
-	Xu SampleStrictXUnion `fidl:"0"`
-}
-
-var _mTestStrictXUnionInStruct = _bindings.CreateLazyMarshaler(TestStrictXUnionInStruct{})
-
-func (msg *TestStrictXUnionInStruct) Marshaler() _bindings.Marshaler {
-	return _mTestStrictXUnionInStruct
-}
-
-type TestFlexibleXUnionInStruct struct {
-	_  struct{}     `fidl:"s,24,8" fidl2:"s,24,8"`
-	Xu SampleXUnion `fidl:"0"`
-}
-
-var _mTestFlexibleXUnionInStruct = _bindings.CreateLazyMarshaler(TestFlexibleXUnionInStruct{})
-
-func (msg *TestFlexibleXUnionInStruct) Marshaler() _bindings.Marshaler {
-	return _mTestFlexibleXUnionInStruct
-}
-
-type I_ipAddressConfigTag uint32
-
-const (
-	_ I_ipAddressConfigTag = iota
-	IpAddressConfigPaddingSize24Align4
-	IpAddressConfigDhcp
-)
-
-type IpAddressConfig struct {
-	I_ipAddressConfigTag `fidl:"u,28,4" fidl2:"u,28,4"`
-	PaddingSize24Align4  [6]uint32 `fidl:"1136452149"`
-	Dhcp                 bool      `fidl:"1619238975"`
-}
-
-func (u *IpAddressConfig) Which() I_ipAddressConfigTag {
-	return u.I_ipAddressConfigTag
-}
-
-func (u *IpAddressConfig) SetPaddingSize24Align4(paddingSize24Align4 [6]uint32) {
-	u.I_ipAddressConfigTag = IpAddressConfigPaddingSize24Align4
-	u.PaddingSize24Align4 = paddingSize24Align4
-}
-
-func IpAddressConfigWithPaddingSize24Align4(paddingSize24Align4 [6]uint32) IpAddressConfig {
-	var _u IpAddressConfig
-	_u.SetPaddingSize24Align4(paddingSize24Align4)
-	return _u
-}
-
-func (u *IpAddressConfig) SetDhcp(dhcp bool) {
-	u.I_ipAddressConfigTag = IpAddressConfigDhcp
-	u.Dhcp = dhcp
-}
-
-func IpAddressConfigWithDhcp(dhcp bool) IpAddressConfig {
-	var _u IpAddressConfig
-	_u.SetDhcp(dhcp)
-	return _u
-}
-
-type I_unionWithBoundStringTag uint32
-
-const (
-	_ I_unionWithBoundStringTag = iota
-	UnionWithBoundStringBoundFiveStr
-)
-
-type UnionWithBoundString struct {
-	I_unionWithBoundStringTag `fidl:"u,24,8" fidl2:"u,24,8"`
-	BoundFiveStr              string `fidl:"921366385,5"`
-}
-
-func (u *UnionWithBoundString) Which() I_unionWithBoundStringTag {
-	return u.I_unionWithBoundStringTag
-}
-
-func (u *UnionWithBoundString) SetBoundFiveStr(boundFiveStr string) {
-	u.I_unionWithBoundStringTag = UnionWithBoundStringBoundFiveStr
-	u.BoundFiveStr = boundFiveStr
-}
-
-func UnionWithBoundStringWithBoundFiveStr(boundFiveStr string) UnionWithBoundString {
-	var _u UnionWithBoundString
-	_u.SetBoundFiveStr(boundFiveStr)
-	return _u
-}
-
-type I_unionWithEmptyStructTag uint32
-
-const (
-	_ I_unionWithEmptyStructTag = iota
-	UnionWithEmptyStructS
-	UnionWithEmptyStructForceAlignmentOf8
-)
-
-type UnionWithEmptyStruct struct {
-	I_unionWithEmptyStructTag `fidl:"u,16,8" fidl2:"u,16,8"`
-	S                         EmptyStruct `fidl:"2012545430"`
-	ForceAlignmentOf8         uint64      `fidl:"919083790"`
-}
-
-func (u *UnionWithEmptyStruct) Which() I_unionWithEmptyStructTag {
-	return u.I_unionWithEmptyStructTag
-}
-
-func (u *UnionWithEmptyStruct) SetS(s EmptyStruct) {
-	u.I_unionWithEmptyStructTag = UnionWithEmptyStructS
-	u.S = s
-}
-
-func UnionWithEmptyStructWithS(s EmptyStruct) UnionWithEmptyStruct {
-	var _u UnionWithEmptyStruct
-	_u.SetS(s)
-	return _u
-}
-
-func (u *UnionWithEmptyStruct) SetForceAlignmentOf8(forceAlignmentOf8 uint64) {
-	u.I_unionWithEmptyStructTag = UnionWithEmptyStructForceAlignmentOf8
-	u.ForceAlignmentOf8 = forceAlignmentOf8
-}
-
-func UnionWithEmptyStructWithForceAlignmentOf8(forceAlignmentOf8 uint64) UnionWithEmptyStruct {
-	var _u UnionWithEmptyStruct
-	_u.SetForceAlignmentOf8(forceAlignmentOf8)
-	return _u
-}
-
 type I_simpleUnionTag uint32
 
 const (
@@ -660,15 +553,17 @@
 	SimpleUnionI32
 	SimpleUnionI64
 	SimpleUnionS
+	SimpleUnionOs
 	SimpleUnionStr
 )
 
 type SimpleUnion struct {
-	I_simpleUnionTag `fidl:"u,24,8" fidl2:"u,24,8"`
-	I32              int32       `fidl:"1667828146"`
-	I64              int64       `fidl:"1110539033"`
-	S                Int64Struct `fidl:"684890561"`
-	Str              string      `fidl:"498325473,"`
+	I_simpleUnionTag `fidl:"u,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	I32              int32        `fidl:"1667828146"`
+	I64              int64        `fidl:"1110539033"`
+	S                Int64Struct  `fidl:"684890561"`
+	Os               *Int64Struct `fidl:"1501363482"`
+	Str              string       `fidl:"498325473,"`
 }
 
 func (u *SimpleUnion) Which() I_simpleUnionTag {
@@ -708,6 +603,17 @@
 	return _u
 }
 
+func (u *SimpleUnion) SetOs(os *Int64Struct) {
+	u.I_simpleUnionTag = SimpleUnionOs
+	u.Os = os
+}
+
+func SimpleUnionWithOs(os *Int64Struct) SimpleUnion {
+	var _u SimpleUnion
+	_u.SetOs(os)
+	return _u
+}
+
 func (u *SimpleUnion) SetStr(str string) {
 	u.I_simpleUnionTag = SimpleUnionStr
 	u.Str = str
@@ -719,43 +625,113 @@
 	return _u
 }
 
-type I_xUnionWithEmptyStructTag uint32
+type I_unionWithEmptyStructTag uint32
 
 const (
-	XUnionWithEmptyStruct_unknownData = 0          // 0x00000000
-	XUnionWithEmptyStructS            = 1956241662 // 0x7499e0fe
+	_ I_unionWithEmptyStructTag = iota
+	UnionWithEmptyStructS
+	UnionWithEmptyStructS2
 )
 
-type XUnionWithEmptyStruct struct {
-	I_xUnionWithEmptyStructTag `fidl:"x,24,8" fidl2:"x,24,8"`
-	I_unknownData              []byte
-	S                          EmptyStruct `fidl:"1956241662" fidl2:"1956241662"`
+type UnionWithEmptyStruct struct {
+	I_unionWithEmptyStructTag `fidl:"u,16,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	S                         EmptyStruct  `fidl:"2012545430"`
+	S2                        *EmptyStruct `fidl:"1404939714"`
 }
 
-func (_m *XUnionWithEmptyStruct) Which() I_xUnionWithEmptyStructTag {
-	switch _m.I_xUnionWithEmptyStructTag {
-	case 1956241662:
-		return XUnionWithEmptyStructS
-	default:
-		return XUnionWithEmptyStruct_unknownData
-	}
+func (u *UnionWithEmptyStruct) Which() I_unionWithEmptyStructTag {
+	return u.I_unionWithEmptyStructTag
 }
 
-func (_m *XUnionWithEmptyStruct) Ordinal() uint32 {
-	return uint32(_m.I_xUnionWithEmptyStructTag)
+func (u *UnionWithEmptyStruct) SetS(s EmptyStruct) {
+	u.I_unionWithEmptyStructTag = UnionWithEmptyStructS
+	u.S = s
 }
 
-func (_m *XUnionWithEmptyStruct) SetS(s EmptyStruct) {
-	_m.I_xUnionWithEmptyStructTag = XUnionWithEmptyStructS
-	_m.S = s
-}
-
-func XUnionWithEmptyStructWithS(s EmptyStruct) XUnionWithEmptyStruct {
-	var _u XUnionWithEmptyStruct
+func UnionWithEmptyStructWithS(s EmptyStruct) UnionWithEmptyStruct {
+	var _u UnionWithEmptyStruct
 	_u.SetS(s)
 	return _u
 }
 
+func (u *UnionWithEmptyStruct) SetS2(s2 *EmptyStruct) {
+	u.I_unionWithEmptyStructTag = UnionWithEmptyStructS2
+	u.S2 = s2
+}
+
+func UnionWithEmptyStructWithS2(s2 *EmptyStruct) UnionWithEmptyStruct {
+	var _u UnionWithEmptyStruct
+	_u.SetS2(s2)
+	return _u
+}
+
+type I_ipAddressConfigTag uint32
+
+const (
+	_ I_ipAddressConfigTag = iota
+	IpAddressConfigPaddingSize24Align4
+	IpAddressConfigDhcp
+)
+
+type IpAddressConfig struct {
+	I_ipAddressConfigTag `fidl:"u,28,4" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	PaddingSize24Align4  [6]uint32 `fidl:"1136452149"`
+	Dhcp                 bool      `fidl:"1619238975"`
+}
+
+func (u *IpAddressConfig) Which() I_ipAddressConfigTag {
+	return u.I_ipAddressConfigTag
+}
+
+func (u *IpAddressConfig) SetPaddingSize24Align4(paddingSize24Align4 [6]uint32) {
+	u.I_ipAddressConfigTag = IpAddressConfigPaddingSize24Align4
+	u.PaddingSize24Align4 = paddingSize24Align4
+}
+
+func IpAddressConfigWithPaddingSize24Align4(paddingSize24Align4 [6]uint32) IpAddressConfig {
+	var _u IpAddressConfig
+	_u.SetPaddingSize24Align4(paddingSize24Align4)
+	return _u
+}
+
+func (u *IpAddressConfig) SetDhcp(dhcp bool) {
+	u.I_ipAddressConfigTag = IpAddressConfigDhcp
+	u.Dhcp = dhcp
+}
+
+func IpAddressConfigWithDhcp(dhcp bool) IpAddressConfig {
+	var _u IpAddressConfig
+	_u.SetDhcp(dhcp)
+	return _u
+}
+
+type I_unionWithBoundStringTag uint32
+
+const (
+	_ I_unionWithBoundStringTag = iota
+	UnionWithBoundStringBoundFiveStr
+)
+
+type UnionWithBoundString struct {
+	I_unionWithBoundStringTag `fidl:"u,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	BoundFiveStr              string `fidl:"921366385,5"`
+}
+
+func (u *UnionWithBoundString) Which() I_unionWithBoundStringTag {
+	return u.I_unionWithBoundStringTag
+}
+
+func (u *UnionWithBoundString) SetBoundFiveStr(boundFiveStr string) {
+	u.I_unionWithBoundStringTag = UnionWithBoundStringBoundFiveStr
+	u.BoundFiveStr = boundFiveStr
+}
+
+func UnionWithBoundStringWithBoundFiveStr(boundFiveStr string) UnionWithBoundString {
+	var _u UnionWithBoundString
+	_u.SetBoundFiveStr(boundFiveStr)
+	return _u
+}
+
 type I_sampleXUnionTag uint32
 
 const (
@@ -766,7 +742,7 @@
 )
 
 type SampleXUnion struct {
-	I_sampleXUnionTag `fidl:"x,24,8" fidl2:"x,24,8"`
+	I_sampleXUnionTag `fidl:"x,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	I_unknownData     []byte
 	U                 uint32      `fidl:"949769906" fidl2:"949769906"`
 	Su                SimpleUnion `fidl:"2033143581" fidl2:"2033143581"`
@@ -832,7 +808,7 @@
 )
 
 type SampleStrictXUnion struct {
-	I_sampleStrictXUnionTag `fidl:"x!,24,8" fidl2:"x!,24,8"`
+	I_sampleStrictXUnionTag `fidl:"x!,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	U                       uint32      `fidl:"149088882" fidl2:"149088882"`
 	Su                      SimpleUnion `fidl:"670279483" fidl2:"670279483"`
 	St                      SimpleTable `fidl:"925062383" fidl2:"925062383"`
@@ -879,8 +855,75 @@
 	return _u
 }
 
+type I_xUnionWithEmptyStructTag uint32
+
+const (
+	XUnionWithEmptyStruct_unknownData = 0          // 0x00000000
+	XUnionWithEmptyStructS            = 1956241662 // 0x7499e0fe
+)
+
+type XUnionWithEmptyStruct struct {
+	I_xUnionWithEmptyStructTag `fidl:"x,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	I_unknownData              []byte
+	S                          EmptyStruct `fidl:"1956241662" fidl2:"1956241662"`
+}
+
+func (_m *XUnionWithEmptyStruct) Which() I_xUnionWithEmptyStructTag {
+	switch _m.I_xUnionWithEmptyStructTag {
+	case 1956241662:
+		return XUnionWithEmptyStructS
+	default:
+		return XUnionWithEmptyStruct_unknownData
+	}
+}
+
+func (_m *XUnionWithEmptyStruct) Ordinal() uint32 {
+	return uint32(_m.I_xUnionWithEmptyStructTag)
+}
+
+func (_m *XUnionWithEmptyStruct) SetS(s EmptyStruct) {
+	_m.I_xUnionWithEmptyStructTag = XUnionWithEmptyStructS
+	_m.S = s
+}
+
+func XUnionWithEmptyStructWithS(s EmptyStruct) XUnionWithEmptyStruct {
+	var _u XUnionWithEmptyStruct
+	_u.SetS(s)
+	return _u
+}
+
+type TableWithEmptyStruct struct {
+	_        struct{}    `fidl:"t,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	S        EmptyStruct `fidl:"1" fidl2:"1"`
+	SPresent bool
+}
+
+func (u *TableWithEmptyStruct) SetS(s EmptyStruct) {
+	u.S = s
+	u.SPresent = true
+}
+
+func (u *TableWithEmptyStruct) GetS() EmptyStruct {
+	return u.S
+}
+
+func (u *TableWithEmptyStruct) GetSWithDefault(_default EmptyStruct) EmptyStruct {
+	if !u.HasS() {
+		return _default
+	}
+	return u.S
+}
+
+func (u *TableWithEmptyStruct) HasS() bool {
+	return u.SPresent
+}
+
+func (u *TableWithEmptyStruct) ClearS() {
+	u.SPresent = false
+}
+
 type XUnionInTable struct {
-	_             struct{} `fidl:"t,16,8" fidl2:"t,16,8"`
+	_             struct{} `fidl:"t,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	Before        string   `fidl:"1," fidl2:"1,"`
 	BeforePresent bool
 	Xu            SampleXUnion `fidl:"2" fidl2:"2"`
@@ -962,7 +1005,7 @@
 }
 
 type SimpleTable struct {
-	_        struct{} `fidl:"t,16,8" fidl2:"t,16,8"`
+	_        struct{} `fidl:"t,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	X        int64    `fidl:"1" fidl2:"1"`
 	XPresent bool
 	Y        int64 `fidl:"5" fidl2:"5"`
@@ -1018,7 +1061,7 @@
 }
 
 type TableWithStringAndVector struct {
-	_          struct{} `fidl:"t,16,8" fidl2:"t,16,8"`
+	_          struct{} `fidl:"t,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	Foo        string   `fidl:"1," fidl2:"1,"`
 	FooPresent bool
 	Bar        int32 `fidl:"2" fidl2:"2"`
@@ -1099,36 +1142,6 @@
 	u.BazPresent = false
 }
 
-type TableWithEmptyStruct struct {
-	_        struct{}    `fidl:"t,16,8" fidl2:"t,16,8"`
-	S        EmptyStruct `fidl:"1" fidl2:"1"`
-	SPresent bool
-}
-
-func (u *TableWithEmptyStruct) SetS(s EmptyStruct) {
-	u.S = s
-	u.SPresent = true
-}
-
-func (u *TableWithEmptyStruct) GetS() EmptyStruct {
-	return u.S
-}
-
-func (u *TableWithEmptyStruct) GetSWithDefault(_default EmptyStruct) EmptyStruct {
-	if !u.HasS() {
-		return _default
-	}
-	return u.S
-}
-
-func (u *TableWithEmptyStruct) HasS() bool {
-	return u.SPresent
-}
-
-func (u *TableWithEmptyStruct) ClearS() {
-	u.SPresent = false
-}
-
 type EthernetDeviceInterface _bindings.ChannelProxy
 
 type EthernetDevice interface {
diff --git a/src/syscall/zx/fidl/encoding_new.go b/src/syscall/zx/fidl/encoding_new.go
index 69e73f3..4bb11a9 100644
--- a/src/syscall/zx/fidl/encoding_new.go
+++ b/src/syscall/zx/fidl/encoding_new.go
@@ -71,9 +71,14 @@
 	m.delegate = MustCreateMarshaler(m.sample)
 }
 
-func (m *lazyMarshaler) getSize() int {
+func (m *lazyMarshaler) getMarshalSize(ctx MarshalerContext) int {
 	m.once.Do(m.init)
-	return m.delegate.getSize()
+	return m.delegate.getMarshalSize(ctx)
+}
+
+func (m *lazyMarshaler) getUnmarshalSize(ctx MarshalerContext) int {
+	m.once.Do(m.init)
+	return m.delegate.getUnmarshalSize(ctx)
 }
 
 func (m *lazyMarshaler) marshal(ctx MarshalerContext, v reflect.Value, out *encoder) error {
@@ -88,21 +93,25 @@
 
 // Marshal marshals (or encodes) a message into the data and handles slices.
 func Marshal(message Message, data []byte, handles []zx.Handle) (int, int, error) {
+	return MarshalWithContext(MarshalerContext{}, message, data, handles)
+}
+
+// Marshal marshals (or encodes) a message into the data and handles slices.
+func MarshalWithContext(ctx MarshalerContext, message Message, data []byte, handles []zx.Handle) (int, int, error) {
 	// By construction, we know that message is a pointer to a struct since
 	// we only generate pointer receiver methods for top-level messages.
 	// Should one implement the interface differently, and call into this
 	// code, it would fail in an obsure way withing relfection. Just don't do
 	// that.
 	var (
-		v   = reflect.ValueOf(message).Elem()
-		m   = message.Marshaler()
-		ctx = MarshalerContext{}
+		v = reflect.ValueOf(message).Elem()
+		m = message.Marshaler()
 	)
 
 	// Now, let's get the value of s, marshal the header into a starting
 	// buffer, and then marshal the rest of the payload in s.
 	out := &encoder{buffer: data[:0], handles: handles[:0]}
-	out.head = out.newObject(m.getSize())
+	out.head = out.newObject(m.getMarshalSize(ctx))
 	if err := m.marshal(ctx, v, out); err != nil {
 		return 0, 0, err
 	}
@@ -115,8 +124,6 @@
 	return UnmarshalWithContext(MarshalerContext{}, data, handles, message)
 }
 
-// UnmarshalWithConext is currently used only for transitioning from union to xunion.
-// The context, however, may be useful at a later date.
 func UnmarshalWithContext(ctx MarshalerContext, data []byte, handles []zx.Handle, message Message) (int, int, error) {
 	// By construction, we know that message is a pointer to a struct since
 	// we only generate pointer receiver methods for top-level messages.
@@ -129,7 +136,7 @@
 	)
 
 	// Get the payload's value and unmarshal it.
-	nextObject := align(m.getSize(), 8)
+	nextObject := align(m.getUnmarshalSize(ctx), 8)
 	in := &decoder{
 		buffer:     data,
 		handles:    handles,
@@ -142,6 +149,8 @@
 }
 
 const tagKey = "fidl"
+const tagSizeV1NoEE = "fidl_size_v1_no_ee"
+const tagAlignmentV1NoEE = "fidl_alignment_v1_no_ee"
 
 type tagKind int
 
@@ -174,14 +183,15 @@
 
 func createMarshaler(typ reflect.Type) (Marshaler, error) {
 	// field 0 holds the tag
-	marshalerKind, marshalerBounds := readTag(typ.Field(0))
+	tagField := typ.Field(0)
+	marshalerKind, marshalerBounds := readTag(tagField)
 	var (
-		kind      = marshalerKind
-		size      = marshalerBounds[0]
-		alignment = marshalerBounds[1]
-		fields    []mField
-		ordinals  []int
-		offsets   []int
+		kind         = marshalerKind
+		sizeOld      = marshalerBounds[0]
+		alignmentOld = marshalerBounds[1]
+		fields       []mField
+		ordinals     []int
+		offsets      []int
 	)
 	// field 1 and up are the actual data fields
 	// - structs, unions, and xunions have fields one after the other;
@@ -213,6 +223,15 @@
 		}
 	}
 
+	sizeV1NoEE, err := readIntTag(tagField, tagSizeV1NoEE)
+	if err != nil {
+		return nil, errors.New("error creating marshaller for " + typ.String() + ": " + err.Error())
+	}
+	alignmentV1NoEE, err := readIntTag(tagField, tagAlignmentV1NoEE)
+	if err != nil {
+		return nil, errors.New("error creating marshaller for " + typ.String() + ": " + err.Error())
+	}
+
 	switch kind {
 	case structTag:
 		if len(fields) == 0 {
@@ -227,16 +246,20 @@
 			})
 		}
 		return mStruct{
-			fields:    structFields,
-			size:      size,
-			alignment: alignment,
+			fields:          structFields,
+			sizeOld:         sizeOld,
+			alignmentOld:    alignmentOld,
+			sizeV1NoEE:      sizeV1NoEE,
+			alignmentV1NoEE: alignmentV1NoEE,
 		}, nil
 	case unionTag:
 		return mUnion{
-			fields:    fields,
-			ordinals:  ordinals,
-			size:      size,
-			alignment: alignment,
+			fields:          fields,
+			ordinals:        ordinals,
+			sizeOld:         sizeOld,
+			alignmentOld:    alignmentOld,
+			sizeV1NoEE:      sizeV1NoEE,
+			alignmentV1NoEE: alignmentV1NoEE,
 		}, nil
 	case xunionTag, strictXunionTag:
 		strictness := strictness(kind == strictXunionTag)
@@ -246,23 +269,39 @@
 			ordinalToFields[ordinals[i]] = fields[i]
 		}
 		return mXUnion{
-			fields:     ordinalToFields,
-			size:       size,
-			alignment:  alignment,
-			strictness: strictness,
+			fields:          ordinalToFields,
+			sizeOld:         sizeOld,
+			alignmentOld:    alignmentOld,
+			sizeV1NoEE:      sizeV1NoEE,
+			alignmentV1NoEE: alignmentV1NoEE,
+			strictness:      strictness,
 		}, nil
 	case tableTag:
 		return mTable{
-			fields:    fields,
-			size:      size,
-			alignment: alignment,
-			ordinals:  ordinals,
+			fields:          fields,
+			sizeOld:         sizeOld,
+			alignmentOld:    alignmentOld,
+			sizeV1NoEE:      sizeV1NoEE,
+			alignmentV1NoEE: alignmentV1NoEE,
+			ordinals:        ordinals,
 		}, nil
 	default:
 		return nil, errors.New("missing kind marker on " + nicefmt(typ))
 	}
 }
 
+func readIntTag(field reflect.StructField, tagKey string) (int, error) {
+	content, ok := field.Tag.Lookup(tagKey)
+	if !ok {
+		return 0, errors.New("tag " + tagKey + " not found")
+	}
+	res, err := strconv.ParseInt(content, 0, 64)
+	if err != nil {
+		return 0, errors.New("error parsing int body from tag " + tagKey + " " + err.Error())
+	}
+	return int(res), nil
+}
+
 // readTag reads a fidl tag which can be one of
 //
 //     s,size,alignment   -- marking a struct, with its size, and alignment
@@ -426,11 +465,15 @@
 }
 
 type MarshalerContext struct {
-	DecodeUnionsFromXunionBytes bool
+	DecodeUnionsFromXUnionBytes bool
+	EncodeUnionsAsXUnionBytes   bool
 }
 
 type Marshaler interface {
-	getSize() int
+	// Marshal and unmarshal sizes can be different because they can be context dependent.
+	// e.g. it is possible to write a new format but still read the old format
+	getMarshalSize(ctx MarshalerContext) int
+	getUnmarshalSize(ctx MarshalerContext) int
 	marshal(ctx MarshalerContext, v reflect.Value, out *encoder) error
 	unmarshal(ctx MarshalerContext, in *decoder, v reflect.Value) error
 }
@@ -467,41 +510,70 @@
 }
 
 type mStruct struct {
-	fields          []mFieldWithOffset
-	size, alignment int
+	fields                      []mFieldWithOffset
+	sizeOld, alignmentOld       int
+	sizeV1NoEE, alignmentV1NoEE int
 }
 
-func (m mStruct) getSize() int {
-	return m.size
+func (m mStruct) getMarshalSize(ctx MarshalerContext) int {
+	if ctx.EncodeUnionsAsXUnionBytes {
+		return m.sizeV1NoEE
+	}
+	return m.sizeOld
+}
+
+func (m mStruct) getUnmarshalSize(ctx MarshalerContext) int {
+	if ctx.DecodeUnionsFromXUnionBytes {
+		return m.sizeV1NoEE
+	}
+	return m.sizeOld
+}
+
+func (m mStruct) getMarshalAlignment(ctx MarshalerContext) int {
+	if ctx.EncodeUnionsAsXUnionBytes {
+		return m.alignmentV1NoEE
+	}
+	return m.alignmentOld
+}
+
+func (m mStruct) getUnmarshalAlignment(ctx MarshalerContext) int {
+	if ctx.DecodeUnionsFromXUnionBytes {
+		return m.alignmentV1NoEE
+	}
+	return m.alignmentOld
 }
 
 func (m mStruct) marshal(ctx MarshalerContext, v reflect.Value, out *encoder) error {
-	structStart := align(out.head, m.alignment)
+	structStart := align(out.head, m.getMarshalAlignment(ctx))
 	for _, field := range m.fields {
 		out.head = structStart + field.offset
 		if err := field.Marshaler.marshal(ctx, v.Field(field.index), out); err != nil {
 			return err
 		}
 	}
-	out.head = align(out.head, m.alignment)
+	out.head = align(out.head, m.getMarshalAlignment(ctx))
 	return nil
 }
 
 func (m mStruct) unmarshal(ctx MarshalerContext, in *decoder, v reflect.Value) error {
-	structStart := align(in.head, m.alignment)
+	structStart := align(in.head, m.getUnmarshalAlignment(ctx))
 	for _, field := range m.fields {
 		in.head = structStart + field.offset
 		if err := field.Marshaler.unmarshal(ctx, in, v.Field(field.index)); err != nil {
 			return err
 		}
 	}
-	in.head = align(in.head, m.alignment)
+	in.head = align(in.head, m.getUnmarshalAlignment(ctx))
 	return nil
 }
 
 type mEmptyStruct struct{}
 
-func (_ mEmptyStruct) getSize() int {
+func (_ mEmptyStruct) getMarshalSize(ctx MarshalerContext) int {
+	return 1
+}
+
+func (_ mEmptyStruct) getUnmarshalSize(ctx MarshalerContext) int {
 	return 1
 }
 
@@ -522,16 +594,45 @@
 }
 
 type mUnion struct {
-	fields          []mField
-	ordinals        []int
-	size, alignment int
+	fields                      []mField
+	ordinals                    []int
+	sizeOld, alignmentOld       int
+	sizeV1NoEE, alignmentV1NoEE int
 }
 
-func (m mUnion) getSize() int {
-	return m.size
+func (m mUnion) getMarshalSize(ctx MarshalerContext) int {
+	if ctx.EncodeUnionsAsXUnionBytes {
+		return m.sizeV1NoEE
+	}
+	return m.sizeOld
+}
+
+func (m mUnion) getUnmarshalSize(ctx MarshalerContext) int {
+	if ctx.DecodeUnionsFromXUnionBytes {
+		return m.sizeV1NoEE
+	}
+	return m.sizeOld
+}
+
+func (m mUnion) getMarshalAlignment(ctx MarshalerContext) int {
+	if ctx.EncodeUnionsAsXUnionBytes {
+		return m.alignmentV1NoEE
+	}
+	return m.alignmentOld
+}
+
+func (m mUnion) getUnmarshalAlignment(ctx MarshalerContext) int {
+	if ctx.DecodeUnionsFromXUnionBytes {
+		return m.alignmentV1NoEE
+	}
+	return m.alignmentOld
 }
 
 func (m mUnion) marshal(ctx MarshalerContext, v reflect.Value, out *encoder) error {
+	if ctx.EncodeUnionsAsXUnionBytes {
+		return m.marshalAsXUnion(ctx, v, out)
+	}
+
 	// Kind.
 	kind := int(v.Field(0).Uint()) - 1
 	if kind < 0 || len(m.fields) <= kind {
@@ -543,7 +644,7 @@
 	out.writeUint(uint64(kind), 4)
 
 	// Re-align to the union's alignment before writing its field.
-	out.head = align(out.head, m.alignment)
+	out.head = align(out.head, m.getMarshalAlignment(ctx))
 
 	// Marshal field.
 	if err := m.fields[kind].Marshaler.marshal(ctx, v.Field(kind+1), out); err != nil {
@@ -551,15 +652,29 @@
 	}
 
 	// Re-position head.
-	out.head = head + m.size
+	out.head = head + m.getMarshalSize(ctx)
 
 	return nil
 }
 
+func (m mUnion) marshalAsXUnion(ctx MarshalerContext, v reflect.Value, out *encoder) error {
+	// Ordinal.
+	fieldTag := int(v.Field(0).Uint())
+	ordinal, err := strconv.ParseInt(v.Type().Field(fieldTag).Tag.Get("fidl"), 0, 64)
+	if err != nil {
+		return errors.New("error parsing ordinal from tag: " + err.Error())
+	}
+	out.writeUint(uint64(ordinal), 8)
+	// Field.
+	field := m.fields[fieldTag-1]
+	if err := marshalEnvelopePresent(ctx, field, v.Field(field.index), out); err != nil {
+		return err
+	}
+	return nil
+}
+
 func (m mUnion) unmarshal(ctx MarshalerContext, in *decoder, v reflect.Value) error {
-	if ctx.DecodeUnionsFromXunionBytes {
-		// XUnions have 24 bytes before the first out of line element.
-		in.nextObject = in.nextObject + 24 - m.getSize()
+	if ctx.DecodeUnionsFromXUnionBytes {
 		ordinalToFields := make(map[int]mField)
 		for i := 0; i < len(m.fields); i++ {
 			ordinalToFields[m.ordinals[i]] = m.fields[i]
@@ -567,11 +682,11 @@
 		// Just use the xunion unmarshaler because the layout of union and xunion
 		// is the same in go.
 		xunion := mXUnion{
-			fields:        ordinalToFields,
-			unionToXunion: true,
-			size:          m.size,
-			alignment:     m.alignment,
-			strictness:    true,
+			fields:          ordinalToFields,
+			unionToXunion:   true,
+			sizeV1NoEE:      m.sizeV1NoEE,
+			alignmentV1NoEE: m.alignmentV1NoEE,
+			strictness:      true,
 		}
 		return xunion.unmarshal(ctx, in, v)
 	}
@@ -590,7 +705,7 @@
 	v.Field(0).SetUint(kind + 1)
 
 	// Re-align to the union's alignement before writing its field.
-	in.head = align(in.head, m.alignment)
+	in.head = align(in.head, m.getUnmarshalAlignment(ctx))
 
 	// Unmarshal field.
 	ikind := int(kind)
@@ -599,20 +714,31 @@
 	}
 
 	// Re-position head.
-	in.head = head + m.size
+	in.head = head + m.getUnmarshalSize(ctx)
 
 	return nil
 }
 
 type mXUnion struct {
-	fields          map[int]mField
-	unionToXunion   bool
-	size, alignment int
+	fields                      map[int]mField
+	unionToXunion               bool
+	sizeOld, alignmentOld       int
+	sizeV1NoEE, alignmentV1NoEE int
 	strictness
 }
 
-func (m mXUnion) getSize() int {
-	return m.size
+func (m mXUnion) getMarshalSize(ctx MarshalerContext) int {
+	if ctx.EncodeUnionsAsXUnionBytes {
+		return m.sizeV1NoEE
+	}
+	return m.sizeOld
+}
+
+func (m mXUnion) getUnmarshalSize(ctx MarshalerContext) int {
+	if ctx.DecodeUnionsFromXUnionBytes {
+		return m.sizeV1NoEE
+	}
+	return m.sizeOld
 }
 
 func (m mXUnion) marshal(ctx MarshalerContext, v reflect.Value, out *encoder) error {
@@ -735,8 +861,12 @@
 	typ reflect.Type
 }
 
-func (m mOptXUnion) getSize() int {
-	return m.size
+func (m mOptXUnion) getMarshalSize(ctx MarshalerContext) int {
+	return m.mXUnion.getMarshalSize(ctx)
+}
+
+func (m mOptXUnion) getUnmarshalSize(ctx MarshalerContext) int {
+	return m.mXUnion.getUnmarshalSize(ctx)
 }
 
 func (m mOptXUnion) marshal(ctx MarshalerContext, v reflect.Value, out *encoder) error {
@@ -754,13 +884,24 @@
 }
 
 type mTable struct {
-	fields          []mField
-	size, alignment int
-	ordinals        []int
+	fields                      []mField
+	ordinals                    []int
+	sizeOld, alignmentOld       int
+	sizeV1NoEE, alignmentV1NoEE int
 }
 
-func (m mTable) getSize() int {
-	return m.size
+func (m mTable) getMarshalSize(ctx MarshalerContext) int {
+	if ctx.EncodeUnionsAsXUnionBytes {
+		return m.sizeV1NoEE
+	}
+	return m.sizeOld
+}
+
+func (m mTable) getUnmarshalSize(ctx MarshalerContext) int {
+	if ctx.DecodeUnionsFromXUnionBytes {
+		return m.sizeV1NoEE
+	}
+	return m.sizeOld
 }
 
 const envelopeSize = 16
@@ -779,7 +920,7 @@
 	numHandles := len(out.handles)
 	numBytes := len(out.buffer)
 	head := out.head
-	out.head = out.newObject(m.getSize())
+	out.head = out.newObject(m.getMarshalSize(ctx))
 	if err := m.marshal(ctx, v, out); err != nil {
 		return err
 	}
@@ -876,7 +1017,7 @@
 func unmarshalEnvelopeContent(ctx MarshalerContext, header envelopeHeader, m Marshaler, in *decoder, v reflect.Value, mode unmarshalEnvelopeMode) (bool, error) {
 	savedHead := in.head
 	in.head = in.nextObject
-	in.nextObject += align(m.getSize(), 8)
+	in.nextObject += align(m.getUnmarshalSize(ctx), 8)
 	if err := m.unmarshal(ctx, in, v); err != nil {
 		return false, err
 	}
@@ -1040,7 +1181,11 @@
 	elemTyp reflect.Type
 }
 
-func (m mOptStructUnion) getSize() int {
+func (m mOptStructUnion) getMarshalSize(ctx MarshalerContext) int {
+	return 8
+}
+
+func (m mOptStructUnion) getUnmarshalSize(ctx MarshalerContext) int {
 	return 8
 }
 
@@ -1056,7 +1201,7 @@
 
 	// Set up the out-of-line space and the head.
 	oldHead := out.head
-	out.head = out.newObject(align(m.Marshaler.getSize(), 8))
+	out.head = out.newObject(align(m.Marshaler.getMarshalSize(ctx), 8))
 
 	// Marshal field.
 	if err := m.Marshaler.marshal(ctx, v.Elem(), out); err != nil {
@@ -1091,7 +1236,7 @@
 	// Set up the out-of-line space and the head.
 	oldHead := in.head
 	in.head = in.nextObject
-	in.nextObject += align(m.Marshaler.getSize(), 8)
+	in.nextObject += align(m.Marshaler.getUnmarshalSize(ctx), 8)
 
 	// Unmarshal field.
 	if err := m.Marshaler.unmarshal(ctx, in, v.Elem()); err != nil {
@@ -1109,8 +1254,11 @@
 	size int
 }
 
-func (m mArray) getSize() int {
-	return m.size * m.Marshaler.getSize()
+func (m mArray) getMarshalSize(ctx MarshalerContext) int {
+	return m.size * m.Marshaler.getMarshalSize(ctx)
+}
+func (m mArray) getUnmarshalSize(ctx MarshalerContext) int {
+	return m.size * m.Marshaler.getUnmarshalSize(ctx)
 }
 
 func (m mArray) marshal(ctx MarshalerContext, v reflect.Value, out *encoder) error {
@@ -1138,7 +1286,10 @@
 	isVectorUint8 bool
 }
 
-func (m mVector) getSize() int {
+func (m mVector) getMarshalSize(ctx MarshalerContext) int {
+	return 16
+}
+func (m mVector) getUnmarshalSize(ctx MarshalerContext) int {
 	return 16
 }
 
@@ -1160,7 +1311,7 @@
 
 	// Encode in the out-of-line object.
 	oldHead := out.head
-	out.head = out.newObject(vLen * m.Marshaler.getSize())
+	out.head = out.newObject(vLen * m.Marshaler.getMarshalSize(ctx))
 
 	// Marshal elements.
 	if m.isVectorUint8 {
@@ -1206,7 +1357,7 @@
 	// Unmarshal in the out-of-line object.
 	oldHead := in.head
 	in.head = in.nextObject
-	elemSize := m.Marshaler.getSize()
+	elemSize := m.Marshaler.getUnmarshalSize(ctx)
 	in.nextObject += align(size*elemSize, 8)
 
 	// Unmarshal elements.
@@ -1231,7 +1382,10 @@
 
 type mOptVector mVector
 
-func (m mOptVector) getSize() int {
+func (m mOptVector) getMarshalSize(ctx MarshalerContext) int {
+	return 16
+}
+func (m mOptVector) getUnmarshalSize(ctx MarshalerContext) int {
 	return 16
 }
 
@@ -1268,7 +1422,10 @@
 
 type mBool struct{}
 
-func (m mBool) getSize() int {
+func (m mBool) getMarshalSize(ctx MarshalerContext) int {
+	return 1
+}
+func (m mBool) getUnmarshalSize(ctx MarshalerContext) int {
 	return 1
 }
 
@@ -1298,7 +1455,10 @@
 // int is size (1 for int8, 2 for int16, etc.)
 type mInt int
 
-func (m mInt) getSize() int {
+func (m mInt) getMarshalSize(ctx MarshalerContext) int {
+	return int(m)
+}
+func (m mInt) getUnmarshalSize(ctx MarshalerContext) int {
 	return int(m)
 }
 
@@ -1321,7 +1481,10 @@
 // uint is size (1 for uint8, 2 f   or uint16, etc.)
 type mUint int
 
-func (m mUint) getSize() int {
+func (m mUint) getMarshalSize(ctx MarshalerContext) int {
+	return int(m)
+}
+func (m mUint) getUnmarshalSize(ctx MarshalerContext) int {
 	return int(m)
 }
 
@@ -1343,7 +1506,10 @@
 
 type mFloat32 struct{}
 
-func (m mFloat32) getSize() int {
+func (m mFloat32) getMarshalSize(ctx MarshalerContext) int {
+	return 4
+}
+func (m mFloat32) getUnmarshalSize(ctx MarshalerContext) int {
 	return 4
 }
 
@@ -1363,7 +1529,10 @@
 
 type mFloat64 struct{}
 
-func (m mFloat64) getSize() int {
+func (m mFloat64) getMarshalSize(ctx MarshalerContext) int {
+	return 8
+}
+func (m mFloat64) getUnmarshalSize(ctx MarshalerContext) int {
 	return 8
 }
 
@@ -1383,7 +1552,10 @@
 
 type mString int
 
-func (m mString) getSize() int {
+func (m mString) getMarshalSize(ctx MarshalerContext) int {
+	return 16
+}
+func (m mString) getUnmarshalSize(ctx MarshalerContext) int {
 	return 16
 }
 
@@ -1446,7 +1618,10 @@
 
 type mOptString uint64
 
-func (m mOptString) getSize() int {
+func (m mOptString) getMarshalSize(ctx MarshalerContext) int {
+	return 16
+}
+func (m mOptString) getUnmarshalSize(ctx MarshalerContext) int {
 	return 16
 }
 
@@ -1488,7 +1663,10 @@
 
 type mHandle bool
 
-func (m mHandle) getSize() int {
+func (m mHandle) getMarshalSize(ctx MarshalerContext) int {
+	return 4
+}
+func (m mHandle) getUnmarshalSize(ctx MarshalerContext) int {
 	return 4
 }
 
@@ -1542,8 +1720,11 @@
 // first field is a zx.Channel.
 type mInterface mHandle
 
-func (m mInterface) getSize() int {
-	return mHandle(m).getSize()
+func (m mInterface) getMarshalSize(ctx MarshalerContext) int {
+	return mHandle(m).getMarshalSize(ctx)
+}
+func (m mInterface) getUnmarshalSize(ctx MarshalerContext) int {
+	return mHandle(m).getUnmarshalSize(ctx)
 }
 
 func (m mInterface) marshal(ctx MarshalerContext, v reflect.Value, out *encoder) error {
diff --git a/src/syscall/zx/fidl/fidl_test/encoding_new_test.go b/src/syscall/zx/fidl/fidl_test/encoding_new_test.go
index cb06870..6847ff8 100644
--- a/src/syscall/zx/fidl/fidl_test/encoding_new_test.go
+++ b/src/syscall/zx/fidl/fidl_test/encoding_new_test.go
@@ -867,7 +867,7 @@
 }
 
 func TestUnmarshalXunionIntoUnion(t *testing.T) {
-	const expectedUnionTag = 3 // float32 field
+	const expectedUnionTag = XUnion1AsUnionD
 	const expectedFieldValue = 1.2
 	inHeader := MessageHeader{
 		Flags: [3]byte{
@@ -906,6 +906,118 @@
 	}
 }
 
+func TestUnmarshalXUnionInsideXUnionIntoUnionInsideUnion(t *testing.T) {
+	const expectedOuterUnionTag = UnionInsideUnionB
+	const expectedInnerUnionTag = XUnion1AsUnionD
+	const expectedFieldValue = 1.2
+	inHeader := MessageHeader{
+		Flags: [3]byte{
+			1, // decode unions from xunion bytes flag
+			0,
+			0,
+		},
+	}
+	var respb [zx.ChannelMaxMessageBytes]byte
+	var resph [zx.ChannelMaxMessageHandles]zx.Handle
+	input := XUnionInsideXUnionStruct{U: XUnionInsideXUnionWithB(XUnion1WithD(expectedFieldValue))}
+	if _, _, err := MarshalHeaderThenMessage(&inHeader, &input, respb[:], resph[:]); err != nil {
+		t.Fatalf("error unmarshaling: %v\n", err)
+	}
+	// Set the ordinal values since they come from a different type.
+	// These ordinals come from the generated json/go types.
+	const outerUnionStart = 16
+	respb[outerUnionStart+0] = 0xd0
+	respb[outerUnionStart+1] = 0xe8
+	respb[outerUnionStart+2] = 0x4d
+	respb[outerUnionStart+3] = 0x14
+	const innerUnionStart = outerUnionStart + 24
+	respb[innerUnionStart+0] = 0x24
+	respb[innerUnionStart+1] = 0x94
+	respb[innerUnionStart+2] = 0x6a
+	respb[innerUnionStart+3] = 0x3e
+	var union UnionInsideUnionStruct
+	var outHeader MessageHeader
+	if err := UnmarshalHeaderThenMessage(respb[:], nil, &outHeader, &union); err != nil {
+		t.Fatalf("error marshaling: %v", err)
+	}
+	if inHeader != outHeader {
+		t.Fatalf("want %v, got %v", inHeader, outHeader)
+	}
+	if union.U.I_unionInsideUnionTag != expectedOuterUnionTag {
+		t.Fatalf("want %v, got %v", expectedOuterUnionTag, union.U.I_unionInsideUnionTag)
+	}
+	if union.U.B.I_xUnion1AsUnionTag != expectedInnerUnionTag {
+		t.Fatalf("want %v, got %v", expectedInnerUnionTag, union.U.B.I_xUnion1AsUnionTag)
+	}
+	if union.U.B.D != expectedFieldValue {
+		t.Fatalf("want %v, got %v", expectedFieldValue, union.U.B.D)
+	}
+}
+
+func TestMarshalUnionIntoXUnion(t *testing.T) {
+	const expectedUnionTag = XUnion1AsUnionD
+	const expectedFieldValue = 1.2
+	var unionRespb [zx.ChannelMaxMessageBytes]byte
+	var unionResph [zx.ChannelMaxMessageHandles]zx.Handle
+	unionInput := XUnion1AsUnionStruct{Xuau: XUnion1AsUnionWithD(expectedFieldValue)}
+	ctx := MarshalerContext{EncodeUnionsAsXUnionBytes: true}
+	un, _, err := MarshalWithContext(ctx, &unionInput, unionRespb[:], unionResph[:])
+	if err != nil {
+		t.Fatalf("error marshaling: %v\n", err)
+	}
+	var xunionRespb [zx.ChannelMaxMessageBytes]byte
+	var xunionResph [zx.ChannelMaxMessageHandles]zx.Handle
+	xunionInput := XUnion1Struct{Xu: XUnion1WithD(expectedFieldValue)}
+	xun, _, err := Marshal(&xunionInput, xunionRespb[:], xunionResph[:])
+	if err != nil {
+		t.Fatalf("error unmarshaling: %v\n", err)
+	}
+	// Set the ordinal value to the value in XUnion1AsUnionStruct, since it is
+	// a different type.
+	// This value comes from the generated JSON for test.test.fidl.
+	xunionRespb[0] = 0x24
+	xunionRespb[1] = 0x94
+	xunionRespb[2] = 0x6a
+	xunionRespb[3] = 0x3e
+	if unionRespb != xunionRespb {
+		t.Fatalf("got %v, want %v", unionRespb[:un], xunionRespb[:xun])
+	}
+}
+
+func TestMarshalUnionInsideUnionIntoXUnionInsideXUnion(t *testing.T) {
+	const expectedOuterUnionTag = XUnionInsideXUnionB
+	const expectedInnerUnionTag = XUnion1AsUnionD
+	const expectedFieldValue = 1.2
+	var unionRespb [zx.ChannelMaxMessageBytes]byte
+	var unionResph [zx.ChannelMaxMessageHandles]zx.Handle
+	unionInput := UnionInsideUnionStruct{U: UnionInsideUnionWithB(XUnion1AsUnionWithD(expectedFieldValue))}
+	ctx := MarshalerContext{EncodeUnionsAsXUnionBytes: true}
+	un, _, err := MarshalWithContext(ctx, &unionInput, unionRespb[:], unionResph[:])
+	if err != nil {
+		t.Fatalf("error marshaling: %v\n", err)
+	}
+	var xunionRespb [zx.ChannelMaxMessageBytes]byte
+	var xunionResph [zx.ChannelMaxMessageHandles]zx.Handle
+	xunionInput := XUnionInsideXUnionStruct{U: XUnionInsideXUnionWithB(XUnion1WithD(expectedFieldValue))}
+	xun, _, err := Marshal(&xunionInput, xunionRespb[:], xunionResph[:])
+	if err != nil {
+		t.Fatalf("error unmarshaling: %v\n", err)
+	}
+	// The ordinals of the union and equivalent xunion differ.
+	// Set the inner and outer ordinals on the xunion object.
+	xunionRespb[0] = 0xd0
+	xunionRespb[1] = 0xe8
+	xunionRespb[2] = 0x4d
+	xunionRespb[3] = 0x14
+	xunionRespb[24] = 0x24
+	xunionRespb[25] = 0x94
+	xunionRespb[26] = 0x6a
+	xunionRespb[27] = 0x3e
+	if unionRespb != xunionRespb {
+		t.Fatalf("got %v, want %v", unionRespb[:un], xunionRespb[:xun])
+	}
+}
+
 func benchmarkMarshal(b *testing.B, ex example) {
 	b.Run(ex.name, func(b *testing.B) {
 		b.StopTimer()
diff --git a/src/syscall/zx/fidl/interface_test.go b/src/syscall/zx/fidl/interface_test.go
index 4ae95b0..c6999e5 100644
--- a/src/syscall/zx/fidl/interface_test.go
+++ b/src/syscall/zx/fidl/interface_test.go
@@ -22,7 +22,7 @@
 var _ fidl.Message = (*message)(nil)
 
 type message struct {
-	_ struct{} `fidl:"s,1,0" fidl2:"s,1,0"`
+	_ struct{} `fidl:"s,1,0" fidl_size_v1_no_ee:"1" fidl_alignment_v1_no_ee:"0"`
 }
 
 var _mMessage = fidl.MustCreateMarshaler(message{})
diff --git a/src/syscall/zx/fidl/message.go b/src/syscall/zx/fidl/message.go
index 23a4be7..9007e09 100644
--- a/src/syscall/zx/fidl/message.go
+++ b/src/syscall/zx/fidl/message.go
@@ -34,7 +34,7 @@
 
 // MessageHeader represents a transactional message header.
 type MessageHeader struct {
-	_       struct{} `fidl:"s,16,8" fidl2:"s,16,8"`
+	_       struct{} `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	Txid    uint32   `fidl:"0"`
 	Flags   [3]uint8 `fidl:"4"`
 	Magic   uint8    `fidl:"7"`
@@ -43,7 +43,7 @@
 
 var mMessageHeader = MustCreateMarshaler(MessageHeader{})
 
-var MessageHeaderSize = mMessageHeader.getSize()
+var MessageHeaderSize = 16
 
 func (msg *MessageHeader) Marshaler() Marshaler {
 	return mMessageHeader
@@ -79,7 +79,7 @@
 		return nil
 	}
 	ctx := MarshalerContext{
-		DecodeUnionsFromXunionBytes: shouldDecodeUnionsFromXunionBytes(header),
+		DecodeUnionsFromXUnionBytes: shouldDecodeUnionsFromXUnionBytes(header),
 	}
 	if _, _, err := UnmarshalWithContext(ctx, data[hnb:], handles, body); err != nil {
 		return err
@@ -87,7 +87,7 @@
 	return nil
 }
 
-func shouldDecodeUnionsFromXunionBytes(header *MessageHeader) bool {
+func shouldDecodeUnionsFromXUnionBytes(header *MessageHeader) bool {
 	return headerHasFlag(header, TransactionHeaderFlag_UnionFromXunionBytes)
 }
 
diff --git a/src/syscall/zx/io/impl.go b/src/syscall/zx/io/impl.go
index dfbb44b..7f612e7 100644
--- a/src/syscall/zx/io/impl.go
+++ b/src/syscall/zx/io/impl.go
@@ -198,7 +198,7 @@
 // The default protocol, interface information must be acquired some
 // other way.
 type Service struct {
-	_ struct{} `fidl:"s,1,1" fidl2:"s,1,1"`
+	_ struct{} `fidl:"s,1,1" fidl_size_v1_no_ee:"1" fidl_alignment_v1_no_ee:"1"`
 }
 
 var _mService = _bindings.CreateLazyMarshaler(Service{})
@@ -209,7 +209,7 @@
 
 // The object may be cast to interface 'File'.
 type FileObject struct {
-	_ struct{} `fidl:"s,4,4" fidl2:"s,4,4"`
+	_ struct{} `fidl:"s,4,4" fidl_size_v1_no_ee:"4" fidl_alignment_v1_no_ee:"4"`
 	// An optional event which transmits information about an object's readability
 	// or writability. This event relays information about the underlying object, not
 	// the capability granted to client: this event may be signalled "readable" on a
@@ -227,7 +227,7 @@
 
 // The object may be cast to interface 'Directory'.
 type DirectoryObject struct {
-	_ struct{} `fidl:"s,1,1" fidl2:"s,1,1"`
+	_ struct{} `fidl:"s,1,1" fidl_size_v1_no_ee:"1" fidl_alignment_v1_no_ee:"1"`
 }
 
 var _mDirectoryObject = _bindings.CreateLazyMarshaler(DirectoryObject{})
@@ -238,7 +238,7 @@
 
 // The object is accompanied by a pipe.
 type Pipe struct {
-	_      struct{}   `fidl:"s,4,4" fidl2:"s,4,4"`
+	_      struct{}   `fidl:"s,4,4" fidl_size_v1_no_ee:"4" fidl_alignment_v1_no_ee:"4"`
 	Socket _zx.Socket `fidl:"0,0" fidl2:"0"`
 }
 
@@ -250,7 +250,7 @@
 
 // The object is accompanied by a socket.
 type Socket struct {
-	_      struct{}   `fidl:"s,4,4" fidl2:"s,4,4"`
+	_      struct{}   `fidl:"s,4,4" fidl_size_v1_no_ee:"4" fidl_alignment_v1_no_ee:"4"`
 	Socket _zx.Socket `fidl:"0,0" fidl2:"0"`
 }
 
@@ -265,7 +265,7 @@
 // may represent multiple Vmofiles. To identify the logical portion of the VMO
 // that represents the single file, an offset and length parameter are also supplied.
 type Vmofile struct {
-	_ struct{} `fidl:"s,24,8" fidl2:"s,24,8"`
+	_ struct{} `fidl:"s,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	// The VMO which backs this file.
 	Vmo _zx.VMO `fidl:"0,0" fidl2:"0"`
 	// The index into `vmo` which represents the first byte of the file.
@@ -282,7 +282,7 @@
 
 // The object may be cast to interface 'Device'.
 type Device struct {
-	_ struct{} `fidl:"s,4,4" fidl2:"s,4,4"`
+	_ struct{} `fidl:"s,4,4" fidl_size_v1_no_ee:"4" fidl_alignment_v1_no_ee:"4"`
 	// An optional event which transmits information about a device's state.
 	//
 	// The "`DEVICE_SIGNAL_`" values may be observed on this event.
@@ -297,7 +297,7 @@
 
 // The object may be cast to interface 'Tty'
 type Tty struct {
-	_     struct{}   `fidl:"s,4,4" fidl2:"s,4,4"`
+	_     struct{}   `fidl:"s,4,4" fidl_size_v1_no_ee:"4" fidl_alignment_v1_no_ee:"4"`
 	Event _zx.Handle `fidl:"0,1" fidl2:"1"`
 }
 
@@ -309,7 +309,7 @@
 
 // NodeAttributes defines generic information about a filesystem node.
 type NodeAttributes struct {
-	_ struct{} `fidl:"s,56,8" fidl2:"s,56,8"`
+	_ struct{} `fidl:"s,56,8" fidl_size_v1_no_ee:"56" fidl_alignment_v1_no_ee:"8"`
 	// Protection bits and node type information describe in 'mode'.
 	Mode uint32 `fidl:"0"`
 	// A filesystem-unique ID.
@@ -334,7 +334,7 @@
 
 // WatchedEvent describes events returned from a DirectoryWatcher.
 type WatchedEvent struct {
-	_     struct{} `fidl:"s,24,8" fidl2:"s,24,8"`
+	_     struct{} `fidl:"s,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	Event uint8    `fidl:"0"`
 	Len   uint8    `fidl:"1"`
 	Name  []uint8  `fidl:"8,255" fidl2:"255"`
@@ -347,7 +347,7 @@
 }
 
 type FilesystemInfo struct {
-	_ struct{} `fidl:"s,96,8" fidl2:"s,96,8"`
+	_ struct{} `fidl:"s,96,8" fidl_size_v1_no_ee:"96" fidl_alignment_v1_no_ee:"8"`
 	// The number of data bytes which may be stored in a filesystem.
 	TotalBytes uint64 `fidl:"0"`
 	// The number of data bytes which are in use by the filesystem.
@@ -397,7 +397,7 @@
 //
 // Refer to `Node.Describe()` and `Node.OnOpen()` for usage.
 type NodeInfo struct {
-	I_nodeInfoTag `fidl:"u,32,8" fidl2:"u,32,8"`
+	I_nodeInfoTag `fidl:"u,32,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	Service       Service         `fidl:"1116800047"`
 	File          FileObject      `fidl:"525060263"`
 	Directory     DirectoryObject `fidl:"1775777620"`
@@ -501,24 +501,28 @@
 }
 
 const (
-	NodeCloneOrdinal       uint64 = 0x17fe6a4c00000000
-	NodeCloneGenOrdinal    uint64 = 0x5a61678f293ce16f
-	NodeCloseOrdinal       uint64 = 0x52b9568700000000
-	NodeCloseGenOrdinal    uint64 = 0x5309c5bd1c33dc44
-	NodeDescribeOrdinal    uint64 = 0x1f62df5e00000000
-	NodeDescribeGenOrdinal uint64 = 0xffcec215078dea0
-	NodeOnOpenOrdinal      uint64 = 0x4700a7bd00000000
-	NodeOnOpenGenOrdinal   uint64 = 0x7fc7bbb1dbfd1972
-	NodeSyncOrdinal        uint64 = 0x62423faa00000000
-	NodeSyncGenOrdinal     uint64 = 0x189d88326c18b519
-	NodeGetAttrOrdinal     uint64 = 0x4585e7c800000000
-	NodeGetAttrGenOrdinal  uint64 = 0x78985e216314dafd
-	NodeSetAttrOrdinal     uint64 = 0xbd5559a00000000
-	NodeSetAttrGenOrdinal  uint64 = 0x4186c0f40d938f46
+	NodeCloneOrdinal           uint64 = 0x17fe6a4c00000000
+	NodeCloneGenOrdinal        uint64 = 0x5a61678f293ce16f
+	NodeCloseOrdinal           uint64 = 0x52b9568700000000
+	NodeCloseGenOrdinal        uint64 = 0x5309c5bd1c33dc44
+	NodeDescribeOrdinal        uint64 = 0x1f62df5e00000000
+	NodeDescribeGenOrdinal     uint64 = 0xffcec215078dea0
+	NodeOnOpenOrdinal          uint64 = 0x4700a7bd00000000
+	NodeOnOpenGenOrdinal       uint64 = 0x7fc7bbb1dbfd1972
+	NodeSyncOrdinal            uint64 = 0x62423faa00000000
+	NodeSyncGenOrdinal         uint64 = 0x189d88326c18b519
+	NodeGetAttrOrdinal         uint64 = 0x4585e7c800000000
+	NodeGetAttrGenOrdinal      uint64 = 0x78985e216314dafd
+	NodeSetAttrOrdinal         uint64 = 0xbd5559a00000000
+	NodeSetAttrGenOrdinal      uint64 = 0x4186c0f40d938f46
+	NodeNodeGetFlagsOrdinal    uint64 = 0x3c24c22300000000
+	NodeNodeGetFlagsGenOrdinal uint64 = 0x5b88fffb8eda3aa1
+	NodeNodeSetFlagsOrdinal    uint64 = 0x46940c1600000000
+	NodeNodeSetFlagsGenOrdinal uint64 = 0x5295b76c71fde733
 )
 
 type nodeCloneRequest struct {
-	_      struct{}             `fidl:"s,8,0" fidl2:"s,8,0"`
+	_      struct{}             `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Flags  uint32               `fidl:"0"`
 	Object NodeInterfaceRequest `fidl:"4,0" fidl2:"0"`
 }
@@ -530,7 +534,7 @@
 }
 
 type nodeCloseResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -541,7 +545,7 @@
 }
 
 type nodeDescribeResponse struct {
-	_    struct{} `fidl:"s,32,0" fidl2:"s,32,0"`
+	_    struct{} `fidl:"s,32,0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
 	Info NodeInfo `fidl:"0"`
 }
 
@@ -552,7 +556,7 @@
 }
 
 type nodeOnOpenResponse struct {
-	_    struct{}  `fidl:"s,16,0" fidl2:"s,16,0"`
+	_    struct{}  `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	S    int32     `fidl:"0"`
 	Info *NodeInfo `fidl:"8"`
 }
@@ -564,7 +568,7 @@
 }
 
 type nodeSyncResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -575,7 +579,7 @@
 }
 
 type nodeGetAttrResponse struct {
-	_          struct{}       `fidl:"s,64,0" fidl2:"s,64,0"`
+	_          struct{}       `fidl:"s,64,0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
 	S          int32          `fidl:"0"`
 	Attributes NodeAttributes `fidl:"8"`
 }
@@ -587,7 +591,7 @@
 }
 
 type nodeSetAttrRequest struct {
-	_          struct{}       `fidl:"s,64,0" fidl2:"s,64,0"`
+	_          struct{}       `fidl:"s,64,0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
 	Flags      uint32         `fidl:"0"`
 	Attributes NodeAttributes `fidl:"8"`
 }
@@ -599,7 +603,7 @@
 }
 
 type nodeSetAttrResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -609,6 +613,40 @@
 	return _mnodeSetAttrResponse
 }
 
+type nodeNodeGetFlagsResponse struct {
+	_     struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
+	S     int32    `fidl:"0"`
+	Flags uint32   `fidl:"4"`
+}
+
+var _mnodeNodeGetFlagsResponse = _bindings.CreateLazyMarshaler(nodeNodeGetFlagsResponse{})
+
+func (msg *nodeNodeGetFlagsResponse) Marshaler() _bindings.Marshaler {
+	return _mnodeNodeGetFlagsResponse
+}
+
+type nodeNodeSetFlagsRequest struct {
+	_     struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
+	Flags uint32   `fidl:"0"`
+}
+
+var _mnodeNodeSetFlagsRequest = _bindings.CreateLazyMarshaler(nodeNodeSetFlagsRequest{})
+
+func (msg *nodeNodeSetFlagsRequest) Marshaler() _bindings.Marshaler {
+	return _mnodeNodeSetFlagsRequest
+}
+
+type nodeNodeSetFlagsResponse struct {
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
+	S int32    `fidl:"0"`
+}
+
+var _mnodeNodeSetFlagsResponse = _bindings.CreateLazyMarshaler(nodeNodeSetFlagsResponse{})
+
+func (msg *nodeNodeSetFlagsResponse) Marshaler() _bindings.Marshaler {
+	return _mnodeNodeSetFlagsResponse
+}
+
 type NodeInterface _bindings.ChannelProxy
 
 // Create another connection to the same remote object.
@@ -704,6 +742,34 @@
 	return resp_.S, err
 }
 
+// Acquires the `Directory.Open` rights and flags used to access this file.
+//
+// This method does not require any rights.
+// This method has the same functionality as GetFlags for File and is
+// meant as an in-progress replacement.
+func (p *NodeInterface) NodeGetFlags() (int32, uint32, error) {
+	var req_ _bindings.Message
+	resp_ := &nodeNodeGetFlagsResponse{}
+	err := ((*_bindings.ChannelProxy)(p)).Call(NodeNodeGetFlagsOrdinal, req_, resp_, NodeNodeGetFlagsOrdinal, NodeNodeGetFlagsGenOrdinal)
+	return resp_.S, resp_.Flags, err
+}
+
+// Changes the `Directory.Open` flags used to access the file.
+// Supported flags which can be turned on / off:
+// - `OPEN_FLAG_APPEND`
+//
+// This method does not require any rights.
+// This method has the same functionality as SetFlags for File and is
+// meant as an in-progress replacement.
+func (p *NodeInterface) NodeSetFlags(flags uint32) (int32, error) {
+	req_ := &nodeNodeSetFlagsRequest{
+		Flags: flags,
+	}
+	resp_ := &nodeNodeSetFlagsResponse{}
+	err := ((*_bindings.ChannelProxy)(p)).Call(NodeNodeSetFlagsOrdinal, req_, resp_, NodeNodeSetFlagsOrdinal, NodeNodeSetFlagsGenOrdinal)
+	return resp_.S, err
+}
+
 // Node defines the minimal interface for entities which can be accessed in a filesystem.
 type Node interface {
 	// Create another connection to the same remote object.
@@ -752,10 +818,31 @@
 	//
 	// This method requires following rights: `OPEN_RIGHT_WRITABLE`.
 	SetAttr(flags uint32, attributes NodeAttributes) (int32, error)
+	// Acquires the `Directory.Open` rights and flags used to access this file.
+	//
+	// This method does not require any rights.
+	// This method has the same functionality as GetFlags for File and is
+	// meant as an in-progress replacement.
+	NodeGetFlags() (int32, uint32, error)
+	// Changes the `Directory.Open` flags used to access the file.
+	// Supported flags which can be turned on / off:
+	// - `OPEN_FLAG_APPEND`
+	//
+	// This method does not require any rights.
+	// This method has the same functionality as SetFlags for File and is
+	// meant as an in-progress replacement.
+	NodeSetFlags(flags uint32) (int32, error)
 }
 
 type NodeTransitionalBase struct{}
 
+func (_ *NodeTransitionalBase) NodeGetFlags() (int32, uint32, error) {
+	panic("Not Implemented")
+}
+func (_ *NodeTransitionalBase) NodeSetFlags(flags uint32) (int32, error) {
+	panic("Not Implemented")
+}
+
 type NodeInterfaceRequest _bindings.InterfaceRequest
 
 func NewNodeInterfaceRequest() (NodeInterfaceRequest, *NodeInterface, error) {
@@ -818,6 +905,25 @@
 		out_ := nodeSetAttrResponse{}
 		out_.S = s
 		return &out_, true, err_
+	case NodeNodeGetFlagsOrdinal:
+		fallthrough
+	case NodeNodeGetFlagsGenOrdinal:
+		s, flags, err_ := s_.Impl.NodeGetFlags()
+		out_ := nodeNodeGetFlagsResponse{}
+		out_.S = s
+		out_.Flags = flags
+		return &out_, true, err_
+	case NodeNodeSetFlagsOrdinal:
+		fallthrough
+	case NodeNodeSetFlagsGenOrdinal:
+		in_ := nodeNodeSetFlagsRequest{}
+		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+			return nil, false, err_
+		}
+		s, err_ := s_.Impl.NodeSetFlags(in_.Flags)
+		out_ := nodeNodeSetFlagsResponse{}
+		out_.S = s
+		return &out_, true, err_
 	}
 	return nil, false, _bindings.ErrUnknownOrdinal
 }
@@ -846,42 +952,46 @@
 }
 
 const (
-	FileCloneOrdinal        uint64 = 0x17fe6a4c00000000
-	FileCloneGenOrdinal     uint64 = 0x5a61678f293ce16f
-	FileCloseOrdinal        uint64 = 0x52b9568700000000
-	FileCloseGenOrdinal     uint64 = 0x5309c5bd1c33dc44
-	FileDescribeOrdinal     uint64 = 0x1f62df5e00000000
-	FileDescribeGenOrdinal  uint64 = 0xffcec215078dea0
-	FileOnOpenOrdinal       uint64 = 0x4700a7bd00000000
-	FileOnOpenGenOrdinal    uint64 = 0x7fc7bbb1dbfd1972
-	FileSyncOrdinal         uint64 = 0x62423faa00000000
-	FileSyncGenOrdinal      uint64 = 0x189d88326c18b519
-	FileGetAttrOrdinal      uint64 = 0x4585e7c800000000
-	FileGetAttrGenOrdinal   uint64 = 0x78985e216314dafd
-	FileSetAttrOrdinal      uint64 = 0xbd5559a00000000
-	FileSetAttrGenOrdinal   uint64 = 0x4186c0f40d938f46
-	FileReadOrdinal         uint64 = 0x25f7418400000000
-	FileReadGenOrdinal      uint64 = 0x29b2b7074c95208c
-	FileReadAtOrdinal       uint64 = 0x7c724dc400000000
-	FileReadAtGenOrdinal    uint64 = 0x6527ee3fbc9c5749
-	FileWriteOrdinal        uint64 = 0x512e7a000000000
-	FileWriteGenOrdinal     uint64 = 0x3b6432f57914225b
-	FileWriteAtOrdinal      uint64 = 0x3e5522e500000000
-	FileWriteAtGenOrdinal   uint64 = 0x4b29e1582ab379e4
-	FileSeekOrdinal         uint64 = 0x782a774500000000
-	FileSeekGenOrdinal      uint64 = 0x324968e9b8a0e394
-	FileTruncateOrdinal     uint64 = 0x42ab3a3a00000000
-	FileTruncateGenOrdinal  uint64 = 0x5ec8f337359a2ddb
-	FileGetFlagsOrdinal     uint64 = 0x6416a3f600000000
-	FileGetFlagsGenOrdinal  uint64 = 0x200be82ca523ab96
-	FileSetFlagsOrdinal     uint64 = 0x3f23cc7600000000
-	FileSetFlagsGenOrdinal  uint64 = 0x713f375258671141
-	FileGetBufferOrdinal    uint64 = 0x74c3097300000000
-	FileGetBufferGenOrdinal uint64 = 0x4b93b8486666d951
+	FileCloneOrdinal           uint64 = 0x17fe6a4c00000000
+	FileCloneGenOrdinal        uint64 = 0x5a61678f293ce16f
+	FileCloseOrdinal           uint64 = 0x52b9568700000000
+	FileCloseGenOrdinal        uint64 = 0x5309c5bd1c33dc44
+	FileDescribeOrdinal        uint64 = 0x1f62df5e00000000
+	FileDescribeGenOrdinal     uint64 = 0xffcec215078dea0
+	FileOnOpenOrdinal          uint64 = 0x4700a7bd00000000
+	FileOnOpenGenOrdinal       uint64 = 0x7fc7bbb1dbfd1972
+	FileSyncOrdinal            uint64 = 0x62423faa00000000
+	FileSyncGenOrdinal         uint64 = 0x189d88326c18b519
+	FileGetAttrOrdinal         uint64 = 0x4585e7c800000000
+	FileGetAttrGenOrdinal      uint64 = 0x78985e216314dafd
+	FileSetAttrOrdinal         uint64 = 0xbd5559a00000000
+	FileSetAttrGenOrdinal      uint64 = 0x4186c0f40d938f46
+	FileNodeGetFlagsOrdinal    uint64 = 0x3c24c22300000000
+	FileNodeGetFlagsGenOrdinal uint64 = 0x5b88fffb8eda3aa1
+	FileNodeSetFlagsOrdinal    uint64 = 0x46940c1600000000
+	FileNodeSetFlagsGenOrdinal uint64 = 0x5295b76c71fde733
+	FileReadOrdinal            uint64 = 0x25f7418400000000
+	FileReadGenOrdinal         uint64 = 0x29b2b7074c95208c
+	FileReadAtOrdinal          uint64 = 0x7c724dc400000000
+	FileReadAtGenOrdinal       uint64 = 0x6527ee3fbc9c5749
+	FileWriteOrdinal           uint64 = 0x512e7a000000000
+	FileWriteGenOrdinal        uint64 = 0x3b6432f57914225b
+	FileWriteAtOrdinal         uint64 = 0x3e5522e500000000
+	FileWriteAtGenOrdinal      uint64 = 0x4b29e1582ab379e4
+	FileSeekOrdinal            uint64 = 0x782a774500000000
+	FileSeekGenOrdinal         uint64 = 0x324968e9b8a0e394
+	FileTruncateOrdinal        uint64 = 0x42ab3a3a00000000
+	FileTruncateGenOrdinal     uint64 = 0x5ec8f337359a2ddb
+	FileGetFlagsOrdinal        uint64 = 0x6416a3f600000000
+	FileGetFlagsGenOrdinal     uint64 = 0x200be82ca523ab96
+	FileSetFlagsOrdinal        uint64 = 0x3f23cc7600000000
+	FileSetFlagsGenOrdinal     uint64 = 0x713f375258671141
+	FileGetBufferOrdinal       uint64 = 0x74c3097300000000
+	FileGetBufferGenOrdinal    uint64 = 0x4b93b8486666d951
 )
 
 type fileCloneRequest struct {
-	_      struct{}             `fidl:"s,8,0" fidl2:"s,8,0"`
+	_      struct{}             `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Flags  uint32               `fidl:"0"`
 	Object NodeInterfaceRequest `fidl:"4,0" fidl2:"0"`
 }
@@ -893,7 +1003,7 @@
 }
 
 type fileCloseResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -904,7 +1014,7 @@
 }
 
 type fileDescribeResponse struct {
-	_    struct{} `fidl:"s,32,0" fidl2:"s,32,0"`
+	_    struct{} `fidl:"s,32,0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
 	Info NodeInfo `fidl:"0"`
 }
 
@@ -915,7 +1025,7 @@
 }
 
 type fileOnOpenResponse struct {
-	_    struct{}  `fidl:"s,16,0" fidl2:"s,16,0"`
+	_    struct{}  `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	S    int32     `fidl:"0"`
 	Info *NodeInfo `fidl:"8"`
 }
@@ -927,7 +1037,7 @@
 }
 
 type fileSyncResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -938,7 +1048,7 @@
 }
 
 type fileGetAttrResponse struct {
-	_          struct{}       `fidl:"s,64,0" fidl2:"s,64,0"`
+	_          struct{}       `fidl:"s,64,0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
 	S          int32          `fidl:"0"`
 	Attributes NodeAttributes `fidl:"8"`
 }
@@ -950,7 +1060,7 @@
 }
 
 type fileSetAttrRequest struct {
-	_          struct{}       `fidl:"s,64,0" fidl2:"s,64,0"`
+	_          struct{}       `fidl:"s,64,0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
 	Flags      uint32         `fidl:"0"`
 	Attributes NodeAttributes `fidl:"8"`
 }
@@ -962,7 +1072,7 @@
 }
 
 type fileSetAttrResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -972,8 +1082,42 @@
 	return _mfileSetAttrResponse
 }
 
+type fileNodeGetFlagsResponse struct {
+	_     struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
+	S     int32    `fidl:"0"`
+	Flags uint32   `fidl:"4"`
+}
+
+var _mfileNodeGetFlagsResponse = _bindings.CreateLazyMarshaler(fileNodeGetFlagsResponse{})
+
+func (msg *fileNodeGetFlagsResponse) Marshaler() _bindings.Marshaler {
+	return _mfileNodeGetFlagsResponse
+}
+
+type fileNodeSetFlagsRequest struct {
+	_     struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
+	Flags uint32   `fidl:"0"`
+}
+
+var _mfileNodeSetFlagsRequest = _bindings.CreateLazyMarshaler(fileNodeSetFlagsRequest{})
+
+func (msg *fileNodeSetFlagsRequest) Marshaler() _bindings.Marshaler {
+	return _mfileNodeSetFlagsRequest
+}
+
+type fileNodeSetFlagsResponse struct {
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
+	S int32    `fidl:"0"`
+}
+
+var _mfileNodeSetFlagsResponse = _bindings.CreateLazyMarshaler(fileNodeSetFlagsResponse{})
+
+func (msg *fileNodeSetFlagsResponse) Marshaler() _bindings.Marshaler {
+	return _mfileNodeSetFlagsResponse
+}
+
 type fileReadRequest struct {
-	_     struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_     struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Count uint64   `fidl:"0"`
 }
 
@@ -984,7 +1128,7 @@
 }
 
 type fileReadResponse struct {
-	_    struct{} `fidl:"s,24,0" fidl2:"s,24,0"`
+	_    struct{} `fidl:"s,24,0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
 	S    int32    `fidl:"0"`
 	Data []uint8  `fidl:"8,8192" fidl2:"8192"`
 }
@@ -996,7 +1140,7 @@
 }
 
 type fileReadAtRequest struct {
-	_      struct{} `fidl:"s,16,0" fidl2:"s,16,0"`
+	_      struct{} `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	Count  uint64   `fidl:"0"`
 	Offset uint64   `fidl:"8"`
 }
@@ -1008,7 +1152,7 @@
 }
 
 type fileReadAtResponse struct {
-	_    struct{} `fidl:"s,24,0" fidl2:"s,24,0"`
+	_    struct{} `fidl:"s,24,0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
 	S    int32    `fidl:"0"`
 	Data []uint8  `fidl:"8,8192" fidl2:"8192"`
 }
@@ -1020,7 +1164,7 @@
 }
 
 type fileWriteRequest struct {
-	_    struct{} `fidl:"s,16,0" fidl2:"s,16,0"`
+	_    struct{} `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	Data []uint8  `fidl:"0,8192" fidl2:"8192"`
 }
 
@@ -1031,7 +1175,7 @@
 }
 
 type fileWriteResponse struct {
-	_      struct{} `fidl:"s,16,0" fidl2:"s,16,0"`
+	_      struct{} `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	S      int32    `fidl:"0"`
 	Actual uint64   `fidl:"8"`
 }
@@ -1043,7 +1187,7 @@
 }
 
 type fileWriteAtRequest struct {
-	_      struct{} `fidl:"s,24,0" fidl2:"s,24,0"`
+	_      struct{} `fidl:"s,24,0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
 	Data   []uint8  `fidl:"0,8192" fidl2:"8192"`
 	Offset uint64   `fidl:"16"`
 }
@@ -1055,7 +1199,7 @@
 }
 
 type fileWriteAtResponse struct {
-	_      struct{} `fidl:"s,16,0" fidl2:"s,16,0"`
+	_      struct{} `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	S      int32    `fidl:"0"`
 	Actual uint64   `fidl:"8"`
 }
@@ -1067,7 +1211,7 @@
 }
 
 type fileSeekRequest struct {
-	_      struct{}   `fidl:"s,16,0" fidl2:"s,16,0"`
+	_      struct{}   `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	Offset int64      `fidl:"0"`
 	Start  SeekOrigin `fidl:"8"`
 }
@@ -1079,7 +1223,7 @@
 }
 
 type fileSeekResponse struct {
-	_      struct{} `fidl:"s,16,0" fidl2:"s,16,0"`
+	_      struct{} `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	S      int32    `fidl:"0"`
 	Offset uint64   `fidl:"8"`
 }
@@ -1091,7 +1235,7 @@
 }
 
 type fileTruncateRequest struct {
-	_      struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_      struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Length uint64   `fidl:"0"`
 }
 
@@ -1102,7 +1246,7 @@
 }
 
 type fileTruncateResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -1113,7 +1257,7 @@
 }
 
 type fileGetFlagsResponse struct {
-	_     struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_     struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S     int32    `fidl:"0"`
 	Flags uint32   `fidl:"4"`
 }
@@ -1125,7 +1269,7 @@
 }
 
 type fileSetFlagsRequest struct {
-	_     struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_     struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Flags uint32   `fidl:"0"`
 }
 
@@ -1136,7 +1280,7 @@
 }
 
 type fileSetFlagsResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -1147,7 +1291,7 @@
 }
 
 type fileGetBufferRequest struct {
-	_     struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_     struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Flags uint32   `fidl:"0"`
 }
 
@@ -1158,7 +1302,7 @@
 }
 
 type fileGetBufferResponse struct {
-	_      struct{}           `fidl:"s,16,0" fidl2:"s,16,0"`
+	_      struct{}           `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	S      int32              `fidl:"0"`
 	Buffer *fuchsiamem.Buffer `fidl:"8"`
 }
@@ -1264,6 +1408,34 @@
 	return resp_.S, err
 }
 
+// Acquires the `Directory.Open` rights and flags used to access this file.
+//
+// This method does not require any rights.
+// This method has the same functionality as GetFlags for File and is
+// meant as an in-progress replacement.
+func (p *FileInterface) NodeGetFlags() (int32, uint32, error) {
+	var req_ _bindings.Message
+	resp_ := &fileNodeGetFlagsResponse{}
+	err := ((*_bindings.ChannelProxy)(p)).Call(FileNodeGetFlagsOrdinal, req_, resp_, FileNodeGetFlagsOrdinal, FileNodeGetFlagsGenOrdinal)
+	return resp_.S, resp_.Flags, err
+}
+
+// Changes the `Directory.Open` flags used to access the file.
+// Supported flags which can be turned on / off:
+// - `OPEN_FLAG_APPEND`
+//
+// This method does not require any rights.
+// This method has the same functionality as SetFlags for File and is
+// meant as an in-progress replacement.
+func (p *FileInterface) NodeSetFlags(flags uint32) (int32, error) {
+	req_ := &fileNodeSetFlagsRequest{
+		Flags: flags,
+	}
+	resp_ := &fileNodeSetFlagsResponse{}
+	err := ((*_bindings.ChannelProxy)(p)).Call(FileNodeSetFlagsOrdinal, req_, resp_, FileNodeSetFlagsOrdinal, FileNodeSetFlagsGenOrdinal)
+	return resp_.S, err
+}
+
 // Reads `count` bytes at the seek offset.
 // The seek offset is moved forward by the number of bytes read.
 //
@@ -1434,6 +1606,20 @@
 	//
 	// This method requires following rights: `OPEN_RIGHT_WRITABLE`.
 	SetAttr(flags uint32, attributes NodeAttributes) (int32, error)
+	// Acquires the `Directory.Open` rights and flags used to access this file.
+	//
+	// This method does not require any rights.
+	// This method has the same functionality as GetFlags for File and is
+	// meant as an in-progress replacement.
+	NodeGetFlags() (int32, uint32, error)
+	// Changes the `Directory.Open` flags used to access the file.
+	// Supported flags which can be turned on / off:
+	// - `OPEN_FLAG_APPEND`
+	//
+	// This method does not require any rights.
+	// This method has the same functionality as SetFlags for File and is
+	// meant as an in-progress replacement.
+	NodeSetFlags(flags uint32) (int32, error)
 	// Reads `count` bytes at the seek offset.
 	// The seek offset is moved forward by the number of bytes read.
 	//
@@ -1487,6 +1673,13 @@
 
 type FileTransitionalBase struct{}
 
+func (_ *FileTransitionalBase) NodeGetFlags() (int32, uint32, error) {
+	panic("Not Implemented")
+}
+func (_ *FileTransitionalBase) NodeSetFlags(flags uint32) (int32, error) {
+	panic("Not Implemented")
+}
+
 type FileInterfaceRequest _bindings.InterfaceRequest
 
 func NewFileInterfaceRequest() (FileInterfaceRequest, *FileInterface, error) {
@@ -1549,6 +1742,25 @@
 		out_ := fileSetAttrResponse{}
 		out_.S = s
 		return &out_, true, err_
+	case FileNodeGetFlagsOrdinal:
+		fallthrough
+	case FileNodeGetFlagsGenOrdinal:
+		s, flags, err_ := s_.Impl.NodeGetFlags()
+		out_ := fileNodeGetFlagsResponse{}
+		out_.S = s
+		out_.Flags = flags
+		return &out_, true, err_
+	case FileNodeSetFlagsOrdinal:
+		fallthrough
+	case FileNodeSetFlagsGenOrdinal:
+		in_ := fileNodeSetFlagsRequest{}
+		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+			return nil, false, err_
+		}
+		s, err_ := s_.Impl.NodeSetFlags(in_.Flags)
+		out_ := fileNodeSetFlagsResponse{}
+		out_.S = s
+		return &out_, true, err_
 	case FileReadOrdinal:
 		fallthrough
 	case FileReadGenOrdinal:
@@ -1684,7 +1896,7 @@
 )
 
 type directoryWatcherOnEventRequest struct {
-	_      struct{} `fidl:"s,16,0" fidl2:"s,16,0"`
+	_      struct{} `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	Events []uint8  `fidl:"0,8192" fidl2:"8192"`
 }
 
@@ -1756,40 +1968,44 @@
 type DirectoryWatcherEventProxy _bindings.ChannelProxy
 
 const (
-	DirectoryCloneOrdinal          uint64 = 0x17fe6a4c00000000
-	DirectoryCloneGenOrdinal       uint64 = 0x5a61678f293ce16f
-	DirectoryCloseOrdinal          uint64 = 0x52b9568700000000
-	DirectoryCloseGenOrdinal       uint64 = 0x5309c5bd1c33dc44
-	DirectoryDescribeOrdinal       uint64 = 0x1f62df5e00000000
-	DirectoryDescribeGenOrdinal    uint64 = 0xffcec215078dea0
-	DirectoryOnOpenOrdinal         uint64 = 0x4700a7bd00000000
-	DirectoryOnOpenGenOrdinal      uint64 = 0x7fc7bbb1dbfd1972
-	DirectorySyncOrdinal           uint64 = 0x62423faa00000000
-	DirectorySyncGenOrdinal        uint64 = 0x189d88326c18b519
-	DirectoryGetAttrOrdinal        uint64 = 0x4585e7c800000000
-	DirectoryGetAttrGenOrdinal     uint64 = 0x78985e216314dafd
-	DirectorySetAttrOrdinal        uint64 = 0xbd5559a00000000
-	DirectorySetAttrGenOrdinal     uint64 = 0x4186c0f40d938f46
-	DirectoryOpenOrdinal           uint64 = 0x77e4cceb00000000
-	DirectoryOpenGenOrdinal        uint64 = 0x2c5044561d685ec0
-	DirectoryUnlinkOrdinal         uint64 = 0x2cbadb1900000000
-	DirectoryUnlinkGenOrdinal      uint64 = 0x5a0ff90760a8bc23
-	DirectoryReadDirentsOrdinal    uint64 = 0x2ea53c2d00000000
-	DirectoryReadDirentsGenOrdinal uint64 = 0x3582806bf27faa0a
-	DirectoryRewindOrdinal         uint64 = 0x7072fd8700000000
-	DirectoryRewindGenOrdinal      uint64 = 0x16b1202af0f34c71
-	DirectoryGetTokenOrdinal       uint64 = 0x3217bced00000000
-	DirectoryGetTokenGenOrdinal    uint64 = 0x26ae9d18763c8655
-	DirectoryRenameOrdinal         uint64 = 0x4a94b0ac00000000
-	DirectoryRenameGenOrdinal      uint64 = 0xa8e00a247f3c905
-	DirectoryLinkOrdinal           uint64 = 0x1b8a5e6400000000
-	DirectoryLinkGenOrdinal        uint64 = 0x740604c0c7c930e7
-	DirectoryWatchOrdinal          uint64 = 0x5ac28f3400000000
-	DirectoryWatchGenOrdinal       uint64 = 0x5717193a59d66d91
+	DirectoryCloneOrdinal           uint64 = 0x17fe6a4c00000000
+	DirectoryCloneGenOrdinal        uint64 = 0x5a61678f293ce16f
+	DirectoryCloseOrdinal           uint64 = 0x52b9568700000000
+	DirectoryCloseGenOrdinal        uint64 = 0x5309c5bd1c33dc44
+	DirectoryDescribeOrdinal        uint64 = 0x1f62df5e00000000
+	DirectoryDescribeGenOrdinal     uint64 = 0xffcec215078dea0
+	DirectoryOnOpenOrdinal          uint64 = 0x4700a7bd00000000
+	DirectoryOnOpenGenOrdinal       uint64 = 0x7fc7bbb1dbfd1972
+	DirectorySyncOrdinal            uint64 = 0x62423faa00000000
+	DirectorySyncGenOrdinal         uint64 = 0x189d88326c18b519
+	DirectoryGetAttrOrdinal         uint64 = 0x4585e7c800000000
+	DirectoryGetAttrGenOrdinal      uint64 = 0x78985e216314dafd
+	DirectorySetAttrOrdinal         uint64 = 0xbd5559a00000000
+	DirectorySetAttrGenOrdinal      uint64 = 0x4186c0f40d938f46
+	DirectoryNodeGetFlagsOrdinal    uint64 = 0x3c24c22300000000
+	DirectoryNodeGetFlagsGenOrdinal uint64 = 0x5b88fffb8eda3aa1
+	DirectoryNodeSetFlagsOrdinal    uint64 = 0x46940c1600000000
+	DirectoryNodeSetFlagsGenOrdinal uint64 = 0x5295b76c71fde733
+	DirectoryOpenOrdinal            uint64 = 0x77e4cceb00000000
+	DirectoryOpenGenOrdinal         uint64 = 0x2c5044561d685ec0
+	DirectoryUnlinkOrdinal          uint64 = 0x2cbadb1900000000
+	DirectoryUnlinkGenOrdinal       uint64 = 0x5a0ff90760a8bc23
+	DirectoryReadDirentsOrdinal     uint64 = 0x2ea53c2d00000000
+	DirectoryReadDirentsGenOrdinal  uint64 = 0x3582806bf27faa0a
+	DirectoryRewindOrdinal          uint64 = 0x7072fd8700000000
+	DirectoryRewindGenOrdinal       uint64 = 0x16b1202af0f34c71
+	DirectoryGetTokenOrdinal        uint64 = 0x3217bced00000000
+	DirectoryGetTokenGenOrdinal     uint64 = 0x26ae9d18763c8655
+	DirectoryRenameOrdinal          uint64 = 0x4a94b0ac00000000
+	DirectoryRenameGenOrdinal       uint64 = 0xa8e00a247f3c905
+	DirectoryLinkOrdinal            uint64 = 0x1b8a5e6400000000
+	DirectoryLinkGenOrdinal         uint64 = 0x740604c0c7c930e7
+	DirectoryWatchOrdinal           uint64 = 0x5ac28f3400000000
+	DirectoryWatchGenOrdinal        uint64 = 0x5717193a59d66d91
 )
 
 type directoryCloneRequest struct {
-	_      struct{}             `fidl:"s,8,0" fidl2:"s,8,0"`
+	_      struct{}             `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Flags  uint32               `fidl:"0"`
 	Object NodeInterfaceRequest `fidl:"4,0" fidl2:"0"`
 }
@@ -1801,7 +2017,7 @@
 }
 
 type directoryCloseResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -1812,7 +2028,7 @@
 }
 
 type directoryDescribeResponse struct {
-	_    struct{} `fidl:"s,32,0" fidl2:"s,32,0"`
+	_    struct{} `fidl:"s,32,0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
 	Info NodeInfo `fidl:"0"`
 }
 
@@ -1823,7 +2039,7 @@
 }
 
 type directoryOnOpenResponse struct {
-	_    struct{}  `fidl:"s,16,0" fidl2:"s,16,0"`
+	_    struct{}  `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	S    int32     `fidl:"0"`
 	Info *NodeInfo `fidl:"8"`
 }
@@ -1835,7 +2051,7 @@
 }
 
 type directorySyncResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -1846,7 +2062,7 @@
 }
 
 type directoryGetAttrResponse struct {
-	_          struct{}       `fidl:"s,64,0" fidl2:"s,64,0"`
+	_          struct{}       `fidl:"s,64,0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
 	S          int32          `fidl:"0"`
 	Attributes NodeAttributes `fidl:"8"`
 }
@@ -1858,7 +2074,7 @@
 }
 
 type directorySetAttrRequest struct {
-	_          struct{}       `fidl:"s,64,0" fidl2:"s,64,0"`
+	_          struct{}       `fidl:"s,64,0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
 	Flags      uint32         `fidl:"0"`
 	Attributes NodeAttributes `fidl:"8"`
 }
@@ -1870,7 +2086,7 @@
 }
 
 type directorySetAttrResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -1880,8 +2096,42 @@
 	return _mdirectorySetAttrResponse
 }
 
+type directoryNodeGetFlagsResponse struct {
+	_     struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
+	S     int32    `fidl:"0"`
+	Flags uint32   `fidl:"4"`
+}
+
+var _mdirectoryNodeGetFlagsResponse = _bindings.CreateLazyMarshaler(directoryNodeGetFlagsResponse{})
+
+func (msg *directoryNodeGetFlagsResponse) Marshaler() _bindings.Marshaler {
+	return _mdirectoryNodeGetFlagsResponse
+}
+
+type directoryNodeSetFlagsRequest struct {
+	_     struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
+	Flags uint32   `fidl:"0"`
+}
+
+var _mdirectoryNodeSetFlagsRequest = _bindings.CreateLazyMarshaler(directoryNodeSetFlagsRequest{})
+
+func (msg *directoryNodeSetFlagsRequest) Marshaler() _bindings.Marshaler {
+	return _mdirectoryNodeSetFlagsRequest
+}
+
+type directoryNodeSetFlagsResponse struct {
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
+	S int32    `fidl:"0"`
+}
+
+var _mdirectoryNodeSetFlagsResponse = _bindings.CreateLazyMarshaler(directoryNodeSetFlagsResponse{})
+
+func (msg *directoryNodeSetFlagsResponse) Marshaler() _bindings.Marshaler {
+	return _mdirectoryNodeSetFlagsResponse
+}
+
 type directoryOpenRequest struct {
-	_      struct{}             `fidl:"s,32,0" fidl2:"s,32,0"`
+	_      struct{}             `fidl:"s,32,0" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"0"`
 	Flags  uint32               `fidl:"0"`
 	Mode   uint32               `fidl:"4"`
 	Path   string               `fidl:"8,4096" fidl2:"4096"`
@@ -1895,7 +2145,7 @@
 }
 
 type directoryUnlinkRequest struct {
-	_    struct{} `fidl:"s,16,0" fidl2:"s,16,0"`
+	_    struct{} `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	Path string   `fidl:"0,4096" fidl2:"4096"`
 }
 
@@ -1906,7 +2156,7 @@
 }
 
 type directoryUnlinkResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -1917,7 +2167,7 @@
 }
 
 type directoryReadDirentsRequest struct {
-	_        struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_        struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	MaxBytes uint64   `fidl:"0"`
 }
 
@@ -1928,7 +2178,7 @@
 }
 
 type directoryReadDirentsResponse struct {
-	_       struct{} `fidl:"s,24,0" fidl2:"s,24,0"`
+	_       struct{} `fidl:"s,24,0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
 	S       int32    `fidl:"0"`
 	Dirents []uint8  `fidl:"8,8192" fidl2:"8192"`
 }
@@ -1940,7 +2190,7 @@
 }
 
 type directoryRewindResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -1951,7 +2201,7 @@
 }
 
 type directoryGetTokenResponse struct {
-	_     struct{}   `fidl:"s,8,0" fidl2:"s,8,0"`
+	_     struct{}   `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S     int32      `fidl:"0"`
 	Token _zx.Handle `fidl:"4,1" fidl2:"1"`
 }
@@ -1963,7 +2213,7 @@
 }
 
 type directoryRenameRequest struct {
-	_              struct{}   `fidl:"s,40,0" fidl2:"s,40,0"`
+	_              struct{}   `fidl:"s,40,0" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"0"`
 	Src            string     `fidl:"0,4096" fidl2:"4096"`
 	DstParentToken _zx.Handle `fidl:"16,0" fidl2:"0"`
 	Dst            string     `fidl:"24,4096" fidl2:"4096"`
@@ -1976,7 +2226,7 @@
 }
 
 type directoryRenameResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -1987,7 +2237,7 @@
 }
 
 type directoryLinkRequest struct {
-	_              struct{}   `fidl:"s,40,0" fidl2:"s,40,0"`
+	_              struct{}   `fidl:"s,40,0" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"0"`
 	Src            string     `fidl:"0,4096" fidl2:"4096"`
 	DstParentToken _zx.Handle `fidl:"16,0" fidl2:"0"`
 	Dst            string     `fidl:"24,4096" fidl2:"4096"`
@@ -2000,7 +2250,7 @@
 }
 
 type directoryLinkResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -2011,7 +2261,7 @@
 }
 
 type directoryWatchRequest struct {
-	_       struct{}    `fidl:"s,16,0" fidl2:"s,16,0"`
+	_       struct{}    `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	Mask    uint32      `fidl:"0"`
 	Options uint32      `fidl:"4"`
 	Watcher _zx.Channel `fidl:"8,0" fidl2:"0"`
@@ -2024,7 +2274,7 @@
 }
 
 type directoryWatchResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -2129,6 +2379,34 @@
 	return resp_.S, err
 }
 
+// Acquires the `Directory.Open` rights and flags used to access this file.
+//
+// This method does not require any rights.
+// This method has the same functionality as GetFlags for File and is
+// meant as an in-progress replacement.
+func (p *DirectoryInterface) NodeGetFlags() (int32, uint32, error) {
+	var req_ _bindings.Message
+	resp_ := &directoryNodeGetFlagsResponse{}
+	err := ((*_bindings.ChannelProxy)(p)).Call(DirectoryNodeGetFlagsOrdinal, req_, resp_, DirectoryNodeGetFlagsOrdinal, DirectoryNodeGetFlagsGenOrdinal)
+	return resp_.S, resp_.Flags, err
+}
+
+// Changes the `Directory.Open` flags used to access the file.
+// Supported flags which can be turned on / off:
+// - `OPEN_FLAG_APPEND`
+//
+// This method does not require any rights.
+// This method has the same functionality as SetFlags for File and is
+// meant as an in-progress replacement.
+func (p *DirectoryInterface) NodeSetFlags(flags uint32) (int32, error) {
+	req_ := &directoryNodeSetFlagsRequest{
+		Flags: flags,
+	}
+	resp_ := &directoryNodeSetFlagsResponse{}
+	err := ((*_bindings.ChannelProxy)(p)).Call(DirectoryNodeSetFlagsOrdinal, req_, resp_, DirectoryNodeSetFlagsOrdinal, DirectoryNodeSetFlagsGenOrdinal)
+	return resp_.S, err
+}
+
 // Opens a new object relative to this directory object.
 //
 // `path` may contain multiple segments, separated by "/" characters,
@@ -2368,6 +2646,20 @@
 	//
 	// This method requires following rights: `OPEN_RIGHT_WRITABLE`.
 	SetAttr(flags uint32, attributes NodeAttributes) (int32, error)
+	// Acquires the `Directory.Open` rights and flags used to access this file.
+	//
+	// This method does not require any rights.
+	// This method has the same functionality as GetFlags for File and is
+	// meant as an in-progress replacement.
+	NodeGetFlags() (int32, uint32, error)
+	// Changes the `Directory.Open` flags used to access the file.
+	// Supported flags which can be turned on / off:
+	// - `OPEN_FLAG_APPEND`
+	//
+	// This method does not require any rights.
+	// This method has the same functionality as SetFlags for File and is
+	// meant as an in-progress replacement.
+	NodeSetFlags(flags uint32) (int32, error)
 	// Opens a new object relative to this directory object.
 	//
 	// `path` may contain multiple segments, separated by "/" characters,
@@ -2495,6 +2787,13 @@
 
 type DirectoryTransitionalBase struct{}
 
+func (_ *DirectoryTransitionalBase) NodeGetFlags() (int32, uint32, error) {
+	panic("Not Implemented")
+}
+func (_ *DirectoryTransitionalBase) NodeSetFlags(flags uint32) (int32, error) {
+	panic("Not Implemented")
+}
+
 type DirectoryInterfaceRequest _bindings.InterfaceRequest
 
 func NewDirectoryInterfaceRequest() (DirectoryInterfaceRequest, *DirectoryInterface, error) {
@@ -2557,6 +2856,25 @@
 		out_ := directorySetAttrResponse{}
 		out_.S = s
 		return &out_, true, err_
+	case DirectoryNodeGetFlagsOrdinal:
+		fallthrough
+	case DirectoryNodeGetFlagsGenOrdinal:
+		s, flags, err_ := s_.Impl.NodeGetFlags()
+		out_ := directoryNodeGetFlagsResponse{}
+		out_.S = s
+		out_.Flags = flags
+		return &out_, true, err_
+	case DirectoryNodeSetFlagsOrdinal:
+		fallthrough
+	case DirectoryNodeSetFlagsGenOrdinal:
+		in_ := directoryNodeSetFlagsRequest{}
+		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+			return nil, false, err_
+		}
+		s, err_ := s_.Impl.NodeSetFlags(in_.Flags)
+		out_ := directoryNodeSetFlagsResponse{}
+		out_.S = s
+		return &out_, true, err_
 	case DirectoryOpenOrdinal:
 		fallthrough
 	case DirectoryOpenGenOrdinal:
@@ -2679,6 +2997,10 @@
 	DirectoryAdminGetAttrGenOrdinal         uint64 = 0x78985e216314dafd
 	DirectoryAdminSetAttrOrdinal            uint64 = 0xbd5559a00000000
 	DirectoryAdminSetAttrGenOrdinal         uint64 = 0x4186c0f40d938f46
+	DirectoryAdminNodeGetFlagsOrdinal       uint64 = 0x3c24c22300000000
+	DirectoryAdminNodeGetFlagsGenOrdinal    uint64 = 0x5b88fffb8eda3aa1
+	DirectoryAdminNodeSetFlagsOrdinal       uint64 = 0x46940c1600000000
+	DirectoryAdminNodeSetFlagsGenOrdinal    uint64 = 0x5295b76c71fde733
 	DirectoryAdminOpenOrdinal               uint64 = 0x77e4cceb00000000
 	DirectoryAdminOpenGenOrdinal            uint64 = 0x2c5044561d685ec0
 	DirectoryAdminUnlinkOrdinal             uint64 = 0x2cbadb1900000000
@@ -2710,7 +3032,7 @@
 )
 
 type directoryAdminCloneRequest struct {
-	_      struct{}             `fidl:"s,8,0" fidl2:"s,8,0"`
+	_      struct{}             `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Flags  uint32               `fidl:"0"`
 	Object NodeInterfaceRequest `fidl:"4,0" fidl2:"0"`
 }
@@ -2722,7 +3044,7 @@
 }
 
 type directoryAdminCloseResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -2733,7 +3055,7 @@
 }
 
 type directoryAdminDescribeResponse struct {
-	_    struct{} `fidl:"s,32,0" fidl2:"s,32,0"`
+	_    struct{} `fidl:"s,32,0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
 	Info NodeInfo `fidl:"0"`
 }
 
@@ -2744,7 +3066,7 @@
 }
 
 type directoryAdminOnOpenResponse struct {
-	_    struct{}  `fidl:"s,16,0" fidl2:"s,16,0"`
+	_    struct{}  `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	S    int32     `fidl:"0"`
 	Info *NodeInfo `fidl:"8"`
 }
@@ -2756,7 +3078,7 @@
 }
 
 type directoryAdminSyncResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -2767,7 +3089,7 @@
 }
 
 type directoryAdminGetAttrResponse struct {
-	_          struct{}       `fidl:"s,64,0" fidl2:"s,64,0"`
+	_          struct{}       `fidl:"s,64,0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
 	S          int32          `fidl:"0"`
 	Attributes NodeAttributes `fidl:"8"`
 }
@@ -2779,7 +3101,7 @@
 }
 
 type directoryAdminSetAttrRequest struct {
-	_          struct{}       `fidl:"s,64,0" fidl2:"s,64,0"`
+	_          struct{}       `fidl:"s,64,0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
 	Flags      uint32         `fidl:"0"`
 	Attributes NodeAttributes `fidl:"8"`
 }
@@ -2791,7 +3113,7 @@
 }
 
 type directoryAdminSetAttrResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -2801,8 +3123,42 @@
 	return _mdirectoryAdminSetAttrResponse
 }
 
+type directoryAdminNodeGetFlagsResponse struct {
+	_     struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
+	S     int32    `fidl:"0"`
+	Flags uint32   `fidl:"4"`
+}
+
+var _mdirectoryAdminNodeGetFlagsResponse = _bindings.CreateLazyMarshaler(directoryAdminNodeGetFlagsResponse{})
+
+func (msg *directoryAdminNodeGetFlagsResponse) Marshaler() _bindings.Marshaler {
+	return _mdirectoryAdminNodeGetFlagsResponse
+}
+
+type directoryAdminNodeSetFlagsRequest struct {
+	_     struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
+	Flags uint32   `fidl:"0"`
+}
+
+var _mdirectoryAdminNodeSetFlagsRequest = _bindings.CreateLazyMarshaler(directoryAdminNodeSetFlagsRequest{})
+
+func (msg *directoryAdminNodeSetFlagsRequest) Marshaler() _bindings.Marshaler {
+	return _mdirectoryAdminNodeSetFlagsRequest
+}
+
+type directoryAdminNodeSetFlagsResponse struct {
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
+	S int32    `fidl:"0"`
+}
+
+var _mdirectoryAdminNodeSetFlagsResponse = _bindings.CreateLazyMarshaler(directoryAdminNodeSetFlagsResponse{})
+
+func (msg *directoryAdminNodeSetFlagsResponse) Marshaler() _bindings.Marshaler {
+	return _mdirectoryAdminNodeSetFlagsResponse
+}
+
 type directoryAdminOpenRequest struct {
-	_      struct{}             `fidl:"s,32,0" fidl2:"s,32,0"`
+	_      struct{}             `fidl:"s,32,0" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"0"`
 	Flags  uint32               `fidl:"0"`
 	Mode   uint32               `fidl:"4"`
 	Path   string               `fidl:"8,4096" fidl2:"4096"`
@@ -2816,7 +3172,7 @@
 }
 
 type directoryAdminUnlinkRequest struct {
-	_    struct{} `fidl:"s,16,0" fidl2:"s,16,0"`
+	_    struct{} `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	Path string   `fidl:"0,4096" fidl2:"4096"`
 }
 
@@ -2827,7 +3183,7 @@
 }
 
 type directoryAdminUnlinkResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -2838,7 +3194,7 @@
 }
 
 type directoryAdminReadDirentsRequest struct {
-	_        struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_        struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	MaxBytes uint64   `fidl:"0"`
 }
 
@@ -2849,7 +3205,7 @@
 }
 
 type directoryAdminReadDirentsResponse struct {
-	_       struct{} `fidl:"s,24,0" fidl2:"s,24,0"`
+	_       struct{} `fidl:"s,24,0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
 	S       int32    `fidl:"0"`
 	Dirents []uint8  `fidl:"8,8192" fidl2:"8192"`
 }
@@ -2861,7 +3217,7 @@
 }
 
 type directoryAdminRewindResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -2872,7 +3228,7 @@
 }
 
 type directoryAdminGetTokenResponse struct {
-	_     struct{}   `fidl:"s,8,0" fidl2:"s,8,0"`
+	_     struct{}   `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S     int32      `fidl:"0"`
 	Token _zx.Handle `fidl:"4,1" fidl2:"1"`
 }
@@ -2884,7 +3240,7 @@
 }
 
 type directoryAdminRenameRequest struct {
-	_              struct{}   `fidl:"s,40,0" fidl2:"s,40,0"`
+	_              struct{}   `fidl:"s,40,0" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"0"`
 	Src            string     `fidl:"0,4096" fidl2:"4096"`
 	DstParentToken _zx.Handle `fidl:"16,0" fidl2:"0"`
 	Dst            string     `fidl:"24,4096" fidl2:"4096"`
@@ -2897,7 +3253,7 @@
 }
 
 type directoryAdminRenameResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -2908,7 +3264,7 @@
 }
 
 type directoryAdminLinkRequest struct {
-	_              struct{}   `fidl:"s,40,0" fidl2:"s,40,0"`
+	_              struct{}   `fidl:"s,40,0" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"0"`
 	Src            string     `fidl:"0,4096" fidl2:"4096"`
 	DstParentToken _zx.Handle `fidl:"16,0" fidl2:"0"`
 	Dst            string     `fidl:"24,4096" fidl2:"4096"`
@@ -2921,7 +3277,7 @@
 }
 
 type directoryAdminLinkResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -2932,7 +3288,7 @@
 }
 
 type directoryAdminWatchRequest struct {
-	_       struct{}    `fidl:"s,16,0" fidl2:"s,16,0"`
+	_       struct{}    `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	Mask    uint32      `fidl:"0"`
 	Options uint32      `fidl:"4"`
 	Watcher _zx.Channel `fidl:"8,0" fidl2:"0"`
@@ -2945,7 +3301,7 @@
 }
 
 type directoryAdminWatchResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -2956,7 +3312,7 @@
 }
 
 type directoryAdminMountRequest struct {
-	_      struct{}           `fidl:"s,8,0" fidl2:"s,8,0"`
+	_      struct{}           `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Remote DirectoryInterface `fidl:"0"`
 }
 
@@ -2967,7 +3323,7 @@
 }
 
 type directoryAdminMountResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -2978,7 +3334,7 @@
 }
 
 type directoryAdminMountAndCreateRequest struct {
-	_      struct{}           `fidl:"s,32,0" fidl2:"s,32,0"`
+	_      struct{}           `fidl:"s,32,0" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"0"`
 	Remote DirectoryInterface `fidl:"0"`
 	Name   string             `fidl:"8,255" fidl2:"255"`
 	Flags  uint32             `fidl:"24"`
@@ -2991,7 +3347,7 @@
 }
 
 type directoryAdminMountAndCreateResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -3002,7 +3358,7 @@
 }
 
 type directoryAdminUnmountResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -3013,7 +3369,7 @@
 }
 
 type directoryAdminUnmountNodeResponse struct {
-	_      struct{}           `fidl:"s,8,0" fidl2:"s,8,0"`
+	_      struct{}           `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S      int32              `fidl:"0"`
 	Remote DirectoryInterface `fidl:"4"`
 }
@@ -3025,7 +3381,7 @@
 }
 
 type directoryAdminQueryFilesystemResponse struct {
-	_    struct{}        `fidl:"s,16,0" fidl2:"s,16,0"`
+	_    struct{}        `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	S    int32           `fidl:"0"`
 	Info *FilesystemInfo `fidl:"8"`
 }
@@ -3037,7 +3393,7 @@
 }
 
 type directoryAdminGetDevicePathResponse struct {
-	_    struct{} `fidl:"s,24,0" fidl2:"s,24,0"`
+	_    struct{} `fidl:"s,24,0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
 	S    int32    `fidl:"0"`
 	Path *string  `fidl:"8,4096" fidl2:"4096"`
 }
@@ -3143,6 +3499,34 @@
 	return resp_.S, err
 }
 
+// Acquires the `Directory.Open` rights and flags used to access this file.
+//
+// This method does not require any rights.
+// This method has the same functionality as GetFlags for File and is
+// meant as an in-progress replacement.
+func (p *DirectoryAdminInterface) NodeGetFlags() (int32, uint32, error) {
+	var req_ _bindings.Message
+	resp_ := &directoryAdminNodeGetFlagsResponse{}
+	err := ((*_bindings.ChannelProxy)(p)).Call(DirectoryAdminNodeGetFlagsOrdinal, req_, resp_, DirectoryAdminNodeGetFlagsOrdinal, DirectoryAdminNodeGetFlagsGenOrdinal)
+	return resp_.S, resp_.Flags, err
+}
+
+// Changes the `Directory.Open` flags used to access the file.
+// Supported flags which can be turned on / off:
+// - `OPEN_FLAG_APPEND`
+//
+// This method does not require any rights.
+// This method has the same functionality as SetFlags for File and is
+// meant as an in-progress replacement.
+func (p *DirectoryAdminInterface) NodeSetFlags(flags uint32) (int32, error) {
+	req_ := &directoryAdminNodeSetFlagsRequest{
+		Flags: flags,
+	}
+	resp_ := &directoryAdminNodeSetFlagsResponse{}
+	err := ((*_bindings.ChannelProxy)(p)).Call(DirectoryAdminNodeSetFlagsOrdinal, req_, resp_, DirectoryAdminNodeSetFlagsOrdinal, DirectoryAdminNodeSetFlagsGenOrdinal)
+	return resp_.S, err
+}
+
 // Opens a new object relative to this directory object.
 //
 // `path` may contain multiple segments, separated by "/" characters,
@@ -3443,6 +3827,20 @@
 	//
 	// This method requires following rights: `OPEN_RIGHT_WRITABLE`.
 	SetAttr(flags uint32, attributes NodeAttributes) (int32, error)
+	// Acquires the `Directory.Open` rights and flags used to access this file.
+	//
+	// This method does not require any rights.
+	// This method has the same functionality as GetFlags for File and is
+	// meant as an in-progress replacement.
+	NodeGetFlags() (int32, uint32, error)
+	// Changes the `Directory.Open` flags used to access the file.
+	// Supported flags which can be turned on / off:
+	// - `OPEN_FLAG_APPEND`
+	//
+	// This method does not require any rights.
+	// This method has the same functionality as SetFlags for File and is
+	// meant as an in-progress replacement.
+	NodeSetFlags(flags uint32) (int32, error)
 	// Opens a new object relative to this directory object.
 	//
 	// `path` may contain multiple segments, separated by "/" characters,
@@ -3588,6 +3986,13 @@
 
 type DirectoryAdminTransitionalBase struct{}
 
+func (_ *DirectoryAdminTransitionalBase) NodeGetFlags() (int32, uint32, error) {
+	panic("Not Implemented")
+}
+func (_ *DirectoryAdminTransitionalBase) NodeSetFlags(flags uint32) (int32, error) {
+	panic("Not Implemented")
+}
+
 type DirectoryAdminInterfaceRequest _bindings.InterfaceRequest
 
 func NewDirectoryAdminInterfaceRequest() (DirectoryAdminInterfaceRequest, *DirectoryAdminInterface, error) {
@@ -3650,6 +4055,25 @@
 		out_ := directoryAdminSetAttrResponse{}
 		out_.S = s
 		return &out_, true, err_
+	case DirectoryAdminNodeGetFlagsOrdinal:
+		fallthrough
+	case DirectoryAdminNodeGetFlagsGenOrdinal:
+		s, flags, err_ := s_.Impl.NodeGetFlags()
+		out_ := directoryAdminNodeGetFlagsResponse{}
+		out_.S = s
+		out_.Flags = flags
+		return &out_, true, err_
+	case DirectoryAdminNodeSetFlagsOrdinal:
+		fallthrough
+	case DirectoryAdminNodeSetFlagsGenOrdinal:
+		in_ := directoryAdminNodeSetFlagsRequest{}
+		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+			return nil, false, err_
+		}
+		s, err_ := s_.Impl.NodeSetFlags(in_.Flags)
+		out_ := directoryAdminNodeSetFlagsResponse{}
+		out_.S = s
+		return &out_, true, err_
 	case DirectoryAdminOpenOrdinal:
 		fallthrough
 	case DirectoryAdminOpenGenOrdinal:
diff --git a/src/syscall/zx/mem/impl.go b/src/syscall/zx/mem/impl.go
index 1f6f2c8..361dfe1 100644
--- a/src/syscall/zx/mem/impl.go
+++ b/src/syscall/zx/mem/impl.go
@@ -23,7 +23,7 @@
 // data. `fuchsia.mem.Buffer` is a standard struct that aggregate the VMO
 // and its size.
 type Buffer struct {
-	_ struct{} `fidl:"s,16,8" fidl2:"s,16,8"`
+	_ struct{} `fidl:"s,16,8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	// The vmo that contains the buffer.
 	Vmo _zx.VMO `fidl:"0,0" fidl2:"0"`
 	// The number of bytes in the buffer.
@@ -44,7 +44,7 @@
 
 // A range of bytes within a VMO.
 type Range struct {
-	_ struct{} `fidl:"s,24,8" fidl2:"s,24,8"`
+	_ struct{} `fidl:"s,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	// The vmo that contains the bytes.
 	Vmo _zx.VMO `fidl:"0,0" fidl2:"0"`
 	// The offset of the first byte within the range relative to the start of
@@ -84,7 +84,7 @@
 // `bytes`) but also need to support arbitrary amounts of data (i.e., which
 // need to be provided out-of-line in a `Buffer`).
 type Data struct {
-	I_dataTag     `fidl:"x,24,8" fidl2:"x,24,8"`
+	I_dataTag     `fidl:"x,24,8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
 	I_unknownData []byte
 	// The binary data provided inline in the message.
 	Bytes []uint8 `fidl:"835814982," fidl2:"835814982,"`
diff --git a/src/syscall/zx/net/impl.go b/src/syscall/zx/net/impl.go
index fa87844..cf45300 100644
--- a/src/syscall/zx/net/impl.go
+++ b/src/syscall/zx/net/impl.go
@@ -17,40 +17,44 @@
 )
 
 const (
-	ControlCloneOrdinal          uint64 = 0x17fe6a4c00000000
-	ControlCloneGenOrdinal       uint64 = 0x5a61678f293ce16f
-	ControlCloseOrdinal          uint64 = 0x52b9568700000000
-	ControlCloseGenOrdinal       uint64 = 0x5309c5bd1c33dc44
-	ControlDescribeOrdinal       uint64 = 0x1f62df5e00000000
-	ControlDescribeGenOrdinal    uint64 = 0xffcec215078dea0
-	ControlOnOpenOrdinal         uint64 = 0x4700a7bd00000000
-	ControlOnOpenGenOrdinal      uint64 = 0x7fc7bbb1dbfd1972
-	ControlSyncOrdinal           uint64 = 0x62423faa00000000
-	ControlSyncGenOrdinal        uint64 = 0x189d88326c18b519
-	ControlGetAttrOrdinal        uint64 = 0x4585e7c800000000
-	ControlGetAttrGenOrdinal     uint64 = 0x78985e216314dafd
-	ControlSetAttrOrdinal        uint64 = 0xbd5559a00000000
-	ControlSetAttrGenOrdinal     uint64 = 0x4186c0f40d938f46
-	ControlBindOrdinal           uint64 = 0x147441ed00000000
-	ControlBindGenOrdinal        uint64 = 0x369838aa5347aa8f
-	ControlConnectOrdinal        uint64 = 0x237ed33800000000
-	ControlConnectGenOrdinal     uint64 = 0x1138f666cb3655b1
-	ControlListenOrdinal         uint64 = 0x2e63628600000000
-	ControlListenGenOrdinal      uint64 = 0xa860257383d5651
-	ControlAcceptOrdinal         uint64 = 0x11ed297300000000
-	ControlAcceptGenOrdinal      uint64 = 0x17921a9ebebb7ba0
-	ControlGetSockNameOrdinal    uint64 = 0x63c1368200000000
-	ControlGetSockNameGenOrdinal uint64 = 0x6f68e0f0d72c2d1d
-	ControlGetPeerNameOrdinal    uint64 = 0x58787bb600000000
-	ControlGetPeerNameGenOrdinal uint64 = 0x555a019c03d9820d
-	ControlSetSockOptOrdinal     uint64 = 0x4ba217a700000000
-	ControlSetSockOptGenOrdinal  uint64 = 0x24e784a5e281b466
-	ControlGetSockOptOrdinal     uint64 = 0x3685367800000000
-	ControlGetSockOptGenOrdinal  uint64 = 0x66298180e94aa6b4
+	ControlCloneOrdinal           uint64 = 0x17fe6a4c00000000
+	ControlCloneGenOrdinal        uint64 = 0x5a61678f293ce16f
+	ControlCloseOrdinal           uint64 = 0x52b9568700000000
+	ControlCloseGenOrdinal        uint64 = 0x5309c5bd1c33dc44
+	ControlDescribeOrdinal        uint64 = 0x1f62df5e00000000
+	ControlDescribeGenOrdinal     uint64 = 0xffcec215078dea0
+	ControlOnOpenOrdinal          uint64 = 0x4700a7bd00000000
+	ControlOnOpenGenOrdinal       uint64 = 0x7fc7bbb1dbfd1972
+	ControlSyncOrdinal            uint64 = 0x62423faa00000000
+	ControlSyncGenOrdinal         uint64 = 0x189d88326c18b519
+	ControlGetAttrOrdinal         uint64 = 0x4585e7c800000000
+	ControlGetAttrGenOrdinal      uint64 = 0x78985e216314dafd
+	ControlSetAttrOrdinal         uint64 = 0xbd5559a00000000
+	ControlSetAttrGenOrdinal      uint64 = 0x4186c0f40d938f46
+	ControlNodeGetFlagsOrdinal    uint64 = 0x3c24c22300000000
+	ControlNodeGetFlagsGenOrdinal uint64 = 0x5b88fffb8eda3aa1
+	ControlNodeSetFlagsOrdinal    uint64 = 0x46940c1600000000
+	ControlNodeSetFlagsGenOrdinal uint64 = 0x5295b76c71fde733
+	ControlBindOrdinal            uint64 = 0x147441ed00000000
+	ControlBindGenOrdinal         uint64 = 0x369838aa5347aa8f
+	ControlConnectOrdinal         uint64 = 0x237ed33800000000
+	ControlConnectGenOrdinal      uint64 = 0x1138f666cb3655b1
+	ControlListenOrdinal          uint64 = 0x2e63628600000000
+	ControlListenGenOrdinal       uint64 = 0xa860257383d5651
+	ControlAcceptOrdinal          uint64 = 0x11ed297300000000
+	ControlAcceptGenOrdinal       uint64 = 0x17921a9ebebb7ba0
+	ControlGetSockNameOrdinal     uint64 = 0x63c1368200000000
+	ControlGetSockNameGenOrdinal  uint64 = 0x6f68e0f0d72c2d1d
+	ControlGetPeerNameOrdinal     uint64 = 0x58787bb600000000
+	ControlGetPeerNameGenOrdinal  uint64 = 0x555a019c03d9820d
+	ControlSetSockOptOrdinal      uint64 = 0x4ba217a700000000
+	ControlSetSockOptGenOrdinal   uint64 = 0x24e784a5e281b466
+	ControlGetSockOptOrdinal      uint64 = 0x3685367800000000
+	ControlGetSockOptGenOrdinal   uint64 = 0x66298180e94aa6b4
 )
 
 type controlCloneRequest struct {
-	_      struct{}                       `fidl:"s,8,0" fidl2:"s,8,0"`
+	_      struct{}                       `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Flags  uint32                         `fidl:"0"`
 	Object fuchsiaio.NodeInterfaceRequest `fidl:"4,0" fidl2:"0"`
 }
@@ -62,7 +66,7 @@
 }
 
 type controlCloseResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -73,7 +77,7 @@
 }
 
 type controlDescribeResponse struct {
-	_    struct{}           `fidl:"s,32,0" fidl2:"s,32,0"`
+	_    struct{}           `fidl:"s,32,0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
 	Info fuchsiaio.NodeInfo `fidl:"0"`
 }
 
@@ -84,7 +88,7 @@
 }
 
 type controlOnOpenResponse struct {
-	_    struct{}            `fidl:"s,16,0" fidl2:"s,16,0"`
+	_    struct{}            `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	S    int32               `fidl:"0"`
 	Info *fuchsiaio.NodeInfo `fidl:"8"`
 }
@@ -96,7 +100,7 @@
 }
 
 type controlSyncResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -107,7 +111,7 @@
 }
 
 type controlGetAttrResponse struct {
-	_          struct{}                 `fidl:"s,64,0" fidl2:"s,64,0"`
+	_          struct{}                 `fidl:"s,64,0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
 	S          int32                    `fidl:"0"`
 	Attributes fuchsiaio.NodeAttributes `fidl:"8"`
 }
@@ -119,7 +123,7 @@
 }
 
 type controlSetAttrRequest struct {
-	_          struct{}                 `fidl:"s,64,0" fidl2:"s,64,0"`
+	_          struct{}                 `fidl:"s,64,0" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"0"`
 	Flags      uint32                   `fidl:"0"`
 	Attributes fuchsiaio.NodeAttributes `fidl:"8"`
 }
@@ -131,7 +135,7 @@
 }
 
 type controlSetAttrResponse struct {
-	_ struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	S int32    `fidl:"0"`
 }
 
@@ -141,8 +145,42 @@
 	return _mcontrolSetAttrResponse
 }
 
+type controlNodeGetFlagsResponse struct {
+	_     struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
+	S     int32    `fidl:"0"`
+	Flags uint32   `fidl:"4"`
+}
+
+var _mcontrolNodeGetFlagsResponse = _bindings.CreateLazyMarshaler(controlNodeGetFlagsResponse{})
+
+func (msg *controlNodeGetFlagsResponse) Marshaler() _bindings.Marshaler {
+	return _mcontrolNodeGetFlagsResponse
+}
+
+type controlNodeSetFlagsRequest struct {
+	_     struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
+	Flags uint32   `fidl:"0"`
+}
+
+var _mcontrolNodeSetFlagsRequest = _bindings.CreateLazyMarshaler(controlNodeSetFlagsRequest{})
+
+func (msg *controlNodeSetFlagsRequest) Marshaler() _bindings.Marshaler {
+	return _mcontrolNodeSetFlagsRequest
+}
+
+type controlNodeSetFlagsResponse struct {
+	_ struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
+	S int32    `fidl:"0"`
+}
+
+var _mcontrolNodeSetFlagsResponse = _bindings.CreateLazyMarshaler(controlNodeSetFlagsResponse{})
+
+func (msg *controlNodeSetFlagsResponse) Marshaler() _bindings.Marshaler {
+	return _mcontrolNodeSetFlagsResponse
+}
+
 type controlBindRequest struct {
-	_    struct{} `fidl:"s,16,0" fidl2:"s,16,0"`
+	_    struct{} `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	Addr []uint8  `fidl:"0,128" fidl2:"128"`
 }
 
@@ -153,7 +191,7 @@
 }
 
 type controlBindResponse struct {
-	_    struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_    struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Code int16    `fidl:"0"`
 }
 
@@ -164,7 +202,7 @@
 }
 
 type controlConnectRequest struct {
-	_    struct{} `fidl:"s,16,0" fidl2:"s,16,0"`
+	_    struct{} `fidl:"s,16,0" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"0"`
 	Addr []uint8  `fidl:"0,128" fidl2:"128"`
 }
 
@@ -175,7 +213,7 @@
 }
 
 type controlConnectResponse struct {
-	_    struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_    struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Code int16    `fidl:"0"`
 }
 
@@ -186,7 +224,7 @@
 }
 
 type controlListenRequest struct {
-	_       struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_       struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Backlog int16    `fidl:"0"`
 }
 
@@ -197,7 +235,7 @@
 }
 
 type controlListenResponse struct {
-	_    struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_    struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Code int16    `fidl:"0"`
 }
 
@@ -208,7 +246,7 @@
 }
 
 type controlAcceptRequest struct {
-	_     struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_     struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Flags int16    `fidl:"0"`
 }
 
@@ -219,7 +257,7 @@
 }
 
 type controlAcceptResponse struct {
-	_    struct{}         `fidl:"s,8,0" fidl2:"s,8,0"`
+	_    struct{}         `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Code int16            `fidl:"0"`
 	S    ControlInterface `fidl:"4"`
 }
@@ -231,7 +269,7 @@
 }
 
 type controlGetSockNameResponse struct {
-	_    struct{} `fidl:"s,24,0" fidl2:"s,24,0"`
+	_    struct{} `fidl:"s,24,0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
 	Code int16    `fidl:"0"`
 	Addr []uint8  `fidl:"8,128" fidl2:"128"`
 }
@@ -243,7 +281,7 @@
 }
 
 type controlGetPeerNameResponse struct {
-	_    struct{} `fidl:"s,24,0" fidl2:"s,24,0"`
+	_    struct{} `fidl:"s,24,0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
 	Code int16    `fidl:"0"`
 	Addr []uint8  `fidl:"8,128" fidl2:"128"`
 }
@@ -255,7 +293,7 @@
 }
 
 type controlSetSockOptRequest struct {
-	_       struct{} `fidl:"s,24,0" fidl2:"s,24,0"`
+	_       struct{} `fidl:"s,24,0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
 	Level   int16    `fidl:"0"`
 	Optname int16    `fidl:"2"`
 	Optval  []uint8  `fidl:"8,900" fidl2:"900"`
@@ -268,7 +306,7 @@
 }
 
 type controlSetSockOptResponse struct {
-	_    struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_    struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Code int16    `fidl:"0"`
 }
 
@@ -279,7 +317,7 @@
 }
 
 type controlGetSockOptRequest struct {
-	_       struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_       struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Level   int16    `fidl:"0"`
 	Optname int16    `fidl:"2"`
 }
@@ -291,7 +329,7 @@
 }
 
 type controlGetSockOptResponse struct {
-	_      struct{} `fidl:"s,24,0" fidl2:"s,24,0"`
+	_      struct{} `fidl:"s,24,0" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"0"`
 	Code   int16    `fidl:"0"`
 	Optval []uint8  `fidl:"8,900" fidl2:"900"`
 }
@@ -397,6 +435,34 @@
 	return resp_.S, err
 }
 
+// Acquires the `Directory.Open` rights and flags used to access this file.
+//
+// This method does not require any rights.
+// This method has the same functionality as GetFlags for File and is
+// meant as an in-progress replacement.
+func (p *ControlInterface) NodeGetFlags() (int32, uint32, error) {
+	var req_ _bindings.Message
+	resp_ := &controlNodeGetFlagsResponse{}
+	err := ((*_bindings.ChannelProxy)(p)).Call(ControlNodeGetFlagsOrdinal, req_, resp_, ControlNodeGetFlagsOrdinal, ControlNodeGetFlagsGenOrdinal)
+	return resp_.S, resp_.Flags, err
+}
+
+// Changes the `Directory.Open` flags used to access the file.
+// Supported flags which can be turned on / off:
+// - `OPEN_FLAG_APPEND`
+//
+// This method does not require any rights.
+// This method has the same functionality as SetFlags for File and is
+// meant as an in-progress replacement.
+func (p *ControlInterface) NodeSetFlags(flags uint32) (int32, error) {
+	req_ := &controlNodeSetFlagsRequest{
+		Flags: flags,
+	}
+	resp_ := &controlNodeSetFlagsResponse{}
+	err := ((*_bindings.ChannelProxy)(p)).Call(ControlNodeSetFlagsOrdinal, req_, resp_, ControlNodeSetFlagsOrdinal, ControlNodeSetFlagsGenOrdinal)
+	return resp_.S, err
+}
+
 // Sets the local address used for the socket.
 func (p *ControlInterface) Bind(addr []uint8) (int16, error) {
 	req_ := &controlBindRequest{
@@ -533,6 +599,20 @@
 	//
 	// This method requires following rights: `OPEN_RIGHT_WRITABLE`.
 	SetAttr(flags uint32, attributes fuchsiaio.NodeAttributes) (int32, error)
+	// Acquires the `Directory.Open` rights and flags used to access this file.
+	//
+	// This method does not require any rights.
+	// This method has the same functionality as GetFlags for File and is
+	// meant as an in-progress replacement.
+	NodeGetFlags() (int32, uint32, error)
+	// Changes the `Directory.Open` flags used to access the file.
+	// Supported flags which can be turned on / off:
+	// - `OPEN_FLAG_APPEND`
+	//
+	// This method does not require any rights.
+	// This method has the same functionality as SetFlags for File and is
+	// meant as an in-progress replacement.
+	NodeSetFlags(flags uint32) (int32, error)
 	// Sets the local address used for the socket.
 	Bind(addr []uint8) (int16, error)
 	// Initiates a connection to a remote address.
@@ -554,6 +634,13 @@
 
 type ControlTransitionalBase struct{}
 
+func (_ *ControlTransitionalBase) NodeGetFlags() (int32, uint32, error) {
+	panic("Not Implemented")
+}
+func (_ *ControlTransitionalBase) NodeSetFlags(flags uint32) (int32, error) {
+	panic("Not Implemented")
+}
+
 type ControlInterfaceRequest _bindings.InterfaceRequest
 
 func NewControlInterfaceRequest() (ControlInterfaceRequest, *ControlInterface, error) {
@@ -616,6 +703,25 @@
 		out_ := controlSetAttrResponse{}
 		out_.S = s
 		return &out_, true, err_
+	case ControlNodeGetFlagsOrdinal:
+		fallthrough
+	case ControlNodeGetFlagsGenOrdinal:
+		s, flags, err_ := s_.Impl.NodeGetFlags()
+		out_ := controlNodeGetFlagsResponse{}
+		out_.S = s
+		out_.Flags = flags
+		return &out_, true, err_
+	case ControlNodeSetFlagsOrdinal:
+		fallthrough
+	case ControlNodeSetFlagsGenOrdinal:
+		in_ := controlNodeSetFlagsRequest{}
+		if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+			return nil, false, err_
+		}
+		s, err_ := s_.Impl.NodeSetFlags(in_.Flags)
+		out_ := controlNodeSetFlagsResponse{}
+		out_.S = s
+		return &out_, true, err_
 	case ControlBindOrdinal:
 		fallthrough
 	case ControlBindGenOrdinal:
@@ -733,7 +839,7 @@
 )
 
 type providerSocketRequest struct {
-	_        struct{} `fidl:"s,8,0" fidl2:"s,8,0"`
+	_        struct{} `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Domain   int16    `fidl:"0"`
 	Type     int16    `fidl:"2"`
 	Protocol int16    `fidl:"4"`
@@ -746,7 +852,7 @@
 }
 
 type providerSocketResponse struct {
-	_    struct{}         `fidl:"s,8,0" fidl2:"s,8,0"`
+	_    struct{}         `fidl:"s,8,0" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"0"`
 	Code int16            `fidl:"0"`
 	S    ControlInterface `fidl:"4"`
 }
