/nimbus-docs

Apache License 2.0Apache-2.0

Important: this project is currently on halt. The latest version is in Beta because it needs more testing. Use it at your own risk. Having said this, Nimbus is still probably the best open source library for implementing server driven ui with Jetpack Compose and Swift. This project is not archived because there is a good chance it will get some investment later this year (2023). If you need to talk to the developers, please send an e-mail to tiago.franca@zup.com.br.

Disclaimer

This is a work in progress. Just like every Nimbus library, the documentation is in beta stage. Feel free to contribute!

Introduction

The Nimbus SDUI is:

  1. A solution for applications that need to have some of its user interface (UI) driven by the backend, i.e. Server Driven UI (SDUI).
  2. A protocol for serializing the content and behavior of a UI into JSON so it can be sent by a backend sever and interpreted by the front-end.
  3. A set of libraries that implements this protocol.

An application that uses Nimbus will have:

  1. A backend that provides the JSON describing the UI.
  2. A frontend application that will interpret the JSON sent by the backend and show the UI.

Nimbus libraries that are currently being implemented and are in beta stages:

Nimbus libraries that are currently being implemented and are in alpha stages:

Planned implementations of Nimbus (after the first stable release):

  • Backend
    • Nimbus for Kotlin
  • Frontend
    • Nimbus for React (web)

Attention: the current frontend implementations for Nimbus only support Compose and SwiftUI. As of 2023, we heavily recommend their use for developing Android and iOS applications. If, for some reason, you can't use them, you might want to take a look at Beagle.

These are the libs maintained by the main Nimbus team, but, as said before, Nimbus is primarily a protocol, so, as long as the JSON contract is respected, the developers can create their own backend and frontend in their preferred languages. We encourage the community to do so and share these new libs!

Versioning

The versions of the Nimbus libraries are not shared. Although they will all start at 1.0.0, they will each follow their own path. The specification (protocol) will also have its own versioning.

The versions follow the formats a.b.c for stable versions and a.b.c-flag.d for pre-releases. a is the major version and will be changed only when a breaking change happens. b will be changed whenever a new feature is implemented. c will be used for small fixes. flag can be either "alpha", "beta", "rc" or "snapshot" and d will be an incremental integer to identify the pre-release build.

Current development stage

We're currently in beta for the frontend libs and in alpha for the backend lib.

For checking progress and what's next, you can visit our public development board and backlog.

Getting started

Documentation

Samples

Nimbus has two sample applications implemented for the backend, SwiftUI and Compose.

  1. To do app: a simple to do app that lists, edit, remove and creates personal notes. The implementation is not yet complete. This will serve as the basis for writing a tutorial.
  2. Store: an e-commerce app with a native navigation bar that loads server-driven content. The implementation is complete, but it's a more complex example of server driven ui when compared to the first sample.

Useful links

  • Introductory article: blog post introducing Nimbus SDUI.
  • Documentation: the documentation for both the frontend and backend libraries. This is not in a website format yet, but you can read everything through GitHub.
  • Nimbus: the common code between Nimbus SwiftUI and Nimbus Compose. This has been built using Kotlin Multiplatform Mobile (KMM).
  • Nimbus Compose: all modules necessary to run Nimbus in a Jetpack Compose project.
  • Nimbus SwiftUI: all modules necessary to run Nimbus in a SwiftUI project.
  • Nimbus Compose Layout: layout components for Nimbus Compose.
  • Nimbus SwiftUI Layout: layout components for Nimbus SwiftUI.
  • Nimbus Backend TS: modules for the backend in Typescript.

License

Apache License 2.0.