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.



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, some of the components, namely APIs, ORMs are better suited for the groups listed above. For more comprehensive support for the enterprise, look into Spring Boot and Vertx.io

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