A full-stack demo application written in Kotlin for JetBrains Night Moscow 2019. Presentation video in Russian.
See kotlin-1.3.40-preview branch for Kotlin 1.3.40 update with new tooling and multi-module project structure.
This application displays a feed containing user-generated posts and comments. All data is stubbed by the fakeJSON and JSON Placeholder services.
It is a Kotlin Multiplatform project.
It uses:
- kotlin-multiplatform plugin for Kotlin compilation;
- kotlin-frontend-plugin for frontend configuration;
- Ktor framework as a web server;
- H2 in-memory database with Exposed to preload posts at application startup;
- kotlinx.serialization for client/server (de-)serialization and RPC;
- React, Styled components, Ring UI 2.0 and kotlin-wrappers for rendering.
During application startup posts are preloaded to the in-memory database from the fakeJSON (or JSON Placeholder) service. When the user requests the page, several posts are selected from the DB and the corresponding comments are fetched via the multi-platform HTTP client. Posts with comments are served to the client via RPC. After the initial render is done, information about authors is fetched via the client-side HTTP client and rendered after all coroutines terminate successfully. The "Load more comments" button fetches additional comments for the post using the multi-platform HTTP client.
This application has no error handling and has very limited RPC serialization. It's not meant for production use and serves only as a technology example.
gradle run
runs webpack-dev-server and the Ktor application. You can find logs at build/logs
.
gradle stop
stops webpack-dev-server and the Ktor application.
gradle bundle
to create static files bundle.
gradle webpack-run
runs webpack-dev-server only.
gradle webpack-stop
stops webpack-dev-server only.
gradle ktor-run
runs the Ktor application only.
gradle ktor-stop
stops the Ktor application only.
gradle jvmTest
to run common and JVM tests with JUnit.
gradle runKarmaTests
to run common and JS tests with Mocha and Karma.
webpack-dev-server responds at http://0.0.0.0:8080, the Ktor application responds at http://0.0.0.0:8081.
Feel free to contact me via:
- Mikhail.Kraynov@jetbrains.com
- Kotlin Slack channel
- GitHub issues
Pull requests are welcome!