r/Kotlin

The Great Android Stack Reset: Mobile System Design History
▲ 47 r/Kotlin+3 crossposts

The Great Android Stack Reset: Mobile System Design History

Android, the last to arrive at the declarative UI party, took its time, until finally reaching a stable solution. Here's a rundown of the major changes in the Android System Design across the eras.

I was away from Android for 7 years and came home to a totally strange place. This is my attempt to make sense of what happened while I was gone - how the stack reset four times (Activities -> MVP/RxJava -> Architecture Components -> Compose) and why each lurch happened. Written for interview prep but the history stands on its own.

returnzero.dev
u/Super-Performance-86 — 3 hours ago
▲ 93 r/Kotlin+8 crossposts

Would you use an open source,ads free,no subscriptions bookmark manager app free forever?

Hey guys I am building an app after trying few apps on those category, that is a bookmark manager app, literally they asked money to save some links, wtf!? Tried another app that was cool, but features like import export was paid! So i started building my own, with simple,clean UI.. and i recently released its public version on github.. i would love to hear some feedback from you!! Btw its for android only!

​

​

​

​

u/zaarnth — 6 hours ago
▲ 34 r/Kotlin

Kotlin DataFrame 1.0.0-rc01 is out.

With RC1, the 1.0 API is now locked. The remaining work is testing it in real projects, fixing issues, and preparing the final release. 📋 Release notes: https://github.com/Kotlin/dataframe/releases/tag/1.0.0-rc01

For users, the practical takeaway is simple: if you have been waiting to update an existing project—or start a new one without targeting another Beta API—this is the version to try.

🧩 More typed DataFrame workflows in Gradle and Maven

The Compiler Plugin now understands more schema-changing transformations and edge cases. As a pipeline changes, it can keep typed column access available across more steps, with completion, refactoring, and compile-time checks in the IDE. Kotlin 2.4 also restores incremental compilation.

This brings more of the typed column experience familiar from notebooks to regular Kotlin projects.

A few useful additions:
🔎 requireColumn() helps connect dynamically loaded data with typed column access.
📄 renderToMarkdown() produces Markdown for reports, documentation, README files, issues, and pull requests.
📊 GroupBy.countDistinct() provides distinct counts for each group without extra boilerplate.
🧹 rename { ... }.to() makes the rename API easier to read, while DataFrame.print() now shows more useful table information by default.

RC1 also includes updates to SQL validation, JSON and IO configuration, DuckDB support, examples, and documentation.

Please try the release in a Gradle, Maven, or notebook workflow and share what you find before 1.0.

u/meilalina — 1 day ago
▲ 1 r/Kotlin+1 crossposts

What are the trade-offs of KSP-generated validation in Kotlin?

We are experimenting with a KSP-based approach to Kotlin validation where validation logic is generated during compilation and then executed at runtime.

But we wonder what their view is on this matter:

  • What do you see as the biggest advantages of generated validation compared with reflection-based approaches?
  • Where do you think the added KSP/build-time complexity becomes a disadvantage?
  • What would you expect from a production-ready Kotlin validation library?

We are mainly interested in the technical discussion and criticism.

Repository: https://github.com/DeveloperSyndicate/Valix

u/Neat-Isopod-9177 — 1 day ago
▲ 21 r/Kotlin

Building a set of Gradle Agent Skills

I work at Gradle, and we are building agent skills. We have five candidates:

  1. Run Gradle correctly (gradle-cli) — right task, right flags, version-aware
  2. Best-practices lint (gradle-bestpractices) — flag legacy patterns, suggest the current one
  3. New project bootstrap (gradle-init) — KMP scaffold, version catalog, convention plugins
  4. Upgrade + deprecations (gradle-update) — bump the wrapper, rewrite what broke
  5. Configuration cache migration (gradle-cc) — find what breaks CC, refactor it

Which of these would you actually use? What's missing?

reddit.com
u/Party_Till_I_Die — 2 days ago
▲ 35 r/Kotlin

Exploring Compose HTML for Server Side Rendering

Hey everyone!

I've written a small blog post about the possibility to use compose-html on the server to build fullstack web applications using Kotlin and what integrations into Spring and Ktor might look and feel like!

Quick Disclaimer: at this point in time this is just something we are exploring together with the community and does not represent an official commitment.

