Slate Kit is a Kotlin based open-source set of light-weight and modular libraries representing 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 the Server and Android, optimizing 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 ).
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:
|Simple||Designed with simplicity in mind, modular and very light-weight.|
|Kotlin||100% Kotlin, emphasis on functional, immutable code (pragmatically, without pure FP)|
|Shared||Resonably light-weight, yet suitable for most needs on both Android and Server.|
|Platforms||Long-term goals of making this support Kotlin Multi-Platform/Native|
|Costs||Reducing costs with rapid development, full-stack / sharable code for both Server and Android.|
|Portability||Reasonable abstractions for Cloud components for portability.|
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|
|SMB||For 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|
|Personal||Learn Kotlin, functional programming, for self-improvement or side projects|
|Enterprise||There 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.|
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.
|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||Abstracted||SendGrid ( see email )|
|11||Alerts||Abstracted||Slack Web Hooks ( see alerts )|
These are some of the main architecture components available in Slate Kit.
|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.|
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.