Overview

Overiew

Slate Kit is a Kotlin based open-source tool-kit containing architecture components and utilities. It is comprised of several projects and modular components that collectively provide pre-built architecture that can be used to build applications for both Server and Android, optimizing for code/component reuse. There are also various interfaces to abstract over Cloud infrastrature such as files/queues to decouple / “unbundle” from Cloud Providers ( although AWS implementations are available by default ).



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)
SharedFull-Stack, resonably light-weight and 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 of Cloud components for portability between cloud providers

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 (Minimum Viable Products) 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 in some areas than enterprise 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.

Infrastructure Usage Provider
Files Abstracted AWS S3 ( see files )
Queues Abstracted AWS SQS ( see queues )
Documents Abstracted AWS Dynamo ( see docs )
Entities Abstracted Support for MySql ( see data docs )PostGres & Mongo coming soon
Http Server Direct Usage Ktor ( from JetBrains ) - used as the API server
Http Client Partially Abstracted OkHttp
Metrics Partially Abstracted Micrometer.io ( see tracking )
Logs Abstracted Logback ( see logger )
SMS Abstracted Twilio ( see sms )
Email Abstracted SendGrid ( see email )
Alerts Abstracted Slack Web Hooks ( see alerts )
Dates Aliased ThreeTen BP is used for Full-Stack / Android alignment

Back to top



Components

These are the main architecture components available in Slate Kit.

Component Docs Version Target Status License About
Results Android / Server Stable Successes / Failure Modeling
App Server Stable Runnable App Template
API Server Beta Universal APIs
CLI Server Beta Command Line Interface
Cache Android / Server Beta Caching library
Context Android / Server Stable Container library
Entities Android / Server Beta SQL / Data library
Email Server Stable Email library
Files Server Stable Cloud Files library
Generator Android / Server Beta Project generator
Jobs Android / Server Beta Background jobs/queues
Queues Server Stable Cloud Queues library
SMS Server Stable SMS library
Tracking Android / Server Beta Diagnostics related library
Utilities Android / Server Beta Utility Components

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



Releases

Releases occur roughly every 2 weeks to 1 month for planned releases and uses Semantic Versioning in format MAJOR.MINOR.PATCH

Type Cycle Version Note(s)
Hot-Fix On Demand 1.0.2 For critical / security issues
Patches ~ 2 Weeks 1.0.3 For small bug-fixes as needed. Roughly every 2 weeks or sooner
Minor ~ 1 Month 1.1.0 For small or moderate changes and/or new features
Major ~ 3 Months 2.0.0 For major releases with new features and potentially breaking changes/ redesigns

Back to top



Performance

Performance details of the various modules will be coming soon and available/documented within each applicable module such as Jobs, APIs, Queues, etc. Generally speaking, most modules are thin layers over existing items and are expected to not impact performance and or be fairly negligable such as the thin abstractions over Cloud Queues/Files such as AWS S3/SQS.

Type Security Note(s)
Files AWS S3 Also refer to AWS S3 docs
Queues AWS SQS Also refer to AWS SQS docs
APIs Web/Http APIs Built on top of Ktor. See module for upcoming docs on performance
Jobs Background jobs Built using Kotlin Coroutines and Channels. See module for upcoming docs on performance

Back to top



Security

Security details of the various modules will be coming soon and available/documented within each applicable module such as App, CLI, Jobs, APIs, Queues, etc. Generally speaking, most modules security revolve around protecting sensitive configuration settings, data during transmission and authentication / authorization for runnable services such as the App, CLI, APIs.

Type Security Note(s)
Conf Config settings Settings can be encrypted or loaded from env vars
Files AWS S3 Also refer to AWS S3 docs
Queues AWS SQS Also refer to AWS SQS docs
App Runnable App See module docs for more info
APIs Web/Http APIs See module docs for more info
CLI CLI See module docs for more info
Data Sql See module docs for more info

Back to top