diff --git a/docs/releases/1.0.md b/docs/releases/1.0.md index 59912591..cc8731f8 100644 --- a/docs/releases/1.0.md +++ b/docs/releases/1.0.md @@ -2,6 +2,84 @@ This document contains earlier published releases from the 1.0 line of the [current Self-hosted LiveSync release history](../../updates.md). Beta and release-candidate builds published before 1.0.0 are recorded in the [1.0 preview history](1.0-previews.md). Earlier release lines continue in the [0.25 history](0.25.md) and the [legacy history](legacy.md). +## 1.0.33 + +1st October, 2026 + +This has turned into quite a substantial release, and I think it brings meaningful improvements to the core of Self-hosted LiveSync. If you notice anything, please feel free to let me know. + +### Privacy and compatibility + +#### New Feature + +- An optional saved ID key can generate encrypted Chunk IDs and obfuscated Metadata document IDs independently of the current E2EE passphrase. + - New Vaults use a random key by default; existing Vaults keep their current ID configuration by default. You can also derive a key from the current E2EE passphrase, enter a separate source, or import a recovery code. The source is not retained; the saved key can be revealed locally as a recovery code. + - The saved key stays in place when the E2EE passphrase changes or E2EE is turned off. Share it with another device through a protected Setup URI. Changing document IDs on an existing remote requires the usual Rebuild and Fetch procedure. +- We can now keep the file properties used by Hidden File Sync and Customisation Sync private in CouchDB. + - **Encrypt internal file Properties** extends E2EE V2 and Property Encryption to their paths, times, sizes, and Chunk references. + - Existing configurations keep this preference disabled. New Vaults enable it for use when the required encryption settings are active. + - Update every synchronising device before enabling it. It protects future writes; a manual remote Rebuild is strongly recommended to protect existing properties. +- We can now see which unsupported feature prevents a client from synchronising with CouchDB. + - Clients check the features required by the remote before transferring data or resetting the local database for Fast Fetch. Receiving an unsupported requirement also stops active replication. + +- We can now compare ID generation performance on a desktop or mobile device through **Open review harness**, available with the developers' debug tools enabled. + - The copied report includes legacy and independent ID timings and, where available, approximate JavaScript heap samples. The measurement uses fixed test data and keeps our Vault and settings unchanged. + +#### Fixed + +- Updated `brace-expansion` and `markdown-it` to include upstream security fixes. +- We can now keep using an E2EE passphrase beginning with `%` after restarting Obsidian. (#1221) + - This plug-in encrypts it before saving the settings. If an earlier version saved it in plain text, re-enter the passphrase used to encrypt the existing data after updating. Treat that passphrase as exposed if the affected `data.json` was shared. +- A receiving device now retries an unavailable CouchDB Chunk when file Metadata arrives before that Chunk is visible, helping rapid edits reach the Vault after an initial on-demand lookup misses it. (#1224) + - Retries start after two seconds and continue with increasing delays while finite replication is active. When it ends, this plug-in checks locally and makes a final lookup if needed, without waiting out the remaining retry delay. +- We can now distinguish initial on-demand Chunk requests (`🛄`) from retries (`🔁`) in the status bar. These replace `🧩`; each pending Chunk appears in one category, including while a retry is waiting. + +### Synchronisation and storage + +#### Fixed + +- Received changes held during start-up or a fetch are applied when this plug-in becomes ready, without waiting for another change or a settings save. **Suspend database reflecting** continues to hold changes (#1200). +- Customisation Sync now compares full millisecond timestamps, so the freshness labels and **Select All Shiny** no longer mistake an older copy for a newer one because of timestamp truncation. (#1194) +- **Hide not applicable items** now hides identical Customisation Sync items and refreshes the list when toggled. Items with applicable differences stay visible. (#1193) + +### Interface and translation + +#### Improved + +- More settings and messages are now available in Russian. (#1187) + - Dialogues show generated QR codes, key pairs, and database sizes again. +- We can now use updated Spanish translations for settings and messages. (#1212) + +### Setup + +#### New Feature + +- We can now share a Setup URI with a displayed time limit, or choose **Compatible** for reuse without a time limit. + - **Time-bound** uses the current fixed seven-day UTC window, so the displayed end may be less than seven days away. Compatible retains the existing URI format; receiving devices still need to support the shared settings. + - The time condition applies when opening the URI. It does not revoke imported credentials or prevent reuse after rolling the device clock back. + +#### Improved + +- We can now distinguish the three Setup URI and QR code choices by their short labels and icons: initialise or overwrite the remote, join this device, or apply settings only. + +#### Fixed + +- We can now add a device or open a copied Vault without a compatibility pause solely because its device-local version record is absent. + - Existing version or settings incompatibilities still require review. A pause already saved by an earlier release still needs one explicit resume action. + +### Acknowledgements + +Thank you for your contributions! + +- @kimjansheden (#1219) +- @Immick (#1195, #1196) +- @bolikcraft (#1187) +- @speedy-axolotl (#1212) + +### Issue replies + +I am a little behind on replying to issues, but I am reading them and will respond as I work through them. I have had little uninterrupted time recently, and that should improve soon. + ## 1.0.32 27th September, 2026 diff --git a/manifest.json b/manifest.json index 7c23c321..f1633e1a 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "obsidian-livesync", "name": "Self-hosted LiveSync", - "version": "1.0.37", + "version": "1.0.38", "minAppVersion": "1.7.2", "description": "Community implementation of self-hosted livesync. Reflect your vault changes to some other devices immediately. Please make sure to disable other synchronize solutions to avoid content corruption or duplication.", "author": "vorotamoroz", diff --git a/package-lock.json b/package-lock.json index e607283a..583f5928 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "obsidian-livesync", - "version": "1.0.37", + "version": "1.0.38", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "obsidian-livesync", - "version": "1.0.37", + "version": "1.0.38", "license": "MIT", "workspaces": [ "src/apps/cli", @@ -11862,7 +11862,7 @@ }, "src/apps/cli": { "name": "self-hosted-livesync-cli", - "version": "1.0.37-cli", + "version": "1.0.38-cli", "dependencies": { "chokidar": "^4.0.0", "minimatch": "^10.2.5", @@ -11887,7 +11887,7 @@ }, "src/apps/webapp": { "name": "livesync-webapp", - "version": "1.0.37-webapp", + "version": "1.0.38-webapp", "dependencies": { "octagonal-wheels": "^0.1.55" }, @@ -11899,7 +11899,7 @@ } }, "src/apps/webpeer": { - "version": "1.0.37-webpeer", + "version": "1.0.38-webpeer", "dependencies": { "octagonal-wheels": "^0.1.55" }, diff --git a/package.json b/package.json index fb7edb0b..4f33396b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "obsidian-livesync", - "version": "1.0.37", + "version": "1.0.38", "description": "Reflect your vault changes to some other devices immediately. Please make sure to disable other synchronize solutions to avoid content corruption or duplication.", "main": "main.js", "type": "module", diff --git a/src/apps/cli/package.json b/src/apps/cli/package.json index bef046f8..67daece6 100644 --- a/src/apps/cli/package.json +++ b/src/apps/cli/package.json @@ -1,7 +1,7 @@ { "name": "self-hosted-livesync-cli", "private": true, - "version": "1.0.37-cli", + "version": "1.0.38-cli", "main": "dist/index.cjs", "type": "module", "scripts": { diff --git a/src/apps/webapp/package.json b/src/apps/webapp/package.json index f9e24148..e08ebf91 100644 --- a/src/apps/webapp/package.json +++ b/src/apps/webapp/package.json @@ -1,7 +1,7 @@ { "name": "livesync-webapp", "private": true, - "version": "1.0.37-webapp", + "version": "1.0.38-webapp", "type": "module", "description": "Browser-based Self-hosted LiveSync using FileSystem API", "scripts": { diff --git a/src/apps/webpeer/package.json b/src/apps/webpeer/package.json index e6b8dcba..de5b3f32 100644 --- a/src/apps/webpeer/package.json +++ b/src/apps/webpeer/package.json @@ -1,7 +1,7 @@ { "name": "webpeer", "private": true, - "version": "1.0.37-webpeer", + "version": "1.0.38-webpeer", "type": "module", "scripts": { "dev": "vite", diff --git a/updates.md b/updates.md index 84b05644..c8d1371e 100644 --- a/updates.md +++ b/updates.md @@ -12,6 +12,10 @@ Earlier releases remain available in the 1.0 release history, the 1.0 preview hi ## Unreleased +## 1.0.38 + +17th October, 2026 + ### Synchronisation #### Added @@ -130,81 +134,3 @@ Thank you for your contributions! Thank you for your contributions! - @kimjansheden (#1218) - -## 1.0.33 - -1st October, 2026 - -This has turned into quite a substantial release, and I think it brings meaningful improvements to the core of Self-hosted LiveSync. If you notice anything, please feel free to let me know. - -### Privacy and compatibility - -#### New Feature - -- An optional saved ID key can generate encrypted Chunk IDs and obfuscated Metadata document IDs independently of the current E2EE passphrase. - - New Vaults use a random key by default; existing Vaults keep their current ID configuration by default. You can also derive a key from the current E2EE passphrase, enter a separate source, or import a recovery code. The source is not retained; the saved key can be revealed locally as a recovery code. - - The saved key stays in place when the E2EE passphrase changes or E2EE is turned off. Share it with another device through a protected Setup URI. Changing document IDs on an existing remote requires the usual Rebuild and Fetch procedure. -- We can now keep the file properties used by Hidden File Sync and Customisation Sync private in CouchDB. - - **Encrypt internal file Properties** extends E2EE V2 and Property Encryption to their paths, times, sizes, and Chunk references. - - Existing configurations keep this preference disabled. New Vaults enable it for use when the required encryption settings are active. - - Update every synchronising device before enabling it. It protects future writes; a manual remote Rebuild is strongly recommended to protect existing properties. -- We can now see which unsupported feature prevents a client from synchronising with CouchDB. - - Clients check the features required by the remote before transferring data or resetting the local database for Fast Fetch. Receiving an unsupported requirement also stops active replication. - -- We can now compare ID generation performance on a desktop or mobile device through **Open review harness**, available with the developers' debug tools enabled. - - The copied report includes legacy and independent ID timings and, where available, approximate JavaScript heap samples. The measurement uses fixed test data and keeps our Vault and settings unchanged. - -#### Fixed - -- Updated `brace-expansion` and `markdown-it` to include upstream security fixes. -- We can now keep using an E2EE passphrase beginning with `%` after restarting Obsidian. (#1221) - - This plug-in encrypts it before saving the settings. If an earlier version saved it in plain text, re-enter the passphrase used to encrypt the existing data after updating. Treat that passphrase as exposed if the affected `data.json` was shared. -- A receiving device now retries an unavailable CouchDB Chunk when file Metadata arrives before that Chunk is visible, helping rapid edits reach the Vault after an initial on-demand lookup misses it. (#1224) - - Retries start after two seconds and continue with increasing delays while finite replication is active. When it ends, this plug-in checks locally and makes a final lookup if needed, without waiting out the remaining retry delay. -- We can now distinguish initial on-demand Chunk requests (`🛄`) from retries (`🔁`) in the status bar. These replace `🧩`; each pending Chunk appears in one category, including while a retry is waiting. - -### Synchronisation and storage - -#### Fixed - -- Received changes held during start-up or a fetch are applied when this plug-in becomes ready, without waiting for another change or a settings save. **Suspend database reflecting** continues to hold changes (#1200). -- Customisation Sync now compares full millisecond timestamps, so the freshness labels and **Select All Shiny** no longer mistake an older copy for a newer one because of timestamp truncation. (#1194) -- **Hide not applicable items** now hides identical Customisation Sync items and refreshes the list when toggled. Items with applicable differences stay visible. (#1193) - -### Interface and translation - -#### Improved - -- More settings and messages are now available in Russian. (#1187) - - Dialogues show generated QR codes, key pairs, and database sizes again. -- We can now use updated Spanish translations for settings and messages. (#1212) - -### Setup - -#### New Feature - -- We can now share a Setup URI with a displayed time limit, or choose **Compatible** for reuse without a time limit. - - **Time-bound** uses the current fixed seven-day UTC window, so the displayed end may be less than seven days away. Compatible retains the existing URI format; receiving devices still need to support the shared settings. - - The time condition applies when opening the URI. It does not revoke imported credentials or prevent reuse after rolling the device clock back. - -#### Improved - -- We can now distinguish the three Setup URI and QR code choices by their short labels and icons: initialise or overwrite the remote, join this device, or apply settings only. - -#### Fixed - -- We can now add a device or open a copied Vault without a compatibility pause solely because its device-local version record is absent. - - Existing version or settings incompatibilities still require review. A pause already saved by an earlier release still needs one explicit resume action. - -### Acknowledgements - -Thank you for your contributions! - -- @kimjansheden (#1219) -- @Immick (#1195, #1196) -- @bolikcraft (#1187) -- @speedy-axolotl (#1212) - -### Issue replies - -I am a little behind on replying to issues, but I am reading them and will respond as I work through them. I have had little uninterrupted time recently, and that should improve soon. diff --git a/versions.json b/versions.json index 57ffb18a..34ccf31b 100644 --- a/versions.json +++ b/versions.json @@ -48,5 +48,6 @@ "1.0.34": "1.7.2", "1.0.35": "1.7.2", "1.0.36": "1.7.2", - "1.0.37": "1.7.2" + "1.0.37": "1.7.2", + "1.0.38": "1.7.2" }