Every UDL file must have a namespace block:

namespace math {
  double exp(double a);

It serves multiple purposes:

  • It identifies the name of the generated Rust scaffolding file <namespace>
  • It identifies the package name of the generated foreign-language bindings (e.g. uniffi.<namespace> in Kotlin)
  • It also contains all top-level functions that get exposed to foreign-language bindings.