CINXE.COM

<!doctype html><html lang="en"><head><title data-rh="true">Benchmarking Koin vs. Dagger Hilt in Modern Android Development (2024) | by Arnaud Giuliani | Nov, 2024 | ProAndroidDev</title><meta data-rh="true" charset="utf-8"/><meta data-rh="true" name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,maximum-scale=1"/><meta data-rh="true" name="theme-color" content="#000000"/><meta data-rh="true" name="twitter:app:name:iphone" content="Medium"/><meta data-rh="true" name="twitter:app:id:iphone" content="828256236"/><meta data-rh="true" property="al:ios:app_name" content="Medium"/><meta data-rh="true" property="al:ios:app_store_id" content="828256236"/><meta data-rh="true" property="al:android:package" content="com.medium.reader"/><meta data-rh="true" property="fb:app_id" content="542599432471018"/><meta data-rh="true" property="og:site_name" content="Medium"/><meta data-rh="true" property="og:type" content="article"/><meta data-rh="true" property="article:published_time" content="2024-11-27T17:00:18.099Z"/><meta data-rh="true" name="title" content="Benchmarking Koin vs. Dagger Hilt in Modern Android Development (2024) | by Arnaud Giuliani | Nov, 2024 | ProAndroidDev"/><meta data-rh="true" property="og:title" content="Benchmarking Koin vs. Dagger Hilt in Modern Android Development (2024)"/><meta data-rh="true" property="al:android:url" content="medium://p/ff7bb40470df"/><meta data-rh="true" property="al:ios:url" content="medium://p/ff7bb40470df"/><meta data-rh="true" property="al:android:app_name" content="Medium"/><meta data-rh="true" name="description" content="When choosing a dependency injection framework for Android and Kotlin development, performance is often a key consideration. This article explores the performance of Koin in its latest version…"/><meta data-rh="true" property="og:description" content="How Koin scales and performs compared to Hilt, using practical benchmarks and insights."/><meta data-rh="true" property="og:url" content="https://proandroiddev.com/benchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df"/><meta data-rh="true" property="al:web:url" content="https://proandroiddev.com/benchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df"/><meta data-rh="true" property="og:image" content="https://miro.medium.com/v2/resize:fit:1200/1*h5ULv-tGdDA3yD2c685lFQ.png"/><meta data-rh="true" property="article:author" content="https://giuliani-arnaud.medium.com"/><meta data-rh="true" name="author" content="Arnaud Giuliani"/><meta data-rh="true" name="robots" content="index,noarchive,follow,max-image-preview:large"/><meta data-rh="true" name="referrer" content="unsafe-url"/><meta data-rh="true" property="twitter:title" content="Benchmarking Koin vs. Dagger Hilt in Modern Android Development (2024)"/><meta data-rh="true" name="twitter:site" content="@proandroiddev"/><meta data-rh="true" name="twitter:app:url:iphone" content="medium://p/ff7bb40470df"/><meta data-rh="true" property="twitter:description" content="How Koin scales and performs compared to Hilt, using practical benchmarks and insights."/><meta data-rh="true" name="twitter:image:src" content="https://miro.medium.com/v2/resize:fit:1200/1*h5ULv-tGdDA3yD2c685lFQ.png"/><meta data-rh="true" name="twitter:card" content="summary_large_image"/><meta data-rh="true" name="twitter:label1" content="Reading time"/><meta data-rh="true" name="twitter:data1" content="6 min read"/><link data-rh="true" rel="icon" href="https://miro.medium.com/v2/resize:fill:256:256/1*A8VytPZQhvUf_MG6hm_Dlw.png"/><link data-rh="true" rel="search" type="application/opensearchdescription+xml" title="Medium" href="/osd.xml"/><link data-rh="true" rel="apple-touch-icon" sizes="152x152" href="https://miro.medium.com/v2/resize:fill:304:304/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="apple-touch-icon" sizes="120x120" href="https://miro.medium.com/v2/resize:fill:240:240/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="apple-touch-icon" sizes="76x76" href="https://miro.medium.com/v2/resize:fill:152:152/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="apple-touch-icon" sizes="60x60" href="https://miro.medium.com/v2/resize:fill:120:120/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="mask-icon" href="https://miro.medium.com/v2/resize:fill:1000:1000/7*GAOKVe--MXbEJmV9230oOQ.png" color="#171717"/><link data-rh="true" id="glyph_preload_link" rel="preload" as="style" type="text/css" href="https://glyph.medium.com/css/unbound.css"/><link data-rh="true" id="glyph_link" rel="stylesheet" type="text/css" href="https://glyph.medium.com/css/unbound.css"/><link data-rh="true" rel="author" href="https://giuliani-arnaud.medium.com"/><link data-rh="true" rel="canonical" href="https://proandroiddev.com/benchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df"/><link data-rh="true" rel="alternate" href="android-app://com.medium.reader/https/medium.com/p/ff7bb40470df"/><script data-rh="true" type="application/ld+json">{"@context":"http:\u002F\u002Fschema.org","@type":"NewsArticle","image":["https:\u002F\u002Fmiro.medium.com\u002Fv2\u002Fresize:fit:1200\u002F1*h5ULv-tGdDA3yD2c685lFQ.png"],"url":"https:\u002F\u002Fproandroiddev.com\u002Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df","dateCreated":"2024-11-27T02:00:21.762Z","datePublished":"2024-11-27T02:00:21.762Z","dateModified":"2024-11-28T02:56:22.379Z","headline":"Benchmarking Koin vs. Dagger Hilt in Modern Android Development (2024)","name":"Benchmarking Koin vs. Dagger Hilt in Modern Android Development (2024)","description":"When choosing a dependency injection framework for Android and Kotlin development, performance is often a key consideration. This article explores the performance of Koin in its latest version…","identifier":"ff7bb40470df","author":{"@type":"Person","name":"Arnaud Giuliani","url":"https:\u002F\u002Fgiuliani-arnaud.medium.com"},"creator":["Arnaud Giuliani"],"publisher":{"@type":"Organization","name":"ProAndroidDev","url":"proandroiddev.com","logo":{"@type":"ImageObject","width":272,"height":60,"url":"https:\u002F\u002Fmiro.medium.com\u002Fv2\u002Fresize:fit:544\u002F7*V1_7XP4snlmqrc_0Njontw.png"}},"mainEntityOfPage":"https:\u002F\u002Fproandroiddev.com\u002Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df"}</script><style type="text/css" data-fela-rehydration="568" data-fela-type="STATIC">html{box-sizing:border-box;-webkit-text-size-adjust:100%}*, *:before, *:after{box-sizing:inherit}body{margin:0;padding:0;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;color:rgba(0,0,0,0.8);position:relative;min-height:100vh}h1, h2, h3, h4, h5, h6, dl, dd, ol, ul, menu, figure, blockquote, p, pre, form{margin:0}menu, ol, ul{padding:0;list-style:none;list-style-image:none}main{display:block}a{color:inherit;text-decoration:none}a, button, input{-webkit-tap-highlight-color:transparent}img, svg{vertical-align:middle}button{background:transparent;overflow:visible}button, input, optgroup, select, textarea{margin:0}:root{--reach-tabs:1;--reach-menu-button:1}#speechify-root{font-family:Sohne, sans-serif}div[data-popper-reference-hidden="true"]{visibility:hidden;pointer-events:none}.grecaptcha-badge{visibility:hidden} /*XCode style (c) Angel Garcia <angelgarcia.mail@gmail.com>*/.hljs {background: #fff;color: black; }/* Gray DOCTYPE selectors like WebKit */ .xml .hljs-meta {color: #c0c0c0; }.hljs-comment, .hljs-quote {color: #007400; }.hljs-tag, .hljs-attribute, .hljs-keyword, .hljs-selector-tag, .hljs-literal, .hljs-name {color: #aa0d91; }.hljs-variable, .hljs-template-variable {color: #3F6E74; }.hljs-code, .hljs-string, .hljs-meta .hljs-string {color: #c41a16; }.hljs-regexp, .hljs-link {color: #0E0EFF; }.hljs-title, .hljs-symbol, .hljs-bullet, .hljs-number {color: #1c00cf; }.hljs-section, .hljs-meta {color: #643820; }.hljs-title.class_, .hljs-class .hljs-title, .hljs-type, .hljs-built_in, .hljs-params {color: #5c2699; }.hljs-attr {color: #836C28; }.hljs-subst {color: #000; }.hljs-formula {background-color: #eee;font-style: italic; }.hljs-addition {background-color: #baeeba; }.hljs-deletion {background-color: #ffc8bd; }.hljs-selector-id, .hljs-selector-class {color: #9b703f; }.hljs-doctag, .hljs-strong {font-weight: bold; }.hljs-emphasis {font-style: italic; } </style><style type="text/css" data-fela-rehydration="568" data-fela-type="KEYFRAME">@-webkit-keyframes k1{0%{opacity:0.8}50%{opacity:0.5}100%{opacity:0.8}}@-moz-keyframes k1{0%{opacity:0.8}50%{opacity:0.5}100%{opacity:0.8}}@keyframes k1{0%{opacity:0.8}50%{opacity:0.5}100%{opacity:0.8}}</style><style type="text/css" data-fela-rehydration="568" data-fela-type="RULE">.a{font-family:medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif}.b{font-weight:400}.c{background-color:rgba(255, 255, 255, 1)}.l{display:block}.m{position:sticky}.n{top:0}.o{z-index:500}.p{padding:0 24px}.q{align-items:center}.r{border-bottom:solid 1px #F2F2F2}.y{height:41px}.z{line-height:20px}.ab{display:flex}.ac{height:57px}.ae{flex:1 0 auto}.af{color:inherit}.ag{fill:inherit}.ah{font-size:inherit}.ai{border:inherit}.aj{font-family:inherit}.ak{letter-spacing:inherit}.al{font-weight:inherit}.am{padding:0}.an{margin:0}.ao{cursor:pointer}.ap:disabled{cursor:not-allowed}.aq:disabled{color:#6B6B6B}.ar:disabled{fill:#6B6B6B}.au{width:auto}.av path{fill:#242424}.aw{height:25px}.ax{margin-left:16px}.ay{border:none}.az{border-radius:20px}.ba{width:240px}.bb{background:#F9F9F9}.bc path{fill:#6B6B6B}.be{outline:none}.bf{font-family:sohne, "Helvetica Neue", Helvetica, Arial, sans-serif}.bg{font-size:14px}.bh{width:100%}.bi{padding:10px 20px 10px 0}.bj{background-color:transparent}.bk{color:#242424}.bl::placeholder{color:#6B6B6B}.bm{display:inline-block}.bn{margin-left:12px}.bo{margin-right:12px}.bp{border-radius:4px}.bq{margin-left:24px}.br{height:24px}.bx{background-color:#F9F9F9}.by{border-radius:50%}.bz{height:32px}.ca{width:32px}.cb{justify-content:center}.ch{max-width:680px}.ci{min-width:0}.cj{animation:k1 1.2s ease-in-out infinite}.ck{height:100vh}.cl{margin-bottom:16px}.cm{margin-top:48px}.cn{align-items:flex-start}.co{flex-direction:column}.cp{justify-content:space-between}.cq{margin-bottom:24px}.cw{width:80%}.cx{background-color:#F2F2F2}.dd{height:44px}.de{width:44px}.df{margin:auto 0}.dg{margin-bottom:4px}.dh{height:16px}.di{width:120px}.dj{width:80px}.dp{margin-bottom:8px}.dq{width:96%}.dr{width:98%}.ds{width:81%}.dt{margin-left:8px}.du{color:#6B6B6B}.dv{font-size:13px}.dw{height:100%}.ep{color:#FFFFFF}.eq{fill:#FFFFFF}.er{background:rgba(46, 152, 126, 1)}.es{border-color:rgba(46, 152, 126, 1)}.ew:disabled{cursor:inherit !important}.ex:disabled{opacity:0.3}.ey:disabled:hover{background:rgba(46, 152, 126, 1)}.ez:disabled:hover{border-color:rgba(46, 152, 126, 1)}.fa{border-radius:99em}.fb{border-width:1px}.fc{border-style:solid}.fd{box-sizing:border-box}.fe{text-decoration:none}.ff{text-align:center}.fi{margin-right:32px}.fj{position:relative}.fk{fill:#6B6B6B}.fn{background:transparent}.fo svg{margin-left:4px}.fp svg{fill:#6B6B6B}.fr{box-shadow:inset 0 0 0 1px rgba(0, 0, 0, 0.05)}.fs{position:absolute}.fz{margin:0 24px}.gd{background:rgba(255, 255, 255, 1)}.ge{border:1px solid #F2F2F2}.gf{box-shadow:0 1px 4px #F2F2F2}.gg{max-height:100vh}.gh{overflow-y:auto}.gi{left:0}.gj{top:calc(100vh + 100px)}.gk{bottom:calc(100vh + 100px)}.gl{width:10px}.gm{pointer-events:none}.gn{word-break:break-word}.go{word-wrap:break-word}.gp:after{display:block}.gq:after{content:""}.gr:after{clear:both}.gs{line-height:1.23}.gt{letter-spacing:0}.gu{font-style:normal}.gv{font-weight:700}.ia{align-items:baseline}.ib{width:48px}.ic{height:48px}.id{border:2px solid rgba(255, 255, 255, 1)}.ie{z-index:0}.if{box-shadow:none}.ig{border:1px solid rgba(0, 0, 0, 0.05)}.ih{margin-left:-12px}.ii{width:28px}.ij{height:28px}.ik{z-index:1}.il{width:24px}.im{margin-bottom:2px}.in{flex-wrap:nowrap}.io{font-size:16px}.ip{line-height:24px}.ir{margin:0 8px}.is{display:inline}.it{color:rgba(46, 152, 126, 1)}.iu{fill:rgba(46, 152, 126, 1)}.ix{flex:0 0 auto}.ja{flex-wrap:wrap}.jd{white-space:pre-wrap}.je{margin-right:4px}.jf{overflow:hidden}.jg{max-height:20px}.jh{text-overflow:ellipsis}.ji{display:-webkit-box}.jj{-webkit-line-clamp:1}.jk{-webkit-box-orient:vertical}.jl{word-break:break-all}.jn{padding-left:8px}.jo{padding-right:8px}.kp> *{flex-shrink:0}.kq{overflow-x:scroll}.kr::-webkit-scrollbar{display:none}.ks{scrollbar-width:none}.kt{-ms-overflow-style:none}.ku{width:74px}.kv{flex-direction:row}.kw{z-index:2}.kz{-webkit-user-select:none}.la{border:0}.lb{fill:rgba(117, 117, 117, 1)}.le{outline:0}.lf{user-select:none}.lg> svg{pointer-events:none}.lp{cursor:progress}.lq{margin-left:4px}.lr{margin-top:0px}.ls{opacity:1}.lt{padding:4px 0}.lw{width:16px}.ly{display:inline-flex}.me{max-width:100%}.mf{padding:8px 2px}.mg svg{color:#6B6B6B}.mx{line-height:1.58}.my{letter-spacing:-0.004em}.mz{font-family:source-serif-pro, Georgia, Cambria, "Times New Roman", Times, serif}.nu{margin-bottom:-0.46em}.nv{margin-left:auto}.nw{margin-right:auto}.nx{max-width:1400px}.od{clear:both}.of{cursor:zoom-in}.og{z-index:auto}.oi{height:auto}.oj{margin-top:10px}.ok{max-width:728px}.on{text-decoration:underline}.oo{line-height:1.12}.op{letter-spacing:-0.022em}.oq{font-weight:600}.pl{margin-bottom:-0.28em}.pr{box-shadow:inset 3px 0 0 0 #242424}.ps{padding-left:23px}.pt{margin-left:-20px}.pu{font-style:italic}.pv{list-style-type:disc}.pw{margin-left:30px}.px{padding-left:0px}.qd{margin-top:32px}.qe{margin-bottom:14px}.qf{padding-top:24px}.qg{padding-bottom:10px}.qh{background-color:#000000}.qi{height:3px}.qj{width:3px}.qk{margin-right:20px}.qq{padding:2px 4px}.qr{font-size:75%}.qs> strong{font-family:inherit}.qt{font-family:source-code-pro, Menlo, Monaco, "Courier New", Courier, monospace}.qu{overflow-x:auto}.qv{padding:32px}.qw{border:1px solid #E5E5E5}.qx{line-height:1.4}.qy{margin-top:-0.2em}.qz{margin-bottom:-0.2em}.ra{white-space:pre}.rb{min-width:fit-content}.rc{max-width:890px}.rd{max-width:859px}.re{max-width:879px}.rf{max-width:857px}.rg{max-width:525px}.rm{max-width:1287px}.rn{padding-top:5px}.ro{padding-bottom:5px}.rp{max-width:2030px}.rq{margin-bottom:26px}.rr{margin-top:6px}.rs{margin-top:8px}.rt{margin-right:8px}.ru{padding:8px 16px}.rv{border-radius:100px}.rw{transition:background 300ms ease}.ry{white-space:nowrap}.rz{border-top:none}.sf{height:52px}.sg{max-height:52px}.sh{box-sizing:content-box}.si{position:static}.sk{max-width:155px}.sv{margin-bottom:48px}.tj{border-radius:2px}.tl{height:64px}.tm{width:64px}.tn{align-self:flex-end}.to{color:rgba(255, 255, 255, 1)}.tp{fill:rgba(255, 255, 255, 1)}.tq{background:rgba(25, 25, 25, 1)}.tr{border-color:rgba(25, 25, 25, 1)}.tu:disabled{opacity:0.1}.tv:disabled:hover{background:rgba(25, 25, 25, 1)}.tw:disabled:hover{border-color:rgba(25, 25, 25, 1)}.tx{flex:1 1 auto}.ub{padding-right:4px}.uc{font-weight:500}.up{margin-top:16px}.uq{height:0px}.ur{border-bottom:solid 1px #E5E5E5}.us{margin-top:56px}.ut{margin-top:72px}.uu{padding:24px 0}.uv{margin-bottom:0px}.uw{margin-right:16px}.as:hover:not(:disabled){color:rgba(25, 25, 25, 1)}.at:hover:not(:disabled){fill:rgba(25, 25, 25, 1)}.et:hover{background:rgba(50, 130, 108, 1)}.eu:hover{border-color:rgba(50, 130, 108, 1)}.ev:hover{cursor:pointer}.fl:hover{color:#242424}.fm:hover{fill:#242424}.fq:hover svg{fill:#242424}.ft:hover{background-color:rgba(0, 0, 0, 0.1)}.iq:hover{text-decoration:underline}.iv:hover:not(:disabled){color:rgba(50, 130, 108, 1)}.iw:hover:not(:disabled){fill:rgba(50, 130, 108, 1)}.ld:hover{fill:rgba(8, 8, 8, 1)}.lu:hover{fill:#000000}.lv:hover p{color:#000000}.lx:hover{color:#000000}.mh:hover svg{color:#000000}.rx:hover{background-color:#F2F2F2}.tk:hover{background-color:none}.ts:hover{background:#000000}.tt:hover{border-color:#242424}.bd:focus-within path{fill:#242424}.lc:focus{fill:rgba(8, 8, 8, 1)}.mi:focus svg{color:#000000}.oh:focus{transform:scale(1.01)}.lh:active{border-style:none}</style><style type="text/css" data-fela-rehydration="568" data-fela-type="RULE" media="all and (min-width: 1080px)">.d{display:none}.bw{width:64px}.cg{margin:0 64px}.cv{height:48px}.dc{margin-bottom:52px}.do{margin-bottom:48px}.ef{font-size:14px}.eg{line-height:20px}.em{font-size:13px}.eo{padding:5px 12px}.fh{display:flex}.fy{margin-bottom:68px}.gc{max-width:680px}.hq{font-size:42px}.hr{margin-top:1.19em}.hs{margin-bottom:32px}.ht{line-height:52px}.hu{letter-spacing:-0.011em}.hz{align-items:center}.kb{border-top:solid 1px #F2F2F2}.kc{border-bottom:solid 1px #F2F2F2}.kd{margin:32px 0 0}.ke{padding:3px 8px}.kn> *{margin-right:24px}.ko> :last-child{margin-right:0}.lo{margin-top:0px}.md{margin:0}.nq{font-size:20px}.nr{margin-top:2.14em}.ns{line-height:32px}.nt{letter-spacing:-0.003em}.oc{margin-top:56px}.ph{font-size:24px}.pi{margin-top:1.95em}.pj{line-height:30px}.pk{letter-spacing:-0.016em}.pq{margin-top:0.94em}.qc{margin-top:1.14em}.qp{margin-top:1.25em}.rl{max-width:1192px}.se{margin-bottom:88px}.sp{display:inline-block}.su{padding-top:72px}.sw{flex-direction:row}.sz{margin-bottom:0}.ta{margin-right:20px}.ty{max-width:500px}.un{line-height:24px}.uo{letter-spacing:0}</style><style type="text/css" data-fela-rehydration="568" data-fela-type="RULE" media="all and (max-width: 1079.98px)">.e{display:none}.ln{margin-top:0px}.ol{margin-left:auto}.om{text-align:center}.so{display:inline-block}</style><style type="text/css" data-fela-rehydration="568" data-fela-type="RULE" media="all and (max-width: 903.98px)">.f{display:none}.lm{margin-top:0px}.sn{display:inline-block}</style><style type="text/css" data-fela-rehydration="568" data-fela-type="RULE" media="all and (max-width: 727.98px)">.g{display:none}.lk{margin-top:0px}.ll{margin-right:0px}.sm{display:inline-block}</style><style type="text/css" data-fela-rehydration="568" data-fela-type="RULE" media="all and (max-width: 551.98px)">.h{display:none}.s{display:flex}.t{justify-content:space-between}.bs{width:24px}.cc{margin:0 24px}.cr{height:40px}.cy{margin-bottom:44px}.dk{margin-bottom:32px}.dx{font-size:13px}.dy{line-height:20px}.eh{padding:0px 8px 1px}.fu{margin-bottom:4px}.gw{font-size:32px}.gx{margin-top:1.01em}.gy{margin-bottom:24px}.gz{line-height:38px}.ha{letter-spacing:-0.014em}.hv{align-items:flex-start}.iy{flex-direction:column}.jb{margin-bottom:2px}.jp{margin:24px -24px 0}.jq{padding:0}.kf> *{margin-right:8px}.kg> :last-child{margin-right:24px}.kx{margin-left:0px}.li{margin-top:0px}.lj{margin-right:0px}.lz{margin:0}.mj{border:1px solid #F2F2F2}.mk{border-radius:99em}.ml{padding:0px 16px 0px 12px}.mm{height:38px}.mn{align-items:center}.mp svg{margin-right:8px}.na{font-size:18px}.nb{margin-top:1.56em}.nc{line-height:28px}.nd{letter-spacing:-0.003em}.ny{margin-top:40px}.or{font-size:20px}.os{margin-top:1.2em}.ot{line-height:24px}.ou{letter-spacing:0}.pm{margin-top:0.67em}.py{margin-top:1.34em}.ql{margin-top:0.93em}.rh{max-width:100%}.sa{margin-bottom:80px}.sl{display:inline-block}.sq{padding-top:48px}.th{margin-bottom:20px}.ti{margin-right:0}.ud{font-size:24px}.ue{line-height:30px}.uf{letter-spacing:-0.016em}.mo:hover{border-color:#E5E5E5}</style><style type="text/css" data-fela-rehydration="568" data-fela-type="RULE" media="all and (min-width: 904px) and (max-width: 1079.98px)">.i{display:none}.bv{width:64px}.cf{margin:0 64px}.cu{height:48px}.db{margin-bottom:52px}.dn{margin-bottom:48px}.ed{font-size:14px}.ee{line-height:20px}.ek{font-size:13px}.el{padding:5px 12px}.fg{display:flex}.fx{margin-bottom:68px}.gb{max-width:680px}.hl{font-size:42px}.hm{margin-top:1.19em}.hn{margin-bottom:32px}.ho{line-height:52px}.hp{letter-spacing:-0.011em}.hy{align-items:center}.jx{border-top:solid 1px #F2F2F2}.jy{border-bottom:solid 1px #F2F2F2}.jz{margin:32px 0 0}.ka{padding:3px 8px}.kl> *{margin-right:24px}.km> :last-child{margin-right:0}.mc{margin:0}.nm{font-size:20px}.nn{margin-top:2.14em}.no{line-height:32px}.np{letter-spacing:-0.003em}.ob{margin-top:56px}.pd{font-size:24px}.pe{margin-top:1.95em}.pf{line-height:30px}.pg{letter-spacing:-0.016em}.pp{margin-top:0.94em}.qb{margin-top:1.14em}.qo{margin-top:1.25em}.rk{max-width:1192px}.sd{margin-bottom:88px}.st{padding-top:72px}.sx{flex-direction:row}.tb{margin-bottom:0}.tc{margin-right:20px}.tz{max-width:500px}.ul{line-height:24px}.um{letter-spacing:0}</style><style type="text/css" data-fela-rehydration="568" data-fela-type="RULE" media="all and (min-width: 728px) and (max-width: 903.98px)">.j{display:none}.w{display:flex}.x{justify-content:space-between}.bu{width:64px}.ce{margin:0 48px}.ct{height:48px}.da{margin-bottom:52px}.dm{margin-bottom:48px}.eb{font-size:13px}.ec{line-height:20px}.ej{padding:0px 8px 1px}.fw{margin-bottom:68px}.ga{max-width:680px}.hg{font-size:42px}.hh{margin-top:1.19em}.hi{margin-bottom:32px}.hj{line-height:52px}.hk{letter-spacing:-0.011em}.hx{align-items:center}.jt{border-top:solid 1px #F2F2F2}.ju{border-bottom:solid 1px #F2F2F2}.jv{margin:32px 0 0}.jw{padding:3px 8px}.kj> *{margin-right:24px}.kk> :last-child{margin-right:0}.mb{margin:0}.ni{font-size:20px}.nj{margin-top:2.14em}.nk{line-height:32px}.nl{letter-spacing:-0.003em}.oa{margin-top:56px}.oz{font-size:24px}.pa{margin-top:1.95em}.pb{line-height:30px}.pc{letter-spacing:-0.016em}.po{margin-top:0.94em}.qa{margin-top:1.14em}.qn{margin-top:1.25em}.rj{max-width:100%}.sc{margin-bottom:88px}.ss{padding-top:72px}.sy{flex-direction:row}.td{margin-bottom:0}.te{margin-right:20px}.ua{max-width:500px}.uj{line-height:24px}.uk{letter-spacing:0}</style><style type="text/css" data-fela-rehydration="568" data-fela-type="RULE" media="all and (min-width: 552px) and (max-width: 727.98px)">.k{display:none}.u{display:flex}.v{justify-content:space-between}.bt{width:24px}.cd{margin:0 24px}.cs{height:40px}.cz{margin-bottom:44px}.dl{margin-bottom:32px}.dz{font-size:13px}.ea{line-height:20px}.ei{padding:0px 8px 1px}.fv{margin-bottom:4px}.hb{font-size:32px}.hc{margin-top:1.01em}.hd{margin-bottom:24px}.he{line-height:38px}.hf{letter-spacing:-0.014em}.hw{align-items:flex-start}.iz{flex-direction:column}.jc{margin-bottom:2px}.jr{margin:24px 0 0}.js{padding:0}.kh> *{margin-right:8px}.ki> :last-child{margin-right:8px}.ky{margin-left:0px}.ma{margin:0}.mq{border:1px solid #F2F2F2}.mr{border-radius:99em}.ms{padding:0px 16px 0px 12px}.mt{height:38px}.mu{align-items:center}.mw svg{margin-right:8px}.ne{font-size:18px}.nf{margin-top:1.56em}.ng{line-height:28px}.nh{letter-spacing:-0.003em}.nz{margin-top:40px}.ov{font-size:20px}.ow{margin-top:1.2em}.ox{line-height:24px}.oy{letter-spacing:0}.pn{margin-top:0.67em}.pz{margin-top:1.34em}.qm{margin-top:0.93em}.ri{max-width:100%}.sb{margin-bottom:80px}.sr{padding-top:48px}.tf{margin-bottom:20px}.tg{margin-right:0}.ug{font-size:24px}.uh{line-height:30px}.ui{letter-spacing:-0.016em}.mv:hover{border-color:#E5E5E5}</style><style type="text/css" data-fela-rehydration="568" data-fela-type="RULE" media="print">.sj{display:none}</style><style type="text/css" data-fela-rehydration="568" data-fela-type="RULE" media="(orientation: landscape) and (max-width: 903.98px)">.jm{max-height:none}</style><style type="text/css" data-fela-rehydration="568" data-fela-type="RULE" media="(prefers-reduced-motion: no-preference)">.oe{transition:transform 300ms cubic-bezier(0.2, 0, 0.2, 1)}</style></head><body><div id="root"><div class="a b c"><div class="d e f g h i j k"></div><script>document.domain = document.domain;</script><div class="l c"><div class="l m n o c"><div class="p q r s t u v w x i d y z"><a class="du ag dv bf ak b am an ao ap aq ar as at s u w i d q dw z" href="https://rsci.app.link/?%24canonical_url=https%3A%2F%2Fmedium.com%2Fp%2Fff7bb40470df&amp;%7Efeature=LoOpenInAppButton&amp;%7Echannel=ShowPostUnderCollection&amp;source=---top_nav_layout_nav----------------------------------" rel="noopener follow">Open in app<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" fill="none" viewBox="0 0 10 10" class="dt"><path fill="currentColor" d="M.985 8.485a.375.375 0 1 0 .53.53zM8.75 1.25h.375A.375.375 0 0 0 8.75.875zM8.375 6.5a.375.375 0 1 0 .75 0zM3.5.875a.375.375 0 1 0 0 .75zm-1.985 8.14 7.5-7.5-.53-.53-7.5 7.5zm6.86-7.765V6.5h.75V1.25zM3.5 1.625h5.25v-.75H3.5z"></path></svg></a><div class="ab q"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><a class="bf b dx dy eh dz ea ei eb ec ej ek ee el em eg eo ep eq er es et eu ev ew ex ey ez fa fb fc fd bm fe ff" data-testid="headerSignUpButton" href="https://medium.com/m/signin?operation=register&amp;redirect=https%3A%2F%2Fproandroiddev.com%2Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df&amp;source=post_page---top_nav_layout_nav-----------------------global_nav-----------" rel="noopener follow">Sign up</a></span></p><div class="ax l"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerSignInButton" href="https://medium.com/m/signin?operation=login&amp;redirect=https%3A%2F%2Fproandroiddev.com%2Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df&amp;source=post_page---top_nav_layout_nav-----------------------global_nav-----------" rel="noopener follow">Sign in</a></span></p></div></div></div><div class="p q r ab ac"><div class="ab q ae"><a class="af ag ah ai aj ak al am an ao ap aq ar as at ab" aria-label="Homepage" data-testid="headerMediumLogo" href="https://medium.com/?source=---top_nav_layout_nav----------------------------------" rel="noopener follow"><svg xmlns="http://www.w3.org/2000/svg" width="719" height="160" fill="none" viewBox="0 0 719 160" class="au av aw"><path fill="#242424" d="m174.104 9.734.215-.047V8.02H130.39L89.6 103.89 48.81 8.021H1.472v1.666l.212.047c8.018 1.81 12.09 4.509 12.09 14.242V137.93c0 9.734-4.087 12.433-12.106 14.243l-.212.047v1.671h32.118v-1.665l-.213-.048c-8.018-1.809-12.089-4.509-12.089-14.242V30.586l52.399 123.305h2.972l53.925-126.743V140.75c-.687 7.688-4.721 10.062-11.982 11.701l-.215.05v1.652h55.948v-1.652l-.215-.05c-7.269-1.639-11.4-4.013-12.087-11.701l-.037-116.774h.037c0-9.733 4.071-12.432 12.087-14.242m25.555 75.488c.915-20.474 8.268-35.252 20.606-35.507 3.806.063 6.998 1.312 9.479 3.714 5.272 5.118 7.751 15.812 7.368 31.793zm-.553 5.77h65.573v-.275c-.186-15.656-4.721-27.834-13.466-36.196-7.559-7.227-18.751-11.203-30.507-11.203h-.263c-6.101 0-13.584 1.48-18.909 4.16-6.061 2.807-11.407 7.003-15.855 12.511-7.161 8.874-11.499 20.866-12.554 34.343q-.05.606-.092 1.212a50 50 0 0 0-.065 1.151 85.807 85.807 0 0 0-.094 5.689c.71 30.524 17.198 54.917 46.483 54.917 25.705 0 40.675-18.791 44.407-44.013l-1.886-.664c-6.557 13.556-18.334 21.771-31.738 20.769-18.297-1.369-32.314-19.922-31.042-42.395m139.722 41.359c-2.151 5.101-6.639 7.908-12.653 7.908s-11.513-4.129-15.418-11.63c-4.197-8.053-6.405-19.436-6.405-32.92 0-28.067 8.729-46.22 22.24-46.22 5.657 0 10.111 2.807 12.236 7.704zm43.499 20.008c-8.019-1.897-12.089-4.722-12.089-14.951V1.309l-48.716 14.353v1.757l.299-.024c6.72-.543 11.278.386 13.925 2.83 2.072 1.915 3.082 4.853 3.082 8.987v18.66c-4.803-3.067-10.516-4.56-17.448-4.56-14.059 0-26.909 5.92-36.176 16.672-9.66 11.205-14.767 26.518-14.767 44.278-.003 31.72 15.612 53.039 38.851 53.039 13.595 0 24.533-7.449 29.54-20.013v16.865h43.711v-1.746zM424.1 19.819c0-9.904-7.468-17.374-17.375-17.374-9.859 0-17.573 7.632-17.573 17.374s7.721 17.374 17.573 17.374c9.907 0 17.375-7.47 17.375-17.374m11.499 132.546c-8.019-1.897-12.089-4.722-12.089-14.951h-.035V43.635l-43.714 12.551v1.705l.263.024c9.458.842 12.047 4.1 12.047 15.152v81.086h43.751v-1.746zm112.013 0c-8.018-1.897-12.089-4.722-12.089-14.951V43.635l-41.621 12.137v1.71l.246.026c7.733.813 9.967 4.257 9.967 15.36v59.279c-2.578 5.102-7.415 8.131-13.274 8.336-9.503 0-14.736-6.419-14.736-18.073V43.638l-43.714 12.55v1.703l.262.024c9.459.84 12.05 4.097 12.05 15.152v50.17a56.3 56.3 0 0 0 .91 10.444l.787 3.423c3.701 13.262 13.398 20.197 28.59 20.197 12.868 0 24.147-7.966 29.115-20.43v17.311h43.714v-1.747zm169.818 1.788v-1.749l-.213-.05c-8.7-2.006-12.089-5.789-12.089-13.49v-63.79c0-19.89-11.171-31.761-29.883-31.761-13.64 0-25.141 7.882-29.569 20.16-3.517-13.01-13.639-20.16-28.606-20.16-13.146 0-23.449 6.938-27.869 18.657V43.643L545.487 55.68v1.715l.263.024c9.345.829 12.047 4.181 12.047 14.95v81.784h40.787v-1.746l-.215-.053c-6.941-1.631-9.181-4.606-9.181-12.239V66.998c1.836-4.289 5.537-9.37 12.853-9.37 9.086 0 13.692 6.296 13.692 18.697v77.828h40.797v-1.746l-.215-.053c-6.94-1.631-9.18-4.606-9.18-12.239V75.066a42 42 0 0 0-.578-7.26c1.947-4.661 5.86-10.177 13.475-10.177 9.214 0 13.691 6.114 13.691 18.696v77.828z"></path></svg></a><div class="ax h"><div class="ab ay az ba bb q bc bd"><div class="bm" aria-hidden="false" aria-describedby="searchResults" aria-labelledby="searchResults"></div><div class="bn bo ab"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M4.092 11.06a6.95 6.95 0 1 1 13.9 0 6.95 6.95 0 0 1-13.9 0m6.95-8.05a8.05 8.05 0 1 0 5.13 14.26l3.75 3.75a.56.56 0 1 0 .79-.79l-3.73-3.73A8.05 8.05 0 0 0 11.042 3z" clip-rule="evenodd"></path></svg></div><input role="combobox" aria-controls="searchResults" aria-expanded="false" aria-label="search" data-testid="headerSearchInput" tabindex="0" class="ay be bf bg z bh bi bj bk bl" placeholder="Search" value=""/></div></div></div><div class="h k w fg fh"><div class="fi ab"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerWriteButton" href="https://medium.com/m/signin?operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fnew-story&amp;source=---top_nav_layout_nav-----------------------new_post_topnav-----------" rel="noopener follow"><div class="bf b bg z du fj fk ab q fl fm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24" aria-label="Write"><path fill="currentColor" d="M14 4a.5.5 0 0 0 0-1zm7 6a.5.5 0 0 0-1 0zm-7-7H4v1h10zM3 4v16h1V4zm1 17h16v-1H4zm17-1V10h-1v10zm-1 1a1 1 0 0 0 1-1h-1zM3 20a1 1 0 0 0 1 1v-1zM4 3a1 1 0 0 0-1 1h1z"></path><path stroke="currentColor" d="m17.5 4.5-8.458 8.458a.25.25 0 0 0-.06.098l-.824 2.47a.25.25 0 0 0 .316.316l2.47-.823a.25.25 0 0 0 .098-.06L19.5 6.5m-2-2 2.323-2.323a.25.25 0 0 1 .354 0l1.646 1.646a.25.25 0 0 1 0 .354L19.5 6.5m-2-2 2 2"></path></svg><div class="dt l">Write</div></div></a></span></div></div><div class="k j i d"><div class="fi ab"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerSearchButton" href="https://medium.com/search?source=---top_nav_layout_nav----------------------------------" rel="noopener follow"><div class="bf b bg z du fj fk ab q fl fm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24" aria-label="Search"><path fill="currentColor" fill-rule="evenodd" d="M4.092 11.06a6.95 6.95 0 1 1 13.9 0 6.95 6.95 0 0 1-13.9 0m6.95-8.05a8.05 8.05 0 1 0 5.13 14.26l3.75 3.75a.56.56 0 1 0 .79-.79l-3.73-3.73A8.05 8.05 0 0 0 11.042 3z" clip-rule="evenodd"></path></svg></div></a></div></div><div class="fi h k j"><div class="ab q"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><a class="bf b dx dy eh dz ea ei eb ec ej ek ee el em eg eo ep eq er es et eu ev ew ex ey ez fa fb fc fd bm fe ff" data-testid="headerSignUpButton" href="https://medium.com/m/signin?operation=register&amp;redirect=https%3A%2F%2Fproandroiddev.com%2Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df&amp;source=post_page---top_nav_layout_nav-----------------------global_nav-----------" rel="noopener follow">Sign up</a></span></p><div class="ax l"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerSignInButton" href="https://medium.com/m/signin?operation=login&amp;redirect=https%3A%2F%2Fproandroiddev.com%2Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df&amp;source=post_page---top_nav_layout_nav-----------------------global_nav-----------" rel="noopener follow">Sign in</a></span></p></div></div></div><div class="l" aria-hidden="false"><button class="ay fn am ab q ao fo fp fq" aria-label="user options menu" data-testid="headerUserIcon"><div class="l fj"><img alt="" class="l fd by bz ca cx" src="https://miro.medium.com/v2/resize:fill:64:64/1*dmbNkD5D-u45r44go_cf0g.png" width="32" height="32" loading="lazy" role="presentation"/><div class="fr by l bz ca fs n ay ft"></div></div></button></div></div></div><div class="l"><div class="fu fv fw fx fy l"><div class="ab cb"><div class="ci bh fz ga gb gc"></div></div><article><div class="l"><div class="l"><span class="l"></span><section><div><div class="fs gi gj gk gl gm"></div><div class="gn go gp gq gr"><div class="ab cb"><div class="ci bh fz ga gb gc"><div><h1 id="2533" class="pw-post-title gs gt gu bf gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu bk" data-testid="storyTitle">Benchmarking Koin vs. Dagger Hilt in Modern Android Development (2024)</h1><div><div class="speechify-ignore ab cp"><div class="speechify-ignore bh l"><div class="hv hw hx hy hz ab"><div><div class="ab ia"><div><div class="bm" aria-hidden="false"><a href="https://giuliani-arnaud.medium.com/?source=post_page---byline--ff7bb40470df--------------------------------" rel="noopener follow"><div class="l ib ic by id ie"><div class="l fj"><img alt="Arnaud Giuliani" class="l fd by dd de cx" src="https://miro.medium.com/v2/resize:fill:88:88/1*aRvmkmivw-VRIX-6wYUVCA.jpeg" width="44" height="44" loading="lazy" data-testid="authorPhoto"/><div class="if by l dd de fs n ig ft"></div></div></div></a></div></div><div class="ih ab fj"><div><div class="bm" aria-hidden="false"><a href="https://proandroiddev.com/?source=post_page---byline--ff7bb40470df--------------------------------" rel="noopener ugc nofollow"><div class="l ii ij by id ik"><div class="l fj"><img alt="ProAndroidDev" class="l fd by br il cx" src="https://miro.medium.com/v2/resize:fill:48:48/1*XVtdl45m8YaYrPI4buJ5yQ.png" width="24" height="24" loading="lazy" data-testid="publicationPhoto"/><div class="if by l br il fs n ig ft"></div></div></div></a></div></div></div></div></div><div class="bn bh l"><div class="ab"><div style="flex:1"><span class="bf b bg z bk"><div class="im ab q"><div class="ab q in"><div class="ab q"><div><div class="bm" aria-hidden="false"><p class="bf b io ip bk"><a class="af ag ah ai aj ak al am an ao ap aq ar iq" data-testid="authorName" href="https://giuliani-arnaud.medium.com/?source=post_page---byline--ff7bb40470df--------------------------------" rel="noopener follow">Arnaud Giuliani</a></p></div></div></div><span class="ir is" aria-hidden="true"><span class="bf b bg z du">·</span></span><p class="bf b io ip du"><span><a class="it iu ah ai aj ak al am an ao ap aq ar ex iv iw" href="https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fsubscribe%2Fuser%2F9ad99ca649d4&amp;operation=register&amp;redirect=https%3A%2F%2Fproandroiddev.com%2Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df&amp;user=Arnaud+Giuliani&amp;userId=9ad99ca649d4&amp;source=post_page-9ad99ca649d4--byline--ff7bb40470df---------------------post_header-----------" rel="noopener follow">Follow</a></span></p></div></div></span></div></div><div class="l ix"><span class="bf b bg z du"><div class="ab cn iy iz ja"><div class="jb jc ab"><div class="bf b bg z du ab jd"><span class="je l ix">Published in</span><div><div class="l" aria-hidden="false"><a class="af ag ah ai aj ak al am an ao ap aq ar iq ab q" data-testid="publicationName" href="https://proandroiddev.com/?source=post_page---byline--ff7bb40470df--------------------------------" rel="noopener ugc nofollow"><p class="bf b bg z jf jg jh ji jj jk jl jm bk">ProAndroidDev</p></a></div></div></div><div class="h k"><span class="ir is" aria-hidden="true"><span class="bf b bg z du">·</span></span></div></div><span class="bf b bg z du"><div class="ab ae"><span data-testid="storyReadTime">6 min read</span><div class="jn jo l" aria-hidden="true"><span class="l" aria-hidden="true"><span class="bf b bg z du">·</span></span></div>3 days ago</div></span></div></span></div></div></div><div class="ab cp jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke"><div class="h k w fg fh q"><div class="ku l"><div class="ab q kv kw"><div class="pw-multi-vote-icon fj je kx ky kz"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerClapButton" href="https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fvote%2Fproandroiddev%2Fff7bb40470df&amp;operation=register&amp;redirect=https%3A%2F%2Fproandroiddev.com%2Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df&amp;user=Arnaud+Giuliani&amp;userId=9ad99ca649d4&amp;source=---header_actions--ff7bb40470df---------------------clap_footer-----------" rel="noopener follow"><div><div class="bm" aria-hidden="false"><div class="la ao lb lc ld le am lf lg lh kz"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-label="clap"><path fill-rule="evenodd" d="M11.37.828 12 3.282l.63-2.454zM13.916 3.953l1.523-2.112-1.184-.39zM8.589 1.84l1.522 2.112-.337-2.501zM18.523 18.92c-.86.86-1.75 1.246-2.62 1.33a6 6 0 0 0 .407-.372c2.388-2.389 2.86-4.951 1.399-7.623l-.912-1.603-.79-1.672c-.26-.56-.194-.98.203-1.288a.7.7 0 0 1 .546-.132c.283.046.546.231.728.5l2.363 4.157c.976 1.624 1.141 4.237-1.324 6.702m-10.999-.438L3.37 14.328a.828.828 0 0 1 .585-1.408.83.83 0 0 1 .585.242l2.158 2.157a.365.365 0 0 0 .516-.516l-2.157-2.158-1.449-1.449a.826.826 0 0 1 1.167-1.17l3.438 3.44a.363.363 0 0 0 .516 0 .364.364 0 0 0 0-.516L5.293 9.513l-.97-.97a.826.826 0 0 1 0-1.166.84.84 0 0 1 1.167 0l.97.968 3.437 3.436a.36.36 0 0 0 .517 0 .366.366 0 0 0 0-.516L6.977 7.83a.82.82 0 0 1-.241-.584.82.82 0 0 1 .824-.826c.219 0 .43.087.584.242l5.787 5.787a.366.366 0 0 0 .587-.415l-1.117-2.363c-.26-.56-.194-.98.204-1.289a.7.7 0 0 1 .546-.132c.283.046.545.232.727.501l2.193 3.86c1.302 2.38.883 4.59-1.277 6.75-1.156 1.156-2.602 1.627-4.19 1.367-1.418-.236-2.866-1.033-4.079-2.246M10.75 5.971l2.12 2.12c-.41.502-.465 1.17-.128 1.89l.22.465-3.523-3.523a.8.8 0 0 1-.097-.368c0-.22.086-.428.241-.584a.847.847 0 0 1 1.167 0m7.355 1.705c-.31-.461-.746-.758-1.23-.837a1.44 1.44 0 0 0-1.11.275c-.312.24-.505.543-.59.881a1.74 1.74 0 0 0-.906-.465 1.47 1.47 0 0 0-.82.106l-2.182-2.182a1.56 1.56 0 0 0-2.2 0 1.54 1.54 0 0 0-.396.701 1.56 1.56 0 0 0-2.21-.01 1.55 1.55 0 0 0-.416.753c-.624-.624-1.649-.624-2.237-.037a1.557 1.557 0 0 0 0 2.2c-.239.1-.501.238-.715.453a1.56 1.56 0 0 0 0 2.2l.516.515a1.556 1.556 0 0 0-.753 2.615L7.01 19c1.32 1.319 2.909 2.189 4.475 2.449q.482.08.971.08c.85 0 1.653-.198 2.393-.579.231.033.46.054.686.054 1.266 0 2.457-.52 3.505-1.567 2.763-2.763 2.552-5.734 1.439-7.586z" clip-rule="evenodd"></path></svg></div></div></div></a></span></div><div class="pw-multi-vote-count l li lj lk ll lm ln lo"><p class="bf b dv z du"><span class="lp">--</span></p></div></div></div><div><div class="bm" aria-hidden="false"><button class="ao la ls lt ab q fk lu lv" aria-label="responses"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="lr"><path d="M18.006 16.803c1.533-1.456 2.234-3.325 2.234-5.321C20.24 7.357 16.709 4 12.191 4S4 7.357 4 11.482c0 4.126 3.674 7.482 8.191 7.482.817 0 1.622-.111 2.393-.327.231.2.48.391.744.559 1.06.693 2.203 1.044 3.399 1.044.224-.008.4-.112.486-.287a.49.49 0 0 0-.042-.518c-.495-.67-.845-1.364-1.04-2.057a4 4 0 0 1-.125-.598zm-3.122 1.055-.067-.223-.315.096a8 8 0 0 1-2.311.338c-4.023 0-7.292-2.955-7.292-6.587 0-3.633 3.269-6.588 7.292-6.588 4.014 0 7.112 2.958 7.112 6.593 0 1.794-.608 3.469-2.027 4.72l-.195.168v.255c0 .056 0 .151.016.295.025.231.081.478.154.733.154.558.398 1.117.722 1.659a5.3 5.3 0 0 1-2.165-.845c-.276-.176-.714-.383-.941-.59z"></path></svg><p class="bf b dv z du"><span class="pw-responses-count lq lr">6</span></p></button></div></div></div><div class="ab q kf kg kh ki kj kk kl km kn ko kp kq kr ks kt"><div class="lw k j i d"></div><div class="h k"><div><div class="bm" aria-hidden="false"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerBookmarkButton" href="https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fbookmark%2Fp%2Fff7bb40470df&amp;operation=register&amp;redirect=https%3A%2F%2Fproandroiddev.com%2Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df&amp;source=---header_actions--ff7bb40470df---------------------bookmark_footer-----------" rel="noopener follow"><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25" class="du lx" aria-label="Add to list bookmark button"><path fill="currentColor" d="M18 2.5a.5.5 0 0 1 1 0V5h2.5a.5.5 0 0 1 0 1H19v2.5a.5.5 0 1 1-1 0V6h-2.5a.5.5 0 0 1 0-1H18zM7 7a1 1 0 0 1 1-1h3.5a.5.5 0 0 0 0-1H8a2 2 0 0 0-2 2v14a.5.5 0 0 0 .805.396L12.5 17l5.695 4.396A.5.5 0 0 0 19 21v-8.5a.5.5 0 0 0-1 0v7.485l-5.195-4.012a.5.5 0 0 0-.61 0L7 19.985z"></path></svg></a></span></div></div></div><div class="fd ly cn"><div class="l ae"><div class="ab cb"><div class="lz ma mb mc md me ci bh"><div class="ab"><div class="bm bh" aria-hidden="false"><div><div class="bm" aria-hidden="false"><button aria-label="Listen" data-testid="audioPlayButton" class="af fk ah ai aj ak al mf an ao ap ex mg mh lv mi mj mk ml mm s mn mo mp mq mr ms mt u mu mv mw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M3 12a9 9 0 1 1 18 0 9 9 0 0 1-18 0m9-10C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2m3.376 10.416-4.599 3.066a.5.5 0 0 1-.777-.416V8.934a.5.5 0 0 1 .777-.416l4.599 3.066a.5.5 0 0 1 0 .832" clip-rule="evenodd"></path></svg><div class="j i d"><p class="bf b bg z du">Listen</p></div></button></div></div></div></div></div></div></div></div><div class="bm" aria-hidden="false" aria-describedby="postFooterSocialMenu" aria-labelledby="postFooterSocialMenu"><div><div class="bm" aria-hidden="false"><button aria-controls="postFooterSocialMenu" aria-expanded="false" aria-label="Share Post" data-testid="headerSocialShareButton" class="af fk ah ai aj ak al mf an ao ap ex mg mh lv mi mj mk ml mm s mn mo mp mq mr ms mt u mu mv mw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M15.218 4.931a.4.4 0 0 1-.118.132l.012.006a.45.45 0 0 1-.292.074.5.5 0 0 1-.3-.13l-2.02-2.02v7.07c0 .28-.23.5-.5.5s-.5-.22-.5-.5v-7.04l-2 2a.45.45 0 0 1-.57.04h-.02a.4.4 0 0 1-.16-.3.4.4 0 0 1 .1-.32l2.8-2.8a.5.5 0 0 1 .7 0l2.8 2.79a.42.42 0 0 1 .068.498m-.106.138.008.004v-.01zM16 7.063h1.5a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-11c-1.1 0-2-.9-2-2v-10a2 2 0 0 1 2-2H8a.5.5 0 0 1 .35.15.5.5 0 0 1 .15.35.5.5 0 0 1-.15.35.5.5 0 0 1-.35.15H6.4c-.5 0-.9.4-.9.9v10.2a.9.9 0 0 0 .9.9h11.2c.5 0 .9-.4.9-.9v-10.2c0-.5-.4-.9-.9-.9H16a.5.5 0 0 1 0-1" clip-rule="evenodd"></path></svg><div class="j i d"><p class="bf b bg z du">Share</p></div></button></div></div></div></div></div></div></div></div></div><p id="6302" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">When choosing a dependency injection framework for Android and Kotlin development, performance is often a key consideration. This article explores the performance of <strong class="mz gv">Koin</strong> in its latest version (<strong class="mz gv">4.0.1-Beta1</strong>) and compares it with <strong class="mz gv">Dagger Hilt (2.52)</strong>. Rather than relying on simplistic benchmarks or limited code execution scenarios, the focus is “developer-centric”: understanding performance in real-world, day-to-day usage. Additionally, this article aims to reassure those who may hesitate to adopt <strong class="mz gv">Koin</strong> due to performance concerns.</p><figure class="ny nz oa ob oc od nv nw paragraph-image"><div role="button" tabindex="0" class="oe of fj og bh oh"><div class="nv nw nx"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/1*h5ULv-tGdDA3yD2c685lFQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*h5ULv-tGdDA3yD2c685lFQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*h5ULv-tGdDA3yD2c685lFQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*h5ULv-tGdDA3yD2c685lFQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*h5ULv-tGdDA3yD2c685lFQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*h5ULv-tGdDA3yD2c685lFQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*h5ULv-tGdDA3yD2c685lFQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp"/><source data-testid="og" srcSet="https://miro.medium.com/v2/resize:fit:640/1*h5ULv-tGdDA3yD2c685lFQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*h5ULv-tGdDA3yD2c685lFQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*h5ULv-tGdDA3yD2c685lFQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*h5ULv-tGdDA3yD2c685lFQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*h5ULv-tGdDA3yD2c685lFQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*h5ULv-tGdDA3yD2c685lFQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*h5ULv-tGdDA3yD2c685lFQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"/><img alt="" class="bh me oi c" width="700" height="341" loading="eager" role="presentation"/></picture></div></div><figcaption class="oj ff ok nv nw ol om bf b bg z du">From original <a class="af on" href="https://github.com/android/nowinandroid" rel="noopener ugc nofollow" target="_blank">Google’s Now in Android</a> banner.</figcaption></figure><h1 id="a351" class="oo op gu bf oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl bk">What to benchmark?</h1><p id="3a10" class="pw-post-body-paragraph mx my gu mz b na pm nc nd ne pn ng nh ni po nk nl nm pp no np nq pq ns nt nu gn bk">Benchmarking such frameworks poses a significant challenge: ensuring fair comparison and focused on equivalent behaviors and features.</p><p id="2673" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">To make this exercise meaningful, I’ve opted for a user-oriented approach: evaluating the time it takes to build a component requested from the UI (like ViewModels and so on …). To ensure our test context is strong enough, we need a complex enough application (no basic “Hello World” or to-do list app).</p><p id="3084" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">For this purpose, I’ve chosen to use Google’s <a class="af on" href="https://github.com/android/nowinandroid" rel="noopener ugc nofollow" target="_blank">Now in Android app</a>, a great open-source application that is complex enough and covers the challenges of real-life development and where the Android team demonstrates best practices (modularization, Jetpack Compose, and dependency injection …).</p><p id="e579" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">By evaluating Koin and Dagger Hilt in this environment, we aim to get insights that truly matter to Android developers.</p><blockquote class="pr ps pt"><p id="54f5" class="mx my pu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">👉 Sources are available at <a class="af on" href="https://github.com/InsertKoinIO/nowinandroid" rel="noopener ugc nofollow" target="_blank">https://github.com/InsertKoinIO/nowinandroid</a></p></blockquote><p id="51c6" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">You will find the following branches:</p><ul class=""><li id="3099" class="mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu pv pw px bk"><a class="af on" href="https://github.com/InsertKoinIO/nowinandroid/tree/perfs_koin" rel="noopener ugc nofollow" target="_blank"><strong class="mz gv">perfs_koin</strong></a> —is the Now in Android migrated to Koin branch, with performances measurement</li><li id="1b6d" class="mx my gu mz b na py nc nd ne pz ng nh ni qa nk nl nm qb no np nq qc ns nt nu pv pw px bk"><a class="af on" href="https://github.com/InsertKoinIO/nowinandroid/tree/perfs_hilt" rel="noopener ugc nofollow" target="_blank"><strong class="mz gv">perfs_hilt</strong></a><strong class="mz gv"> </strong>— is the default Hilt branch, with performances measurement</li></ul><p id="680c" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">And don’t forget <a class="af on" href="https://insert-koin.io/" rel="noopener ugc nofollow" target="_blank">official Koin documentation</a>. Now, let’s dive into the details!</p></div></div></div><div class="ab cb qd qe qf qg" role="separator"><span class="qh by bm qi qj qk"></span><span class="qh by bm qi qj qk"></span><span class="qh by bm qi qj"></span></div><div class="gn go gp gq gr"><div class="ab cb"><div class="ci bh fz ga gb gc"><h1 id="4883" class="oo op gu bf oq or ql ot ou ov qm ox oy oz qn pb pc pd qo pf pg ph qp pj pk pl bk">Service Locator or Dependency Injection? Koin can do both!</h1><p id="3562" class="pw-post-body-paragraph mx my gu mz b na pm nc nd ne pn ng nh ni po nk nl nm pp no np nq pq ns nt nu gn bk">Before diving into the benchmarks, let’s address a common question about Koin: Is it a Service Locator or a Dependency Injection (DI) framework? The answer i<strong class="mz gv">s both.</strong></p><ul class=""><li id="20ac" class="mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu pv pw px bk">A <strong class="mz gv">Service Locator</strong> retrieves dependencies dynamically through a centralized registry.</li><li id="269b" class="mx my gu mz b na py nc nd ne pz ng nh ni qa nk nl nm qb no np nq qc ns nt nu pv pw px bk"><strong class="mz gv">Dependency Injection</strong> provides dependencies explicitly at instantiation, enhancing testability and maintainability.</li></ul><p id="9e90" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">Koin bridges these two approaches, offering dynamic retrieval via <code class="cx qq qr qs qt b">get()</code> or <code class="cx qq qr qs qt b">inject()</code> while also supporting DI features like constructor injection and scoping.</p><p id="6078" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">Koin’s dynamic behavior is influenced by Android’s lifecycle, which historically made constructor injection challenging. While modern Android features now support constructor injection, Koin remains flexible, letting developers choose the best approach for their needs.</p><p id="bb09" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">At its core, <strong class="mz gv">Koin is a DI framework</strong>. It avoids reflection overhead, uses a Kotlin DSL for dependency graphs, and supports scoped lifecycles. However, its ability to function as a Service Locator adds versatility, particularly for simpler or legacy projects.</p><p id="f51b" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">This is a summary, but this Koin project <a class="af on" href="https://insert-koin.io/docs/setup/why/#koin-a-dependency-injection-framework" rel="noopener ugc nofollow" target="_blank">documentation page</a> has more details if you need to go deeper.</p><h1 id="4aae" class="oo op gu bf oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl bk">Why choose Koin?</h1><ul class=""><li id="0f97" class="mx my gu mz b na pm nc nd ne pn ng nh ni po nk nl nm pp no np nq pq ns nt nu pv pw px bk"><strong class="mz gv">Simple and Developer-Friendly: </strong>Koin’s clean DSL, no compile-time overhead, minimal setup, and easy testing let you focus on building your apps.</li><li id="8f0e" class="mx my gu mz b na py nc nd ne pz ng nh ni qa nk nl nm qb no np nq qc ns nt nu pv pw px bk"><strong class="mz gv">Scales with Your App: f</strong>rom small apps to complex projects, Koin scales effortlessly to meet your needs.</li><li id="0a6b" class="mx my gu mz b na py nc nd ne pz ng nh ni qa nk nl nm qb no np nq qc ns nt nu pv pw px bk"><strong class="mz gv">Evolving Compile-Time Safety: </strong>With features like module validation (<strong class="mz gv">Verify API</strong>), <strong class="mz gv">Koin Annotations</strong> (KSP for configuration safety), and the upcoming <strong class="mz gv">Koin IDE Plugin</strong>, Koin simplifies coding while boosting safety.</li><li id="67be" class="mx my gu mz b na py nc nd ne pz ng nh ni qa nk nl nm qb no np nq qc ns nt nu pv pw px bk"><strong class="mz gv">Ready for Kotlin Multiplatform: </strong>Koin seamlessly manages dependencies across iOS, Android, Desktop, and Web, making it the go-to DI framework for cross-platform development.</li><li id="7d59" class="mx my gu mz b na py nc nd ne pz ng nh ni qa nk nl nm qb no np nq qc ns nt nu pv pw px bk"><strong class="mz gv">Perfect for Compose Multiplatform: </strong>Koin integrates effortlessly with Compose Multiplatform, supporting shared logic and DI for UI components — even <strong class="mz gv">ViewModel</strong>.</li></ul><p id="a843" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">If you’re curious about Koin’s internals and design, let me know — I’d be happy to explore that in a future article. For now, let’s dive into the benchmarks! 😁</p><h1 id="67eb" class="oo op gu bf oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl bk">Tracking Performances</h1><p id="c623" class="pw-post-body-paragraph mx my gu mz b na pm nc nd ne pn ng nh ni po nk nl nm pp no np nq pq ns nt nu gn bk">Tracking the performance of components over sessions is trickier than it initially seems. While tools like <a class="af on" href="https://developer.android.com/topic/performance/baselineprofiles/measure-baselineprofile" rel="noopener ugc nofollow" target="_blank"><strong class="mz gv">Baseline Profiles Macrobenchmark</strong></a> and similar deep-dive tools offer great analysis, they don’t allow me to easily extract benchmark values for custom use. Alternatively, connected dev platforms like <strong class="mz gv">Firebase Crashlytics or </strong><a class="af on" href="https://kotzilla.io/" rel="noopener ugc nofollow" target="_blank"><strong class="mz gv">Kotzilla Platform</strong></a> offer convenient solutions to capture and analyze performance metrics.</p><p id="7175" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">My goal here is to <strong class="mz gv">stay simple and lightweight</strong>: I want to <strong class="mz gv">measure how long it takes to create a specific component</strong>, like building a ViewModel instance using dependency injection. I don’t need a complex framework for this task, but I’m OK with manually instrumenting my code as long as it’s straightforward and lightweight.</p><p id="7f6e" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">To achieve this, I wrote a few functions to capture function call time from DI frameworks (All is in <code class="cx qq qr qs qt b"><a class="af on" href="https://github.com/InsertKoinIO/nowinandroid/blob/perfs_koin/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/Measure.kt" rel="noopener ugc nofollow" target="_blank"><strong class="mz gv">Measure.kt</strong></a></code> file). This utility leverages <strong class="mz gv">Kotlin’s </strong><code class="cx qq qr qs qt b"><strong class="mz gv">measureTimedValue</strong></code><strong class="mz gv"> </strong>function, an elegant and efficient way to measure code execution times, making it an excellent fit for lightweight, manual instrumentation. By extending the Android <code class="cx qq qr qs qt b">Context</code>, I created an easy way to log the duration of any function call (or dependency injection operation) directly to a log file.</p><pre class="ny nz oa ob oc qu qt qv bp qw bb bk"><span id="ea9d" class="qx op gu qt b bg qy qz l ra rb">inline fun &lt;reified T&gt; Context.measureTimeLazy(tag : String, code : () -&gt; Lazy&lt;T&gt;) : Lazy&lt;T&gt;{<br/> val result = measureTimedValue(code)<br/> val timeInMs = result.duration.inWholeMicroseconds / 1000.0<br/> logBenchmark(tag,timeInMs)<br/> return result.value<br/>}</span></pre><p id="049b" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">In the end, <strong class="mz gv">we are storing all results in a local file</strong> (function <code class="cx qq qr qs qt b"><strong class="mz gv">logBenchmark</strong></code>). This file will be extracted, to allow average times calculation.</p><h1 id="a68e" class="oo op gu bf oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl bk">Now in Android</h1><p id="5067" class="pw-post-body-paragraph mx my gu mz b na pm nc nd ne pn ng nh ni po nk nl nm pp no np nq pq ns nt nu gn bk">Now, let’s see how these tracking functions are applied in our real-world scenario. For this benchmark, we’ll measure the performance of the following components: <strong class="mz gv">MainActivityViewModel</strong>, <strong class="mz gv">ForYouViewModel</strong>, and <strong class="mz gv">startup time</strong>.</p><p id="6454" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">These ViewModels are the first two used in the application, making them ideal candidates for assessing the performance of DI frameworks during the app’s initial loading phase.</p><p id="7efb" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">In the <strong class="mz gv">Koin implementation</strong>, the performance tracking for these components is instrumented as follows (<a class="af on" href="https://github.com/InsertKoinIO/nowinandroid/blob/perfs_koin/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt#L77" rel="noopener ugc nofollow" target="_blank">MainActivity</a> &amp; <a class="af on" href="https://github.com/InsertKoinIO/nowinandroid/blob/perfs_koin/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt#L113" rel="noopener ugc nofollow" target="_blank">ForYouScreen</a> links):</p><figure class="ny nz oa ob oc od nv nw paragraph-image"><div role="button" tabindex="0" class="oe of fj og bh oh"><div class="nv nw rc"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/1*OowREC3NUDtEEcjR8x7LmQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*OowREC3NUDtEEcjR8x7LmQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*OowREC3NUDtEEcjR8x7LmQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*OowREC3NUDtEEcjR8x7LmQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*OowREC3NUDtEEcjR8x7LmQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*OowREC3NUDtEEcjR8x7LmQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*OowREC3NUDtEEcjR8x7LmQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp"/><source data-testid="og" srcSet="https://miro.medium.com/v2/resize:fit:640/1*OowREC3NUDtEEcjR8x7LmQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*OowREC3NUDtEEcjR8x7LmQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*OowREC3NUDtEEcjR8x7LmQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*OowREC3NUDtEEcjR8x7LmQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*OowREC3NUDtEEcjR8x7LmQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*OowREC3NUDtEEcjR8x7LmQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*OowREC3NUDtEEcjR8x7LmQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"/><img alt="" class="bh me oi c" width="700" height="288" loading="lazy" role="presentation"/></picture></div></div><figcaption class="oj ff ok nv nw ol om bf b bg z du"><a class="af on" href="https://github.com/InsertKoinIO/nowinandroid/blob/perfs_koin/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt#L77" rel="noopener ugc nofollow" target="_blank">MainActivity</a></figcaption></figure><figure class="ny nz oa ob oc od nv nw paragraph-image"><div role="button" tabindex="0" class="oe of fj og bh oh"><div class="nv nw rd"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/1*8c3oKI6m21a11SNnKqtfvQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*8c3oKI6m21a11SNnKqtfvQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*8c3oKI6m21a11SNnKqtfvQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*8c3oKI6m21a11SNnKqtfvQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*8c3oKI6m21a11SNnKqtfvQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*8c3oKI6m21a11SNnKqtfvQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*8c3oKI6m21a11SNnKqtfvQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp"/><source data-testid="og" srcSet="https://miro.medium.com/v2/resize:fit:640/1*8c3oKI6m21a11SNnKqtfvQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*8c3oKI6m21a11SNnKqtfvQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*8c3oKI6m21a11SNnKqtfvQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*8c3oKI6m21a11SNnKqtfvQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*8c3oKI6m21a11SNnKqtfvQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*8c3oKI6m21a11SNnKqtfvQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*8c3oKI6m21a11SNnKqtfvQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"/><img alt="" class="bh me oi c" width="700" height="115" loading="lazy" role="presentation"/></picture></div></div><figcaption class="oj ff ok nv nw ol om bf b bg z du"><a class="af on" href="https://github.com/InsertKoinIO/nowinandroid/blob/perfs_koin/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt#L113" rel="noopener ugc nofollow" target="_blank">ForYouScreen</a></figcaption></figure><p id="78e9" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">A note here: we are using the latest <a class="af on" href="https://insert-koin.io/docs/reference/koin-android/start#start-koin-with-androidx-startup-401" rel="noopener ugc nofollow" target="_blank">Koin AndroidX Startup</a> feature to help improve startup time.</p><p id="3e23" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">For the <strong class="mz gv">Hilt implementation</strong>, tracking is similarly applied (<a class="af on" href="https://github.com/InsertKoinIO/nowinandroid/blob/perfs_hilt/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt#L80" rel="noopener ugc nofollow" target="_blank">MainActivity</a> &amp; <a class="af on" href="https://github.com/InsertKoinIO/nowinandroid/blob/perfs_hilt/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt#L113" rel="noopener ugc nofollow" target="_blank">ForYouScreen</a> links):</p><figure class="ny nz oa ob oc od nv nw paragraph-image"><div role="button" tabindex="0" class="oe of fj og bh oh"><div class="nv nw re"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/1*rbW-zq0Lr_C08qQ5MEeu4g.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*rbW-zq0Lr_C08qQ5MEeu4g.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*rbW-zq0Lr_C08qQ5MEeu4g.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*rbW-zq0Lr_C08qQ5MEeu4g.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*rbW-zq0Lr_C08qQ5MEeu4g.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rbW-zq0Lr_C08qQ5MEeu4g.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*rbW-zq0Lr_C08qQ5MEeu4g.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp"/><source data-testid="og" srcSet="https://miro.medium.com/v2/resize:fit:640/1*rbW-zq0Lr_C08qQ5MEeu4g.png 640w, https://miro.medium.com/v2/resize:fit:720/1*rbW-zq0Lr_C08qQ5MEeu4g.png 720w, https://miro.medium.com/v2/resize:fit:750/1*rbW-zq0Lr_C08qQ5MEeu4g.png 750w, https://miro.medium.com/v2/resize:fit:786/1*rbW-zq0Lr_C08qQ5MEeu4g.png 786w, https://miro.medium.com/v2/resize:fit:828/1*rbW-zq0Lr_C08qQ5MEeu4g.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*rbW-zq0Lr_C08qQ5MEeu4g.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*rbW-zq0Lr_C08qQ5MEeu4g.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"/><img alt="" class="bh me oi c" width="700" height="365" loading="lazy" role="presentation"/></picture></div></div><figcaption class="oj ff ok nv nw ol om bf b bg z du"><a class="af on" href="https://github.com/InsertKoinIO/nowinandroid/blob/perfs_hilt/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt#L80" rel="noopener ugc nofollow" target="_blank">MainActivity</a></figcaption></figure><figure class="ny nz oa ob oc od nv nw paragraph-image"><div role="button" tabindex="0" class="oe of fj og bh oh"><div class="nv nw rf"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/1*gp9VQJRriHxewM5Xd6te_g.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*gp9VQJRriHxewM5Xd6te_g.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*gp9VQJRriHxewM5Xd6te_g.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*gp9VQJRriHxewM5Xd6te_g.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*gp9VQJRriHxewM5Xd6te_g.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*gp9VQJRriHxewM5Xd6te_g.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*gp9VQJRriHxewM5Xd6te_g.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp"/><source data-testid="og" srcSet="https://miro.medium.com/v2/resize:fit:640/1*gp9VQJRriHxewM5Xd6te_g.png 640w, https://miro.medium.com/v2/resize:fit:720/1*gp9VQJRriHxewM5Xd6te_g.png 720w, https://miro.medium.com/v2/resize:fit:750/1*gp9VQJRriHxewM5Xd6te_g.png 750w, https://miro.medium.com/v2/resize:fit:786/1*gp9VQJRriHxewM5Xd6te_g.png 786w, https://miro.medium.com/v2/resize:fit:828/1*gp9VQJRriHxewM5Xd6te_g.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*gp9VQJRriHxewM5Xd6te_g.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*gp9VQJRriHxewM5Xd6te_g.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"/><img alt="" class="bh me oi c" width="700" height="121" loading="lazy" role="presentation"/></picture></div></div><figcaption class="oj ff ok nv nw ol om bf b bg z du"><a class="af on" href="https://github.com/InsertKoinIO/nowinandroid/blob/perfs_hilt/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt#L113" rel="noopener ugc nofollow" target="_blank">ForYouScreen</a></figcaption></figure><p id="861d" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">To capture the <strong class="mz gv">startup time</strong>, we use the <code class="cx qq qr qs qt b">onWindowFocusChanged</code> function in <strong class="mz gv">MainActivity</strong>. This measures the time it takes for the app to render its first frame after gaining focus, giving a clear picture of the app’s startup performance. We track time from the <strong class="mz gv">Application</strong> class until the first Activity:</p><figure class="ny nz oa ob oc od nv nw paragraph-image"><div class="nv nw rg"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/1*e9kIuHTCr1NODB3qiF6ijQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*e9kIuHTCr1NODB3qiF6ijQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*e9kIuHTCr1NODB3qiF6ijQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*e9kIuHTCr1NODB3qiF6ijQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*e9kIuHTCr1NODB3qiF6ijQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*e9kIuHTCr1NODB3qiF6ijQ.png 1100w, https://miro.medium.com/v2/resize:fit:1050/format:webp/1*e9kIuHTCr1NODB3qiF6ijQ.png 1050w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 525px" type="image/webp"/><source data-testid="og" srcSet="https://miro.medium.com/v2/resize:fit:640/1*e9kIuHTCr1NODB3qiF6ijQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*e9kIuHTCr1NODB3qiF6ijQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*e9kIuHTCr1NODB3qiF6ijQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*e9kIuHTCr1NODB3qiF6ijQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*e9kIuHTCr1NODB3qiF6ijQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*e9kIuHTCr1NODB3qiF6ijQ.png 1100w, https://miro.medium.com/v2/resize:fit:1050/1*e9kIuHTCr1NODB3qiF6ijQ.png 1050w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 525px"/><img alt="" class="bh me oi c" width="525" height="248" loading="lazy" role="presentation"/></picture></div><figcaption class="oj ff ok nv nw ol om bf b bg z du"><a class="af on" href="https://github.com/InsertKoinIO/nowinandroid/blob/perfs_hilt/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt#L80" rel="noopener ugc nofollow" target="_blank">MainActivity</a></figcaption></figure><h1 id="101e" class="oo op gu bf oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl bk">Execution, Extraction, And Results</h1><p id="36aa" class="pw-post-body-paragraph mx my gu mz b na pm nc nd ne pn ng nh ni po nk nl nm pp no np nq pq ns nt nu gn bk">To capture performance metrics automatically, we run the <code class="cx qq qr qs qt b"><strong class="mz gv">benchmark.sh</strong></code> shell script. This script automates a sequence of app install, start, wait a few seconds, and stop actions to simulate realistic usage patterns. After all runs, it extracts the <code class="cx qq qr qs qt b"><strong class="mz gv">benchmark_log.txt</strong></code> file containing all recorded times. This is 25 iterations of running the Nia application&#x27;s start, wait and stop (demo release build).</p><p id="0853" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">Using the collected data, the <code class="cx qq qr qs qt b"><strong class="mz gv">stats.py</strong></code> Python script processes the log to compute key statistics: minimum, maximum, and average times for each benchmarked component.</p><p id="8ae9" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk"><strong class="mz gv">On your terminal</strong>, you can just run the command: <code class="cx qq qr qs qt b"><strong class="mz gv">benchmark.sh ; python3 stats.py</strong></code><strong class="mz gv"> (</strong>from the /app folder).</p><p id="0892" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">The best is to run it on a real Android device. On my OnePlus Nord (Android 12), I got the following results:</p></div></div><div class="od"><div class="ab cb"><div class="lz rh ma ri mb rj cf rk cg rl ci bh"><figure class="ny nz oa ob oc od rn ro paragraph-image"><div role="button" tabindex="0" class="oe of fj og bh oh"><div class="nv nw rm"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/1*LLdRHLMGjA71dEZYwb2aLA.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*LLdRHLMGjA71dEZYwb2aLA.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*LLdRHLMGjA71dEZYwb2aLA.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*LLdRHLMGjA71dEZYwb2aLA.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*LLdRHLMGjA71dEZYwb2aLA.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*LLdRHLMGjA71dEZYwb2aLA.png 1100w, https://miro.medium.com/v2/resize:fit:2000/format:webp/1*LLdRHLMGjA71dEZYwb2aLA.png 2000w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 1000px" type="image/webp"/><source data-testid="og" srcSet="https://miro.medium.com/v2/resize:fit:640/1*LLdRHLMGjA71dEZYwb2aLA.png 640w, https://miro.medium.com/v2/resize:fit:720/1*LLdRHLMGjA71dEZYwb2aLA.png 720w, https://miro.medium.com/v2/resize:fit:750/1*LLdRHLMGjA71dEZYwb2aLA.png 750w, https://miro.medium.com/v2/resize:fit:786/1*LLdRHLMGjA71dEZYwb2aLA.png 786w, https://miro.medium.com/v2/resize:fit:828/1*LLdRHLMGjA71dEZYwb2aLA.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*LLdRHLMGjA71dEZYwb2aLA.png 1100w, https://miro.medium.com/v2/resize:fit:2000/1*LLdRHLMGjA71dEZYwb2aLA.png 2000w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 1000px"/><img alt="" class="bh me oi c" width="1000" height="350" loading="eager" role="presentation"/></picture></div></div><figcaption class="oj ff ok nv nw ol om bf b bg z du">OnePlus Nord <a class="af on" href="https://gist.github.com/arnaudgiuliani/9e05451d111373eaf570c7f3a4465ad2" rel="noopener ugc nofollow" target="_blank">results</a>, and also in Google <a class="af on" href="https://bit.ly/benchmark_koin_hilt_2024" rel="noopener ugc nofollow" target="_blank">spreadsheet</a></figcaption></figure></div></div></div><div class="ab cb"><div class="ci bh fz ga gb gc"><figure class="ny nz oa ob oc od nv nw paragraph-image"><div role="button" tabindex="0" class="oe of fj og bh oh"><div class="nv nw rp"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/1*YX92QMcZrxcNfSi99jj0RA.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*YX92QMcZrxcNfSi99jj0RA.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*YX92QMcZrxcNfSi99jj0RA.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*YX92QMcZrxcNfSi99jj0RA.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*YX92QMcZrxcNfSi99jj0RA.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*YX92QMcZrxcNfSi99jj0RA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*YX92QMcZrxcNfSi99jj0RA.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp"/><source data-testid="og" srcSet="https://miro.medium.com/v2/resize:fit:640/1*YX92QMcZrxcNfSi99jj0RA.png 640w, https://miro.medium.com/v2/resize:fit:720/1*YX92QMcZrxcNfSi99jj0RA.png 720w, https://miro.medium.com/v2/resize:fit:750/1*YX92QMcZrxcNfSi99jj0RA.png 750w, https://miro.medium.com/v2/resize:fit:786/1*YX92QMcZrxcNfSi99jj0RA.png 786w, https://miro.medium.com/v2/resize:fit:828/1*YX92QMcZrxcNfSi99jj0RA.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*YX92QMcZrxcNfSi99jj0RA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*YX92QMcZrxcNfSi99jj0RA.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"/><img alt="" class="bh me oi c" width="700" height="267" loading="eager" role="presentation"/></picture></div></div><figcaption class="oj ff ok nv nw ol om bf b bg z du">Same OnePlus Nord <a class="af on" href="https://gist.github.com/arnaudgiuliani/9e05451d111373eaf570c7f3a4465ad2" rel="noopener ugc nofollow" target="_blank">results</a> in table</figcaption></figure><p id="8d37" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">In this benchmark, in addition to average, minimum, and maximum, we show the “<strong class="mz gv">standard error”: </strong>it<strong class="mz gv"> </strong>measures the <strong class="mz gv">reliability of the average</strong>, indicating how much it may vary from the true population mean. Smaller values mean more stable and precise results. It helps also compare stability results between Koin and Dagger Hilt.</p></div></div></div><div class="ab cb qd qe qf qg" role="separator"><span class="qh by bm qi qj qk"></span><span class="qh by bm qi qj qk"></span><span class="qh by bm qi qj"></span></div><div class="gn go gp gq gr"><div class="ab cb"><div class="ci bh fz ga gb gc"><p id="2611" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">The benchmarks highlight <strong class="mz gv">Koin</strong> as a reliable and modern alternative for Android development, matching <strong class="mz gv">Hilt</strong> in performance while offering its own unique advantages.</p><p id="a09c" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">That said, benchmarks are just one part of the story. Your results may vary depending on your app, but the trends are clear: <strong class="mz gv">Koin is performant for real-world challenges. </strong>From Android to Kotlin Multiplatform and Compose Multiplatform applications.</p><p id="8755" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">I’m always open to feedback — if you have thoughts or insights, <a class="af on" href="https://slack-chats.kotlinlang.org/c/koin" rel="noopener ugc nofollow" target="_blank">let’s chat</a>! 👍</p><p id="4192" class="pw-post-body-paragraph mx my gu mz b na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu gn bk">Why not give <strong class="mz gv">Koin</strong> a shot? Let <strong class="mz gv">Koin</strong> be part of your journey! 😊</p></div></div></div></div></section></div></div></article></div><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="rq rr ab ja"><div class="rs ab"><a class="rt ay am ao" href="https://medium.com/tag/koin?source=post_page-----ff7bb40470df--------------------------------" rel="noopener follow"><div class="ru fj cx rv ge rw rx bf b bg z bk ry">Koin</div></a></div><div class="rs ab"><a class="rt ay am ao" href="https://medium.com/tag/dependency-injection?source=post_page-----ff7bb40470df--------------------------------" rel="noopener follow"><div class="ru fj cx rv ge rw rx bf b bg z bk ry">Dependency Injection</div></a></div><div class="rs ab"><a class="rt ay am ao" href="https://medium.com/tag/android?source=post_page-----ff7bb40470df--------------------------------" rel="noopener follow"><div class="ru fj cx rv ge rw rx bf b bg z bk ry">Android</div></a></div><div class="rs ab"><a class="rt ay am ao" href="https://medium.com/tag/performance?source=post_page-----ff7bb40470df--------------------------------" rel="noopener follow"><div class="ru fj cx rv ge rw rx bf b bg z bk ry">Performance</div></a></div><div class="rs ab"><a class="rt ay am ao" href="https://medium.com/tag/benchmark?source=post_page-----ff7bb40470df--------------------------------" rel="noopener follow"><div class="ru fj cx rv ge rw rx bf b bg z bk ry">Benchmark</div></a></div></div></div></div><div class="l"></div><footer class="rz sa sb sc sd se sf sg sh ab q si ik c"><div class="l ae"><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="ab cp sj"><div class="ab q kv"><div class="sk l"><span class="l sl sm sn e d"><div class="ab q kv kw"><div class="pw-multi-vote-icon fj je kx ky kz"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="footerClapButton" href="https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fvote%2Fproandroiddev%2Fff7bb40470df&amp;operation=register&amp;redirect=https%3A%2F%2Fproandroiddev.com%2Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df&amp;user=Arnaud+Giuliani&amp;userId=9ad99ca649d4&amp;source=---footer_actions--ff7bb40470df---------------------clap_footer-----------" rel="noopener follow"><div><div class="bm" aria-hidden="false"><div class="la ao lb lc ld le am lf lg lh kz"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-label="clap"><path fill-rule="evenodd" d="M11.37.828 12 3.282l.63-2.454zM13.916 3.953l1.523-2.112-1.184-.39zM8.589 1.84l1.522 2.112-.337-2.501zM18.523 18.92c-.86.86-1.75 1.246-2.62 1.33a6 6 0 0 0 .407-.372c2.388-2.389 2.86-4.951 1.399-7.623l-.912-1.603-.79-1.672c-.26-.56-.194-.98.203-1.288a.7.7 0 0 1 .546-.132c.283.046.546.231.728.5l2.363 4.157c.976 1.624 1.141 4.237-1.324 6.702m-10.999-.438L3.37 14.328a.828.828 0 0 1 .585-1.408.83.83 0 0 1 .585.242l2.158 2.157a.365.365 0 0 0 .516-.516l-2.157-2.158-1.449-1.449a.826.826 0 0 1 1.167-1.17l3.438 3.44a.363.363 0 0 0 .516 0 .364.364 0 0 0 0-.516L5.293 9.513l-.97-.97a.826.826 0 0 1 0-1.166.84.84 0 0 1 1.167 0l.97.968 3.437 3.436a.36.36 0 0 0 .517 0 .366.366 0 0 0 0-.516L6.977 7.83a.82.82 0 0 1-.241-.584.82.82 0 0 1 .824-.826c.219 0 .43.087.584.242l5.787 5.787a.366.366 0 0 0 .587-.415l-1.117-2.363c-.26-.56-.194-.98.204-1.289a.7.7 0 0 1 .546-.132c.283.046.545.232.727.501l2.193 3.86c1.302 2.38.883 4.59-1.277 6.75-1.156 1.156-2.602 1.627-4.19 1.367-1.418-.236-2.866-1.033-4.079-2.246M10.75 5.971l2.12 2.12c-.41.502-.465 1.17-.128 1.89l.22.465-3.523-3.523a.8.8 0 0 1-.097-.368c0-.22.086-.428.241-.584a.847.847 0 0 1 1.167 0m7.355 1.705c-.31-.461-.746-.758-1.23-.837a1.44 1.44 0 0 0-1.11.275c-.312.24-.505.543-.59.881a1.74 1.74 0 0 0-.906-.465 1.47 1.47 0 0 0-.82.106l-2.182-2.182a1.56 1.56 0 0 0-2.2 0 1.54 1.54 0 0 0-.396.701 1.56 1.56 0 0 0-2.21-.01 1.55 1.55 0 0 0-.416.753c-.624-.624-1.649-.624-2.237-.037a1.557 1.557 0 0 0 0 2.2c-.239.1-.501.238-.715.453a1.56 1.56 0 0 0 0 2.2l.516.515a1.556 1.556 0 0 0-.753 2.615L7.01 19c1.32 1.319 2.909 2.189 4.475 2.449q.482.08.971.08c.85 0 1.653-.198 2.393-.579.231.033.46.054.686.054 1.266 0 2.457-.52 3.505-1.567 2.763-2.763 2.552-5.734 1.439-7.586z" clip-rule="evenodd"></path></svg></div></div></div></a></span></div><div class="pw-multi-vote-count l li lj lk ll lm ln lo"><p class="bf b dv z du"><span class="lp">--</span></p></div></div></span><span class="l h g f so sp"><div class="ab q kv kw"><div class="pw-multi-vote-icon fj je kx ky kz"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="footerClapButton" href="https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fvote%2Fproandroiddev%2Fff7bb40470df&amp;operation=register&amp;redirect=https%3A%2F%2Fproandroiddev.com%2Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df&amp;user=Arnaud+Giuliani&amp;userId=9ad99ca649d4&amp;source=---footer_actions--ff7bb40470df---------------------clap_footer-----------" rel="noopener follow"><div><div class="bm" aria-hidden="false"><div class="la ao lb lc ld le am lf lg lh kz"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-label="clap"><path fill-rule="evenodd" d="M11.37.828 12 3.282l.63-2.454zM13.916 3.953l1.523-2.112-1.184-.39zM8.589 1.84l1.522 2.112-.337-2.501zM18.523 18.92c-.86.86-1.75 1.246-2.62 1.33a6 6 0 0 0 .407-.372c2.388-2.389 2.86-4.951 1.399-7.623l-.912-1.603-.79-1.672c-.26-.56-.194-.98.203-1.288a.7.7 0 0 1 .546-.132c.283.046.546.231.728.5l2.363 4.157c.976 1.624 1.141 4.237-1.324 6.702m-10.999-.438L3.37 14.328a.828.828 0 0 1 .585-1.408.83.83 0 0 1 .585.242l2.158 2.157a.365.365 0 0 0 .516-.516l-2.157-2.158-1.449-1.449a.826.826 0 0 1 1.167-1.17l3.438 3.44a.363.363 0 0 0 .516 0 .364.364 0 0 0 0-.516L5.293 9.513l-.97-.97a.826.826 0 0 1 0-1.166.84.84 0 0 1 1.167 0l.97.968 3.437 3.436a.36.36 0 0 0 .517 0 .366.366 0 0 0 0-.516L6.977 7.83a.82.82 0 0 1-.241-.584.82.82 0 0 1 .824-.826c.219 0 .43.087.584.242l5.787 5.787a.366.366 0 0 0 .587-.415l-1.117-2.363c-.26-.56-.194-.98.204-1.289a.7.7 0 0 1 .546-.132c.283.046.545.232.727.501l2.193 3.86c1.302 2.38.883 4.59-1.277 6.75-1.156 1.156-2.602 1.627-4.19 1.367-1.418-.236-2.866-1.033-4.079-2.246M10.75 5.971l2.12 2.12c-.41.502-.465 1.17-.128 1.89l.22.465-3.523-3.523a.8.8 0 0 1-.097-.368c0-.22.086-.428.241-.584a.847.847 0 0 1 1.167 0m7.355 1.705c-.31-.461-.746-.758-1.23-.837a1.44 1.44 0 0 0-1.11.275c-.312.24-.505.543-.59.881a1.74 1.74 0 0 0-.906-.465 1.47 1.47 0 0 0-.82.106l-2.182-2.182a1.56 1.56 0 0 0-2.2 0 1.54 1.54 0 0 0-.396.701 1.56 1.56 0 0 0-2.21-.01 1.55 1.55 0 0 0-.416.753c-.624-.624-1.649-.624-2.237-.037a1.557 1.557 0 0 0 0 2.2c-.239.1-.501.238-.715.453a1.56 1.56 0 0 0 0 2.2l.516.515a1.556 1.556 0 0 0-.753 2.615L7.01 19c1.32 1.319 2.909 2.189 4.475 2.449q.482.08.971.08c.85 0 1.653-.198 2.393-.579.231.033.46.054.686.054 1.266 0 2.457-.52 3.505-1.567 2.763-2.763 2.552-5.734 1.439-7.586z" clip-rule="evenodd"></path></svg></div></div></div></a></span></div><div class="pw-multi-vote-count l li lj lk ll lm ln lo"><p class="bf b dv z du"><span class="lp">--</span></p></div></div></span></div><div class="bq ab"><div><div class="bm" aria-hidden="false"><button class="ao la ls lt ab q fk lu lv" aria-label="responses"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="lr"><path d="M18.006 16.803c1.533-1.456 2.234-3.325 2.234-5.321C20.24 7.357 16.709 4 12.191 4S4 7.357 4 11.482c0 4.126 3.674 7.482 8.191 7.482.817 0 1.622-.111 2.393-.327.231.2.48.391.744.559 1.06.693 2.203 1.044 3.399 1.044.224-.008.4-.112.486-.287a.49.49 0 0 0-.042-.518c-.495-.67-.845-1.364-1.04-2.057a4 4 0 0 1-.125-.598zm-3.122 1.055-.067-.223-.315.096a8 8 0 0 1-2.311.338c-4.023 0-7.292-2.955-7.292-6.587 0-3.633 3.269-6.588 7.292-6.588 4.014 0 7.112 2.958 7.112 6.593 0 1.794-.608 3.469-2.027 4.72l-.195.168v.255c0 .056 0 .151.016.295.025.231.081.478.154.733.154.558.398 1.117.722 1.659a5.3 5.3 0 0 1-2.165-.845c-.276-.176-.714-.383-.941-.59z"></path></svg><p class="bf b bg z du"><span class="pw-responses-count lq lr">6</span></p></button></div></div></div></div><div class="ab q"><div class="qk l ix"><div><div class="bm" aria-hidden="false"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="footerBookmarkButton" href="https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fbookmark%2Fp%2Fff7bb40470df&amp;operation=register&amp;redirect=https%3A%2F%2Fproandroiddev.com%2Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df&amp;source=---footer_actions--ff7bb40470df---------------------bookmark_footer-----------" rel="noopener follow"><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25" class="du lx" aria-label="Add to list bookmark button"><path fill="currentColor" d="M18 2.5a.5.5 0 0 1 1 0V5h2.5a.5.5 0 0 1 0 1H19v2.5a.5.5 0 1 1-1 0V6h-2.5a.5.5 0 0 1 0-1H18zM7 7a1 1 0 0 1 1-1h3.5a.5.5 0 0 0 0-1H8a2 2 0 0 0-2 2v14a.5.5 0 0 0 .805.396L12.5 17l5.695 4.396A.5.5 0 0 0 19 21v-8.5a.5.5 0 0 0-1 0v7.485l-5.195-4.012a.5.5 0 0 0-.61 0L7 19.985z"></path></svg></a></span></div></div></div><div class="qk l ix"><div class="bm" aria-hidden="false" aria-describedby="postFooterSocialMenu" aria-labelledby="postFooterSocialMenu"><div><div class="bm" aria-hidden="false"><button aria-controls="postFooterSocialMenu" aria-expanded="false" aria-label="Share Post" data-testid="footerSocialShareButton" class="af fk ah ai aj ak al mf an ao ap ex mg mh lv mi"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M15.218 4.931a.4.4 0 0 1-.118.132l.012.006a.45.45 0 0 1-.292.074.5.5 0 0 1-.3-.13l-2.02-2.02v7.07c0 .28-.23.5-.5.5s-.5-.22-.5-.5v-7.04l-2 2a.45.45 0 0 1-.57.04h-.02a.4.4 0 0 1-.16-.3.4.4 0 0 1 .1-.32l2.8-2.8a.5.5 0 0 1 .7 0l2.8 2.79a.42.42 0 0 1 .068.498m-.106.138.008.004v-.01zM16 7.063h1.5a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-11c-1.1 0-2-.9-2-2v-10a2 2 0 0 1 2-2H8a.5.5 0 0 1 .35.15.5.5 0 0 1 .15.35.5.5 0 0 1-.15.35.5.5 0 0 1-.35.15H6.4c-.5 0-.9.4-.9.9v10.2a.9.9 0 0 0 .9.9h11.2c.5 0 .9-.4.9-.9v-10.2c0-.5-.4-.9-.9-.9H16a.5.5 0 0 1 0-1" clip-rule="evenodd"></path></svg></button></div></div></div></div></div></div></div></div></div></footer><div class="sq sr ss st su l bx"><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="sv l"><div class="ab sw sx sy iz iy"><div class="sz ta tb tc td te tf tg th ti ab cp"><div class="h k"><a href="https://proandroiddev.com/?source=post_page---post_publication_info--ff7bb40470df--------------------------------" rel="noopener follow"><div class="fj ab"><img alt="ProAndroidDev" class="tj ib ic cx" src="https://miro.medium.com/v2/resize:fill:96:96/1*XVtdl45m8YaYrPI4buJ5yQ.png" width="48" height="48" loading="lazy"/><div class="tj l ic ib fs n fr tk"></div></div></a></div><div class="j i d"><a href="https://proandroiddev.com/?source=post_page---post_publication_info--ff7bb40470df--------------------------------" rel="noopener follow"><div class="fj ab"><img alt="ProAndroidDev" class="tj tm tl cx" src="https://miro.medium.com/v2/resize:fill:128:128/1*XVtdl45m8YaYrPI4buJ5yQ.png" width="64" height="64" loading="lazy"/><div class="tj l tl tm fs n fr tk"></div></div></a></div><div class="j i d tn ix"><div class="ab"><span><a class="bf b bg z to ru tp tq tr ts tt ev ew tu tv tw fa fb fc fd bm fe ff" href="https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fsubscribe%2Fcollection%2Fproandroiddev&amp;operation=register&amp;redirect=https%3A%2F%2Fproandroiddev.com%2Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df&amp;collection=ProAndroidDev&amp;collectionId=c72404660798&amp;source=post_page---post_publication_info--ff7bb40470df---------------------follow_profile-----------" rel="noopener follow">Follow</a></span></div></div></div><div class="ab co tx"><div class="ty tz ua ri rh l"><a class="af ag ah aj ak al am an ao ap aq ar as at ab q" href="https://proandroiddev.com/?source=post_page---post_publication_info--ff7bb40470df--------------------------------" rel="noopener follow"><h2 class="pw-author-name bf uc ud ue uf ug uh ui ni uj uk nm ul um nq un uo bk"><span class="gn ub">Published in <!-- -->ProAndroidDev</span></h2></a><div class="rs ab ia"><div class="l ix"><span class="pw-follower-count bf b bg z du"><a class="af ag ah ai aj ak al am an ao ap aq ar iq" rel="noopener follow" href="/followers?source=post_page---post_publication_info--ff7bb40470df--------------------------------">62K Followers</a></span></div><div class="bf b bg z du ab jd"><span class="ir l" aria-hidden="true"><span class="bf b bg z du">·</span></span><a class="af ag ah ai aj ak al am an ao ap aq ar iq" rel="noopener follow" href="/benchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df?source=post_page---post_publication_info--ff7bb40470df--------------------------------">Last published <!-- -->3 days ago</a></div></div><div class="up l"><p class="bf b bg z bk"><span class="gn">The latest posts from Android Professionals and Google Developer Experts.</span></p></div></div></div><div class="h k"><div class="ab"><span><a class="bf b bg z to ru tp tq tr ts tt ev ew tu tv tw fa fb fc fd bm fe ff" href="https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fsubscribe%2Fcollection%2Fproandroiddev&amp;operation=register&amp;redirect=https%3A%2F%2Fproandroiddev.com%2Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df&amp;collection=ProAndroidDev&amp;collectionId=c72404660798&amp;source=post_page---post_publication_info--ff7bb40470df---------------------follow_profile-----------" rel="noopener follow">Follow</a></span></div></div></div></div><div class="ab sw sx sy iz iy"><div class="sz ta tb tc td te tf tg th ti ab cp"><div class="h k"><a tabindex="0" href="https://giuliani-arnaud.medium.com/?source=post_page---post_author_info--ff7bb40470df--------------------------------" rel="noopener follow"><div class="l fj"><img alt="Arnaud Giuliani" class="l fd by ic ib cx" src="https://miro.medium.com/v2/resize:fill:96:96/1*aRvmkmivw-VRIX-6wYUVCA.jpeg" width="48" height="48" loading="lazy"/><div class="fr by l ic ib fs n ay tk"></div></div></a></div><div class="j i d"><a tabindex="0" href="https://giuliani-arnaud.medium.com/?source=post_page---post_author_info--ff7bb40470df--------------------------------" rel="noopener follow"><div class="l fj"><img alt="Arnaud Giuliani" class="l fd by tl tm cx" src="https://miro.medium.com/v2/resize:fill:128:128/1*aRvmkmivw-VRIX-6wYUVCA.jpeg" width="64" height="64" loading="lazy"/><div class="fr by l tl tm fs n ay tk"></div></div></a></div><div class="j i d tn ix"><div class="ab"><span><a class="bf b bg z to ru tp tq tr ts tt ev ew tu tv tw fa fb fc fd bm fe ff" href="https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fsubscribe%2Fuser%2F9ad99ca649d4&amp;operation=register&amp;redirect=https%3A%2F%2Fproandroiddev.com%2Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df&amp;user=Arnaud+Giuliani&amp;userId=9ad99ca649d4&amp;source=post_page-9ad99ca649d4--post_author_info--ff7bb40470df---------------------follow_profile-----------" rel="noopener follow">Follow</a></span></div></div></div><div class="ab co tx"><div class="ty tz ua ri rh l"><a class="af ag ah aj ak al am an ao ap aq ar as at ab q" href="https://giuliani-arnaud.medium.com/?source=post_page---post_author_info--ff7bb40470df--------------------------------" rel="noopener follow"><h2 class="pw-author-name bf uc ud ue uf ug uh ui ni uj uk nm ul um nq un uo bk"><span class="gn ub">Written by <!-- -->Arnaud Giuliani</span></h2></a><div class="rs ab ia"><div class="l ix"><span class="pw-follower-count bf b bg z du"><a class="af ag ah ai aj ak al am an ao ap aq ar iq" href="https://giuliani-arnaud.medium.com/followers?source=post_page---post_author_info--ff7bb40470df--------------------------------" rel="noopener follow">2.3K Followers</a></span></div><div class="bf b bg z du ab jd"><span class="ir l" aria-hidden="true"><span class="bf b bg z du">·</span></span><a class="af ag ah ai aj ak al am an ao ap aq ar iq" href="https://medium.com/@giuliani-arnaud/following?source=post_page---post_author_info--ff7bb40470df--------------------------------" rel="noopener follow">61 Following</a></div></div><div class="up l"><p class="bf b bg z bk">Lead of #Koin framework (<a class="af ag ah ai aj ak al am an ao ap aq ar on go" href="http://insert-koin.io" rel="noopener ugc nofollow">insert-koin.io</a>) - Co-founder of Kotzilla (<a class="af ag ah ai aj ak al am an ao ap aq ar on go" href="http://kotzilla.io" rel="noopener ugc nofollow">kotzilla.io</a>) - Google Dev Expert #Kotlin - #AndroidDev</p></div></div></div><div class="h k"><div class="ab"><span><a class="bf b bg z to ru tp tq tr ts tt ev ew tu tv tw fa fb fc fd bm fe ff" href="https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fsubscribe%2Fuser%2F9ad99ca649d4&amp;operation=register&amp;redirect=https%3A%2F%2Fproandroiddev.com%2Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df&amp;user=Arnaud+Giuliani&amp;userId=9ad99ca649d4&amp;source=post_page-9ad99ca649d4--post_author_info--ff7bb40470df---------------------follow_profile-----------" rel="noopener follow">Follow</a></span></div></div></div><div class="uq bh ur us"></div></div></div><div class="h k j"><div class="uq bh ur ut"></div><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="uu ab kv ja"><div class="uv uw l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://help.medium.com/hc/en-us?source=post_page-----ff7bb40470df--------------------------------" rel="noopener follow"><p class="bf b dv z du">Help</p></a></div><div class="uv uw l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://medium.statuspage.io/?source=post_page-----ff7bb40470df--------------------------------" rel="noopener follow"><p class="bf b dv z du">Status</p></a></div><div class="uv uw l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://medium.com/about?autoplay=1&amp;source=post_page-----ff7bb40470df--------------------------------" rel="noopener follow"><p class="bf b dv z du">About</p></a></div><div class="uv uw l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://medium.com/jobs-at-medium/work-at-medium-959d1a85284e?source=post_page-----ff7bb40470df--------------------------------" rel="noopener follow"><p class="bf b dv z du">Careers</p></a></div><div class="uv uw l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="pressinquiries@medium.com?source=post_page-----ff7bb40470df--------------------------------" rel="noopener follow"><p class="bf b dv z du">Press</p></a></div><div class="uv uw l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://blog.medium.com/?source=post_page-----ff7bb40470df--------------------------------" rel="noopener follow"><p class="bf b dv z du">Blog</p></a></div><div class="uv uw l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://policy.medium.com/medium-privacy-policy-f03bf92035c9?source=post_page-----ff7bb40470df--------------------------------" rel="noopener follow"><p class="bf b dv z du">Privacy</p></a></div><div class="uv uw l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://policy.medium.com/medium-terms-of-service-9db0094a1e0f?source=post_page-----ff7bb40470df--------------------------------" rel="noopener follow"><p class="bf b dv z du">Terms</p></a></div><div class="uv uw l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://speechify.com/medium?source=post_page-----ff7bb40470df--------------------------------" rel="noopener follow"><p class="bf b dv z du">Text to speech</p></a></div><div class="uv l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://medium.com/business?source=post_page-----ff7bb40470df--------------------------------" rel="noopener follow"><p class="bf b dv z du">Teams</p></a></div></div></div></div></div></div></div></div></div></div><script>window.__BUILD_ID__="main-20241129-135346-5cf0f044cd"</script><script>window.__GRAPHQL_URI__ = "https://proandroiddev.com/_/graphql"</script><script>window.__PRELOADED_STATE__ = {"algolia":{"queries":{}},"cache":{"experimentGroupSet":true,"reason":"This request is not using the cache middleware worker","group":"disabled","tags":["group-edgeCachePosts","post-ff7bb40470df","user-9ad99ca649d4","collection-c72404660798"],"serverVariantState":"","middlewareEnabled":false,"cacheStatus":"DYNAMIC","shouldUseCache":false,"vary":[],"lohpSummerUpsellEnabled":false,"publicationHierarchyEnabledWeb":false,"postBottomResponsesEnabled":false},"client":{"hydrated":false,"isUs":false,"isNativeMedium":false,"isSafariMobile":false,"isSafari":false,"isFirefox":false,"routingEntity":{"type":"COLLECTION","id":"c72404660798","explicit":true},"viewerIsBot":false},"debug":{"requestId":"6fca7b55-a2b4-46b8-a5d4-f16838a35cff","hybridDevServices":[],"originalSpanCarrier":{"traceparent":"00-ded7c9291e6f048b846099de3f6d9fe0-1c0eb00470df70c7-01"}},"multiVote":{"clapsPerPost":{}},"navigation":{"branch":{"show":null,"hasRendered":null,"blockedByCTA":false},"hideGoogleOneTap":false,"hasRenderedAlternateUserBanner":null,"currentLocation":"https:\u002F\u002Fproandroiddev.com\u002Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df","host":"proandroiddev.com","hostname":"proandroiddev.com","referrer":"","hasSetReferrer":false,"susiModal":{"step":null,"operation":"register"},"postRead":false,"partnerProgram":{"selectedCountryCode":null},"queryString":"?source=collection_home---4------0-----------------------"},"config":{"nodeEnv":"production","version":"main-20241129-135346-5cf0f044cd","target":"production","productName":"Medium","publicUrl":"https:\u002F\u002Fcdn-client.medium.com\u002Flite","authDomain":"medium.com","authGoogleClientId":"216296035834-k1k6qe060s2tp2a2jam4ljdcms00sttg.apps.googleusercontent.com","favicon":"production","glyphUrl":"https:\u002F\u002Fglyph.medium.com","branchKey":"key_live_ofxXr2qTrrU9NqURK8ZwEhknBxiI6KBm","algolia":{"appId":"MQ57UUUQZ2","apiKeySearch":"394474ced050e3911ae2249ecc774921","indexPrefix":"medium_","host":"-dsn.algolia.net"},"recaptchaKey":"6Lfc37IUAAAAAKGGtC6rLS13R1Hrw_BqADfS1LRk","recaptcha3Key":"6Lf8R9wUAAAAABMI_85Wb8melS7Zj6ziuf99Yot5","recaptchaEnterpriseKeyId":"6Le-uGgpAAAAAPprRaokM8AKthQ9KNGdoxaGUvVp","datadog":{"applicationId":"6702d87d-a7e0-42fe-bbcb-95b469547ea0","clientToken":"pub853ea8d17ad6821d9f8f11861d23dfed","rumToken":"pubf9cc52896502b9413b68ba36fc0c7162","context":{"deployment":{"target":"production","tag":"main-20241129-135346-5cf0f044cd","commit":"5cf0f044cde04a296c7f1e11fd4877d75fdab011"}},"datacenter":"us"},"googleAnalyticsCode":"G-7JY7T788PK","googlePay":{"apiVersion":"2","apiVersionMinor":"0","merchantId":"BCR2DN6TV7EMTGBM","merchantName":"Medium","instanceMerchantId":"13685562959212738550"},"applePay":{"version":3},"signInWallCustomDomainCollectionIds":["3a8144eabfe3","336d898217ee","61061eb0c96b","138adf9c44c","819cc2aaeee0"],"mediumMastodonDomainName":"me.dm","mediumOwnedAndOperatedCollectionIds":["8a9336e5bb4","b7e45b22fec3","193b68bd4fba","8d6b8a439e32","54c98c43354d","3f6ecf56618","d944778ce714","92d2092dc598","ae2a65f35510","1285ba81cada","544c7006046e","fc8964313712","40187e704f1c","88d9857e584e","7b6769f2748b","bcc38c8f6edf","cef6983b292","cb8577c9149e","444d13b52878","713d7dbc99b0","ef8e90590e66","191186aaafa0","55760f21cdc5","9dc80918cc93","bdc4052bbdba","8ccfed20cbb2"],"tierOneDomains":["medium.com","thebolditalic.com","arcdigital.media","towardsdatascience.com","uxdesign.cc","codeburst.io","psiloveyou.xyz","writingcooperative.com","entrepreneurshandbook.co","prototypr.io","betterhumans.coach.me","theascent.pub"],"topicsToFollow":["d61cf867d93f","8a146bc21b28","1eca0103fff3","4d562ee63426","aef1078a3ef5","e15e46793f8d","6158eb913466","55f1c20aba7a","3d18b94f6858","4861fee224fd","63c6f1f93ee","1d98b3a9a871","decb52b64abf","ae5d4995e225","830cded25262"],"topicToTagMappings":{"accessibility":"accessibility","addiction":"addiction","android-development":"android-development","art":"art","artificial-intelligence":"artificial-intelligence","astrology":"astrology","basic-income":"basic-income","beauty":"beauty","biotech":"biotech","blockchain":"blockchain","books":"books","business":"business","cannabis":"cannabis","cities":"cities","climate-change":"climate-change","comics":"comics","coronavirus":"coronavirus","creativity":"creativity","cryptocurrency":"cryptocurrency","culture":"culture","cybersecurity":"cybersecurity","data-science":"data-science","design":"design","digital-life":"digital-life","disability":"disability","economy":"economy","education":"education","equality":"equality","family":"family","feminism":"feminism","fiction":"fiction","film":"film","fitness":"fitness","food":"food","freelancing":"freelancing","future":"future","gadgets":"gadgets","gaming":"gaming","gun-control":"gun-control","health":"health","history":"history","humor":"humor","immigration":"immigration","ios-development":"ios-development","javascript":"javascript","justice":"justice","language":"language","leadership":"leadership","lgbtqia":"lgbtqia","lifestyle":"lifestyle","machine-learning":"machine-learning","makers":"makers","marketing":"marketing","math":"math","media":"media","mental-health":"mental-health","mindfulness":"mindfulness","money":"money","music":"music","neuroscience":"neuroscience","nonfiction":"nonfiction","outdoors":"outdoors","parenting":"parenting","pets":"pets","philosophy":"philosophy","photography":"photography","podcasts":"podcast","poetry":"poetry","politics":"politics","privacy":"privacy","product-management":"product-management","productivity":"productivity","programming":"programming","psychedelics":"psychedelics","psychology":"psychology","race":"race","relationships":"relationships","religion":"religion","remote-work":"remote-work","san-francisco":"san-francisco","science":"science","self":"self","self-driving-cars":"self-driving-cars","sexuality":"sexuality","social-media":"social-media","society":"society","software-engineering":"software-engineering","space":"space","spirituality":"spirituality","sports":"sports","startups":"startup","style":"style","technology":"technology","transportation":"transportation","travel":"travel","true-crime":"true-crime","tv":"tv","ux":"ux","venture-capital":"venture-capital","visual-design":"visual-design","work":"work","world":"world","writing":"writing"},"defaultImages":{"avatar":{"imageId":"1*dmbNkD5D-u45r44go_cf0g.png","height":150,"width":150},"orgLogo":{"imageId":"7*V1_7XP4snlmqrc_0Njontw.png","height":110,"width":500},"postLogo":{"imageId":"bd978bb536350a710e8efb012513429cabdc4c28700604261aeda246d0f980b7","height":810,"width":1440},"postPreviewImage":{"imageId":"1*hn4v1tCaJy7cWMyb0bpNpQ.png","height":386,"width":579}},"collectionStructuredData":{"8d6b8a439e32":{"name":"Elemental","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F980\u002F1*9ygdqoKprhwuTVKUM0DLPA@2x.png","width":980,"height":159}}},"3f6ecf56618":{"name":"Forge","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F596\u002F1*uULpIlImcO5TDuBZ6lm7Lg@2x.png","width":596,"height":183}}},"ae2a65f35510":{"name":"GEN","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F264\u002F1*RdVZMdvfV3YiZTw6mX7yWA.png","width":264,"height":140}}},"88d9857e584e":{"name":"LEVEL","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*JqYMhNX6KNNb2UlqGqO2WQ.png","width":540,"height":108}}},"7b6769f2748b":{"name":"Marker","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F383\u002F1*haCUs0wF6TgOOvfoY-jEoQ@2x.png","width":383,"height":92}}},"444d13b52878":{"name":"OneZero","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*cw32fIqCbRWzwJaoQw6BUg.png","width":540,"height":123}}},"8ccfed20cbb2":{"name":"Zora","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*tZUQqRcCCZDXjjiZ4bDvgQ.png","width":540,"height":106}}}},"embeddedPostIds":{"coronavirus":"cd3010f9d81f"},"sharedCdcMessaging":{"COVID_APPLICABLE_TAG_SLUGS":[],"COVID_APPLICABLE_TOPIC_NAMES":[],"COVID_APPLICABLE_TOPIC_NAMES_FOR_TOPIC_PAGE":[],"COVID_MESSAGES":{"tierA":{"text":"For more information on the novel coronavirus and Covid-19, visit cdc.gov.","markups":[{"start":66,"end":73,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]},"tierB":{"text":"Anyone can publish on Medium per our Policies, but we don’t fact-check every story. For more info about the coronavirus, see cdc.gov.","markups":[{"start":37,"end":45,"href":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Fcategories\u002F201931128-Policies-Safety"},{"start":125,"end":132,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]},"paywall":{"text":"This article has been made free for everyone, thanks to Medium Members. For more information on the novel coronavirus and Covid-19, visit cdc.gov.","markups":[{"start":56,"end":70,"href":"https:\u002F\u002Fmedium.com\u002Fmembership"},{"start":138,"end":145,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]},"unbound":{"text":"This article is free for everyone, thanks to Medium Members. For more information on the novel coronavirus and Covid-19, visit cdc.gov.","markups":[{"start":45,"end":59,"href":"https:\u002F\u002Fmedium.com\u002Fmembership"},{"start":127,"end":134,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]}},"COVID_BANNER_POST_ID_OVERRIDE_WHITELIST":["3b31a67bff4a"]},"sharedVoteMessaging":{"TAGS":["politics","election-2020","government","us-politics","election","2020-presidential-race","trump","donald-trump","democrats","republicans","congress","republican-party","democratic-party","biden","joe-biden","maga"],"TOPICS":["politics","election"],"MESSAGE":{"text":"Find out more about the U.S. election results here.","markups":[{"start":46,"end":50,"href":"https:\u002F\u002Fcookpolitical.com\u002F2020-national-popular-vote-tracker"}]},"EXCLUDE_POSTS":["397ef29e3ca5"]},"embedPostRules":[],"recircOptions":{"v1":{"limit":3},"v2":{"limit":8}},"braintreeClientKey":"production_zjkj96jm_m56f8fqpf7ngnrd4","braintree":{"enabled":true,"merchantId":"m56f8fqpf7ngnrd4","merchantAccountId":{"usd":"AMediumCorporation_instant","eur":"amediumcorporation_EUR","cad":"amediumcorporation_CAD"},"publicKey":"ds2nn34bg2z7j5gd","braintreeEnvironment":"production","dashboardUrl":"https:\u002F\u002Fwww.braintreegateway.com\u002Fmerchants","gracePeriodDurationInDays":14,"mediumMembershipPlanId":{"monthly":"ce105f8c57a3","monthlyV2":"e8a5e126-792b-4ee6-8fba-d574c1b02fc5","monthlyWithTrial":"d5ee3dbe3db8","monthlyPremium":"fa741a9b47a2","yearly":"a40ad4a43185","yearlyV2":"3815d7d6-b8ca-4224-9b8c-182f9047866e","yearlyStaff":"d74fb811198a","yearlyWithTrial":"b3bc7350e5c7","yearlyPremium":"e21bd2c12166","monthlyOneYearFree":"e6c0637a-2bad-4171-ab4f-3c268633d83c","monthly25PercentOffFirstYear":"235ecc62-0cdb-49ae-9378-726cd21c504b","monthly20PercentOffFirstYear":"ba518864-9c13-4a99-91ca-411bf0cac756","monthly15PercentOffFirstYear":"594c029b-9f89-43d5-88f8-8173af4e070e","monthly10PercentOffFirstYear":"c6c7bc9a-40f2-4b51-8126-e28511d5bdb0","monthlyForStudents":"629ebe51-da7d-41fd-8293-34cd2f2030a8","yearlyOneYearFree":"78ba7be9-0d9f-4ece-aa3e-b54b826f2bf1","yearly25PercentOffFirstYear":"2dbb010d-bb8f-4eeb-ad5c-a08509f42d34","yearly20PercentOffFirstYear":"47565488-435b-47f8-bf93-40d5fbe0ebc8","yearly15PercentOffFirstYear":"8259809b-0881-47d9-acf7-6c001c7f720f","yearly10PercentOffFirstYear":"9dd694fb-96e1-472c-8d9e-3c868d5c1506","yearlyForStudents":"e29345ef-ab1c-4234-95c5-70e50fe6bc23","monthlyCad":"p52orjkaceei","yearlyCad":"h4q9g2up9ktt"},"braintreeDiscountId":{"oneMonthFree":"MONTHS_FREE_01","threeMonthsFree":"MONTHS_FREE_03","sixMonthsFree":"MONTHS_FREE_06","fiftyPercentOffOneYear":"FIFTY_PERCENT_OFF_ONE_YEAR"},"3DSecureVersion":"2","defaultCurrency":"usd","providerPlanIdCurrency":{"4ycw":"usd","rz3b":"usd","3kqm":"usd","jzw6":"usd","c2q2":"usd","nnsw":"usd","q8qw":"usd","d9y6":"usd","fx7w":"cad","nwf2":"cad"}},"paypalClientId":"AXj1G4fotC2GE8KzWX9mSxCH1wmPE3nJglf4Z2ig_amnhvlMVX87otaq58niAg9iuLktVNF_1WCMnN7v","paypal":{"host":"https:\u002F\u002Fapi.paypal.com:443","clientMode":"production","serverMode":"live","webhookId":"4G466076A0294510S","monthlyPlan":{"planId":"P-9WR0658853113943TMU5FDQA","name":"Medium Membership (Monthly) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"yearlyPlan":{"planId":"P-7N8963881P8875835MU5JOPQ","name":"Medium Membership (Annual) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"oneYearGift":{"name":"Medium Membership (1 Year, Digital Gift Code)","description":"Unlimited access to the best and brightest stories on Medium. Gift codes can be redeemed at medium.com\u002Fredeem.","price":"50.00","currency":"USD","sku":"membership-gift-1-yr"},"oldMonthlyPlan":{"planId":"P-96U02458LM656772MJZUVH2Y","name":"Medium Membership (Monthly)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"oldYearlyPlan":{"planId":"P-59P80963JF186412JJZU3SMI","name":"Medium Membership (Annual)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"monthlyPlanWithTrial":{"planId":"P-66C21969LR178604GJPVKUKY","name":"Medium Membership (Monthly) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"yearlyPlanWithTrial":{"planId":"P-6XW32684EX226940VKCT2MFA","name":"Medium Membership (Annual) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"oldMonthlyPlanNoSetupFee":{"planId":"P-4N046520HR188054PCJC7LJI","name":"Medium Membership (Monthly)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"oldYearlyPlanNoSetupFee":{"planId":"P-7A4913502Y5181304CJEJMXQ","name":"Medium Membership (Annual)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"sdkUrl":"https:\u002F\u002Fwww.paypal.com\u002Fsdk\u002Fjs"},"stripePublishableKey":"pk_live_7FReX44VnNIInZwrIIx6ghjl","log":{"json":true,"level":"info"},"imageUploadMaxSizeMb":25,"staffPicks":{"title":"Staff Picks","catalogId":"c7bc6e1ee00f"}},"session":{"xsrf":""}}</script><script>window.__APOLLO_STATE__ = {"ROOT_QUERY":{"__typename":"Query","viewer":null,"variantFlags":[{"__typename":"VariantFlag","name":"enable_group_gifting","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_sharer_validate_post_share_key","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"ios_enable_friend_links_creation","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"signin_services","valueType":{"__typename":"VariantFlagString","value":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple"}},{"__typename":"VariantFlag","name":"enable_ios_autorefresh","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_lite_homepage","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"goliath_externalsearch_enable_comment_deindexation","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"limit_user_follows","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_publication_hierarchy_web","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_verifications_service","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_lite_server_upstream_deadlines","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_new_stripe_customers","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"onboarding_tags_from_top_views","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"reengagement_notification_duration","valueType":{"__typename":"VariantFlagNumber","value":3}},{"__typename":"VariantFlag","name":"android_two_hour_refresh","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_braintree_client","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_ranker_v10","valueType":{"__typename":"VariantFlagString","value":"control"}},{"__typename":"VariantFlag","name":"ios_social_share_sheet","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"skip_fs_cache_user_vals","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"redefined_top_posts","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_ml_rank_rex_anno","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_susi_redesign_android","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"allow_signup","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_branch_io","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_creator_welcome_email","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_see_pronouns","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_lite_response_markup","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_braintree_paypal","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"ios_enable_lock_responses","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"available_annual_premium_plan","valueType":{"__typename":"VariantFlagString","value":"4a442ace1476"}},{"__typename":"VariantFlag","name":"enable_members_only_audio","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_android_offline_reading","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_marketing_emails","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_premium_tier_badge","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_speechify_widget","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"signup_services","valueType":{"__typename":"VariantFlagString","value":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple"}},{"__typename":"VariantFlag","name":"enable_billing_frequency_on_step2","valueType":{"__typename":"VariantFlagString","value":"group_1"}},{"__typename":"VariantFlag","name":"enable_maim_the_meter","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_newsletter_lo_flow_custom_domains","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"android_enable_lists_v2","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_speechify_ios","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"price_smoke_test_monthly","valueType":{"__typename":"VariantFlagString","value":""}},{"__typename":"VariantFlag","name":"enable_rito_upstream_deadlines","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"ios_enable_verified_book_author","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_ios_offline_reading","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"android_enable_syntax_highlight","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_explicit_signals","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_pp_country_expansion","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_sprig","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_aurora_pub_follower_page","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_update_explore_wtf","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_explicit_signals_updated_post_previews","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_susi_redesign_ios","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_updated_pub_recs_ui","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"mobile_custom_app_icon","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"android_enable_friend_links_postpage_banners","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_conversion_ranker_v2","valueType":{"__typename":"VariantFlagString","value":"control"}},{"__typename":"VariantFlag","name":"browsable_stream_config_bucket","valueType":{"__typename":"VariantFlagString","value":"curated-topics"}},{"__typename":"VariantFlag","name":"enable_lo_homepage","valueType":{"__typename":"VariantFlagString","value":"control"}},{"__typename":"VariantFlag","name":"enable_moc_load_processor_first_story","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"glyph_font_set","valueType":{"__typename":"VariantFlagString","value":"m2-unbound-source-serif-pro"}},{"__typename":"VariantFlag","name":"enable_mastodon_for_members_username_selection","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"ios_enable_friend_links_postpage_banners","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_android_verified_author","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_braintree_integration","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_tag_recs","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_premium_tier","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_apple_webhook","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"available_monthly_premium_plan","valueType":{"__typename":"VariantFlagString","value":"12a660186432"}},{"__typename":"VariantFlag","name":"enable_bayesian_average_pub_search","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_braintree_google_pay","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_recaptcha_enterprise","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"reader_fair_distribution_non_qp","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"can_send_tips_v0","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_pp_v4","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_braintree_webhook","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_ios_easy_resubscribe","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"price_smoke_test_yearly","valueType":{"__typename":"VariantFlagString","value":""}},{"__typename":"VariantFlag","name":"ios_in_app_free_trial","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_abandoned_cart_promotion_email","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_apple_sign_in","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_boost_nia_v01","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_pre_pp_v4","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"allow_access","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_recommended_publishers_query","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_tribute_landing_page","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"limit_post_referrers","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"textshots_userid","valueType":{"__typename":"VariantFlagString","value":""}},{"__typename":"VariantFlag","name":"enable_automod","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_tick_landing_page","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"can_receive_tips_v0","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_legacy_feed_in_iceland","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_android_dynamic_programming_paywall","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_bg_post_post","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_cache_less_following_feed","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_ios_dynamic_paywall_aspiriational","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_recirc_model","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"ios_remove_twitter_onboarding_step","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_moc_load_processor_all_recs_surfaces","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_mastodon_avatar_upload","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_seamless_social_sharing","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_google_one_tap","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_tipping_v0_android","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"ios_iceland_nux","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_author_cards_byline","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_braintree_apple_pay","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_footer_app_buttons","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_intrinsic_automatic_actions","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"available_monthly_plan","valueType":{"__typename":"VariantFlagString","value":"60e220181034"}},{"__typename":"VariantFlag","name":"enable_sharer_create_post_share_key","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_android_miro_v2","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_configure_pronouns","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_ios_dynamic_paywall_programming","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_switch_plan_premium_tier","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"rex_generator_max_candidates","valueType":{"__typename":"VariantFlagNumber","value":1000}},{"__typename":"VariantFlag","name":"enable_tipping_v0_ios","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_android_dynamic_aspirational_paywall","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_deprecate_legacy_providers_v3","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_update_topic_portals_wtf","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"available_annual_plan","valueType":{"__typename":"VariantFlagString","value":"2c754bcc2995"}},{"__typename":"VariantFlag","name":"num_post_bottom_responses_to_show","valueType":{"__typename":"VariantFlagNumber","value":1}},{"__typename":"VariantFlag","name":"enable_lite_archive_page","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_medium2_kbfd","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_rex_reading_history","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"android_enable_topic_portals","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_rex_aggregator_v2","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_simplified_digest_v2_b","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"ios_enable_home_post_menu","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"android_enable_friend_links_creation","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_conversion_model_v2","valueType":{"__typename":"VariantFlagString","value":"group_2"}},{"__typename":"VariantFlag","name":"enable_eventstats_event_processing","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_iceland_forced_android","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_auto_follow_on_subscribe","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_import","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"allow_test_auth","valueType":{"__typename":"VariantFlagString","value":"disallow"}},{"__typename":"VariantFlag","name":"enable_author_cards","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_diversification_rex","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"android_enable_editor_new_publishing_flow","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"android_enable_image_sharer","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_google_webhook","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_app_flirty_thirty","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_entities_to_follow_v2","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_lite_continue_this_thread","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_mastodon_for_members","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_pill_based_home_feed","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_rex_new_push_notification_endpoint","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_starspace","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"coronavirus_topic_recirc","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_braintree_trial_membership","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"disable_partner_program_enrollment","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_moc_load_processor_c","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"enable_new_manage_membership_flow","valueType":{"__typename":"VariantFlagBoolean","value":true}},{"__typename":"VariantFlag","name":"android_rating_prompt_stories_read_threshold","valueType":{"__typename":"VariantFlagNumber","value":2}},{"__typename":"VariantFlag","name":"ios_display_paywall_after_onboarding","valueType":{"__typename":"VariantFlagBoolean","value":true}}],"collectionByDomainOrSlug({\"domainOrSlug\":\"proandroiddev.com\"})":{"__ref":"Collection:c72404660798"},"postResult({\"id\":\"ff7bb40470df\"})":{"__ref":"Post:ff7bb40470df"}},"ImageMetadata:1*A8VytPZQhvUf_MG6hm_Dlw.png":{"__typename":"ImageMetadata","id":"1*A8VytPZQhvUf_MG6hm_Dlw.png"},"Collection:c72404660798":{"__typename":"Collection","id":"c72404660798","favicon":{"__ref":"ImageMetadata:1*A8VytPZQhvUf_MG6hm_Dlw.png"},"customStyleSheet":null,"colorPalette":{"__typename":"ColorPalette","highlightSpectrum":{"__typename":"ColorSpectrum","backgroundColor":"#FFFFFFFF","colorPoints":[{"__typename":"ColorPoint","color":"#FFE4F8EF","point":0},{"__typename":"ColorPoint","color":"#FFDEF8ED","point":0.1},{"__typename":"ColorPoint","color":"#FFD9F7EB","point":0.2},{"__typename":"ColorPoint","color":"#FFD3F6E9","point":0.3},{"__typename":"ColorPoint","color":"#FFCEF6E7","point":0.4},{"__typename":"ColorPoint","color":"#FFC8F5E4","point":0.5},{"__typename":"ColorPoint","color":"#FFC2F4E2","point":0.6},{"__typename":"ColorPoint","color":"#FFBCF4E0","point":0.7},{"__typename":"ColorPoint","color":"#FFB5F3DE","point":0.8},{"__typename":"ColorPoint","color":"#FFAFF2DB","point":0.9},{"__typename":"ColorPoint","color":"#FFA8F2D9","point":1}]},"defaultBackgroundSpectrum":{"__typename":"ColorSpectrum","backgroundColor":"#FFFFFFFF","colorPoints":[{"__typename":"ColorPoint","color":"#FF2E987E","point":0},{"__typename":"ColorPoint","color":"#FF318D75","point":0.1},{"__typename":"ColorPoint","color":"#FF32826C","point":0.2},{"__typename":"ColorPoint","color":"#FF327663","point":0.3},{"__typename":"ColorPoint","color":"#FF306B5A","point":0.4},{"__typename":"ColorPoint","color":"#FF2E5F50","point":0.5},{"__typename":"ColorPoint","color":"#FF2A5347","point":0.6},{"__typename":"ColorPoint","color":"#FF26463C","point":0.7},{"__typename":"ColorPoint","color":"#FF203931","point":0.8},{"__typename":"ColorPoint","color":"#FF192C25","point":0.9},{"__typename":"ColorPoint","color":"#FF101D19","point":1}]},"tintBackgroundSpectrum":{"__typename":"ColorSpectrum","backgroundColor":"#FF7DE1C3","colorPoints":[{"__typename":"ColorPoint","color":"#FF7DE1C3","point":0},{"__typename":"ColorPoint","color":"#FF6ED2B5","point":0.1},{"__typename":"ColorPoint","color":"#FF5EC3A6","point":0.2},{"__typename":"ColorPoint","color":"#FF4EB397","point":0.3},{"__typename":"ColorPoint","color":"#FF3CA388","point":0.4},{"__typename":"ColorPoint","color":"#FF269278","point":0.5},{"__typename":"ColorPoint","color":"#FF008168","point":0.6},{"__typename":"ColorPoint","color":"#FF006F57","point":0.7},{"__typename":"ColorPoint","color":"#FF005C45","point":0.8},{"__typename":"ColorPoint","color":"#FF004732","point":0.9},{"__typename":"ColorPoint","color":"#FF002F1C","point":1}]}},"domain":"proandroiddev.com","slug":"proandroiddev","googleAnalyticsId":null,"editors":[{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:fbb92b85b19e"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:eac743c05401"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:c6e8e225f7d5"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:96912518b8bb"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:d022c4e0f12b"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:6fffa5371f97"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:bf87f3641b6c"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:f6e9347ca668"}}],"name":"ProAndroidDev","avatar":{"__ref":"ImageMetadata:1*XVtdl45m8YaYrPI4buJ5yQ.png"},"description":"The latest posts from Android Professionals and Google Developer Experts.","subscriberCount":62459,"latestPostsConnection({\"paging\":{\"limit\":1}})":{"__typename":"PostConnection","posts":[{"__ref":"Post:ff7bb40470df"}]},"viewerEdge":{"__ref":"CollectionViewerEdge:collectionId:c72404660798-viewerId:lo_92b8d88cc302"},"twitterUsername":"proandroiddev","facebookPageId":null,"logo":{"__ref":"ImageMetadata:"}},"User:fbb92b85b19e":{"__typename":"User","id":"fbb92b85b19e"},"User:eac743c05401":{"__typename":"User","id":"eac743c05401"},"User:c6e8e225f7d5":{"__typename":"User","id":"c6e8e225f7d5"},"User:96912518b8bb":{"__typename":"User","id":"96912518b8bb"},"User:d022c4e0f12b":{"__typename":"User","id":"d022c4e0f12b"},"User:6fffa5371f97":{"__typename":"User","id":"6fffa5371f97"},"User:bf87f3641b6c":{"__typename":"User","id":"bf87f3641b6c"},"User:f6e9347ca668":{"__typename":"User","id":"f6e9347ca668"},"ImageMetadata:1*XVtdl45m8YaYrPI4buJ5yQ.png":{"__typename":"ImageMetadata","id":"1*XVtdl45m8YaYrPI4buJ5yQ.png"},"User:9ad99ca649d4":{"__typename":"User","id":"9ad99ca649d4","customDomainState":{"__typename":"CustomDomainState","live":{"__typename":"CustomDomain","domain":"giuliani-arnaud.medium.com"}},"hasSubdomain":true,"username":"giuliani-arnaud","name":"Arnaud Giuliani","newsletterV3":{"__ref":"NewsletterV3:172ca0c0b886"},"linkedAccounts":{"__ref":"LinkedAccounts:9ad99ca649d4"},"isSuspended":false,"imageId":"1*aRvmkmivw-VRIX-6wYUVCA.jpeg","mediumMemberAt":1716797025000,"verifications":{"__typename":"VerifiedInfo","isBookAuthor":false},"socialStats":{"__typename":"SocialStats","followerCount":2364,"followingCount":40,"collectionFollowingCount":21},"bio":"Lead of #Koin framework (insert-koin.io) - Co-founder of Kotzilla (kotzilla.io) - Google Dev Expert #Kotlin - #AndroidDev","isPartnerProgramEnrolled":false,"viewerEdge":{"__ref":"UserViewerEdge:userId:9ad99ca649d4-viewerId:lo_92b8d88cc302"},"viewerIsUser":false,"postSubscribeMembershipUpsellShownAt":0,"membership":{"__ref":"Membership:4b8a4137fb97"},"allowNotes":true,"twitterScreenName":""},"Post:ff7bb40470df":{"__typename":"Post","id":"ff7bb40470df","firstPublishedAt":1732672821762,"creator":{"__ref":"User:9ad99ca649d4"},"collection":{"__ref":"Collection:c72404660798"},"isSeries":false,"mediumUrl":"https:\u002F\u002Fproandroiddev.com\u002Fbenchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df","sequence":null,"uniqueSlug":"benchmarking-koin-vs-dagger-hilt-in-modern-android-development-2024-ff7bb40470df","content({\"postMeteringOptions\":{}})":{"__typename":"PostContent","isLockedPreviewOnly":false,"bodyModel":{"__typename":"RichText","sections":[{"__typename":"Section","name":"890e","startIndex":0,"textLayout":null,"imageLayout":null,"backgroundImage":null,"videoLayout":null,"backgroundVideo":null},{"__typename":"Section","name":"ed2a","startIndex":13,"textLayout":null,"imageLayout":null,"backgroundImage":null,"videoLayout":null,"backgroundVideo":null},{"__typename":"Section","name":"91b5","startIndex":54,"textLayout":null,"imageLayout":null,"backgroundImage":null,"videoLayout":null,"backgroundVideo":null}],"paragraphs":[{"__ref":"Paragraph:82791b8b7f39_0"},{"__ref":"Paragraph:82791b8b7f39_1"},{"__ref":"Paragraph:82791b8b7f39_2"},{"__ref":"Paragraph:82791b8b7f39_3"},{"__ref":"Paragraph:82791b8b7f39_4"},{"__ref":"Paragraph:82791b8b7f39_5"},{"__ref":"Paragraph:82791b8b7f39_6"},{"__ref":"Paragraph:82791b8b7f39_7"},{"__ref":"Paragraph:82791b8b7f39_8"},{"__ref":"Paragraph:82791b8b7f39_9"},{"__ref":"Paragraph:82791b8b7f39_10"},{"__ref":"Paragraph:82791b8b7f39_11"},{"__ref":"Paragraph:82791b8b7f39_12"},{"__ref":"Paragraph:82791b8b7f39_13"},{"__ref":"Paragraph:82791b8b7f39_14"},{"__ref":"Paragraph:82791b8b7f39_15"},{"__ref":"Paragraph:82791b8b7f39_16"},{"__ref":"Paragraph:82791b8b7f39_17"},{"__ref":"Paragraph:82791b8b7f39_18"},{"__ref":"Paragraph:82791b8b7f39_19"},{"__ref":"Paragraph:82791b8b7f39_20"},{"__ref":"Paragraph:82791b8b7f39_21"},{"__ref":"Paragraph:82791b8b7f39_22"},{"__ref":"Paragraph:82791b8b7f39_23"},{"__ref":"Paragraph:82791b8b7f39_24"},{"__ref":"Paragraph:82791b8b7f39_25"},{"__ref":"Paragraph:82791b8b7f39_26"},{"__ref":"Paragraph:82791b8b7f39_27"},{"__ref":"Paragraph:82791b8b7f39_28"},{"__ref":"Paragraph:82791b8b7f39_29"},{"__ref":"Paragraph:82791b8b7f39_30"},{"__ref":"Paragraph:82791b8b7f39_31"},{"__ref":"Paragraph:82791b8b7f39_32"},{"__ref":"Paragraph:82791b8b7f39_33"},{"__ref":"Paragraph:82791b8b7f39_34"},{"__ref":"Paragraph:82791b8b7f39_35"},{"__ref":"Paragraph:82791b8b7f39_36"},{"__ref":"Paragraph:82791b8b7f39_37"},{"__ref":"Paragraph:82791b8b7f39_38"},{"__ref":"Paragraph:82791b8b7f39_39"},{"__ref":"Paragraph:82791b8b7f39_40"},{"__ref":"Paragraph:82791b8b7f39_41"},{"__ref":"Paragraph:82791b8b7f39_42"},{"__ref":"Paragraph:82791b8b7f39_43"},{"__ref":"Paragraph:82791b8b7f39_44"},{"__ref":"Paragraph:82791b8b7f39_45"},{"__ref":"Paragraph:82791b8b7f39_46"},{"__ref":"Paragraph:82791b8b7f39_47"},{"__ref":"Paragraph:82791b8b7f39_48"},{"__ref":"Paragraph:82791b8b7f39_49"},{"__ref":"Paragraph:82791b8b7f39_50"},{"__ref":"Paragraph:82791b8b7f39_51"},{"__ref":"Paragraph:82791b8b7f39_52"},{"__ref":"Paragraph:82791b8b7f39_53"},{"__ref":"Paragraph:82791b8b7f39_54"},{"__ref":"Paragraph:82791b8b7f39_55"},{"__ref":"Paragraph:82791b8b7f39_56"},{"__ref":"Paragraph:82791b8b7f39_57"}]},"validatedShareKey":"","shareKeyCreator":null},"inResponseToEntityType":null,"isLocked":false,"isMarkedPaywallOnly":false,"lockedSource":"LOCKED_POST_SOURCE_NONE","primaryTopic":null,"topics":[{"__typename":"Topic","slug":"android-development"},{"__typename":"Topic","slug":"programming"}],"isPublished":true,"latestPublishedVersion":"82791b8b7f39","visibility":"PUBLIC","postResponses":{"__typename":"PostResponses","count":6},"clapCount":343,"allowResponses":true,"isLimitedState":false,"title":"Benchmarking Koin vs. Dagger Hilt in Modern Android Development (2024)","socialTitle":"","socialDek":"","canonicalUrl":"","metaDescription":"","latestPublishedAt":1732726818099,"readingTime":5.884276729559748,"previewContent":{"__typename":"PreviewContent","subtitle":"How Koin scales and performs compared to Hilt, using practical benchmarks and insights."},"previewImage":{"__ref":"ImageMetadata:1*h5ULv-tGdDA3yD2c685lFQ.png"},"isShortform":false,"seoTitle":"","updatedAt":1732762582379,"shortformType":"SHORTFORM_TYPE_LINK","seoDescription":"","viewerEdge":{"__ref":"PostViewerEdge:postId:ff7bb40470df-viewerId:lo_92b8d88cc302"},"isSuspended":false,"license":"ALL_RIGHTS_RESERVED","tags":[{"__ref":"Tag:koin"},{"__ref":"Tag:dependency-injection"},{"__ref":"Tag:android"},{"__ref":"Tag:performance"},{"__ref":"Tag:benchmark"}],"isNewsletter":false,"statusForCollection":"APPROVED","pendingCollection":null,"detectedLanguage":"en","wordCount":1259,"layerCake":0,"responsesLocked":false},"LinkedAccounts:9ad99ca649d4":{"__typename":"LinkedAccounts","mastodon":null,"id":"9ad99ca649d4"},"UserViewerEdge:userId:9ad99ca649d4-viewerId:lo_92b8d88cc302":{"__typename":"UserViewerEdge","id":"userId:9ad99ca649d4-viewerId:lo_92b8d88cc302","isFollowing":false,"isUser":false,"isMuting":false},"NewsletterV3:172ca0c0b886":{"__typename":"NewsletterV3","id":"172ca0c0b886","type":"NEWSLETTER_TYPE_AUTHOR","slug":"9ad99ca649d4","name":"9ad99ca649d4","collection":null,"user":{"__ref":"User:9ad99ca649d4"}},"Membership:4b8a4137fb97":{"__typename":"Membership","tier":"MEMBER","id":"4b8a4137fb97"},"Paragraph:82791b8b7f39_0":{"__typename":"Paragraph","id":"82791b8b7f39_0","name":"2533","type":"H3","href":null,"layout":null,"metadata":null,"text":"Benchmarking Koin vs. Dagger Hilt in Modern Android Development (2024)","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_1":{"__typename":"Paragraph","id":"82791b8b7f39_1","name":"6302","type":"P","href":null,"layout":null,"metadata":null,"text":"When choosing a dependency injection framework for Android and Kotlin development, performance is often a key consideration. This article explores the performance of Koin in its latest version (4.0.1-Beta1) and compares it with Dagger Hilt (2.52). Rather than relying on simplistic benchmarks or limited code execution scenarios, the focus is “developer-centric”: understanding performance in real-world, day-to-day usage. Additionally, this article aims to reassure those who may hesitate to adopt Koin due to performance concerns.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":166,"end":170,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":194,"end":205,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":228,"end":246,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":499,"end":503,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*h5ULv-tGdDA3yD2c685lFQ.png":{"__typename":"ImageMetadata","id":"1*h5ULv-tGdDA3yD2c685lFQ.png","originalHeight":682,"originalWidth":1400,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:82791b8b7f39_2":{"__typename":"Paragraph","id":"82791b8b7f39_2","name":"ae85","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"__ref":"ImageMetadata:1*h5ULv-tGdDA3yD2c685lFQ.png"},"text":"From original Google’s Now in Android banner.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":14,"end":37,"href":"https:\u002F\u002Fgithub.com\u002Fandroid\u002Fnowinandroid","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_3":{"__typename":"Paragraph","id":"82791b8b7f39_3","name":"a351","type":"H3","href":null,"layout":null,"metadata":null,"text":"What to benchmark?","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_4":{"__typename":"Paragraph","id":"82791b8b7f39_4","name":"3a10","type":"P","href":null,"layout":null,"metadata":null,"text":"Benchmarking such frameworks poses a significant challenge: ensuring fair comparison and focused on equivalent behaviors and features.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_5":{"__typename":"Paragraph","id":"82791b8b7f39_5","name":"2673","type":"P","href":null,"layout":null,"metadata":null,"text":"To make this exercise meaningful, I’ve opted for a user-oriented approach: evaluating the time it takes to build a component requested from the UI (like ViewModels and so on …). To ensure our test context is strong enough, we need a complex enough application (no basic “Hello World” or to-do list app).","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_6":{"__typename":"Paragraph","id":"82791b8b7f39_6","name":"3084","type":"P","href":null,"layout":null,"metadata":null,"text":"For this purpose, I’ve chosen to use Google’s Now in Android app, a great open-source application that is complex enough and covers the challenges of real-life development and where the Android team demonstrates best practices (modularization, Jetpack Compose, and dependency injection …).","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":46,"end":64,"href":"https:\u002F\u002Fgithub.com\u002Fandroid\u002Fnowinandroid","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_7":{"__typename":"Paragraph","id":"82791b8b7f39_7","name":"e579","type":"P","href":null,"layout":null,"metadata":null,"text":"By evaluating Koin and Dagger Hilt in this environment, we aim to get insights that truly matter to Android developers.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_8":{"__typename":"Paragraph","id":"82791b8b7f39_8","name":"54f5","type":"BQ","href":null,"layout":null,"metadata":null,"text":"👉 Sources are available at https:\u002F\u002Fgithub.com\u002FInsertKoinIO\u002Fnowinandroid","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":28,"end":72,"href":"https:\u002F\u002Fgithub.com\u002FInsertKoinIO\u002Fnowinandroid","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_9":{"__typename":"Paragraph","id":"82791b8b7f39_9","name":"51c6","type":"P","href":null,"layout":null,"metadata":null,"text":"You will find the following branches:","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_10":{"__typename":"Paragraph","id":"82791b8b7f39_10","name":"3099","type":"ULI","href":null,"layout":null,"metadata":null,"text":"perfs_koin —is the Now in Android migrated to Koin branch, with performances measurement","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":0,"end":10,"href":"https:\u002F\u002Fgithub.com\u002FInsertKoinIO\u002Fnowinandroid\u002Ftree\u002Fperfs_koin","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":0,"end":10,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_11":{"__typename":"Paragraph","id":"82791b8b7f39_11","name":"1b6d","type":"ULI","href":null,"layout":null,"metadata":null,"text":"perfs_hilt — is the default Hilt branch, with performances measurement","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":0,"end":10,"href":"https:\u002F\u002Fgithub.com\u002FInsertKoinIO\u002Fnowinandroid\u002Ftree\u002Fperfs_hilt","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":0,"end":11,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_12":{"__typename":"Paragraph","id":"82791b8b7f39_12","name":"680c","type":"P","href":null,"layout":null,"metadata":null,"text":"And don’t forget official Koin documentation. Now, let’s dive into the details!","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":17,"end":44,"href":"https:\u002F\u002Finsert-koin.io\u002F","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_13":{"__typename":"Paragraph","id":"82791b8b7f39_13","name":"4883","type":"H3","href":null,"layout":null,"metadata":null,"text":"Service Locator or Dependency Injection? Koin can do both!","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_14":{"__typename":"Paragraph","id":"82791b8b7f39_14","name":"3562","type":"P","href":null,"layout":null,"metadata":null,"text":"Before diving into the benchmarks, let’s address a common question about Koin: Is it a Service Locator or a Dependency Injection (DI) framework? The answer is both.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":157,"end":164,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_15":{"__typename":"Paragraph","id":"82791b8b7f39_15","name":"20ac","type":"ULI","href":null,"layout":null,"metadata":null,"text":"A Service Locator retrieves dependencies dynamically through a centralized registry.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":2,"end":17,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_16":{"__typename":"Paragraph","id":"82791b8b7f39_16","name":"269b","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Dependency Injection provides dependencies explicitly at instantiation, enhancing testability and maintainability.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":0,"end":20,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_17":{"__typename":"Paragraph","id":"82791b8b7f39_17","name":"9e90","type":"P","href":null,"layout":null,"metadata":null,"text":"Koin bridges these two approaches, offering dynamic retrieval via get() or inject() while also supporting DI features like constructor injection and scoping.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"CODE","start":66,"end":71,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"CODE","start":75,"end":83,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_18":{"__typename":"Paragraph","id":"82791b8b7f39_18","name":"6078","type":"P","href":null,"layout":null,"metadata":null,"text":"Koin’s dynamic behavior is influenced by Android’s lifecycle, which historically made constructor injection challenging. While modern Android features now support constructor injection, Koin remains flexible, letting developers choose the best approach for their needs.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_19":{"__typename":"Paragraph","id":"82791b8b7f39_19","name":"bb09","type":"P","href":null,"layout":null,"metadata":null,"text":"At its core, Koin is a DI framework. It avoids reflection overhead, uses a Kotlin DSL for dependency graphs, and supports scoped lifecycles. However, its ability to function as a Service Locator adds versatility, particularly for simpler or legacy projects.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":13,"end":35,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_20":{"__typename":"Paragraph","id":"82791b8b7f39_20","name":"f51b","type":"P","href":null,"layout":null,"metadata":null,"text":"This is a summary, but this Koin project documentation page has more details if you need to go deeper.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":41,"end":59,"href":"https:\u002F\u002Finsert-koin.io\u002Fdocs\u002Fsetup\u002Fwhy\u002F#koin-a-dependency-injection-framework","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_21":{"__typename":"Paragraph","id":"82791b8b7f39_21","name":"4aae","type":"H3","href":null,"layout":null,"metadata":null,"text":"Why choose Koin?","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_22":{"__typename":"Paragraph","id":"82791b8b7f39_22","name":"0f97","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Simple and Developer-Friendly: Koin’s clean DSL, no compile-time overhead, minimal setup, and easy testing let you focus on building your apps.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":0,"end":31,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_23":{"__typename":"Paragraph","id":"82791b8b7f39_23","name":"8f0e","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Scales with Your App: from small apps to complex projects, Koin scales effortlessly to meet your needs.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":0,"end":23,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_24":{"__typename":"Paragraph","id":"82791b8b7f39_24","name":"0a6b","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Evolving Compile-Time Safety: With features like module validation (Verify API), Koin Annotations (KSP for configuration safety), and the upcoming Koin IDE Plugin, Koin simplifies coding while boosting safety.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":0,"end":30,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":68,"end":78,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":81,"end":97,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":147,"end":162,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_25":{"__typename":"Paragraph","id":"82791b8b7f39_25","name":"67be","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Ready for Kotlin Multiplatform: Koin seamlessly manages dependencies across iOS, Android, Desktop, and Web, making it the go-to DI framework for cross-platform development.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":0,"end":32,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_26":{"__typename":"Paragraph","id":"82791b8b7f39_26","name":"7d59","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Perfect for Compose Multiplatform: Koin integrates effortlessly with Compose Multiplatform, supporting shared logic and DI for UI components — even ViewModel.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":0,"end":35,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":148,"end":157,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_27":{"__typename":"Paragraph","id":"82791b8b7f39_27","name":"a843","type":"P","href":null,"layout":null,"metadata":null,"text":"If you’re curious about Koin’s internals and design, let me know — I’d be happy to explore that in a future article. For now, let’s dive into the benchmarks! 😁","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_28":{"__typename":"Paragraph","id":"82791b8b7f39_28","name":"67eb","type":"H3","href":null,"layout":null,"metadata":null,"text":"Tracking Performances","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_29":{"__typename":"Paragraph","id":"82791b8b7f39_29","name":"c623","type":"P","href":null,"layout":null,"metadata":null,"text":"Tracking the performance of components over sessions is trickier than it initially seems. While tools like Baseline Profiles Macrobenchmark and similar deep-dive tools offer great analysis, they don’t allow me to easily extract benchmark values for custom use. Alternatively, connected dev platforms like Firebase Crashlytics or Kotzilla Platform offer convenient solutions to capture and analyze performance metrics.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":107,"end":139,"href":"https:\u002F\u002Fdeveloper.android.com\u002Ftopic\u002Fperformance\u002Fbaselineprofiles\u002Fmeasure-baselineprofile","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":329,"end":346,"href":"https:\u002F\u002Fkotzilla.io\u002F","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":107,"end":139,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":305,"end":346,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_30":{"__typename":"Paragraph","id":"82791b8b7f39_30","name":"7175","type":"P","href":null,"layout":null,"metadata":null,"text":"My goal here is to stay simple and lightweight: I want to measure how long it takes to create a specific component, like building a ViewModel instance using dependency injection. I don’t need a complex framework for this task, but I’m OK with manually instrumenting my code as long as it’s straightforward and lightweight.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":19,"end":46,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":58,"end":114,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_31":{"__typename":"Paragraph","id":"82791b8b7f39_31","name":"7f6e","type":"P","href":null,"layout":null,"metadata":null,"text":"To achieve this, I wrote a few functions to capture function call time from DI frameworks (All is in Measure.kt file). This utility leverages Kotlin’s measureTimedValue function, an elegant and efficient way to measure code execution times, making it an excellent fit for lightweight, manual instrumentation. By extending the Android Context, I created an easy way to log the duration of any function call (or dependency injection operation) directly to a log file.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"CODE","start":101,"end":111,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"CODE","start":151,"end":168,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"CODE","start":334,"end":341,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":101,"end":111,"href":"https:\u002F\u002Fgithub.com\u002FInsertKoinIO\u002Fnowinandroid\u002Fblob\u002Fperfs_koin\u002Fcore\u002Fdata\u002Fsrc\u002Fmain\u002Fkotlin\u002Fcom\u002Fgoogle\u002Fsamples\u002Fapps\u002Fnowinandroid\u002Fcore\u002Fdata\u002FMeasure.kt","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":101,"end":111,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":142,"end":169,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_32":{"__typename":"Paragraph","id":"82791b8b7f39_32","name":"ea9d","type":"PRE","href":null,"layout":null,"metadata":null,"text":"inline fun \u003Creified T\u003E Context.measureTimeLazy(tag : String, code : () -\u003E Lazy\u003CT\u003E) : Lazy\u003CT\u003E{\n val result = measureTimedValue(code)\n val timeInMs = result.duration.inWholeMicroseconds \u002F 1000.0\n logBenchmark(tag,timeInMs)\n return result.value\n}","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":{"__typename":"CodeBlockMetadata","mode":"EXPLICIT","lang":"kotlin"},"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_33":{"__typename":"Paragraph","id":"82791b8b7f39_33","name":"049b","type":"P","href":null,"layout":null,"metadata":null,"text":"In the end, we are storing all results in a local file (function logBenchmark). This file will be extracted, to allow average times calculation.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"CODE","start":65,"end":77,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":12,"end":54,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":65,"end":77,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_34":{"__typename":"Paragraph","id":"82791b8b7f39_34","name":"a68e","type":"H3","href":null,"layout":null,"metadata":null,"text":"Now in Android","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_35":{"__typename":"Paragraph","id":"82791b8b7f39_35","name":"5067","type":"P","href":null,"layout":null,"metadata":null,"text":"Now, let’s see how these tracking functions are applied in our real-world scenario. For this benchmark, we’ll measure the performance of the following components: MainActivityViewModel, ForYouViewModel, and startup time.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":163,"end":184,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":186,"end":201,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":207,"end":219,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_36":{"__typename":"Paragraph","id":"82791b8b7f39_36","name":"6454","type":"P","href":null,"layout":null,"metadata":null,"text":"These ViewModels are the first two used in the application, making them ideal candidates for assessing the performance of DI frameworks during the app’s initial loading phase.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_37":{"__typename":"Paragraph","id":"82791b8b7f39_37","name":"7efb","type":"P","href":null,"layout":null,"metadata":null,"text":"In the Koin implementation, the performance tracking for these components is instrumented as follows (MainActivity & ForYouScreen links):","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":102,"end":114,"href":"https:\u002F\u002Fgithub.com\u002FInsertKoinIO\u002Fnowinandroid\u002Fblob\u002Fperfs_koin\u002Fapp\u002Fsrc\u002Fmain\u002Fkotlin\u002Fcom\u002Fgoogle\u002Fsamples\u002Fapps\u002Fnowinandroid\u002FMainActivity.kt#L77","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":117,"end":129,"href":"https:\u002F\u002Fgithub.com\u002FInsertKoinIO\u002Fnowinandroid\u002Fblob\u002Fperfs_koin\u002Ffeature\u002Fforyou\u002Fsrc\u002Fmain\u002Fkotlin\u002Fcom\u002Fgoogle\u002Fsamples\u002Fapps\u002Fnowinandroid\u002Ffeature\u002Fforyou\u002FForYouScreen.kt#L113","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":7,"end":26,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*OowREC3NUDtEEcjR8x7LmQ.png":{"__typename":"ImageMetadata","id":"1*OowREC3NUDtEEcjR8x7LmQ.png","originalHeight":365,"originalWidth":890,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:82791b8b7f39_38":{"__typename":"Paragraph","id":"82791b8b7f39_38","name":"3a8b","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"__ref":"ImageMetadata:1*OowREC3NUDtEEcjR8x7LmQ.png"},"text":"MainActivity","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":0,"end":12,"href":"https:\u002F\u002Fgithub.com\u002FInsertKoinIO\u002Fnowinandroid\u002Fblob\u002Fperfs_koin\u002Fapp\u002Fsrc\u002Fmain\u002Fkotlin\u002Fcom\u002Fgoogle\u002Fsamples\u002Fapps\u002Fnowinandroid\u002FMainActivity.kt#L77","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*8c3oKI6m21a11SNnKqtfvQ.png":{"__typename":"ImageMetadata","id":"1*8c3oKI6m21a11SNnKqtfvQ.png","originalHeight":141,"originalWidth":859,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:82791b8b7f39_39":{"__typename":"Paragraph","id":"82791b8b7f39_39","name":"dbd9","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"__ref":"ImageMetadata:1*8c3oKI6m21a11SNnKqtfvQ.png"},"text":"ForYouScreen","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":0,"end":12,"href":"https:\u002F\u002Fgithub.com\u002FInsertKoinIO\u002Fnowinandroid\u002Fblob\u002Fperfs_koin\u002Ffeature\u002Fforyou\u002Fsrc\u002Fmain\u002Fkotlin\u002Fcom\u002Fgoogle\u002Fsamples\u002Fapps\u002Fnowinandroid\u002Ffeature\u002Fforyou\u002FForYouScreen.kt#L113","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_40":{"__typename":"Paragraph","id":"82791b8b7f39_40","name":"78e9","type":"P","href":null,"layout":null,"metadata":null,"text":"A note here: we are using the latest Koin AndroidX Startup feature to help improve startup time.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":37,"end":58,"href":"https:\u002F\u002Finsert-koin.io\u002Fdocs\u002Freference\u002Fkoin-android\u002Fstart#start-koin-with-androidx-startup-401","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_41":{"__typename":"Paragraph","id":"82791b8b7f39_41","name":"3e23","type":"P","href":null,"layout":null,"metadata":null,"text":"For the Hilt implementation, tracking is similarly applied (MainActivity & ForYouScreen links):","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":60,"end":72,"href":"https:\u002F\u002Fgithub.com\u002FInsertKoinIO\u002Fnowinandroid\u002Fblob\u002Fperfs_hilt\u002Fapp\u002Fsrc\u002Fmain\u002Fkotlin\u002Fcom\u002Fgoogle\u002Fsamples\u002Fapps\u002Fnowinandroid\u002FMainActivity.kt#L80","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":75,"end":87,"href":"https:\u002F\u002Fgithub.com\u002FInsertKoinIO\u002Fnowinandroid\u002Fblob\u002Fperfs_hilt\u002Ffeature\u002Fforyou\u002Fsrc\u002Fmain\u002Fkotlin\u002Fcom\u002Fgoogle\u002Fsamples\u002Fapps\u002Fnowinandroid\u002Ffeature\u002Fforyou\u002FForYouScreen.kt#L113","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":8,"end":27,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*rbW-zq0Lr_C08qQ5MEeu4g.png":{"__typename":"ImageMetadata","id":"1*rbW-zq0Lr_C08qQ5MEeu4g.png","originalHeight":458,"originalWidth":879,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:82791b8b7f39_42":{"__typename":"Paragraph","id":"82791b8b7f39_42","name":"1cab","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"__ref":"ImageMetadata:1*rbW-zq0Lr_C08qQ5MEeu4g.png"},"text":"MainActivity","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":0,"end":12,"href":"https:\u002F\u002Fgithub.com\u002FInsertKoinIO\u002Fnowinandroid\u002Fblob\u002Fperfs_hilt\u002Fapp\u002Fsrc\u002Fmain\u002Fkotlin\u002Fcom\u002Fgoogle\u002Fsamples\u002Fapps\u002Fnowinandroid\u002FMainActivity.kt#L80","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*gp9VQJRriHxewM5Xd6te_g.png":{"__typename":"ImageMetadata","id":"1*gp9VQJRriHxewM5Xd6te_g.png","originalHeight":147,"originalWidth":857,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:82791b8b7f39_43":{"__typename":"Paragraph","id":"82791b8b7f39_43","name":"6ad0","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"__ref":"ImageMetadata:1*gp9VQJRriHxewM5Xd6te_g.png"},"text":"ForYouScreen","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":0,"end":12,"href":"https:\u002F\u002Fgithub.com\u002FInsertKoinIO\u002Fnowinandroid\u002Fblob\u002Fperfs_hilt\u002Ffeature\u002Fforyou\u002Fsrc\u002Fmain\u002Fkotlin\u002Fcom\u002Fgoogle\u002Fsamples\u002Fapps\u002Fnowinandroid\u002Ffeature\u002Fforyou\u002FForYouScreen.kt#L113","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_44":{"__typename":"Paragraph","id":"82791b8b7f39_44","name":"861d","type":"P","href":null,"layout":null,"metadata":null,"text":"To capture the startup time, we use the onWindowFocusChanged function in MainActivity. This measures the time it takes for the app to render its first frame after gaining focus, giving a clear picture of the app’s startup performance. We track time from the Application class until the first Activity:","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"CODE","start":40,"end":60,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":15,"end":27,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":73,"end":85,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":258,"end":269,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*e9kIuHTCr1NODB3qiF6ijQ.png":{"__typename":"ImageMetadata","id":"1*e9kIuHTCr1NODB3qiF6ijQ.png","originalHeight":248,"originalWidth":525,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:82791b8b7f39_45":{"__typename":"Paragraph","id":"82791b8b7f39_45","name":"3183","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"__ref":"ImageMetadata:1*e9kIuHTCr1NODB3qiF6ijQ.png"},"text":"MainActivity","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":0,"end":12,"href":"https:\u002F\u002Fgithub.com\u002FInsertKoinIO\u002Fnowinandroid\u002Fblob\u002Fperfs_hilt\u002Fapp\u002Fsrc\u002Fmain\u002Fkotlin\u002Fcom\u002Fgoogle\u002Fsamples\u002Fapps\u002Fnowinandroid\u002FMainActivity.kt#L80","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_46":{"__typename":"Paragraph","id":"82791b8b7f39_46","name":"101e","type":"H3","href":null,"layout":null,"metadata":null,"text":"Execution, Extraction, And Results","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_47":{"__typename":"Paragraph","id":"82791b8b7f39_47","name":"36aa","type":"P","href":null,"layout":null,"metadata":null,"text":"To capture performance metrics automatically, we run the benchmark.sh shell script. This script automates a sequence of app install, start, wait a few seconds, and stop actions to simulate realistic usage patterns. After all runs, it extracts the benchmark_log.txt file containing all recorded times. This is 25 iterations of running the Nia application's start, wait and stop (demo release build).","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"CODE","start":57,"end":69,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"CODE","start":247,"end":264,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":57,"end":69,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":247,"end":264,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_48":{"__typename":"Paragraph","id":"82791b8b7f39_48","name":"0853","type":"P","href":null,"layout":null,"metadata":null,"text":"Using the collected data, the stats.py Python script processes the log to compute key statistics: minimum, maximum, and average times for each benchmarked component.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"CODE","start":30,"end":38,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":30,"end":38,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_49":{"__typename":"Paragraph","id":"82791b8b7f39_49","name":"8ae9","type":"P","href":null,"layout":null,"metadata":null,"text":"On your terminal, you can just run the command: benchmark.sh ; python3 stats.py (from the \u002Fapp folder).","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"CODE","start":48,"end":79,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":0,"end":16,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":48,"end":81,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_50":{"__typename":"Paragraph","id":"82791b8b7f39_50","name":"0892","type":"P","href":null,"layout":null,"metadata":null,"text":"The best is to run it on a real Android device. On my OnePlus Nord (Android 12), I got the following results:","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*LLdRHLMGjA71dEZYwb2aLA.png":{"__typename":"ImageMetadata","id":"1*LLdRHLMGjA71dEZYwb2aLA.png","originalHeight":450,"originalWidth":1287,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:82791b8b7f39_51":{"__typename":"Paragraph","id":"82791b8b7f39_51","name":"1688","type":"IMG","href":null,"layout":"OUTSET_CENTER","metadata":{"__ref":"ImageMetadata:1*LLdRHLMGjA71dEZYwb2aLA.png"},"text":"OnePlus Nord results, and also in Google spreadsheet","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":13,"end":20,"href":"https:\u002F\u002Fgist.github.com\u002Farnaudgiuliani\u002F9e05451d111373eaf570c7f3a4465ad2","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":41,"end":52,"href":"https:\u002F\u002Fbit.ly\u002Fbenchmark_koin_hilt_2024","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*YX92QMcZrxcNfSi99jj0RA.png":{"__typename":"ImageMetadata","id":"1*YX92QMcZrxcNfSi99jj0RA.png","originalHeight":772,"originalWidth":2030,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:82791b8b7f39_52":{"__typename":"Paragraph","id":"82791b8b7f39_52","name":"6891","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"__ref":"ImageMetadata:1*YX92QMcZrxcNfSi99jj0RA.png"},"text":"Same OnePlus Nord results in table","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":18,"end":25,"href":"https:\u002F\u002Fgist.github.com\u002Farnaudgiuliani\u002F9e05451d111373eaf570c7f3a4465ad2","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_53":{"__typename":"Paragraph","id":"82791b8b7f39_53","name":"8d37","type":"P","href":null,"layout":null,"metadata":null,"text":"In this benchmark, in addition to average, minimum, and maximum, we show the “standard error”: it measures the reliability of the average, indicating how much it may vary from the true population mean. Smaller values mean more stable and precise results. It helps also compare stability results between Koin and Dagger Hilt.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":78,"end":95,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":97,"end":98,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":111,"end":137,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_54":{"__typename":"Paragraph","id":"82791b8b7f39_54","name":"2611","type":"P","href":null,"layout":null,"metadata":null,"text":"The benchmarks highlight Koin as a reliable and modern alternative for Android development, matching Hilt in performance while offering its own unique advantages.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":25,"end":29,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":101,"end":105,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_55":{"__typename":"Paragraph","id":"82791b8b7f39_55","name":"a09c","type":"P","href":null,"layout":null,"metadata":null,"text":"That said, benchmarks are just one part of the story. Your results may vary depending on your app, but the trends are clear: Koin is performant for real-world challenges. From Android to Kotlin Multiplatform and Compose Multiplatform applications.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":125,"end":171,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_56":{"__typename":"Paragraph","id":"82791b8b7f39_56","name":"8755","type":"P","href":null,"layout":null,"metadata":null,"text":"I’m always open to feedback — if you have thoughts or insights, let’s chat! 👍","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":64,"end":74,"href":"https:\u002F\u002Fslack-chats.kotlinlang.org\u002Fc\u002Fkoin","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:82791b8b7f39_57":{"__typename":"Paragraph","id":"82791b8b7f39_57","name":"4192","type":"P","href":null,"layout":null,"metadata":null,"text":"Why not give Koin a shot? Let Koin be part of your journey! 😊","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":13,"end":17,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":30,"end":34,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"CollectionViewerEdge:collectionId:c72404660798-viewerId:lo_92b8d88cc302":{"__typename":"CollectionViewerEdge","id":"collectionId:c72404660798-viewerId:lo_92b8d88cc302","isEditor":false,"isMuting":false},"ImageMetadata:":{"__typename":"ImageMetadata","id":"","originalWidth":0,"originalHeight":0},"PostViewerEdge:postId:ff7bb40470df-viewerId:lo_92b8d88cc302":{"__typename":"PostViewerEdge","shouldIndexPostForExternalSearch":true,"id":"postId:ff7bb40470df-viewerId:lo_92b8d88cc302"},"Tag:koin":{"__typename":"Tag","id":"koin","displayTitle":"Koin","normalizedTagSlug":"koin"},"Tag:dependency-injection":{"__typename":"Tag","id":"dependency-injection","displayTitle":"Dependency Injection","normalizedTagSlug":"dependency-injection"},"Tag:android":{"__typename":"Tag","id":"android","displayTitle":"Android","normalizedTagSlug":"android"},"Tag:performance":{"__typename":"Tag","id":"performance","displayTitle":"Performance","normalizedTagSlug":"performance"},"Tag:benchmark":{"__typename":"Tag","id":"benchmark","displayTitle":"Benchmark","normalizedTagSlug":"benchmark"}}</script><script src="https://cdn-client.medium.com/lite/static/js/manifest.bbe4ab66.js"></script><script src="https://cdn-client.medium.com/lite/static/js/9865.1496d74a.js"></script><script src="https://cdn-client.medium.com/lite/static/js/main.bbe47cad.js"></script><script src="https://cdn-client.medium.com/lite/static/js/instrumentation.d9108df7.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/reporting.ff22a7a5.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/9120.5df29668.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/5049.d1ead72d.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/4810.6318add7.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6618.db187378.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2707.b0942613.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/9977.5b3eb23a.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8599.1ab63137.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/5250.9f9e01d2.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/5787.e66a3a4d.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2648.26563adf.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8393.826a25fb.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/7549.2176f21f.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6589.7c500280.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/3735.afb7e926.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/5642.0a97706a.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6546.cd03f950.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6834.08de95de.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/7346.72622eb9.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2420.2a5e2d95.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/839.ca7937c2.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/7975.d195c6f1.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/7394.bf599bc5.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2961.00a48598.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8204.c4082863.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/4391.59acaed3.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/PostPage.MainContent.902ad94b.chunk.js"></script><script>window.main();</script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10