Skip to main content

Tegral 0.0.5-SNAPSHOT

A collection of reusable Kotlin libraries and frameworks, and a web framework that ties them together.

App.kt
class AppController : KtorController() {
override fun Routing.install() {
get("/hello") {
call.respond("Hello World!")
}
}
}

fun main() {
tegral {
put(::AppController)
}
}

Tegral libraries

Integrable, reusable and documented. Everything you need to perfect your Kotlin app foundations.

Tegral DI

A powerful and testable dependency injection framework for building all kinds of apps.

class Controller

class Service(scope: InjectionScope) {
private val controller: Controller by scope()
}

tegralDi {
put(::Controller)
put(::Service)
}

Tegral OpenAPI

Create OpenAPI specs in Kotlin and serve Swagger UI. Can be used stand-alone, with Ktor or with Tegral Web.

data class Greeting {
val recipient: String
}

get("/hello") {
call.respond(Greeting("You"))
} describe {
summary = "Greet someone"
200 response {
json { schema<Greeting>(Greeting("Hi!")) }
}
}

Tegral Web

The Kotlin-est way to build back-end applications. Make use of the entire Tegral stack in a simple, cohesive experience.

// NOTE: this syntax is not available yet.

fun Routing.greeter() {
get("/hello") {
call.respond("Hello World!")
}
}

fun main() {
tegral {
put(Routing::greeter)
}
}

Tegral Niwen

Create simple lexers and parsers with Tegral Niwen's handy DSL. A good fit for prototyping, toy projects or simple languages.

enum class MyTokenTypes : LixyTokenType {
DOT, WORD, WHITESPACE
}

val lexer = niwenLexer {
state {
"." isToken DOT
anyOf(" ", "\n", "\t") isToken WHITESPACE
matches("[A-Za-z]+") isToken WORD
}
}

Tegral PrismaKTExperimental

Use Prisma in your Kotlin applications. Generate JetBrains Exposed bindings for your databases for an awesome Prisma + Kotlin experience.

// schema.prisma
model Person {
id Int
name String
}

// prismakt/generated/MyTable.kt
public object PersonTable : IdTable<Int>(name = "Person") {
public override val id = integer("id").entityId()
public val name = varchar("name")
}