A declarative UI framework for iOS that replaces Nibs and Storyboards with XML templates and runtime-evaluated expressions.
Layout is a declarative UI framework for iOS that enables developers to build user interfaces using XML template files and runtime-evaluated expressions. It replaces traditional Nibs and Storyboards with a more maintainable, human-readable format while offering features like live reloading and a simplified layout system.
iOS developers seeking a more maintainable and collaborative alternative to Interface Builder, especially those working on large projects where Storyboards cause merge conflicts and reusability issues.
Developers choose Layout for its human-readable XML templates, live reloading capabilities, and seamless integration with UIKit, allowing incremental adoption without rewriting entire apps.
A declarative UI framework for iOS
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
XML files are text-based and merge-friendly, drastically reducing conflicts compared to binary Storyboards, as highlighted in the README's emphasis on solving merge issues in collaborative projects.
Allows instant UI updates in the simulator by editing XML files without recompiling, speeding up development iteration—the README demonstrates this with Cmd-R reloading.
Runtime expressions support strongly-typed logic for view properties, enabling state-driven UI changes with early error detection via the Red Box debugger.
Works with ordinary UIKit components and permits incremental adoption, allowing Layout views to embed in Nibs/Storyboards and vice versa, as stated in the philosophy.
Autocomplete is only available for Sublime Text, not Xcode, forcing developers to rely on external editors or manual typing, which can slow down UI creation.
Calling setState() re-evaluates all expressions in the node hierarchy, which may cause performance issues in complex UIs with frequent state changes, as noted in the update mechanism.
Requires explicit opt-in (LayoutNode.useLegacyLayoutMode = false) for the intuitive layout mode, creating confusion and potential breaking changes for existing projects during updates.