But we would nevertheless like to hear your feedback on the topic! Feel free to join the #compose-ssr (https://kotlinlang.slack.com/archives/C0BM8FWG58Q) Slack channel and share your feedback!

blog.jetbrains.com
u/frederikpietzko — 2 days ago
▲ 18 r/Kotlin

Have you tried the Kotlin compiler Native Image build?

The GraalVM Native Image build of the Kotlin compiler is available since 2.4.20-RC (see news). Has anyone tried it yet?

Also posting this for awareness, since I haven't read about it in many places outside of Slack.

u/lppedd — 4 days ago
▲ 5 r/Kotlin

Does transpilation always take this long?

I already have swift code written and now to make an android app, I’m using the Skip tool as a transpiler (which takes my swift code and translates it directly into readable Kotlin source code, rather than compiling it into a binary format). Because both of them are different, it’s throwing me errors left and right. I have been debugging for two days now and I’m now where close to finishing. I have tried using Claude and Gemini but still don’t see the light at the end of the tunnel. Any suggestions on what should I do or should I continue my debugging?

reddit.com
u/EquivalentCoconut588 — 3 days ago
▲ 51 r/Kotlin

I've been overhauling the community Kotlin LSP & 1.4.0-RC1 is ready for testing

I've spent the last ~6 months working on a fork of fwcd/kotlin-language-server, and I think it's finally at a point where it's worth showing to the broader Kotlin community.

The original kotlin-language-server is deprecated and has accumulated a number of performance, memory, and reliability issues, while JetBrains' official kotlin-lsp is still in alpha. The official repo also currently says that direct code contributions aren't supported because it is a read-only mirror.

The current situation left me with a fair question: what can I actually use if I want a good, fully open-source Kotlin LSP in an LSP-compatible editor today?

There are now different open-source Kotlin LSP implementations, including recent tree-sitter-based implementations that don't use the Kotlin compiler. Their approach is really interesting, especially if things like memory footprint are important to you. These kinds of LSPs provide useful syntactic and structural information, while not having access to the same deep semantic information that comes from the Kotlin compiler.

I wanted an LSP which uses the Kotlin compiler to provide more code information, while being a bit faster and more responsive.

So I started working on the existing language server instead of waiting for the situation to slowly improve, and after roughly 24 weeks and ~200 commits, ktlsp 1.4.0-RC1 is now available.

This is a bit more than a fork with a few patches

A lot has changed since the original 1.3.13 release, even if it's a minor version bump rather than a major version bump. Some of the bigger changes include:

  • Much better navigation - go-to-definition, references, implementations, type definitions, call hierarchy and type hierarchy
  • Cross-file rename support, including proper rename preparation/range validation and implicit it
  • Much richer hover information, including KDoc/Javadoc from dependency JARs and the JDK
  • Proper Markdown rendering for Javadoc, including @param, @return, {@code}, and code blocks
  • Code lenses
  • Java getter/setter pairs being exposed as Kotlin properties during completion
  • Configurable filtering of noisy packages from completion results (like java.awt.*)
  • Parser errors now appearing as diagnostics
  • Fixed stale diagnostics and races that could cause diagnostics to disappear
  • Compiler crashes being reported as diagnostics instead of silently failing
  • Better Gradle classpath resolution through the Gradle Tooling API
  • Better Maven dependency resolution
  • Test dependencies being included correctly
  • Automatic discovery of JDK src.zip
  • Content-hashed classpath caches to avoid stale project state and faster startup
  • Several memory leaks fixed by bounding internal caches
  • A number of indexing, concurrency, database, and path-handling bugs fixed

There were also substantial dependency and infrastructure upgrades alongside all these changes. The embedded Kotlin version is now 2.2.21, the minimum JVM is Java 21, and the server can run on Java 25 (personally tested this).

ktlsp also supports Kotlin 2.3.0 projects, although I haven't tried any newer Kotlin version like 2.3.20 or 2.4.x.

The full release notes delve further into the changes I made, so please check them out at https://codeberg.org/winlogon/ktlsp/releases/tag/v1.4.0-rc1 so you can update your configuration accordingly.

Why release an RC and not a stable release?

I consider 1.4.0-RC1 to be essentially the version I want to release as 1.4.0, but at this point, what I'm much more interested in finding are the bugs that I haven't found.

