# 71: Translating Java to Kotlin at Scale Page: https://stenobird.com/podcast/meta-tech-podcast-525691/71-translating-java-to-kotlin-at-scale Text version: https://stenobird.com/podcast/meta-tech-podcast-525691/71-translating-java-to-kotlin-at-scale.md Podcast: [Meta Tech Podcast](https://stenobird.com/podcast/meta-tech-podcast-525691) Published: 2025-01-31T18:14:00+00:00 Episode link: https://insidefacebookmobile.libsyn.com/71-translating-java-to-kotlin-at-scale Audio file: https://traffic.libsyn.com/secure/insidefacebookmobile/mtp71_rc2.mp3?dest-id=697376 Processing state: not_requested JSON: https://stenobird.com/v1/public/podcasts/meta-tech-podcast-525691/episodes/71-translating-java-to-kotlin-at-scale Duration seconds: 2289 ## Resource How do you translate roughly ten million lines of Java code to Kotlin? Clicking in your the IDE gets pretty repetitive after a while and doesn't work if you have custom APIs and requirements for null safety. Eve and Jocelyn, two software engineers on the Mobile Infra Codebases Team have taken on this challenge and talk host Pascal through the unexpected difficulties when embarking on the journey to (close to) 100% Kotlin in our Android codebase. Got feedback? Send it to us on Threads ( https://threads.net/@metatechpod ), Instagram ( https://instagram.com/metatechpod ) and don't forget to follow our host Pascal ( https://mastodon.social/@passy , https://threads.net/@passy_ ). Fancy working with us? Check out https://www.metacareers.com/ . Links Meta Engineering Blog - Translating Java to Kotlin at Scale: https://engineering.fb.com/2024/12/18/android/translating-java-to-kotlin-at-scale/ Open-source transformations: https://github.com/fbsamples/kotlin_ast_tools Mobile @Scale Conference recordings: https://www.youtube.com/watch?v=L7xSnbrk4CI Timestamps Intro 0:06 Introduction Eve 1:11 Introduction Jocelyn 2:15 Team mission 2:44 The scale of Meta's codebase 3:40 Why is there so much code? 4:34 Why migrate to Kotlin? 5:45 Isn't Kotlin slow to compile? 7:51 Why not use Android Studio's converter? 8:28 Nullability differences 10:04 Meta Codemod Service 14:50 Kotlin codemod stages 17:07 Headless J2K 20:14 Open-source transformations 23:14 Java Nullsafe 24:47 Leveraging Linters 26:01 Fixing build errors 27:24 Unexpected challenges 29:33 State of the union 33:44 Outro 36:10 Outtakes 37:08 ## Actions - request_transcript: `POST https://stenobird.com/v1/public/podcasts/meta-tech-podcast-525691/episodes/71-translating-java-to-kotlin-at-scale/transcription-requests` — Idempotently request low-priority transcript generation for this episode. - read_markdown: `GET https://stenobird.com/podcast/meta-tech-podcast-525691/71-translating-java-to-kotlin-at-scale.md` — Read the agent-friendly Markdown representation of this episode resource. A page view does not enqueue transcription. Agents should invoke `request_transcript` explicitly when they need this episode processed. ## Transcript Full transcripts are not published on public pages unless there is a clear rights basis.