From e0abc4a22437ca7c5cbee29ac25f31828a33dc88 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Wed, 20 May 2026 18:59:05 -0400 Subject: [PATCH] v1.11.0 --- .claude/skills/android-expert/SKILL.md | 4 +- .claude/skills/quartz-integration/SKILL.md | 6 +- .../references/gradle-setup.md | 8 +- .claude/skills/quartz-kmp.md | 2 +- BUILDING.md | 18 +- CHANGELOG.md | 105 +++++++++ amethyst/build.gradle.kts | 223 ++++++++++-------- .../2026-04-28-multi-account-testing-sheet.md | 2 +- .../com/vitorpamplona/geode/RelayInfo.kt | 2 +- gradle/libs.versions.toml | 2 +- quartz/build.gradle.kts | 2 +- 11 files changed, 251 insertions(+), 123 deletions(-) diff --git a/.claude/skills/android-expert/SKILL.md b/.claude/skills/android-expert/SKILL.md index 1054ca51b7..1116915273 100644 --- a/.claude/skills/android-expert/SKILL.md +++ b/.claude/skills/android-expert/SKILL.md @@ -745,8 +745,8 @@ android { applicationId = "com.vitorpamplona.amethyst" minSdk = 26 // Android 8.0 (Oreo) targetSdk = 36 // Android 15 - versionCode = 446 - versionName = "1.10.0" + versionCode = 447 + versionName = "1.11.0" vectorDrawables { useSupportLibrary = true diff --git a/.claude/skills/quartz-integration/SKILL.md b/.claude/skills/quartz-integration/SKILL.md index ed4426ddb0..ebc53886f7 100644 --- a/.claude/skills/quartz-integration/SKILL.md +++ b/.claude/skills/quartz-integration/SKILL.md @@ -7,7 +7,7 @@ description: Integration guide for using the Quartz Nostr KMP library in externa Reference for integrating `com.vitorpamplona.quartz:quartz` into external Nostr KMP projects. -**Published artifact**: `com.vitorpamplona.quartz:quartz:1.10.0` (Maven Central) +**Published artifact**: `com.vitorpamplona.quartz:quartz:1.11.0` (Maven Central) **Targets**: JVM 21+, Android (minSdk 21+), iOS (XCFramework `quartz-kmpKit`) **License**: MIT @@ -19,7 +19,7 @@ Reference for integrating `com.vitorpamplona.quartz:quartz` into external Nostr ```toml [versions] -quartz = "1.10.0" +quartz = "1.11.0" [libraries] quartz = { module = "com.vitorpamplona.quartz:quartz", version.ref = "quartz" } @@ -41,7 +41,7 @@ kotlin { ```kotlin dependencies { - implementation("com.vitorpamplona.quartz:quartz:1.10.0") + implementation("com.vitorpamplona.quartz:quartz:1.11.0") } ``` diff --git a/.claude/skills/quartz-integration/references/gradle-setup.md b/.claude/skills/quartz-integration/references/gradle-setup.md index 42207d8216..2e9a737a4a 100644 --- a/.claude/skills/quartz-integration/references/gradle-setup.md +++ b/.claude/skills/quartz-integration/references/gradle-setup.md @@ -3,7 +3,7 @@ ## Current version ``` -com.vitorpamplona.quartz:quartz:1.10.0 +com.vitorpamplona.quartz:quartz:1.11.0 ``` Check latest: https://central.sonatype.com/artifact/com.vitorpamplona.quartz/quartz @@ -16,7 +16,7 @@ Check latest: https://central.sonatype.com/artifact/com.vitorpamplona.quartz/qua ```toml [versions] -quartz = "1.10.0" +quartz = "1.11.0" [libraries] quartz = { module = "com.vitorpamplona.quartz:quartz", version.ref = "quartz" } @@ -55,7 +55,7 @@ kotlin { ```kotlin // build.gradle.kts (app module) dependencies { - implementation("com.vitorpamplona.quartz:quartz:1.10.0") + implementation("com.vitorpamplona.quartz:quartz:1.11.0") } ``` @@ -70,7 +70,7 @@ plugins { } dependencies { - implementation("com.vitorpamplona.quartz:quartz:1.10.0") + implementation("com.vitorpamplona.quartz:quartz:1.11.0") // JNA needed for libsodium (NIP-44) on JVM implementation("net.java.dev.jna:jna:5.18.1") } diff --git a/.claude/skills/quartz-kmp.md b/.claude/skills/quartz-kmp.md index b12e5dd0ce..44c187e0be 100644 --- a/.claude/skills/quartz-kmp.md +++ b/.claude/skills/quartz-kmp.md @@ -17,7 +17,7 @@ The Quartz library was successfully converted from Android-only to full KMP supp ## Current artifact ``` -com.vitorpamplona.quartz:quartz:1.10.0 +com.vitorpamplona.quartz:quartz:1.11.0 ``` See `.claude/skills/quartz-integration/SKILL.md` for full integration guide. \ No newline at end of file diff --git a/BUILDING.md b/BUILDING.md index 3db22821da..71c59e60aa 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -113,7 +113,7 @@ Where: | Field | Values | |---|---------------------------------------------------------| -| `` | Tag stripped of leading `v` (e.g. `1.10.0`) | +| `` | Tag stripped of leading `v` (e.g. `1.11.0`) | | `` | `macos`, `windows`, `linux` | | `` | `x64`, `arm64` | | `` | `dmg`, `msi`, `zip`, `deb`, `rpm`, `AppImage`, `tar.gz` | @@ -124,10 +124,10 @@ any change is a breaking contract. Examples: -- `amethyst-desktop-1.10.0-macos-x64.dmg` -- `amethyst-desktop-1.10.0-macos-arm64.dmg` -- `amethyst-desktop-1.10.0-windows-x64.msi` -- `amethyst-desktop-1.10.0-linux-x64.AppImage` +- `amethyst-desktop-1.11.0-macos-x64.dmg` +- `amethyst-desktop-1.11.0-macos-arm64.dmg` +- `amethyst-desktop-1.11.0-windows-x64.msi` +- `amethyst-desktop-1.11.0-linux-x64.AppImage` --- @@ -147,7 +147,7 @@ Quartz library in one pipeline. must increment even for same `versionName`): ```groovy - versionCode = 443 + versionCode = 447 versionName = generateVersionName(libs.versions.app.get()) ``` @@ -223,8 +223,8 @@ or equivalent issue tracker. On rotation, paste new token and run ```bash brew bump-cask-pr amethyst-nostr \ - --version 1.10.0 \ - --url "https://github.com/vitorpamplona/amethyst/releases/download/v1.10.0/amethyst-desktop-1.10.0-macos-arm64.dmg" + --version 1.11.0 \ + --url "https://github.com/vitorpamplona/amethyst/releases/download/v1.11.0/amethyst-desktop-1.11.0-macos-arm64.dmg" ``` The cask filename is `amethyst-nostr` (not `amethyst` — that's taken by a @@ -235,7 +235,7 @@ auto-submits new version bumps on each stable release. ```bash wingetcreate new \ - https://github.com/vitorpamplona/amethyst/releases/download/v1.10.0/amethyst-desktop-1.10.0-windows-x64.msi + https://github.com/vitorpamplona/amethyst/releases/download/v1.11.0/amethyst-desktop-1.11.0-windows-x64.msi ``` Set `PackageIdentifier = VitorPamplona.Amethyst`. After the first manifest is diff --git a/CHANGELOG.md b/CHANGELOG.md index fad3dd0fb2..4681157c81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,108 @@ + NIP-52 Calendars, On-Chain Zap Polish + +Highlights: +- NIP-52 Calendars — feed, day/week/month views, event/collection editors, RSVP, ICS export, "starting soon" notifications, share-as-nostr-link, gallery picker. +- On-Chain zaps polish — splits with dust gating, payment-targets modal redesign (QR + copy + pay), public-address chip + confirmation, on-chain handoff from custom-zap dialog, on-chain zappers in the reactions gallery. +- Privacy groundwork — I2P scaffolded as a parallel transport to Tor, route-aware HTTP stack, typed fail-closed `BlockedRouteException`. +- Notifications — dedicated settings screen, delivery vs display split, on-chain zaps in summary stats, push filters aligned with the Notifications feed. +- Inline nowhere-link cards in rich text. +- Wallet — clickable on-chain rows, tappable wallet card opens transaction history, reactive on-chain zap observation, time-windowed relay sub with burst coalescing. + +PRs: +- Restore Lightning Address + LNURL fields in Edit Profile +- Raise the default maximum hashtag limit from 5 to 8 +- Include on-chain zaps in notification summary stats +- Add electrum.nmc.ethicnology.com to default ElectrumX server set +- Translate call-permission and git-repo strings (cs, pt-BR, sv, de) + New Crowdin translations +- Subscribe and observe PaymentTargetsEvent for other users +- Only bridge to local cache when URL is BUD-01 layout; dedupe public-channel rows; normalize video/x-m4v to video/mp4 +- Enable Send when typed name resolves via NIP-05; on-chain Bit recipient +- Inline Namecoin resolution indicator + result row on on-chain zaps +- Inline Namecoin resolution indicator in global search bar +- Long-press to copy Nostr Address, Website, LN Address, identities, payment targets +- macOS VLC bundled discovery and video rendering +- Make RelayAuthenticator authStatus thread-safe +- Pad GitRepositoryOverview content to clear top/bottom bars +- Use LargeCache for RelayAuthenticator authStatus +- MIME-type normalization for MediaStore +- Split delivery vs display, add Categories section in notifications +- Accept floating-point dimensions in imeta so image space is reserved pre-load +- Explain hashtag-limit hide reason in HiddenNote +- Route media-upload signing through launchSigner +- Render nowhere links inline as branded cards +- Release MediaController after 30s in background; skip timer for PiP +- Clickable on-chain card opens transaction history; tappable on-chain rows + txid index in LocalCache +- Disable ProGuard optimization entirely on desktop (fixes kmp-tor crash); .deb launch CI smoke test +- Show on-chain zappers in expanded reactions gallery +- Convert hashtag-limit message to and add cs/pt-BR/sv/de translations +- Restore long-press on root note + anchor popup to the card +- Keep filter chips visible on empty on-chain transactions list +- Make playback notification tap open the note on warm-pool resume +- Validate zap receipts against LNURL provider's nostrPubkey (NIP-57 Appendix F) +- Stable sort in ShortsFeedFilter to avoid TimSort contract crash +- Align push notifications with Notifications feed filter; resolve addressable events to their replaceable note; WakeUp bypass + lookup hoist +- Update on-chain-zap + headers-explorer plans for NIP-BC inline SPV tags +- Start zoomable dialog close animation from zoomed bounds +- Scaffold I2P as a parallel privacy transport to Tor; route-aware HTTP stack; BlockedRouteException +- Reorder feed filter popup sections (DVMs before Communities, interest sets next to hashtags) +- Stop spinning Around Me when Geocoder is unavailable +- NIP-52 calendars — feed, day/week/month views, RSVP, ICS export, reminders, edit, share-as-nostr-link, participant picker, multi-day bars +- Audit follow-ups on MLS reply paths; route reply button on MLS messages to the encrypted group +- Use LaunchedEffect instead of remember for VM reset +- Switch to Dispatchers.IO around the whole executeAsync call in relay-info +- Drop crossfade around the card feed in notifications +- Observe locale in CalendarDateTimePickerButton +- Modernize zap amount choice popup to match reactions popup style +- Catch ForegroundServiceStartNotAllowedException in PlaybackService +- Include crashing thread name in crash report +- Convert remaining .gradle files to Kotlin DSL +- Redesign payment targets modal with QR, copy and pay buttons +- Add Public chip to on-chain wallet card; clarify privacy guidance on on-chain wallet popup +- Require running material-symbols-subset.sh when adding new icons; add new information icon +- Re-add Nostrcheck.me Blossom server to defaults +- Surface on-chain zaps from the reactions zap button +- On-chain zap splits — drop sender from splits, merge duplicates, gate Send on dust +- On-chain option on the Zap the Devs button +- On-chain handoff from the custom-zap dialog +- Keep listening on default index+search relays for users with no kind 10002 +- Skip offline relays when fetching user metadata +- Include indexer and proxy relays in the trusted relay list to avoid Tor +- Confirm on-chain copy with public-address warning +- Swallow LegacyCursorAnchorInfo IllegalArgumentException +- Render ContactListEvent in NoteCompose with tap-through user list; add preview for DisplayContactList + +## Contributors + +- @npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z +- @npub1e2yuky03caw4ke3zy68lg0fz3r4gkt94hx4fjmlelacyljgyk79svn3eef +- @npub12cfje6nl2nuxplcqfvhg7ljt89fmpj0n0fd24zxsukja5qm9wmtqd7y76c +- @npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5 +- @npub1a3tx8wcrt789skl6gg7rqwj4wey0j53eesr4z6asd4h4jwrd62jq0wkq4k +- @npub1dn0tej4a5806qk9ts56j572sndvjk27l5qmsxf0z3mquknccve7s4k8tfp + +## Translations + +- Czech, German, Swedish, and Portuguese by @npub1e2yuky03caw4ke3zy68lg0fz3r4gkt94hx4fjmlelacyljgyk79svn3eef +- Hungarian by @npub1dnvslq0vvrs8d603suykc4harv94yglcxwna9sl2xu8grt2afm3qgfh0tp +- French by @npub106efcyntxc5qwl3w8krrhyt626m59ya2nk9f40px5s968u5xdwhsjsr8fz +- Dutch by @npub1w4la29u3zv09r6crx5u8yxax0ffxgekzdm2egzjkjckef7xc83fs0ftxcd +- Polish by @npub16gjyljum0ksrrm28zzvejydgxwfm7xse98zwc4hlgq8epxeuggushqwyrm +- Hindi by @npub1ww6huwu3xye6r05n3qkjeq62wds5pq0jswhl7uc59lchc0n0ns4sdtw5e6 +- Slovenian by @npub1qqqqqqz7nhdqz3uuwmzlflxt46lyu7zkuqhcapddhgz66c4ddynswreecw +- Bengali by @npub13qtw3yu0uc9r4yj5x0rhgy8nj5q0uyeq0pavkgt9ly69uuzxgkfqwvx23t +- Spanish by @npub1luhyzgce7qtcs6r6v00ryjxza8av8u4dzh3avg0zks38tjktnmxspxq903 +- Chinese by hypnotichemionus4 and @npub1gd8e0xfkylc7v8c5a6hkpj4gelwwcy99jt90lqjseqjj2t253s2s6ch58h +- Russian by Anton Zhao + + On-Chain zaps + +- ci: remove macos-13 x64 build legs by @vitorpamplona in #2939 +- Replace linuxdeploy with appimagetool for AppImage packaging by @vitorpamplona in #2940 +- Sync inner note highlight fade with parent background color by @vitorpamplona in #2941 +- Handle denied call permissions with settings dialog by @vitorpamplona in #2942 +- Fix gradient rendering with transparent background colors by @vitorpamplona in #2943 +- Add NIP-BC onchain Bitcoin zaps support (send, receive, display) by @vitorpamplona in #2944 + Fixes - Fix Blossom blob detection to reject non-compliant filenames by @greenart7c3 in #2919 diff --git a/amethyst/build.gradle.kts b/amethyst/build.gradle.kts index 1b3df1ef13..7bf0cda845 100644 --- a/amethyst/build.gradle.kts +++ b/amethyst/build.gradle.kts @@ -7,19 +7,23 @@ plugins { alias(libs.plugins.serialization) } -fun getCurrentBranch(): String { - return try { - val process = ProcessBuilder("git", "rev-parse", "--abbrev-ref", "HEAD") - .redirectErrorStream(true) - .start() - val branch = process.inputStream.bufferedReader().use { it.readText() }.trim() +fun getCurrentBranch(): String = + try { + val process = + ProcessBuilder("git", "rev-parse", "--abbrev-ref", "HEAD") + .redirectErrorStream(true) + .start() + val branch = + process.inputStream + .bufferedReader() + .use { it.readText() } + .trim() process.waitFor() branch } catch (e: Exception) { println("Could not determine git branch: ${e.message}") "unknown" } -} fun generateVersionName(baseVersion: String): String { val currentBranch = getCurrentBranch() @@ -52,99 +56,109 @@ afterEvaluate { android { namespace = "com.vitorpamplona.amethyst" - compileSdk = libs.versions.android.compileSdk.get().toInt() + compileSdk = + libs.versions.android.compileSdk + .get() + .toInt() defaultConfig { applicationId = "com.vitorpamplona.amethyst" - minSdk = libs.versions.android.minSdk.get().toInt() - targetSdk = libs.versions.android.targetSdk.get().toInt() - versionCode = 446 + minSdk = + libs.versions.android.minSdk + .get() + .toInt() + targetSdk = + libs.versions.android.targetSdk + .get() + .toInt() + versionCode = 447 versionName = generateVersionName(libs.versions.app.get()) - buildConfigField("String", "RELEASE_NOTES_ID", "\"b1b91d7ee0c5da9d081d1a53470248ee4585b058b11aa34fe28c0e3e07ac1e0a\"") + buildConfigField("String", "RELEASE_NOTES_ID", "\"8ec0d94550b5538115226c6858159b1115713c9c6ed942173bd4fd5d292d8ba6\"") testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary = true } @Suppress("UnstableApiUsage") - resourceConfigurations += listOf( - "ar", - "ar-rSA", - "bn-rBD", - "cs", - "cs-rCZ", - "cy-rGB", - "da-rDK", - "de", - "de-rDE", - "el-rGR", - "en-rGB", - "eo", - "eo-rUY", - "es", - "es-rES", - "es-rMX", - "es-rUS", - "et-rEE", - "fa", - "fa-rIR", - "fi-rFI", - "fo-rFO", - "fr", - "fr-rCA", - "fr-rFR", - "gu-rIN", - "hi-rIN", - "hr-rHR", - "hu", - "hu-rHU", - "in", - "in-rID", - "it-rIT", - "iw-rIL", - "ja", - "ja-rJP", - "kk-rKZ", - "ko-rKR", - "ks-rIN", - "ku-rTR", - "lt-rLT", - "ne-rNP", - "nl", - "nl-rBE", - "nl-rNL", - "pcm-rNG", - "pl-rPL", - "pt-rBR", - "pt-rPT", - "ru", - "ru-rRU", - "ru-rUA", - "sa-rIN", - "sl-rSI", - "so-rSO", - "sr-rSP", - "ss-rZA", - "sv-rSE", - "sw-rKE", - "sw-rTZ", - "ta", - "ta-rIN", - "th", - "th-rTH", - "tr", - "tr-rTR", - "uk", - "uk-rUA", - "ur-rIN", - "uz-rUZ", - "vi-rVN", - "zh", - "zh-rCN", - "zh-rHK", - "zh-rSG", - "zh-rTW", - ) + resourceConfigurations += + listOf( + "ar", + "ar-rSA", + "bn-rBD", + "cs", + "cs-rCZ", + "cy-rGB", + "da-rDK", + "de", + "de-rDE", + "el-rGR", + "en-rGB", + "eo", + "eo-rUY", + "es", + "es-rES", + "es-rMX", + "es-rUS", + "et-rEE", + "fa", + "fa-rIR", + "fi-rFI", + "fo-rFO", + "fr", + "fr-rCA", + "fr-rFR", + "gu-rIN", + "hi-rIN", + "hr-rHR", + "hu", + "hu-rHU", + "in", + "in-rID", + "it-rIT", + "iw-rIL", + "ja", + "ja-rJP", + "kk-rKZ", + "ko-rKR", + "ks-rIN", + "ku-rTR", + "lt-rLT", + "ne-rNP", + "nl", + "nl-rBE", + "nl-rNL", + "pcm-rNG", + "pl-rPL", + "pt-rBR", + "pt-rPT", + "ru", + "ru-rRU", + "ru-rUA", + "sa-rIN", + "sl-rSI", + "so-rSO", + "sr-rSP", + "ss-rZA", + "sv-rSE", + "sw-rKE", + "sw-rTZ", + "ta", + "ta-rIN", + "th", + "th-rTH", + "tr", + "tr-rTR", + "uk", + "uk-rUA", + "ur-rIN", + "uz-rUZ", + "vi-rVN", + "zh", + "zh-rCN", + "zh-rHK", + "zh-rSG", + "zh-rTW", + ) } // Opt-in fast-build flags. Default behavior is unchanged. @@ -162,12 +176,21 @@ android { // much faster and outputs/mapping/ (~260MB) // is not produced. Local-dev and PR-CI use // only — release pipelines must not set it. - val disableAbiSplits = providers.gradleProperty("disableAbiSplits") - .map { it.toBoolean() }.getOrElse(false) - val disableUniversalApk = providers.gradleProperty("disableUniversalApk") - .map { it.toBoolean() }.getOrElse(false) - val skipMapping = providers.gradleProperty("amethyst.skipMapping") - .map { it.toBoolean() }.getOrElse(false) + val disableAbiSplits = + providers + .gradleProperty("disableAbiSplits") + .map { it.toBoolean() } + .getOrElse(false) + val disableUniversalApk = + providers + .gradleProperty("disableUniversalApk") + .map { it.toBoolean() } + .getOrElse(false) + val skipMapping = + providers + .gradleProperty("amethyst.skipMapping") + .map { it.toBoolean() } + .getOrElse(false) buildTypes { getByName("release") { @@ -348,9 +371,9 @@ dependencies { implementation(libs.zxing.embedded) // Markdown - //implementation "com.halilibo.compose-richtext:richtext-ui:0.16.0" - //implementation "com.halilibo.compose-richtext:richtext-ui-material:0.16.0" - //implementation "com.halilibo.compose-richtext:richtext-commonmark:0.16.0" + // implementation "com.halilibo.compose-richtext:richtext-ui:0.16.0" + // implementation "com.halilibo.compose-richtext:richtext-ui-material:0.16.0" + // implementation "com.halilibo.compose-richtext:richtext-commonmark:0.16.0" // Markdown (With fix for full-image bleeds) implementation(libs.markdown.ui) @@ -382,7 +405,7 @@ dependencies { "playImplementation"(platform(libs.firebase.bom)) "playImplementation"(libs.firebase.messaging) - //PushNotifications(FDroid) + // PushNotifications(FDroid) "fdroidImplementation"(libs.unifiedpush) // Google Cast SDK — Chromecast support. Play flavor only because the diff --git a/docs/plans/2026-04-28-multi-account-testing-sheet.md b/docs/plans/2026-04-28-multi-account-testing-sheet.md index c98528ab02..88416b7398 100644 --- a/docs/plans/2026-04-28-multi-account-testing-sheet.md +++ b/docs/plans/2026-04-28-multi-account-testing-sheet.md @@ -103,4 +103,4 @@ ## Test Environment - OS: - JDK version: -- Amethyst version: 1.10.0 (feat/desktop-multi-account) +- Amethyst version: 1.11.0 (feat/desktop-multi-account) diff --git a/geode/src/main/kotlin/com/vitorpamplona/geode/RelayInfo.kt b/geode/src/main/kotlin/com/vitorpamplona/geode/RelayInfo.kt index 03c7b4fec9..9d06be9264 100644 --- a/geode/src/main/kotlin/com/vitorpamplona/geode/RelayInfo.kt +++ b/geode/src/main/kotlin/com/vitorpamplona/geode/RelayInfo.kt @@ -41,7 +41,7 @@ data class RelayInfo( const val NAME = "geode" const val DESCRIPTION = "Embedded Nostr relay from the Amethyst quartz library." const val SOFTWARE = "https://github.com/vitorpamplona/amethyst/tree/main/geode" - const val VERSION = "1.10.0" + const val VERSION = "1.11.0" /** * NIPs this relay implements out of the box. Single source of diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 430ada08c1..24ca396591 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ # Amethyst app version — single source of truth consumed by both Android (amethyst/) # and Desktop (desktopApp/). Android versionCode is bumped independently in # amethyst/build.gradle because it must be a monotonic integer. -app = "1.10.0" +app = "1.11.0" accompanistAdaptive = "0.37.3" cachemapVersion = "0.2.4" composeMultiplatform = "1.11.0" diff --git a/quartz/build.gradle.kts b/quartz/build.gradle.kts index 94b75c67f9..a654fcbebb 100644 --- a/quartz/build.gradle.kts +++ b/quartz/build.gradle.kts @@ -370,7 +370,7 @@ mavenPublishing { coordinates( groupId = "com.vitorpamplona.quartz", artifactId = "quartz", - version = "1.10.0", + version = "1.11.0", ) // Configure publishing to Maven Central