We use reflection.fbs as our intermediate representation. flatc parses .fbs files, checks them for errors and stores the resulting data in this IR, outputting .bfbs files. Since this IR is a Flatbuffer, you can load and use it at runtime for runtime reflection purposes.
There are some quirks:
Objects.Enums.advanced_features field of Schema. These mark the presence of new, backwards incompatible, schema features. Code generators must error if generating a schema with unrecognized advanced features.--bfbs-filenames=$PROJECT_ROOT, or it will be inferred to be the directory containing the first provided schema file.You can invoke it like so
flatc -b --schema ${your_fbs_files}
This generates .bfbs (binary flatbuffer schema) files.
Some information is not included by default. See the --bfbs-filenames and --bfbs-comments flags. These may be necessary for code-generators, so they can add documentation and maybe name generated files (depending on the generator).
TODO(cneo): Flags to output bfbs as flexbuffers or json.
TODO(cneo): Tutorial for building a flatc plugin.