mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-10-30 07:37:38 +00:00
app 1.15.2 -> 1.16.0, appCode 460 -> 461. That single edit drives Android's versionName/versionCode, Desktop and CLI packageVersion, quartz's Maven version and geode's RelayInfo.VERSION; verified by reading the version back out of :amethyst, :quartz and :geode and from a built APK (versionCode 461, versionName 1.16.0-DEBUG). Roughly twenty substantive PRs since v1.15.2, written up in docs/changelog/v1.16.00.md. The ones a user feels: - My Fitness: a training dashboard built from both sources Amethyst has -- Health Connect and the user's own kind 1301 events -- so it works with no health permission at all. Workouts gains a "Mine" filter in the top nav, and a workout that is already published no longer offers to post itself twice. - BOLT12 offers move into the profile payment rail, where every other payment route already lived, and the zap picker finally shows a bolt for a recipient who publishes an offer and no lightning address. A refused offer falls back to BOLT11, retried only on codes that mean nothing was attempted. - Blossom uploads work again. 1.15.0's unpadded base64url token is rejected by deployed servers, so about two uploads in three had been failing since then. - A relay that sends a CLOSE frame is no longer counted as connected for up to four minutes with its REQs live, in both the shared and the Android socket. - Arti 2.3.0 -> 2.6.0 for TROVE-2026-24 and TROVE-2026-27. - amy ships ~40 MB lighter after the commonsUI split. Changelog claims were checked against the final state of each series, not the first commit: the BOLT12 retry set is the narrowed allowlist from the audit follow-up (a PAYMENT_FAILED can still settle, so retrying it could pay twice), the relay count comes from the connected flow rather than the removed members snapshot, and the OkHttp dispatcher resize is absent because it was reverted. NEEDS A MAINTAINER BEFORE THE TAG: RELEASE_NOTES_ID still points at the v1.15.0 note. RELEASE_OPS repoints it on every x.y.0, which this is, and it has to be published from Amethyst's own account -- so it is not something this commit could do. Also left alone: docs/changelog/translators.json, whose sinceLastTag is seeded with vitorpamplona credited for all 41 languages and ~50 users with no language at all, so scripts/translators.sh output is unusable this cycle. The changelog credits the three translators with real attribution. mstrofnone (the desktop keychain fixes) has no npub in mappings and is credited by handle. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
3.3 KiB
3.3 KiB
Quartz Gradle Dependency Setup
Current version
com.vitorpamplona.quartz:quartz:1.16.0
Check latest: https://central.sonatype.com/artifact/com.vitorpamplona.quartz/quartz
KMP Project Setup
gradle/libs.versions.toml
[versions]
quartz = "1.16.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.16.0")
}
JVM (Desktop) standalone
// build.gradle.kts
plugins {
kotlin("jvm")
}
dependencies {
implementation("com.vitorpamplona.quartz:quartz:1.16.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.