Fuaranfuaran

The source for generative UI

Contributing

Fuaran UI is Apache-2.0 and open to contributions – the language tier, the host implementations, the shared wire-format fixtures, and this documentation site. This page is the short version of how to help.

Where things live

The code lives on GitHub under the fuaran-ui organisation: the F# reference and renderer, the TypeScript / Python / Go / Rust hosts, the native Swift and Kotlin surfaces, the shared wire-format fixture corpus, and this site. Pick the repo for the surface you want to change – the hosts page maps each language to its repository.

The wire format is the contract

The canonical core@1.0 wire format is the contract every host holds. If a change touches the wire – a new node kind, a new op, a shape change – it lands in the F# reference, the shared fixture corpus and every codec host in the same change, so the corpus and the hosts never drift. A wire change that moves one host but not the corpus is not a mergeable change; the cross-host parity gate is what makes "one tree, every host" a guarantee. See the wire format.

Pull requests

  • Branch from main and open a PR against main.
  • Sign off your commits (DCO). Add a Signed-off-by: Your Name <you@example.com> trailer to each commit (git commit -s) to certify the Developer Certificate of Origin.
  • Keep the surface honest. Examples and docs are built and validated in CI; a broken snippet or a wire example that fails the language's gates is a red build, not a review comment.
  • Be excellent to each other. Contribution happens under a standard code of conduct; harassment or exclusionary behaviour is not tolerated.

Reporting a security issue

Please do not open a public issue for a security vulnerability. Report it privately to the maintainers via the security policy on the relevant repository (GitHub → SecurityReport a vulnerability), and give us a reasonable window to respond before any public disclosure.

Where to ask

For questions that aren't bug reports, open a discussion or issue on the repository for the surface you're working with. For "how do I express X as a tree?", the component reference and the guide are the fastest answers.