An LSP is really difficult to test exhaustively. I've tested the server against different projects and environments myself, and I've spent a lot of time fixing cases where the Kotlin compiler's PSI/BindingContext contained useful information that the old implementation simply wasn't exposing through LSP.

That said, there are an enormous number of combinations of:

  • Kotlin projects
  • Gradle/Maven configurations
  • OSes
  • editors
  • project structures
  • generated sources
  • dependencies
  • and unusual Kotlin code

that I just can't test alone.

I actually found a couple of additional Windows-specific URI-related path conversion bugs while testing RC1 myself, which have already been fixed after the RC1 release.

This is exactly the type of bugs I'm hoping broader testing on multiple setups will bring to light.

So I'd really like people to try it

If you've previously tried kotlin-language-server and switched away from it because of bugs, memory usage, poor navigation, missing features, or general unreliability, I'd especially like to hear from you!

Please, try to break it as much as you can. Open your projects. Jump around. Find weird Javadoc quirks. Hover over dependency APIs. Try your weirdest Gradle setup. Use it from Neovim, VS Code, Emacs, Helix, or whatever editor you use.

And if something eventually breaks, please report it! It's even better if you can provide a reproducible project and/or a list of actions that causes the bug.

What about the official Kotlin LSP?

I'm not trying to argue that ktlsp is better than the official LSP for everyone. If it eventually becomes an excellent solution, that's great for Kotlin developers, and that changes where ktlsp stands...

... but right now it is still in alpha, and direct code contributions to that repository aren't currently supported.

ktlsp gives me a place where I can actually fix problems, experiment with the implementation, accept contributions, and ship those bugfixes in new versions.

What's next?

1.4.0 is primarily about making ktlsp substantially more reliable and useful. After that, I'd like to expand ktlsp's project support further.

My current goals for the next releases include Kotlin/Native and Android support, tentatively around the 1.5.x/1.6.x timeframe.

I'm also planning to switch from K1 to K2, which should open up opportunities for further performance improvements and support for newer Kotlin versions. I don't have an exact timeframe for this yet, though, as I'm not sure how effortful the transition will be.

That said, I want to get 1.4.0 properly finished first, but they're areas I'd like to work toward once 1.4.0 is out.

For the foreseeable future, this is where I'm continuing development of the fork. If you're happy with your current Kotlin setup, there's no reason to switch just because this LSP exists.

But if you've ever thought "Kotlin LSP support really shouldn't be this frustrating", I'd love for you to give 1.4.0-RC1 a shot.

Repository: https://codeberg.org/winlogon/ktlsp

Thanks for reading this post, and please break it.

u/walker84837 — 5 days ago
▲ 3 r/Kotlin

Any news on the konsist library?

I really like it and use it a lot, but its dependencies are becoming outdated.

reddit.com
u/pragrad23 — 5 days ago
▲ 12 r/Kotlin+2 crossposts

Konifer - an OSS self-hosted image management platform

Now with inference-based features!

I have spent the last 18 months building Konifer, an open source image management platform that links your image life cycle policy to the URL paths that match your application's domain. Store, transform, and deliver your image assets however you want!

I wanted to highlight some new features. Upload Rules allow you to define, using natural language, content policy rules. These are evaluated using Google's SigLip2 vision language model in-process to allow, reject, or modify images.

Using the Rule Evaluation allows you to run an image against prompt sets to test your Upload Rules. It can also be used as an image classifier API.

It's written using ktor, JOOQ and libvips. It has really helped me gain Kotlin development skills!

https://github.com/dmaiken/konifer/

u/pumpkin_spice_daily — 6 days ago
▲ 7 r/Kotlin

What do you think about the future of Kotlin/Native in the AI / Vibe Coding era?

Rust and Go are becoming popular choices for AI-assisted development, especially for CLI tools and native apps. They offer native performance, low memory usage, fast startup, and simple deployment.

I feel Kotlin/Native could also have strong potential here.

Kotlin is still mostly associated with JVM, Java, and Android, but for CLI tools and lightweight native applications, Kotlin/Native already seems quite capable.

Kotlin itself is expressive, type-safe, null-safe, and productive, which also makes it a good fit for AI-assisted coding.

I hope JetBrains continues investing heavily in Kotlin/Native, especially in tooling, compilation speed, binary size, native interoperability, and ecosystem growth.

How do you see the future of Kotlin/Native? Could it become a serious option alongside Rust and Go for CLI and native development, or will Kotlin remain mainly a JVM language?

