mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-10-05 11:18:24 +00:00
app 1.14.0 -> 1.15.0, appCode 457 -> 458. That single edit drives Android's versionName/versionCode, Desktop and CLI packageVersion, quartz's Maven version and geode's RelayInfo.VERSION. RELEASE_NOTES_ID is repointed at the v1.15.0 note (8fce45589ea44df75e828a04c7d70bb4fabedd6ffc1946a920b2f0c7c990ff9f), which RELEASE_OPS notes happens on x.y.0 releases and not on patches. It has to ship in this commit rather than after it: the drawer's "Release Notes" link and the donation card both open BuildConfig.RELEASE_NOTES_ID, so a tag cut before the repoint ships users a link to the previous release's note. Verified present on relay.damus.io and relay.primal.net before committing. Adds docs/changelog/v1.15.00.md, written from the 556 commits since v1.14.0, and its index entry. The cycle's headline is the Marmot resync: the MIP documents were deprecated in July and MDK followed, leaving our implementation invalid under either profile the current spec defines, so it moves onto the adopted current profile and is now interoperable with White Noise. Marmot group chat itself is not new -- it shipped in v1.09.0 -- and the notes say so. Also syncs the docs that state a version rather than illustrate one, since quartz and geode both read libs.versions.app: - README.md, quartz-integration SKILL.md and its gradle-setup.md reference -> quartz 1.15.0 - geode/README.md install commands -> geode 1.15.0 The Homebrew/Winget status blocks in BUILDING.md and RELEASE_OPS.md were re-verified rather than re-stamped, and the claim had gone stale in our favour: both Homebrew packages are live upstream now. formulae.brew.sh answers 200 for the amethyst-nostr cask (at 1.14.0) and for the amy formula, while geode-relay 404s and microsoft/winget-pkgs still has no VitorPamplona/Amethyst -- PR #422752 is open pending CLA. Both blocks now say that, RELEASE_OPS gains a geode-relay row, and the section heading no longer claims Homebrew is not shipping. Left alone deliberately: everything under */packaging/ and translators.json's tag, which the bump workflows and the Crowdin job write after the tag exists (bumping by hand would commit wrong hashes and a dead URL); and cli/tests/marmot/state/mdk/Cargo.lock, where 1.14.0 is an unrelated crate. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VgVDQQXAg4cmzsWHoJj61k
3.3 KiB
3.3 KiB
Quartz Gradle Dependency Setup
Current version
com.vitorpamplona.quartz:quartz:1.15.0
Check latest: https://central.sonatype.com/artifact/com.vitorpamplona.quartz/quartz
KMP Project Setup
gradle/libs.versions.toml
[versions]
quartz = "1.15.0"
[libraries]
quartz = { module = "com.vitorpamplona.quartz:quartz", version.ref = "quartz" }
build.gradle.kts (library/app module)
plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidKotlinMultiplatformLibrary) // or androidLibrary/androidApplication
}
kotlin {
jvm()
androidLibrary {
namespace = "com.example.myapp"
compileSdk = 35
minSdk = 21
}
// optional: iOS targets
sourceSets {
commonMain.dependencies {
implementation(libs.quartz)
}
// No platform-specific deps needed — Quartz provides them transitively
}
}
Android-only Project
// build.gradle.kts (app module)
dependencies {
implementation("com.vitorpamplona.quartz:quartz:1.15.0")
}
JVM (Desktop) standalone
// build.gradle.kts
plugins {
kotlin("jvm")
}
dependencies {
implementation("com.vitorpamplona.quartz:quartz:1.15.0")
// JNA needed for libsodium (NIP-44) on JVM
implementation("net.java.dev.jna:jna:5.18.1")
}
Transitive Dependencies (what you get automatically)
All platforms (commonMain)
org.jetbrains.kotlin:kotlin-stdliborg.jetbrains.kotlinx:kotlinx-coroutines-coreorg.jetbrains.kotlinx:kotlinx-collections-immutableorg.jetbrains.kotlinx:kotlinx-serialization-jsonandroidx.collection:collection(LruCache)androidx.compose.runtime:runtime-annotation(@Immutable/@Stable)fr.acinq.secp256k1:secp256k1-kmp(Schnorr crypto — common)
JVM + Android (jvmAndroid)
com.github.anthonynsimon:rfc3986-normalizer(URL normalization)com.fasterxml.jackson.module:jackson-module-kotlin(JSON)com.squareup.okhttp3:okhttp(WebSocket)ru.gildor.coroutines:kotlin-coroutines-okhttpnl.bommber:kchesslib(NIP-64 chess, version pinned to 1.0.0)
JVM only
fr.acinq.secp256k1:secp256k1-kmp-jni-jvmcom.goterl:lazysodium-java(NIP-44 encryption)net.java.dev.jna:jna
Android only
fr.acinq.secp256k1:secp256k1-kmp-jni-androidcom.goterl:lazysodium-androidnet.java.dev.jna:jna(aar)androidx.core:core-ktx
Packaging / ProGuard
Quartz ships consumer ProGuard rules automatically (publish = true in the library).
You don't need to add manual keep rules for Quartz classes in your app.
For Android release builds, these classes are preserved:
- All
com.vitorpamplona.quartz.**event and model classes - Jackson serialization annotations
Common Build Errors
Duplicate class kotlin.collections.jdk8
Add to gradle.properties:
android.useFullClasspathForDexingTransform=true
Could not find lazysodium-java on JVM
Ensure JNA is on the classpath:
implementation("net.java.dev.jna:jna:5.18.1")
iOS: Framework not found quartz-kmpKit
Build the XCFramework first:
./gradlew :quartz:assembleQuartz-kmpKitReleaseXCFramework
Then drag quartz/build/XCFrameworks/release/quartz-kmpKit.xcframework into Xcode.