One IDE vs. the Right Tool: Android Studio's Boundary Trade-off
Android Studio keeps cross-platform Kotlin run and debug in one workspace but hands Swift editing to Xcode. This explainer maps the benefit, cost, and condition behind that boundary.
Loading…
Topic
19 posts about Kotlin. Every summary links to the original.
See the idea
Android Studio keeps cross-platform Kotlin run and debug in one workspace but hands Swift editing to Xcode. This explainer maps the benefit, cost, and condition behind that boundary.
The Good Stuff
Paid picks we use ourselves. Links carry a referral code — a subscription through one earns us a commission at no extra cost to you.
Newest first
The Kotlin Foundation wrapped up its fourth Google Summer of Code program in 2026, supporting two projects by Ayako Hayasaka and Mark Seif Khalil. Ayako implemented tail-call support in the Kotlin/Wasm backend, using return_call and return_call_ref instructions to avoid stack growth in recursive programs, and then found and fixed a missing optimization for return_call in the V8 engine that caused a performance regression. Mark built a database and automated pipeline to collect and structure scattered information about where Kotlin is taught worldwide, covering courses, curricula, repositories, and learning platforms. In Ayako’s benchmarks, several recursive patterns achieved 1.7 to 4.3 times faster execution at a recursion depth of 10,000, and at a depth of one million, the same programs crashed without tail calls but completed successfully with them. The education landscape project now provides a reusable foundation for monitoring Kotlin’s presence in education and identifying trends and gaps.
IntelliJ IDEA’s Java and Kotlin language support extension has reached its 1.0 stable release, now available for VS Code and Cursor editors. The extension is powered by IntelliJ IDEA’s language server and debug adapter, providing smart code completion, navigation, code analysis, refactoring, and build tool support for Maven, Gradle, and Bazel. It also offers powerful debugging capabilities including emulated breakpoints and async stack traces, along with JUnit test runner support. The 1.0 release resulted from close collaboration with the Cursor team, making Java and Kotlin a first-class experience in Cursor’s Agents Window with dedicated support for nullability and Spring Framework specifics. Starting with 1.0, the extension requires an IntelliJ IDEA Ultimate subscription but provides a 30-day free trial, and future updates will enable agents to call the LSP directly for faster AI-assisted development, with announcements pending for purely agentic licensing.
The KotlinConf 2027 Call for Papers is open, and the post offers guidance for crafting a strong proposal, emphasizing that a valuable talk can come from a simple lesson learned rather than a groundbreaking discovery. Reviewers first notice the overall care, including a clear title and focused abstract, and they can detect AI-generated content, so authenticity and a personal voice are crucial. A good proposal starts with a central story that identifies a problem, what was tried, and what was learned, even from a small project, and it should be tested with colleagues. The title should communicate the topic and benefit, avoiding vagueness, while the abstract should provide two to three paragraphs of meaningful detail that outline the talk’s journey and include concrete takeaways. The post advises choosing the right format between lightning and regular sessions, and reviewing the proposal for clarity and authenticity before submitting.
Verifone architect Yuri Geronimus presented at KotlinConf 2026 on using Kotlin’s type system to enforce payment specifications at compile time. He described six incident patterns where a single misused word caused outages, compliance failures, or financial loss, including a terminal fleet outage from a nullable mandatory field. His method uses value classes for spec nouns, validate factories at boundaries, non-null types, masked sensitive data by default, and state-specific classes to make illegal states unrepresentable. Geronimus advocates incremental migration from legacy Java and C++ systems using four parallel tracks rather than a rewrite, noting that payment terminals must operate offline for up to 40 days by regulation. The approach shifts reliability from developer discipline to compiler enforcement, enabling engineers to speak the business language and propose regulatory changes.
The Kotlin Toolchain 0.13 provides a unified CLI entry point for building JVM, Android, iOS, multiplatform, and server-side applications with declarative configuration. It introduces the kotlin new command for interactive project creation, improved iOS onboarding with automatic simulator setup, and Android SDK auto-provisioning on IDE import. New features include Swift Package Manager dependency support for Apple platforms, multiplatform library publication with Compose Resources and SwiftPM metadata, and Kotlin/Native compiler caching for faster rebuilds. The toolchain is designed for both developers and AI agents, with a Hot Reload MCP server and dedicated AI agent skills included in official Kotlin agent skills. The team recommends the toolchain for new KMP projects and plans future milestones like brew installation, out-of-the-box AI skills, and streamlined app store publishing.
JetBrains announced that Java and Kotlin by IntelliJ IDEA, an LSP-based extension, has reached Release Candidate stage. The extension brings IntelliJ IDEA’s Java and Kotlin language intelligence to third-party editors like VS Code and Cursor. Since the preview, it has been downloaded over 20,000 times and includes features such as smart code completion, navigation, inspections, quick-fixes, project-wide refactorings, DAP-based debugging, Maven, Gradle, and Bazel project support, built-in test running, and Spring tooling interoperability. The RC is the final EAP build and will be available for 30 days without a license; after the stable release, a 30-day free trial will be offered, then an IntelliJ IDEA Ultimate subscription is required. The extension also makes its intelligence available to coding agents in Cursor, enabling semantic code search and analysis.
JetBrains is discontinuing Swift language IDE features in the Kotlin Multiplatform plugin starting with IntelliJ IDEA 2026.3 and Android Studio Rabbit 2 | 2026.2.2, including editing, syntax highlighting, and navigation within Swift files and between Swift and Kotlin. Running iOS applications and debugging Kotlin code on iOS will remain fully supported, and Kotlin/Native functionality such as Swift Export is unaffected. The existing Swift functionality will remain available in earlier versions of IntelliJ IDEA, Android Studio, and the KMP plugin, though these older versions will not receive further updates. The decision follows analysis showing limited and declining usage, with most iOS developers on KMP projects preferring Xcode for Swift development. The Swift support, originally developed for AppCode, required substantial effort to stay compatible with changes in Swift, Xcode, and the IntelliJ Platform.
JetBrains is extending Kotlin’s companion mechanism with experimental companion blocks and companion extensions in Kotlin 2.5.0. Companion blocks replace the object keyword with a companion block, compiling members as static members on the JVM. Companion extensions allow adding class-level members to any type, even types the developer does not control. These features improve multiplatform interoperability by enabling expected companion block members to be actualized using Java static members. Companion objects remain fully supported and are still required when the companion must implement an interface, but companion blocks are recommended for new code.
Kotlin turned fifteen in 2026, and the State of Kotlin in 2026 report examines how the language built a mature ecosystem and gained worldwide adoption. The report combines JetBrains research with independent industry data to assess Kotlin’s evolution and answer questions about its staying power and scalability. While Kotlin remains deeply established in Android development, more than half of Kotlin developers now work on backend projects. Among surveyed Kotlin developers, 93% use at least one AI coding tool, and 81% report that AI-generated Kotlin code is fully correct or requires only minor fixes. The report concludes that Kotlin’s evolution is defined by increasing diversity across backend, multiplatform, and AI-assisted development.
Shopify is moving its mobile apps from React Native to Swift and Kotlin after reevaluating the assumptions behind its 2020 decision as coding models improved. React Native had reduced duplicated implementation and feature-parity work, but agents now handle much of the cross-platform implementation, translation, testing, and review work. Shopify is choosing greenfield rebuilds, with Helix breaking migrations into reviewed checkpoints that require tests, visual comparison, adversarial code review, and human approval. The Shop app reached the app stores as a fully native rebuild in 12 weeks, while the Shopify app migration is underway. The company will continue selected React Native library support while migrating all its apps, and will judge success by product velocity, app quality, and autonomous agent work.
Shop migrated its React Native app to native iOS and Android implementations in SwiftUI and Jetpack Compose after coding-agent advances changed the economics of a shared mobile codebase. A one-week proof of concept showed that one engineer using agents could recreate screens, interactions, and flows closely enough to make a full migration feasible although the result was not production-ready. Six engineers then built the native foundations and main journeys with feature teams validating edge cases; they preserved sign-in state, push notifications, analytics events, and behavior while simplifying some screens. Compared with React Native, native startup was 23% faster on iOS and 50% on Android, stability rose from 99.5%+ to 99.95%+, Android size dropped 109 MB, release builds fell about 75%, and scrolling reached 120 FPS. The migration’s workflow combined specialized agents, plan approval, Tardis live-app feedback, screenshot and event comparisons, and human review while feature parity remained a release requirement.
ADK for Kotlin 1.0 is announced as a general availability release for building AI agents with Kotlin across Android, JVM server applications, and Java-integrated systems. The release targets a production-ready toolkit while preserving an idiomatic, lightweight, composable approach, and it reaches feature parity with ADK 1.0 Core, including hierarchical agents, context compaction, human-in-the-loop confirmation, resumable sessions, annotated tools, and Java interoperability. A Kotlin Multiplatform core stays agnostic to model backends, session providers, and memory systems, while Android extensions support LiteRT-LM, ML Kit (beta), Firebase AI Logic, Room, AppSearch, and file artifacts. The database incident example combines compile-time KSP-generated function schemas, suspend-capable @Tool functions, and dynamically loaded SKILL.md playbooks with progressive disclosure. The release provides 1.0.0 dependencies, documentation, a repository, and sample applications.
Kotlin 2.4.20 is released with updates spanning the standard library, Kotlin/Native, Kotlin/Wasm, Kotlin/JS, Gradle, build tools, and the compiler. The standard library adds coroutine stack trace recovery, collection equality and uniqueness checks, and new kotlin.test assertion overloads. Kotlin/Native gains Swift export features, improved incremental compilation, and generated Package.swift files, while Kotlin/Wasm adds Wasmtime support in the Kotlin Gradle plugin and changes to require() handling in @JsFun declarations. Kotlin/JS introduces a browser-testing DSL, suspend-lambda exports as async functions, and improved data-class exportability. The release also supports Gradle 9.7.0, adds Build tools API targets, and provides the kotlinr runner command and a separate native image; it is available through updated IDEs, build scripts, or the command-line compiler.
Java Annotated Monthly for September 2026 curates Java news, AI-focused writing, Kotlin updates, and items spanning frameworks, tools, community, and events. Its featured coverage examines upcoming JEPs and JDK 27, including claims that compact object headers are enabled by default, reducing headers from 96 to 64 bits, while G1 becomes the default garbage collector. The roundup also points to migration guidance for readers on Java 8 or 11 and includes tutorials on profiling, structured concurrency, virtual threads, retrieval-augmented generation, and JVM security. Additional sections cover Kotlin, AI agents and MCP, Spring and Gradle, developer culture, conferences, and IntelliJ IDEA team articles, including updates on Apache Grails and Spring Boot configuration.
Swiggy migrated from protobuf-java to Square Wire after profiling showed that the runtime and protoc-generated code consumed 6.735 MB of Android app size. protobuf-javalite was rejected because Swiggy relies extensively on google.protobuf.Any, while Wire retained support for Any and other well-known types with a smaller runtime and immutable Kotlin models. The migration required updating snake_case property access, message construction, serialization calls, ProGuard rules, and a custom pipeline that compiled all schemas together before publishing package-specific AARs to AWS CodeArtifact. The team also fixed repeated enum fields with [packed = true] after discovering a silent wire-format mismatch. It reduced Swiggy’s app size by 3.52 MB and produced measurable reductions for Instamart and Toing.
An Android team at Medium describes how it encoded its project conventions so AI assistants generate code aligned with Clean Architecture, Kotlin, Jetpack Compose, Hilt, Apollo GraphQL, and feature modules. An AGENTS.md file provides persistent context about module structure, dependency injection, state management, navigation, testing, and commands, while Markdown skills in .agents/skills/ provide ordered runbooks for specific tasks. Examples cover scaffolding screens and feature modules, migrating Material 2 to Material 3, enforcing ViewModel feature-flag handling, and adding deeplinks, analytics, translations, and tests. Detailed patterns include ViewModel-injecting and @VisibleForTesting composables, assisted injection, StateFlow, Result, MockK, Turbine, and Robolectric. The team iterates skills from review feedback, keeps them version-controlled, and plans file-aware rules plus commands for release diffs and reporting.
Migrating the Medium Android app from Apollo Kotlin 3 to 4 exposed cache and exception-handling issues that were hidden by the earlier implementation. Apollo Kotlin 4 uses a new group, plugin, and package identifier, places exceptions in ApolloResponse, and replaces ApolloCompositeException with a primary exception plus suppressed failures. CacheMissException errors appeared in watch() because programmatic cache IDs were incomplete or incorrect; the app addressed this with declarative type and field policies, __typename on every operation, cache-update helpers, and policy-aware safeWatch filtering. The migration also replaced executeV3(), removed fetchThrows = true, added a Currency scalar adapter, and identified HTTP batching and persisted queries as future improvements, while concluding that Apollo 4 produced a more robust cache integration after the underlying issues were fixed.
Etsy adopted Jetpack Compose as its preferred way to build Android app UIs, after a staged program that culminated in rewriting the Shop screen. Because UI toolkits are central to development, engineers created a curriculum, rebuilt internal design-system components, and used Compose’s interoperability with XML Views to migrate gradually. They then tested a full internal screen with navigation, system UI, coroutines for API data fetching, and Kotlin Flows supporting unidirectional data flow alongside Macramé. After Compose bottom sheets reached real buyers and sellers, the Shop rewrite took about three months and entered an A/B experiment against the old implementation. The new screen improved initial rendering time by 5%, made interactions more fluid, and improved several user actions, while engineers reported fewer lines of code, easier testing, greater business-logic coverage, and higher satisfaction.
The Etsy Android listing screen had accumulated nearly 200 experiments in three years, leaving a 4,000-plus-line Fragment, inconsistent patterns, low test coverage, and costly, brittle tests. Macramé replaced that legacy design with immutable state propagated through StateFlow to a reactive UI, transforming screen data into smaller ListingUiModels rendered by RecyclerView and ListAdapter. Sealed Events move through a single Dispatcher to focused Handlers, which update State, start asynchronous work, or emit SideEffects for operations such as navigation and logging. After a five-month rewrite, the new screen’s Time to First Content fell 18%, from 1,585 ms to 1,298 ms, while listings viewed rose 2.4% and business-logic test coverage reached 76%. The architecture still has wiring boilerplate, debugging challenges around Handler interactions, and possible overkill for simpler screens, but its use expanded to Cart and Shop.
The best engineering reads, once a week.