"use strict";(self.webpackChunkthinkrchive_multiplatform=self.webpackChunkthinkrchive_multiplatform||[]).push([[416],{3905:function(e,t,n){n.d(t,{Zo:function(){return d},kt:function(){return h}});var i=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,i,r=function(e,t){if(null==e)return{};var n,i,r={},o=Object.keys(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=i.createContext({}),p=function(e){var t=i.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},d=function(e){var t=p(e.components);return i.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},c=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),c=p(n),h=r,m=c["".concat(s,".").concat(h)]||c[h]||u[h]||o;return n?i.createElement(m,a(a({ref:t},d),{},{components:n})):i.createElement(m,a({ref:t},d))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,a=new Array(o);a[0]=c;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,a[1]=l;for(var p=2;p<o;p++)a[p]=n[p];return i.createElement.apply(null,a)}return i.createElement.apply(null,n)}c.displayName="MDXCreateElement"},4955:function(e,t,n){n.r(t),n.d(t,{frontMatter:function(){return l},contentTitle:function(){return s},metadata:function(){return p},assets:function(){return d},toc:function(){return u},default:function(){return h}});var i=n(7462),r=n(3366),o=(n(7294),n(3905)),a=["components"],l={sidebar_position:3},s="Dependencies and Plugins",p={unversionedId:"overview/dependencies",id:"overview/dependencies",title:"Dependencies and Plugins",description:"This project contains first party platform dependencies & plugins and some third party dependencies & plugins to provide functionality and easy development.",source:"@site/docs/overview/dependencies.md",sourceDirName:"overview",slug:"/overview/dependencies",permalink:"/Thinkrchive-Multiplatform/overview/dependencies",editUrl:"https://github.com/Thinkrchive/Thinkrchive-Multiplatform-Docs/blob/main/docs/overview/dependencies.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Setup",permalink:"/Thinkrchive-Multiplatform/overview/runnning"},next:{title:"Module Structure",permalink:"/Thinkrchive-Multiplatform/overview/folder-structure"}},d={},u=[{value:"Plugins",id:"plugins",level:2},{value:"Android Gradle plugin",id:"android-gradle-plugin",level:3},{value:"Kotlin Gradle Plugin",id:"kotlin-gradle-plugin",level:3},{value:"SQLDelight",id:"sqldelight",level:3},{value:"Compose Desktop Gradle Plugin",id:"compose-desktop-gradle-plugin",level:3},{value:"Dependencies",id:"dependencies",level:2},{value:"Android",id:"android",level:3},{value:"Kotlin and Jetbrains",id:"kotlin-and-jetbrains",level:3},{value:"Koin",id:"koin",level:3},{value:"Ktor",id:"ktor",level:3},{value:"OrbitMVI",id:"orbitmvi",level:3},{value:"ArkIvanov - Decompose",id:"arkivanov---decompose",level:3},{value:"RusshWolf - Multiplatform Settings",id:"russhwolf---multiplatform-settings",level:3},{value:"Squareup - SQLDelight",id:"squareup---sqldelight",level:3},{value:"Log",id:"log",level:3}],c={toc:u};function h(e){var t=e.components,n=(0,r.Z)(e,a);return(0,o.kt)("wrapper",(0,i.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"dependencies-and-plugins"},"Dependencies and Plugins"),(0,o.kt)("p",null,"This project contains first party platform dependencies & plugins and some third party dependencies & plugins to provide functionality and easy development."),(0,o.kt)("h2",{id:"plugins"},"Plugins"),(0,o.kt)("h3",{id:"android-gradle-plugin"},"Android Gradle plugin"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-gradle"},'classpath("com.android.tools.build:gradle:7.1.2")\n')),(0,o.kt)("p",null,"This adds Android Specific features to gradle for building Android apps"),(0,o.kt)("h3",{id:"kotlin-gradle-plugin"},"Kotlin Gradle Plugin"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-gradle"},'classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlin}")\n')),(0,o.kt)("p",null,"This is adds Kotlin specific features to gradle for compiling Kotlin code"),(0,o.kt)("h3",{id:"sqldelight"},"SQLDelight"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-gradle"},'classpath("com.squareup.sqldelight:gradle-plugin:${Versions.sqlDelight}")\n')),(0,o.kt)("p",null,"This adds support for ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/cashapp/sqldelight"},"SQLDelight")," which is local SQL database interface library that provides type-safe Kotlin APIs from your SQL statements."),(0,o.kt)("h3",{id:"compose-desktop-gradle-plugin"},"Compose Desktop Gradle Plugin"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-gradle"},'classpath("org.jetbrains.compose:compose-gradle-plugin:${Versions.composeDesktop}")\n')),(0,o.kt)("p",null,"This adds Compose for Desktop features to gradle for configuration and building Compose Desktop apps"),(0,o.kt)("h2",{id:"dependencies"},"Dependencies"),(0,o.kt)("p",null,"All dependencies used in this project are stored in ",(0,o.kt)("inlineCode",{parentName:"p"},"buildSrc")," directory. They are all grouped based on where they come from and their uses. You can easily look at ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/racka98/Thinkrchive-Multiplatform/blob/main/buildSrc/src/main/kotlin/Dependencies.kt"},(0,o.kt)("inlineCode",{parentName:"a"},"Dependencies.kt"))," inside ",(0,o.kt)("inlineCode",{parentName:"p"},"/buildSrc/src/main/kotlin/")," to get their definitions."),(0,o.kt)("h3",{id:"android"},"Android"),(0,o.kt)("p",null,"This object contains all the Android only dependencies that are used or were used at some point in this project. You can read through it to know all the dependencies that are provided in this project for Android target. Every dependency has a comment stating what it's used for."),(0,o.kt)("h3",{id:"kotlin-and-jetbrains"},"Kotlin and Jetbrains"),(0,o.kt)("p",null,"These objects provides the core Kotlin dependencies used which are:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("inlineCode",{parentName:"p"},"testCommon")," - Dependency for testing Kotlin common code.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("inlineCode",{parentName:"p"},"kotlinJunit")," - Kotlin JUnit runner for testing.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("inlineCode",{parentName:"p"},"serializationCore")," & ",(0,o.kt)("inlineCode",{parentName:"p"},"kotlinJsonSerialization")," - For Data class serialization and Json object serialization and deserialization."))),(0,o.kt)("h3",{id:"koin"},"Koin"),(0,o.kt)("p",null,"This object provides ",(0,o.kt)("a",{parentName:"p",href:"https://insert-koin.io/"},"Koin")," for Dependency Injection which is used througout this project."),(0,o.kt)("h3",{id:"ktor"},"Ktor"),(0,o.kt)("p",null,"This object provides ",(0,o.kt)("a",{parentName:"p",href:"https://ktor.io/docs/client.html"},"Ktor Client")," which is used for Networking. Ktor supports all Multiplatform targets."),(0,o.kt)("h3",{id:"orbitmvi"},"OrbitMVI"),(0,o.kt)("p",null,"This object provides ",(0,o.kt)("a",{parentName:"p",href:"https://orbit-mvi.org/"},"Orbit MVI")," which is a Multiplatform MVI library that is used to integrate the MVI architecture into our project."),(0,o.kt)("h3",{id:"arkivanov---decompose"},"ArkIvanov - Decompose"),(0,o.kt)("p",null,"This object provides the ",(0,o.kt)("a",{parentName:"p",href:"https://arkivanov.github.io/Decompose/"},"Decompose")," dependencies which are used for Navigation in the desktop app. Decompose can also be used for Android since it's Mutliplatform if you are ready to sacrifice some of the features provided by the official Android-only Navigation library."),(0,o.kt)("h3",{id:"russhwolf---multiplatform-settings"},"RusshWolf - Multiplatform Settings"),(0,o.kt)("p",null,"This object provides ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/russhwolf/multiplatform-settings"},"Multiplatform Settings")," dependencies for storing Settings and Configuration data. It is a Multiplatform library that saves your from using the platform specific implementations and share more code."),(0,o.kt)("h3",{id:"squareup---sqldelight"},"Squareup - SQLDelight"),(0,o.kt)("p",null,"This object provides ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/cashapp/sqldelight"},"SQLDelight")," dependencies for your database needs across all Mutliplatform targets."),(0,o.kt)("h3",{id:"log"},"Log"),(0,o.kt)("p",null,"This object provides logging dependencies.  ",(0,o.kt)("a",{parentName:"p",href:"https://www.baeldung.com/kotlin/logging"},"slf4j + logback")," & ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/touchlab/Kermit"},"Kermit"),"."))}h.isMDXComponent=!0}}]);