Skip to content
Kotlin DSL for implementing UAPI Services
Kotlin Java Shell
Branch: develop
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

AWS CodebuildBuild Status Dependabot Status GitHub release


Start by reading the docs. The tutorials are slightly out-of-date (yaaay tight project deadlines!), but will at least get you pointed in the right direction.

This is very, very much a work in progress and could break or change at any time

This collection of modules provides a type-safe Kotlin runtime for designing and implementing RESTful Web Services that conform to the University API Standard.


The latest release line is 0.5.x. This provides a working subset of UAPI features.

Now that we understand the problem domain better, and since Kotlin has evolved in the meantime, the upcoming 0.6.x release line will be a substantial re-write to address the issues we've discovered using the MVP in real applications. The general principals, especially concerning the developer experience, will remain the same.

The goals of the 0.6.x release line:

  • Add a simple, hook-able lifecycle to requests and configuration
  • Rewrite the entire request pipeline to be simpler and more consistent
  • Break things into small, testable chunks (and, you know, actually test them)
  • Lay the groundwork for supporting newer parts of the UAPI spec, like filter operators, binary endpoints, field-level authorization, subresource filtering, and whatever else gets dreamed up in Architect's Roundtable each week.
  • Be more opinionated about certain things, like ceasing to abstract JSON processing and just use Jackson. Since the BYU Apps team intends to constantly be patching applications to our latest tooling choices, there's not a big reason to keep things like JSON processing swappable - we'll just cut a new major version of the runtime and upgrade all of our APIs to it over the following weeks


  • Fetch a single resource
  • Field metadata generation
  • Fetch a list of resources w/ typesafe parameters
    • Validate filter params
    • Authorize filter params
  • Run HTTP on top of Spark
  • Resource Creation
  • Resource Modification
  • Resource Deletion
  • Automatic link handling
  • Automatic subresource/fieldset handling
  • Run HTTP on top of ktor
  • Use Coroutines when possible
  • Output OpenAPI 2 and 3 documents
  • Customize name of simple path IDs
  • Automatic Meta APIs
  • Automatic related resource linking

Joseph's Big List of Crazy Ideas

  • Standard Field Definitions (byu_id, etc.)
  • Lifecycle hooks
  • Make all functions suspend and use coroutines
  • Extension modules - use lifecycle hooks to do things like add caching, etc.

Developer Info

Package Structure

The project is organized into several top-level packages. For details about each package, see the corresponding README.

Note - Everything but views is currently in flux.

  • core - Core UAPI definitions
  • views - Different views into a UAPI Service. Some examples are an HTTP-based RESTful view, GraphQL, and gRPC
You can’t perform that action at this time.