Overview

Overiew

Slate Kit is a Kotlin based open-source set of libraries. It is comprised of several projects and modular components that collectively provide pre-built architecture that can be used to build any type of application on the JVM. Slate Kit can also be used as an open-source alternative to FireBase/Parse Beta* as the server-side backend for your mobile / web applications.



Goals

The Slate Kit framework was designed for and extracted from a sizable and sophisticated production Android Application with a Server backend. Slate Kit is a Kotlin first framework architected with the explicit goals below in mind:

SimpleDesigned with simplicity in mind, modular and very light-weight.
Kotlin100% Kotlin, emphasis on functional, immutable code (pragmatically, without pure FP)
SharedResonably light-weight, yet suitable for most needs on both Android and Server.
PlatformsLong-term goals of making this support Kotlin Multi-Platform/Native
CostsReducing costs with rapid development, full-stack / sharable code for both Server and Android.
PortabilityReasonable abstractions for Cloud components for portability.

Back to top



Uses

Slate Kit can be used to quickly build well structured and scalable architecture and applications for different target groups.

Startups Start with a strong base architecture to quickly build high-quality MVPs that can scale
SMBFor small to medium sized businesses, build backend applications with pre-built application/service templates/components
Mobile Set up the back-end for your mobile apps. Use Kotlin code for both Android and the Server
PersonalLearn Kotlin, functional programming, for self-improvement or side projects
EnterpriseThere are several components in Slate Kit that can currently be used in the Enterprise, such as the App, Utilities, CLI. However, Slate Kit is simpler and thus less comprehensive than enterprises offerings such as Spring.io, Vertx.io, Micronaut.io, all of which are very solid solutions and recommendations for the enterprise.

Back to top



Tech

Slate Kit is built for the JVM using 100% Kotlin. There are thin abstractions over some infrastructure services such as Files, queues, docs. Currently, only AWS implementations are available for the infrastructure abstractions. However, in the future, support for Google and Azure cloud services may be implemented. Other services are using directly.

Item Infrastructure Usage Provider
1 Files Abstracted AWS S3 ( see files )
2 Queues Abstracted AWS SQS ( see queues )
3 Documents Abstracted AWS Dynamo ( see docs )
4 Entities Abstracted Support for MySql ( see orm )
5 Http Server Direct Usage Ktor ( from JetBrains ) - used as the API server
6 Http Client Partially Abstracted OkHttp ( see HttpRPC )
7 Metrics Partially Abstracted Micrometer.io ( see tracking )
8 Logs Abstracted Logback ( see logs )
9 SMS Abstracted Twilio ( see sms )
10 Email Abstracted SendGrid ( see email )
11 Alerts Abstracted Slack Web Hooks ( see alerts )

Back to top



Components

These are some of the main architecture components available in Slate Kit.

Component Visit About Description
App Base Application A powerful base app with support for command line args, environment selection, configs per environment, logging, life-cycle events, encryption, diagnostics and more
API Protocol Independent APIs Easily build protocol independent APIs using simple classes/methods with annotations, that can be hosted / run on both Slate Command Line Shell and/or as Web APIs in the Slate Server
CLI Command Line Interface A command line interface shell that you can extend to host your “Protocol Independent APIs” and/or hook into to handle and execute any user commands in a shell.
Jobs Background Jobs Backgrounds Jobs / Task Queue library to process one-time, paged, and queue based jobs.
ORM Domain-Driven ORM A simple, light-weight, Domain-Driven ORM to map your entities to and from database tables. MySql is currently supported with support for PostGres coming soon.
Server Web API Server A Web API server built using Akka Http that can host your “Protocol Independent APIs”. You can extend this server and register your own APIs.
Architecture Architecture Components Architectural abstractions and implementations for Files, Queues, Tasks and more. Files and Queues are abstracted with default implementations for AWS S3, SQS.
Utilities Utility Components Many useful utility components and code that can be used for any application. All these are located in the Slate.Common project and independent and modular.
Mobile Mobile / Web Features Mobile and web features for most applications, such as Users, Devices, Registration, Invites, Settings and more.

Back to top



Philosophy

Philosophy, design goals, approaches and standards

Tech Built in Kotlin, for the JVM ( multi-platform coming later), and designed to be reusable for both Client ( Android ) and Server (Backend/APIs/Services).
Design Library based approach instead of a "Framework". Broken into several modules so you can pick as little or as much as you want.
Standards Check our coding standards
Approach Simplicity and Practicality above all else
Components Composable, single-purpose components as building blocks. Organized into various projects.
Portable Designed for reasonably low vendor lock-in via a "library" based approach.
Minimal Dependencies on external, 3rd-party libraries are kept to a minimum. Json Simple, OkHttp( for Http client ), Logback( Optional ), Micrometer ( Optional )
License Apache 2.0 for most components. The API, Jobs component will have a dual Apache 2.0 / AGPL license.
Style Emphasis on immutability and pragmatic functional programming as much as possible.
However, this is NOT a 100% purely functional code base, and there is NO category theory.

Back to top