diff --git a/build.gradle.kts b/build.gradle.kts
index 6bfeec7..26f9ce0 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -13,18 +13,21 @@ plugins {
     id("com.jfrog.bintray") version "1.7.3"
 }
 
-val versionProps = Properties().also {
-    it.load(File("$projectDir/src/main/resources/version.properties").inputStream())
-}
-version = versionProps["version"] as String
-group = "net.razorvine"
-base.archivesBaseName = "ksim65"
+allprojects {
+    val versionProps = Properties().also {
+        it.load(File("$projectDir/src/main/resources/version.properties").inputStream())
+    }
+    version = versionProps["version"] as String
+    group = "net.razorvine"
+    base.archivesBaseName = "ksim65"
 
-repositories {
-    // Use jcenter for resolving dependencies.
-    // You can declare any Maven/Ivy/file repository here.
-    jcenter()
-    maven("https://jitpack.io")
+    repositories {
+        // Use jcenter for resolving dependencies.
+        // You can declare any Maven/Ivy/file repository here.
+        mavenLocal()
+        jcenter()
+        maven("https://jitpack.io")
+    }
 }
 
 dependencies {
@@ -38,6 +41,10 @@ dependencies {
     testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
     testImplementation("org.junit.jupiter:junit-jupiter-api:5.1.0")
     testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.1.0")
+
+    subprojects.forEach {
+        archives(it)
+    }
 }
 
 tasks {
@@ -88,3 +95,28 @@ application {
         fileMode = 493
     }
 }
+
+val sourcesJar by tasks.registering(Jar::class) {
+    dependsOn("classes")
+    archiveClassifier.set("sources")
+    from(sourceSets.main.get().allSource)
+}
+
+val dokkaDocs by tasks.registering(Jar::class) {
+    dependsOn("dokka")
+    archiveClassifier.set("kdoc")
+    from(fileTree(File(project.buildDir, "kdoc")))
+}
+
+publishing {
+    repositories {
+        mavenLocal()
+    }
+    publications {
+        register("mavenJava", MavenPublication::class) {
+            from(components["java"])
+            artifact(sourcesJar.get())
+            artifact(dokkaDocs.get())
+        }
+    }
+}