reddit.com
u/Beneficial_Tip9004 — 5 days ago
▲ 25 r/Kotlin

How many of you are using Kotlin with SpringBoot as opposed to something else?

Just curious as I’ve transitioned off Java/Scala for a Kotlin (on Backend) many years ago but always with Spring Boot. I’ve tried Ktor here and there but it never stuck. Over time we have even reduced Spring surface (no hibernate for example) so it might be as good time as any to make the switch for new projects.

Any experiences with Ktor or something else, especially on medium to large sized projects?

reddit.com
u/malinica-rs — 7 days ago
▲ 315 r/Kotlin+3 crossposts

Apache Fory™ JSON: 10x Faster JSON Serialization Framework for Java

Apache Fory JSON is a high-performance JSON serialization framework for Java. It maps Java objects to and from standard JSON text and UTF-8 bytes.

In the published benchmarks, it reaches up to 10.91× Jackson’s throughput and 10.89× Gson’s in java-json-benchmark, and up to 5.55× and 10.00× respectively in the jvm-serializers MediaContent benchmark.

It supports JDK 8+, Android, and GraalVM Native Image. JDK17+ Record is also supported.

fory.apache.org
u/Shawn-Yang25 — 9 days ago
▲ 29 r/Kotlin

Apache Fory was 10× slower than kotlinx.serialization

Most JSON benchmarks answer a useful but specific question: how fast is a library after initialization and JIT warmup?

I wanted to measure a different workload: a CLI, job, function, or short-lived process that performs only 1–100 JSON operations.

I added a fresh-JVM benchmark track to java-json-benchmark, alongside its existing warmed JMH suite.

The short version: there is no universal winner. In this experiment, kotlinx.serialization had the lowest cold cost, while Apache Fory delivered much higher warmed throughput.

Fresh-JVM results

Each sample launches a new JVM. These are median initialization-plus-first-operation times; complete process wall time is in parentheses.

Library Serialize Deserialize
kotlinx.serialization 13.37 ms (77.91 ms) 12.92 ms (77.05 ms)
Gson 39.54 ms (105.77 ms) 38.73 ms (104.72 ms)
Jackson 114.17 ms (178.83 ms) 134.03 ms (198.16 ms)
Apache Fory JSON 122.97 ms (857.80 ms) 125.39 ms (858.67 ms)

Fory's roughly 850 ms process lifetime is reproducible, while its measured initialization and operation phases take roughly 123–147 ms. The benchmark locates the extra time outside those phases, but does not yet explain it.

Warmed JMH results

For nominal 1000 KB payloads, aggregate throughput across 15 threads was:

Workload Fory kotlinx Ratio
Users serialization 22,304 ops/s 3,885 ops/s 5.74×
Users deserialization 8,228 ops/s 3,032 ops/s 2.71×
Clients serialization 21,356 ops/s 3,110 ops/s 6.87×
Clients deserialization 9,929 ops/s 1,204 ops/s 8.25×

Generated serializers therefore appear especially attractive for short-lived Kotlin applications, but Fory is considerably faster once the JVM is warm.

Methodology

Cold run:

  • 30 fresh JVMs per cell
  • 4 libraries × 2 operations × 3 batch sizes
  • 720 JVM processes total
  • batches of 1, 10, and 100 operations
  • seeded blocked randomization
  • common 2,142-byte Users-like Kotlin object graph
  • -Xms64m -Xmx64m -XX:+UseSerialGC

Warmed run:

  • JMH 1.35
  • 15 threads
  • 2 forks
  • one 5-second warmup iteration
  • three 1-second measurement iterations
  • nominal payloads from 1 to 1000 KB

Both ran on Liberica JDK 25.0.4, Debian 13/KVM, and an AMD Ryzen 7 7700X.

Important limitations

The cold track uses one common mutable @Serializable Kotlin DTO. Consequently, even Jackson, Gson, and Fory children include Kotlin stdlib and kotlinx-serialization-core. This is a common-application-model comparison, not minimal Java-only startup footprint.

It currently covers only a Users-like 2 KiB graph. It does not yet include the Clients model with UUID, BigDecimal, and date/time adapters. "Fresh JVM" also does not mean cold filesystem or artifact caches.

Everything published here:

No offense to Fory marketing, just for fun ;)

reddit.com
u/javaprof — 9 days ago