From zero to 10M lines of Kotlin

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
  • ktor

    Framework for quickly creating connected applications in Kotlin with minimal effort

  • If you want something old and battle-tested, Spring Boot works just fine in Kotlin. I found the extreme OO design kinda off-putting, but once I got over it I had a great time with it.

    KTor [0] is the 'native' web framework for Kotlin, and there's also a full-stack framework built around it that just hit version 1.0, KWeb [1].

    [0] https://ktor.io

  • ktfmt

    A program that reformats Kotlin source code to comply with the common community standard for Kotlin code conventions.

  • I wanted to post that ktfmt, the FB Kotlin formatter, is much less well-known than ktlint.

    IMO, it produces the most (subjectively) readable code, and is the only one that doesn't leave room for you to inject personal style in certain places. (ktlint will let you get away with one of several ways of formatting code, so long as it falls within some guidelines, which can lead to inconsistent formatting).

    It's a superior formatting tool IMO.

    https://github.com/facebook/ktfmt

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • Anki-Android

    AnkiDroid: Anki flashcards on Android. Your secret trick to achieve superhuman information retention.

  • One of the things they don't mention is that J2K makes you pick between:

    * A conversion in 1 commit: complicating/breaking the 'follow' behaviour of 'git blame'

    * A conversion in 2 commits: the first 'rename' commit doesn't compile, complicating/breaking 'git bisect'

    I hacked up a script which makes the 'rename' commit compile when doing a ~100KLOC Kotlin conversion. This may be useful for others:

    * https://github.com/ankidroid/Anki-Android/blob/937a6560913ec...

    * https://github.com/ankidroid/Anki-Android/blob/937a6560913ec...

  • javalin.github.io

    Javalin website source code

  • KotlinLanguageServer

    Kotlin code completion, diagnostics and more for any editor/IDE using the Language Server Protocol

  • I'll bring up the Kotlin LSP[0] every time I see Kotlin on HN because I really hope the LSP takes off (which would make it viable to use Kotlin with a non-IntelliJ editor).

    Kotlin as a language looks really cool, but I don't want to give up terminal-based, modal editing (which I'd have to in order to use IntelliJ).

    Along those lines, I once tried diving into using Gradle outside IntelliJ, and I couldn't find any good resources to help with that. If folks have hints/links-to-blog-posts with regards to that as well, that'd be great!

    [0] https://github.com/fwcd/kotlin-language-server#this-reposito...

  • TypeScript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • Types in TS are Turing Complete [1], so any static analysis you build ontop of that language is bound to be unsound or undecidable. You could argue this rarely occurs in practice, but I would prefer a type system that is incomplete but sound and decidable. Incidentally, this issue also affects Java, which is both unsound [2] and undecidable [3]. Kotlin does have a fairly complicated subtyping relation [4], which has caused similar issues in languages like Scala [5], however whether the same issue affect languages based on mixed use-site and declaration site variance like Kotlin requires further investigation.

    [1]: https://github.com/microsoft/TypeScript/issues/14833

    [2]: https://io.livecode.ch/learn/namin/unsound

    [3]: https://arxiv.org/abs/1605.05274

    [4]: https://kotlinlang.org/spec/type-system.html#subtyping

    [5]: https://arxiv.org/abs/1908.05294

  • galoisenne

    🕸️ Graphs, finite fields and discrete dynamical systems in Kotlin

  • Well, I've been trying for about three years, but to be fair I'm a pretty slow programmer so you may have better luck.

    > a language being too obscure to have seen much academic study

    Doesn't seem too obscure to me.

    https://scholar.google.com/scholar?hl=en&as_sdt=0%2C5&q=kotl...

    > T isn't generic in that code, it's just a class.

    I think it needs to be a generic type in Kotlin for this to work, because otherwise it will dispatch to a single method. It's tricky to get Kotlin to do much compile time computation. Not saying that it's impossible, but LMK when you've actually tried it. Here's some sample code if you want to try encoding a Boolean logic:

    https://github.com/breandan/galoisenne/blob/2e465e7a753f6341...

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts