Graphaello

A Tool for Writing Declarative, Type-Safe and Data-Driven Applications in SwiftUI using GraphQL.

Try it out!

To load data from a GraphQL API you can use the GraphQL property wrapper inside your SwiftUI view. Graphaello will generate a query and all the networking, and UI code needed to display your view.

In this example we are fetching data from an API that aggregates information about Covid-19. We ask for the name of the country of the current user and the number of cases in that country using the GraphQL property wrapper and display it to the user:

struct MyCountryView: View {
  @GraphQL(Covid.myCountry.name)
  var name: String

  @GraphQL(Covid.myCountry.cases)
  var cases: Int

  var body: some View {
    VStack(alignment: .leading) {
      Text(name).font(.title)

      Text("There's been a total of \(cases) cases in \(name).")
        .font(.body)
        .foregroundColor(.secondary)
    }
  }
}

let view = Covid().myCountryView()

Rendered UI:

Get Started

Loading and Error State Handling

You will never have to write UI for loading or error states ever again. Just focus on what your App looks like when the data is there. We will take care of the rest.

Declarative

Don't tell your App how to fetch data. Just declare the data that you need. Graphaello will fetch it for you.

Type-Safety

Never mix up values again. With compile time safety, you will always know what data you're getting. You can rest assured more mistakes are now caught at compile time.

Reusable Components

Do you have UI components that you want to use in multiple places? No problem! Graphaello was built with modularity and reusability in mind. You can use fragments to describe components that you want to reuse.

Paging Support

Do you need to show a lot of data. Graphaello supports Paging via connections. You can control every aspect of pagination or use the built-in infinite scrolling.

Only write Swift

You never actually have to write any GraphQL queries. Your UI Code *IS* your GraphQL code. You no longer have to go back and forth between files. If you need data, simply ask for it in your UI.