{"_id":"basalt-sync","_rev":"34-e390c7c6aa3ee0f5de08e7f8ae4c1244","name":"basalt-sync","dist-tags":{"latest":"0.10.0"},"versions":{"0.1.1":{"name":"basalt-sync","version":"0.1.1","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.1.1","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"8ba26d1442c10d66941e04e7ba17fe1193b385e9","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.1.1.tgz","fileCount":3,"integrity":"sha512-tvchFcTc1HrOftVK3T33ZucXaSCB7H4MsPD/h6OVqNNb5jdOjOJExjXkq0U2GXRx2K6AvG1RpVD++PSytcNR8g==","signatures":[{"sig":"MEQCIDDkPidm+0p/mZfEITFGDkhOS+i1saXe1NIGI9Bl0uPvAiBsKd1PnYaEKVaHvWPOfpqLECDaWo9Dkn34jc/faKgVgw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94621},"type":"module","engines":{"node":">=22"},"gitHead":"061d8be920b22e94568c17af1e8361e020dbe768","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest"},"_npmUser":{"name":"waynehoover","email":"w@waynehoover.com"},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"fflate":"^0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"^1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.1.1_1788119274155_0.5756330558210117","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"basalt-sync","version":"0.1.3","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.1.3","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"1d2e5743137f155edd9d1b2982e8358a870e7f48","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.1.3.tgz","fileCount":3,"integrity":"sha512-hyLDKWfCZZrnmUkwTSNGghDvwbX8rWVOdqsCP1m/pLbHOd0wuxTqerlo6rXzZ4cBjxZBWhN3UX9NhbvD/UqRpQ==","signatures":[{"sig":"MEUCIQCw6+dA2a0rY7VAsJKki2gTOMgnUbb99oUS+yuEaVHgkwIgDTrBCJPhYrIlhzsJBSe2mV3+16LLACSc71L7DbguNQA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94621},"type":"module","engines":{"node":">=22"},"gitHead":"102f785945730787ad89b7db2f2051fb5dc0630f","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"fflate":"^0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"^1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.1.3_1788135281775_0.20026355281752828","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"basalt-sync","version":"0.1.4","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.1.4","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"d72defb41286e39250c4ef0b4df6167e948f04cc","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.1.4.tgz","fileCount":3,"integrity":"sha512-oSnvMLEo9pgOxg/q4n+cvy2wJh08eyDxJEXdiQaD6tM1dXgnKXeJ5Yjg0mJI1y6+FIJGB2j5ejLuRGqj73QoNQ==","signatures":[{"sig":"MEQCIDR/R9oWC26FTEF9VaG+caYnoJUv2dbtm1Jv8+g2bsfgAiB+I7eR8U5Iki0IEGRymFkAxIEabzzeVLu/Gsci1rx/FA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94621},"type":"module","engines":{"node":">=22"},"gitHead":"357e8a20088a8a3cb0248e7b4e997417ae3527db","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"^0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"^1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.1.4_1788136832244_0.24936807616612056","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"basalt-sync","version":"0.1.5","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.1.5","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"55bbcba37c0b17c8b302735ed7532137939ca4d8","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.1.5.tgz","fileCount":3,"integrity":"sha512-Ia0d6hm2x7uh+07H+pIJowG6DSmwA3kq5TSm2rC8h2wACm2M3G52svbAZ4AyAHGNlRqZ6xf17dH/gMKj+qK+Sw==","signatures":[{"sig":"MEQCIGk4mHnf9xtC7YdvYAIU32TbnH4x7bdJd88ibf20uXU2AiA2nkwMyBy9sNTAebL5+jS0PJ4C6cqmE/MLHWSST2XJig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94621},"type":"module","engines":{"node":">=22"},"gitHead":"f06565f790041bae166ce65ed808c1b5e573a11b","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"^0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"^1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.1.5_1788137400035_0.3888895655049598","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"basalt-sync","version":"0.1.6","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.1.6","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"9bd668deb60280a2495bcd0b9fb350c0810d1a26","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.1.6.tgz","fileCount":3,"integrity":"sha512-eBb/KeY2rBEyBoskBg6jfFr1sL/QbK7nchaCKtn/vmVaTVKlQWq2oyY7aEjScXdhhxIFtdZfwz0JrLx93Qg3yA==","signatures":[{"sig":"MEUCIQCPpWVjJskRpskt3Ef5d4yiFbtV7jdxjEg4ccrKbWBwbAIgWpLyzc0DfZ4a92DxLnuf1D2/DhaqbKOBg8eke3B5k0A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94621},"type":"module","engines":{"node":">=22"},"gitHead":"f1565d9e464a8421f2a94f8c5278d95b6443790b","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"^0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"^1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.1.6_1788137621846_0.8660492708725047","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"basalt-sync","version":"0.1.7","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.1.7","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"3e013b625478d75524d86c6026cde8d8d6edf59d","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.1.7.tgz","fileCount":3,"integrity":"sha512-L5DtJt2heLPsfg7H3IacohOXGlqPZr3+x09lX6ls6KJaG1iL3085oqGHH1n/ouYFp9NoOWXEKJJT6QJXHdkL/w==","signatures":[{"sig":"MEQCIAtOMdRHkXQ9jXexU8UdX4FHweQqW9wSFsNHdC0euRMrAiB9aG2kHLR9P1+OctYB42BC3lrFvibmVb3arrZ7uu1BsA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94621},"type":"module","engines":{"node":">=22"},"gitHead":"18e8466b295bf2a34d98595431ef7e89ed57afe6","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"^0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"^1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.1.7_1788138047386_0.5062169223619271","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"basalt-sync","version":"0.1.8","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.1.8","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"869eeb6b77638facff834a0c6689fac8e5a87b41","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.1.8.tgz","fileCount":3,"integrity":"sha512-Jt5bpE95FAgcBo6WceV2InqzIy2I8daeqvK2XyU3QgPe1fIbHRnt5rBSHUvlO/sXcEYZxcSyZLZ824wSchVUzg==","signatures":[{"sig":"MEYCIQCEFSGL++6s8p55PrKmJbGEfPqTWnWxS4hlfCV5DoPOUQIhAOedfs7pFsVJVQ+u9V1Do++mukrl+ckK6Z596CKhww+w","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":95962},"type":"module","engines":{"node":">=22"},"gitHead":"340f6049a8a08a0009839a52bde8580b14241cd7","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"^0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"^1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.1.8_1788140026952_0.32013442523803426","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"basalt-sync","version":"0.2.0","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.2.0","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"795a04850dbd744eefd92431450adb4476c77e6a","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.2.0.tgz","fileCount":3,"integrity":"sha512-xBIi/1WAFJY4shyCu6NA/PpJHgQ2UIYPw+ONpmUCuYIDEXKUXD1OtAHZtdRruQO0FUogkyRCgXkNZHaPrYHv0g==","signatures":[{"sig":"MEUCIApR6UvNqvkrvoDP+bjvAYJcm0vUXJmek6Y3gpwTYIjkAiEAlOQqB/aLBgkFWsSgi7CZOJGgktUBIIwpWsy5/mLsASQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":103473},"type":"module","engines":{"node":">=22"},"gitHead":"87c171af9d3b30dfccd82754fe9574bd139f4e8b","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"^0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"^1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.2.0_1788216726627_0.8348884048111451","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"basalt-sync","version":"0.2.1","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.2.1","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"e1ab9ec91232ae98f5502c804e2084deb1157d96","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.2.1.tgz","fileCount":3,"integrity":"sha512-c3aMkMZFlxEzEqEwNggpdkrak8L+Kkclba4LT/z8wJrthmGmP0dWJb6ceKUVAc289wowt0rinRDRnUQaMuopRw==","signatures":[{"sig":"MEYCIQClYlpUeOej/FvoNHZ6e6HfXNCuanuFH/E7lmwbrGMduAIhAJ+47fsfr8HhJRENDl/4ilbgX7Ah35AaYa2IeruRlhz/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":104748},"type":"module","engines":{"node":">=22"},"gitHead":"55479c7e48f0499da872fcf285c7f953bae8ea60","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.2.1_1788225844502_0.40691230250530075","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"basalt-sync","version":"0.2.2","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.2.2","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"6d2dbbdda801598d695e5ef2de5d92642fa92434","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.2.2.tgz","fileCount":3,"integrity":"sha512-jez/A9A/7Wjkz3JOrj8jSDs1Htb78TJFTWKnLW2esQE5aM3qqEjBZoVBilPVsZONBmu6JvamWkd+W5klftvTWg==","signatures":[{"sig":"MEQCIGuCrRP6FAORiq57RaraVwGSupzrVsfUinya/GkWX0bIAiBeBpHok/qGzlpj8WC2mKfZ7QJUir3Tdsg1grD784VdGg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":104848},"type":"module","engines":{"node":">=22"},"gitHead":"159a235ae2d128b3daf59ba4bd335f37b634feeb","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.2.2_1788247845510_0.14828947067221443","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"basalt-sync","version":"0.3.0","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.3.0","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"67bf4808e9feabf522785e27a77adba2e78f3284","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.3.0.tgz","fileCount":3,"integrity":"sha512-8DuSJ5vE1FqRWQUCOC5V/iXwZ33TZWm8Dree0mBd3uiSBuB/Z29AOFSmcXsx/qFzNo8k8o+zz2ZIzyD5NsZIjQ==","signatures":[{"sig":"MEQCIDtbZOhGx7ADcgKYvXCAi0+dXS7TuqpooSHYlshw0UQ6AiBwTL20iaxBfdf9x841EZ7NteK7h0wr6ov5JfieenN03A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":145713},"type":"module","engines":{"node":">=22"},"gitHead":"9be430a80a24e2b1f3abfcc1f2107ca0c0195f68","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.3.0_1788467866131_0.49208577174674173","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"basalt-sync","version":"0.3.1","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.3.1","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"f4f6bec02e7353f9a6cc7401fc717cd190e7a45d","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.3.1.tgz","fileCount":3,"integrity":"sha512-G/wArH9s9QnnvDd43tXNKWQNObsfXBbIxJkYLQr394/Prf1H+A7+HEyClt9XEL3EWb9KjYaU+Eydbat3Gw3Txg==","signatures":[{"sig":"MEQCICx0GoLGFNbDufqJBudvv2vb/rRKGJN6r6fAOOiLmgBMAiBsStRVlAKHnqFVGmMxx1nTz0oVJQwPL8qoj9wsDQ+/VQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":147964},"type":"module","engines":{"node":">=22"},"gitHead":"d038bd74d9cf8b6215639ced39772c693c6e6474","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.3.1_1788474033967_0.07045141273021205","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"basalt-sync","version":"0.3.2","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.3.2","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"8760c0f01fbb2c7fe608ae8c44b59f0652b620e5","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.3.2.tgz","fileCount":3,"integrity":"sha512-an9qn/OnfVDUVAoabyrk5CrQqHU2othTxWf2YCjzzmQGbS01wS/UqJYwx+nNkskQs0iE+AFhwEV4yvfz8gsvuw==","signatures":[{"sig":"MEUCIEtCFU4w42Tyzwq60cEacqSi2Q+9vr339HpFfFMfxV2cAiEAwF4hKijIXo36mDNG8fLDxmHYHTlz/YZwz5HmuwBx2Wg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":149361},"type":"module","engines":{"node":">=22"},"gitHead":"c75fb53f4009c3ce2acc324917ece2b3757bb124","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.3.2_1788476057957_0.5271122018330392","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"basalt-sync","version":"0.3.3","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.3.3","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"84988391a56d407535531670a062f99ab0bbcf32","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.3.3.tgz","fileCount":3,"integrity":"sha512-2LNAEIDmEWz39jiu2LDR2OMLiUGShiDVmrgtfITwNun4hLWb8jrAYQkCIl3A8S3KKKqiXQ+4ijtrA6Js92DBZg==","signatures":[{"sig":"MEYCIQCFglx1Ej4dWmdDqcnc1TqtaBEAuYliXbip+GImPDCQTQIhAIQBtO0IabowpAkiv9dUaulCRk6XjUtNPfKG0927eJ8R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":156755},"type":"module","engines":{"node":">=22"},"gitHead":"7fb2b84ffe1037bb3366d4ead71450daff385e40","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.3.3_1788495741964_0.8755135075238241","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"basalt-sync","version":"0.3.4","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.3.4","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"11d2a1220947827661fd79816fc2f0077365ddb0","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.3.4.tgz","fileCount":3,"integrity":"sha512-s0CU1RHO9bcU88f5t2J8T9WxXNUe5q2UXLTaGtDPoByfKdG7xFa9uqKQbr8vTsD7JggwjSJWc+gFtgw+lDf+1Q==","signatures":[{"sig":"MEUCIQC/XYk1ZnSnNu7eD9bsKq42SHTkhWLyXIbl93JqBGhnDQIgN/VhkEtUFoNi+uZHe9O4PcCwsM9abdlQZNajCOgDJIk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.3.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":161825},"type":"module","engines":{"node":">=22"},"gitHead":"bdb1e4cefa939a2d9c2b2d05d58861ac0f6206bf","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.3.4_1788502949477_0.05148883309204244","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"basalt-sync","version":"0.4.0","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.4.0","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"4cb6167dcf4507baa0908386130a7e7e36a65c72","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.4.0.tgz","fileCount":3,"integrity":"sha512-u9cch8DvE2XPOEZ5Eu9BY2jFT44piOtPESRda6PNG6R2oyAziNRUB2yEbnFym4FQ62jAtLcspJBFvywZdDunrQ==","signatures":[{"sig":"MEYCIQCgcpdjuUanqhjEo6zGRobAFjJd2HhPFXmmaAKy8U2aagIhAMqmUcKCLY3IU9datr969cw5k+iCIcfCD6/WavjI/pKP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":189391},"type":"module","engines":{"node":">=22"},"gitHead":"68fda75f216287e138a00d32a43934cdc8b17ae4","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.4.0_1788580700836_0.6006492654001307","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"basalt-sync","version":"0.4.1","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.4.1","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"d4636bccbe7c7e24dd1cef2351f803f753e642dc","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.4.1.tgz","fileCount":3,"integrity":"sha512-iZVBzq+unX9kvIrbOMz+jihRIE5/nNzG05UVodXmPidc7prD4sW3lSyDMli/pomAWkvtKuzYLu8+eBZNkYIlGQ==","signatures":[{"sig":"MEUCIQC5iAIQU1sKIywUJqhzEpmI4Gr7xeOPjPCTzDEjZKUNAwIgHg5/kU7N2PkCr4WeoBdUAVMH+p3zl3gJ4nMo7xWKYak=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":187275},"type":"module","engines":{"node":">=22"},"gitHead":"032eab4a519f608aed1f3ea9011def333514c615","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.4.1_1788592952795_0.44681428266990975","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"basalt-sync","version":"0.4.2","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.4.2","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"4964fd0b9b2d93372463bbd778dad1d8ef23fc85","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.4.2.tgz","fileCount":3,"integrity":"sha512-PQ/YI1C3SupIq+LpDSu/xnseSj3kwENzCZUFDHNzYIDsNluBSG2P8RL+0BKZdAtS6DWax02Yx/Dsk8qq4VyEmg==","signatures":[{"sig":"MEQCIAvOiKAr2GllSafS1/f0f//CfSOIHIUuXPABLM1570+UAiARNZ1Px9VeWK8mmh3tcQTG7tDLiuSLFEdNxSADelmyFA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":187275},"type":"module","engines":{"node":">=22"},"gitHead":"b019e8ecc10ef265c53078f47091c057cbde577d","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"12.0.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.4.2_1788596130759_0.8667753566759935","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"basalt-sync","version":"0.5.0","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.5.0","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"2b3e7ed2c6846c76c952ae14232f82f24eeb9e1b","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.5.0.tgz","fileCount":3,"integrity":"sha512-T9p17HmXKRX41tQYvgyfLJrHTCbObaJiLyFGbLczlrTnUobwAUSvvLKoS/SaL1XD6m7kqqEfC+uUGv4gkT8tTg==","signatures":[{"sig":"MEUCIQCGKfxmkCZoWirnRzdXBu74/6E8dlJ9f0umExuw6eYIVQIgKmLNt2l9Qgd9Rj64mZT0+v8GibQuwly7bZX242Y0B5I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":235017},"type":"module","engines":{"node":">=22"},"gitHead":"6c01d18eb4750df28dd78f8165bd1c050b985e16","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:pass":"bun run bench-pass.ts","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","bench:merge":"bun run bench-merge.ts","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"11.6.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.5.0_1788837147415_0.6209639098187594","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"basalt-sync","version":"0.5.1","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.5.1","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"e0614c126592748fa3900ca5c31a19157b155d88","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.5.1.tgz","fileCount":3,"integrity":"sha512-l44cBdil6SWGqMTV8nP2vI/cBOIdgKC4XjZly0ABQPcbzjgtUJnWoHZx9u86CPu3kYsKf+AfrePvNGZjHvyHrg==","signatures":[{"sig":"MEUCIEonXMe8a4lvzZI1kQeEEzWjOObsfx5SdS2L7rvY6B19AiEA/MEoP+9MYQkzoReg7fs2KHpEEuYnMI7Xt81gAZKrtCU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":237064},"type":"module","engines":{"node":">=22"},"gitHead":"378b101f864e103f566ba5ffb4ddc0c3b27b2ac2","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:pass":"bun run bench-pass.ts","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","bench:merge":"bun run bench-merge.ts","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"11.6.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.5.1_1788844963202_0.6809123833037953","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"basalt-sync","version":"0.5.2","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.5.2","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"3e43845d7af40ff6b20b0ba47e0bfb9bef4de83e","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.5.2.tgz","fileCount":3,"integrity":"sha512-r0W1AQG0N3AUMnhw2bKx+rgaP7jNt1QXVUWiLaA+jtr+qbDQAE12ocUFQsZ7LT/JHtrJZHLe3nmFpUOMBsRt/Q==","signatures":[{"sig":"MEYCIQDZ//7Po2TRSnAOW2/2b9py/DiriVuluMe8DkfA5Ah4YgIhAOSO46hlerHkadICiOhUkpjWiO8qQdBbheAqaWL7D9uo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":237159},"type":"module","engines":{"node":">=22"},"gitHead":"378aa0142f64f13ff020365ad0d024584baa5511","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:pass":"bun run bench-pass.ts","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","bench:merge":"bun run bench-merge.ts","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"11.6.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.5.2_1788855417973_0.9170708305543986","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"basalt-sync","version":"0.6.0","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.6.0","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"9464e86f05c7a494a59f8ce1a5bb52191bda014f","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.6.0.tgz","fileCount":3,"integrity":"sha512-gwi6M3jfpbb84PgCLf6Vs8Gzzehl8TxRvNxAYR+RKctp345wET6rJgoBPwswqKzsX5sP7zT0xXh41rUCURGbZw==","signatures":[{"sig":"MEUCIF21xl+lEi5gkz12jw9fs+HcgxVxvNyv6srJv985I41KAiEAq0Kj7nuQyxcPJzfLlTQCqLCIo03jm0s7dLeElDUiZTo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":239121},"type":"module","engines":{"node":">=22"},"gitHead":"573617cbf023213d1e324314f118861d10781846","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:pass":"bun run bench-pass.ts","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","bench:merge":"bun run bench-merge.ts","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"11.6.2","description":"Headless Obsidian vault sync for a Basalt server.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.6.0_1788902725497_0.29376548125717594","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"basalt-sync","version":"0.6.2","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.6.2","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"e23cf3b0c058f455abdd56a850b033d8a6f12c14","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.6.2.tgz","fileCount":3,"integrity":"sha512-WS7F74BE7tyGg8kEI3dPkbO0etzizwPbwqNYAvpLfsgxDDjrx2Q1N9CSwfTBWGNuUnK5znjf7l4zGPhnP6WEuQ==","signatures":[{"sig":"MEUCIQCkOm8nWkFS9TcYKybPn0qqoj2y30YurKD1rc4XewBwfgIgBTlq+5kcSdmCbaPlrwkr79JIDCc4/JAGrw+KTyLsmxQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":219312},"type":"module","engines":{"node":">=22"},"gitHead":"4098c4e1518e4232984299ec303040429ceb81e4","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:pass":"bun run bench-pass.ts","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","bench:merge":"bun run bench-merge.ts","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"11.6.2","description":"Fast, secure, self-hosted sync for Obsidian. Simple setup.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","qrcode-generator":"2.0.4","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.6.2_1788913674147_0.06469538760275206","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"basalt-sync","version":"0.7.0","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.7.0","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"5b387ace6340cf6ff58acb4a8c4137cfbcc870fd","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.7.0.tgz","fileCount":3,"integrity":"sha512-r8RbWmj8pwyVAX/RS5iOJutr/4GmG3jVnUcJxtUC+p1kL46/64hGALqiHw9BtTYOxPiFwoQJPsbpULxIp4qfxA==","signatures":[{"sig":"MEUCIQCnLMxxDKkTkJRYDNKZ+40Wwy03fGiIIXhzEnc8JPHLHgIgKJuq2JZhN9bucEsfIcQhI27MOIPxaMBd+17Iy+c8FHA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":223506},"type":"module","engines":{"node":">=22"},"gitHead":"ccf8f20ce19114d5f5d84415923fa8c69802ab46","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:pass":"bun run bench-pass.ts","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","bench:merge":"bun run bench-merge.ts","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","bench:cadence":"bun run bench-cadence.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"11.6.2","description":"Fast, secure, self-hosted sync for Obsidian. Simple setup.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","qrcode-generator":"2.0.4","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.7.0_1788981557569_0.042906526831475444","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"basalt-sync","version":"0.7.1","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.7.1","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"0763972d1825f9941dd83bc0b972a2b7f79711cd","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.7.1.tgz","fileCount":3,"integrity":"sha512-kcBgx9v82Zxzp0z44LfChmydWyg6vbcQ2yond++IfC1GPkzrtvAm9lGK0iR1Kbf2i0j1DOcYBTjBq/+oKUqBBw==","signatures":[{"sig":"MEUCIQDEZrLEHGJoM1VHOalBV+GILapbk9zh6yKWQrw9DI5icQIgcVR4OLPy+PuB6S0gc3lr0EO8fe0qrDdWmSDnTKonHNI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":223664},"type":"module","engines":{"node":">=22"},"gitHead":"920324c6e3313cd0c56d02425963e46b2260bb01","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:pass":"bun run bench-pass.ts","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","bench:merge":"bun run bench-merge.ts","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","bench:cadence":"bun run bench-cadence.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"11.6.2","description":"Fast, secure, self-hosted sync for Obsidian. Simple setup.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","qrcode-generator":"2.0.4","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.7.1_1788996690971_0.7074397508557355","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"basalt-sync","version":"0.8.0","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.8.0","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"57aa78518888f14e684ca33856702935137c3d17","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.8.0.tgz","fileCount":3,"integrity":"sha512-GUeLYvwjotsbMQwK9hpstYxqmMNsXm2mjElvTOEIh/dqNBWFu1Ctg2yah0fBB0GSKRisRHfCI5HykM7Wmq8iFA==","signatures":[{"sig":"MEQCIFtWOa+doN7iLAlrgX1IGkHmgl9amelrzY5hH48SLGQGAiAxOn4APuzKz7gtIttKOZtYVmy4+wZdbT5NbMtS9vHoqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCWzRQLIVheKYJszNzel5zgp6a2CCEL/X5yoQfPCBQKHgIgf2tBbfpiSEnsIrUirMrkwqMzeVB9mGzni25LmeXv+sc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":235520},"type":"module","engines":{"node":">=22"},"gitHead":"1b00d09f96112a131db482d2a294cd1768ad2d86","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:pass":"bun run bench-pass.ts","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","bench:merge":"bun run bench-merge.ts","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","bench:cadence":"bun run bench-cadence.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"11.6.2","description":"Fast, secure, self-hosted sync for Obsidian. Simple setup.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","qrcode-generator":"2.0.4","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.8.0_1789069145354_0.0462257637968968","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"basalt-sync","version":"0.8.1","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.8.1","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"fd0a49a39bdc5745c1d4dfb1324f562a7e60aede","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.8.1.tgz","fileCount":3,"integrity":"sha512-3F77q+va9AtBdlACWM99w/C181s/VAgriIMHaPOw742ZHjCwcXXpS6DNKRBKi8tIeg1Saigwxc6RD5p072ma7w==","signatures":[{"sig":"MEUCIHKiWxpxzWDdv/YOLNV0/Q2bBfL+HwoDo8AAIeGrf7t8AiEA26chRyxz1IbK8iCp2X8jcu2xZgCmVWU7sPcekN6bZf8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIED1eYlB/E1x+7Y79p97ktIa7cFOi4HFYNGxH5ZJuuGyAiBd+yackFxYfUP0pFiNgB9rFdQclCZzV1HmhrEuie++Nw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":235676},"type":"module","engines":{"node":">=22"},"gitHead":"d14e72378b27fe0c9b2e1b958b49af12e256d11b","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:pass":"bun run bench-pass.ts","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","bench:merge":"bun run bench-merge.ts","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","bench:cadence":"bun run bench-cadence.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"11.6.2","description":"Fast, secure, self-hosted sync for Obsidian. Simple setup.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","qrcode-generator":"2.0.4","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.8.1_1789074088740_0.051204900942327214","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"basalt-sync","version":"0.8.2","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.8.2","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"2a96cef3b86c3c361cd63d82f0b93164e54d5ca6","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.8.2.tgz","fileCount":3,"integrity":"sha512-c8yxzf64/Zh6GHJ3SPqdYm3tRkGxRYTHsSoLKrZEMui4n0DUUwzOLIAkon5/Qw1gNE5NIF2HyXJRugj82zwgOA==","signatures":[{"sig":"MEUCIHqK6POtQgu3tnuu1ZBheIoDnIPN7Yt+zdfzAUYn7hQpAiEAndPpBlVdMTrnvEspdRaFwhehmlN2w44z4AhIVpIX4Ls=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCzI37FSrTZIN1tocVn8DpvtjxQpd93s0vVTbzp1rDTlAIgRMlGklbl7lbbZ4CodVwWlJiuTkV5jzu8pgTdHITBQGk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.8.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":236607},"type":"module","engines":{"node":">=22"},"gitHead":"a935ad7b96a437f473cffde0ae48a32dd307500a","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:pass":"bun run bench-pass.ts","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","bench:merge":"bun run bench-merge.ts","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","bench:cadence":"bun run bench-cadence.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"11.6.2","description":"Fast, secure, self-hosted sync for Obsidian. Simple setup.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","qrcode-generator":"2.0.4","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.8.2_1789078431254_0.27966503650483565","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"name":"basalt-sync","version":"0.8.3","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.8.3","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"198603620c9223ee0b7d87ecfd80b4cec8483f8a","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.8.3.tgz","fileCount":3,"integrity":"sha512-5vxzBStv5d+HlSvcb2t/wK9ckpnkYN6Q0+YzLD+N06cj/ErILvLCGQ3sN4VMBI/bw5O3A92knZrIMPw2x3viUw==","signatures":[{"sig":"MEUCIAwf/eXGw4HYF9pCjRQkGiXEG2A3MI2K0JN9HdtkJapkAiEAweNVri1YgH9vL8TViaB8+nJjXzwoDfzDutp/IqHzR3o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIG0CzT+hYcF2F0m0Ucb5Tb3tGnFYHaWvh0nyIhjeTpMBAiBiXwSgcTKoRMewBJlrLQ+lqRlXAJ5vNO6s4DqfAt35EQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.8.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":243171},"type":"module","engines":{"node":">=22"},"gitHead":"983603bdfc1405b6f38d0f806dc2c9896e373f1b","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:pass":"bun run bench-pass.ts","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","bench:merge":"bun run bench-merge.ts","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","bench:cadence":"bun run bench-cadence.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"11.6.2","description":"Fast, secure, self-hosted sync for Obsidian. Simple setup.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","qrcode-generator":"2.0.4","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.8.3_1789084490624_0.5088009765690935","host":"s3://npm-registry-packages-npm-production"}},"0.8.4":{"name":"basalt-sync","version":"0.8.4","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.8.4","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"37e0a6f48712194d152c31974d464aff15afed78","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.8.4.tgz","fileCount":3,"integrity":"sha512-OYvADJ4z1qfhVIICix7PBN2uF+vJLTOLyRZkrGIMAmhksAyHCSH9B7ysQVa38rJ7e4yJkXuFxtFBGmwpTyLGbQ==","signatures":[{"sig":"MEUCIQC9Lntvt+0tJbA4wuOcuQS3lILyiArQXPUcJOEV/dxCWwIgaw6uxb47kU6VtzjuW67KIggJf4E37iKDVVWnSpBJ5pM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBIZXyUb1lezOpySSPIWUEKNe7Lwh8OnY5OlrMjl+rG/AiEA6vi0scoHab7iZLYEEmoI1gPyKfc+rYCJumnVYQSBSDg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.8.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":251706},"type":"module","engines":{"node":">=22"},"gitHead":"b188a8eee58436103592b2ebd0a6e83b9a471462","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:pass":"bun run bench-pass.ts","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","bench:merge":"bun run bench-merge.ts","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","bench:cadence":"bun run bench-cadence.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"11.6.2","description":"Fast, secure, self-hosted sync for Obsidian. Simple setup.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","qrcode-generator":"2.0.4","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.8.4_1789182536756_0.10784162670436492","host":"s3://npm-registry-packages-npm-production"}},"0.8.5":{"name":"basalt-sync","version":"0.8.5","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.8.5","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"37a98229932f076437c91d38045393510a67aab2","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.8.5.tgz","fileCount":3,"integrity":"sha512-RtHJERJeQ/IV5Fw5k0K8NDu8eOKISzjE3eJnxKgTlmCpRJiYMrxTs0PX3SZfeC39isdJb4WIvhxjZOoMin4vjQ==","signatures":[{"sig":"MEUCIA42eci35gvq0iUjc3Ckj73DiC81GNlL1alLda+tFjlJAiEAu76aqsSpXqfzxrDiSGolz05fPGb+f9S+qIAQ63RcLkw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGeZfBiCq8ba5UgFc+6lMdNwAjxLf+i5Y2kay7zvkMkxAiByzTQT+t+AwNPnf1LJiU1XBgqYfXaukF/Vv1TmGrhlSw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.8.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":253808},"type":"module","engines":{"node":">=22"},"gitHead":"424abc11947bed7eb38e2495cc8c4d3a234e1aa7","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:pass":"bun run bench-pass.ts","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","bench:merge":"bun run bench-merge.ts","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","bench:android":"bun run bench-android.ts","bench:cadence":"bun run bench-cadence.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"11.6.2","description":"Fast, secure, self-hosted sync for Obsidian. Simple setup.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","qrcode-generator":"2.0.4","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.8.5_1789363361221_0.6817840663337584","host":"s3://npm-registry-packages-npm-production"}},"0.8.6":{"name":"basalt-sync","version":"0.8.6","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.8.6","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"50ad8d8ac2ab588c154cec9873a52d6fef6b2e9a","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.8.6.tgz","fileCount":3,"integrity":"sha512-P0gTgwdhPYEHqPMfzqFwVMsEvh/DraPhs9WRBVk+JMpgp6K1YVrGZl2DlsxGItb9pdUGsnXZOS9GWB4j3hCueA==","signatures":[{"sig":"MEUCIGsZBct3rruSEr3Pu+ll20bORYDAV99QAngvUIDEkaaxAiEA/0K6m8MJiGOg33eg5/cA6Nb6GLC8lRxiN8XLcOMFpww=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFC8YFrEXtPIuY9EOWPceSWeDgZ1W8ZlzYgcyVJGewCSAiAQDxjCgVnLDdKEV+jgUCMOgEv5V7ENRESGUHPaC7XsMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.8.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":253808},"type":"module","engines":{"node":">=22"},"gitHead":"efe3a186289a57c796da71ccc1f3b79760b7c111","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:pass":"bun run bench-pass.ts","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","bench:merge":"bun run bench-merge.ts","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","bench:android":"bun run bench-android.ts","bench:cadence":"bun run bench-cadence.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"11.6.2","description":"Fast, secure, self-hosted sync for Obsidian. Simple setup.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","qrcode-generator":"2.0.4","@types/diff-match-patch":"^1.0.36"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.8.6_1789366383643_0.10378429329993999","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"basalt-sync","version":"0.9.0","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"author":{"name":"Wayne Hoover"},"license":"MIT","_id":"basalt-sync@0.9.0","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"homepage":"https://github.com/waynehoover/basalt-sync","bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"bin":{"basalt":"dist/basalt.mjs"},"dist":{"shasum":"ce2f5b83c7b955ffc04b7f813e5ec0a3139bec52","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.9.0.tgz","fileCount":3,"integrity":"sha512-fHNHRZpXETMt77bfDM4IPmwWXjksSLvQZXvKBRAR0VJ6vIsDfHI1AJzg7dr7pfPx0u0YKQMCNGjwL4G63tTXZw==","signatures":[{"sig":"MEYCIQDhXHI8wymz3c9s3W1x3ve1gJuOdSgA5IP5cjHJ9OkGxQIhAJp7ns2dfM9PNeAC26bEzD7+D5SLT7U334aryX8wWkoL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC/BGu0l1zl8lbMV2+BAULRKo0Imy/SrY8m6/lWH3HEagIgNk1qIogUqfY0RfXbVGCaqU2rUFcOey5pbWaWSLRO5Z8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1106674},"type":"module","engines":{"node":">=22"},"gitHead":"7bc87ddc0d5a38d54c054bc3728c04e378a3d66d","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:pass":"bun run bench-pass.ts","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","bench:merge":"bun run bench-merge.ts","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","bench:android":"bun run bench-android.ts","bench:cadence":"bun run bench-cadence.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"11.6.2","description":"Fast, secure, self-hosted sync for Obsidian. Simple setup.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"zod":"4.6.5","fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","qrcode-generator":"2.0.4","@types/diff-match-patch":"^1.0.36","@modelcontextprotocol/client":"2.0.0","@modelcontextprotocol/server":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/basalt-sync_0.9.0_1789523959494_0.42829911580298496","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"_id":"basalt-sync@0.10.0","bin":{"basalt":"dist/basalt.mjs"},"bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"dist":{"shasum":"9dcbf2d5b1a963e1740cebfaae926f62960b5817","tarball":"https://registry.npmjs.org/basalt-sync/-/basalt-sync-0.10.0.tgz","fileCount":3,"integrity":"sha512-BoHSDwc+svDpUJpneE7/IIx23Tf513fShBmBkTZKy49GYh1UsDwhvgZ2AVGyE2+ztY7j94lsmmBkV+ceiKxmZg==","signatures":[{"sig":"MEYCIQDGF01PPv/2f23MMy6DUTz1LbUKE4rDwpMPurO6t+RfPwIhAK+hmcZAOaUgZ+VnfDuJnXB6F15/ZIHJbPUabFXqAAzH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDjpVEEU7QCrVYrrhkO3u3L2YD/zz0gu2yT9QZBNH7KBgIhAK4RqbTxy+f0FmmXMIm/dsfQ9upYlDxFnHiq7op91g2F"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/basalt-sync@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1345004},"name":"basalt-sync","type":"module","author":{"name":"Wayne Hoover"},"engines":{"node":">=22"},"gitHead":"664a9630517a4b5ae1caceb973ba79c05feccc31","license":"MIT","scripts":{"dev":"node esbuild.config.mjs","test":"vitest run","bench":"bun run bench.ts","build":"node esbuild.config.mjs production","dedup":"bun run src/stress/dedup.ts","scale":"bun run src/stress/scale.ts","format":"prettier --config ../.prettierrc --write \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","stress":"vitest run --config vitest.stress.config.ts","build:cli":"node esbuild.config.mjs production","typecheck":"tsc --noEmit","bench:pass":"bun run bench-pass.ts","bench:sync":"bun run bench-sync.ts","test:watch":"vitest","bench:merge":"bun run bench-merge.ts","format:check":"prettier --config ../.prettierrc --check \"src/**/*.ts\" \"*.ts\" \"*.mjs\"","bench:android":"bun run bench-android.ts","bench:cadence":"bun run bench-cadence.ts"},"version":"0.10.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4045b31e-e5a1-4a3b-9a4d-0bf2b651acfb"}},"homepage":"https://github.com/waynehoover/basalt-sync","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"_npmVersion":"11.6.2","description":"Fast, secure, self-hosted sync for Obsidian. Simple setup.","directories":{},"maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"zod":"4.6.5","yaml":"2.9.1","fflate":"0.8.3","vitest":"^4.1.8","esbuild":"^0.28.1","obsidian":"^1.13.1","prettier":"^3.6.2","micromark":"4.0.2","typescript":"^5.9.3","@types/node":"^24.10.13","diff-match-patch":"1.0.5","qrcode-generator":"2.0.4","@types/diff-match-patch":"^1.0.36","mdast-util-from-markdown":"2.0.3","@modelcontextprotocol/client":"2.0.0","@modelcontextprotocol/server":"2.0.0","micromark-util-decode-string":"2.0.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/basalt-sync_0.10.0_1789679289723_0.7574787882897365"}}},"time":{"created":"2026-08-30T19:47:53.998Z","modified":"2026-09-17T21:08:10.425Z","0.1.1":"2026-08-30T19:47:54.278Z","0.1.3":"2026-08-31T00:14:41.955Z","0.1.4":"2026-08-31T00:40:32.385Z","0.1.5":"2026-08-31T00:50:00.162Z","0.1.6":"2026-08-31T00:53:41.981Z","0.1.7":"2026-08-31T01:00:47.514Z","0.1.8":"2026-08-31T01:33:47.091Z","0.2.0":"2026-08-31T22:52:07.921Z","0.2.1":"2026-09-01T01:24:04.651Z","0.2.2":"2026-09-01T07:30:45.620Z","0.3.0":"2026-09-03T20:37:46.275Z","0.3.1":"2026-09-03T22:20:34.105Z","0.3.2":"2026-09-03T22:54:18.099Z","0.3.3":"2026-09-04T04:22:22.102Z","0.3.4":"2026-09-04T06:22:29.631Z","0.4.0":"2026-09-05T03:58:20.979Z","0.4.1":"2026-09-05T07:22:32.921Z","0.4.2":"2026-09-05T08:15:30.899Z","0.5.0":"2026-09-08T03:12:27.570Z","0.5.1":"2026-09-08T05:22:43.337Z","0.5.2":"2026-09-08T08:16:58.117Z","0.6.0":"2026-09-08T21:25:25.697Z","0.6.2":"2026-09-09T00:27:54.300Z","0.7.0":"2026-09-09T19:19:17.715Z","0.7.1":"2026-09-09T23:31:31.100Z","0.8.0":"2026-09-10T19:39:05.483Z","0.8.1":"2026-09-10T21:01:28.846Z","0.8.2":"2026-09-10T22:13:51.332Z","0.8.3":"2026-09-10T23:54:50.747Z","0.8.4":"2026-09-12T03:08:56.865Z","0.8.5":"2026-09-14T05:22:41.307Z","0.8.6":"2026-09-14T06:13:03.753Z","0.9.0":"2026-09-16T01:59:19.591Z","0.10.0":"2026-09-17T21:08:09.830Z"},"bugs":{"url":"https://github.com/waynehoover/basalt-sync/issues"},"author":{"name":"Wayne Hoover"},"license":"MIT","homepage":"https://github.com/waynehoover/basalt-sync","keywords":["obsidian","sync","self-hosted","end-to-end-encryption","notes"],"repository":{"url":"git+https://github.com/waynehoover/basalt-sync.git","type":"git","directory":"client"},"description":"Fast, secure, self-hosted sync for Obsidian. Simple setup.","maintainers":[{"name":"waynehoover","email":"w@waynehoover.com"}],"readme":"# Basalt command-line client\n\n**Fast, secure, self-hosted sync for Obsidian. Simple setup.**\n\nKeep a local copy of your Obsidian notes on a NAS or another machine without\nObsidian. Basalt connects to your own server, encrypts content before upload,\nand provides note history and recovery from the terminal.\n\n**Experimental.** Use macOS or Linux, Node **22 or newer**, and a local\nfilesystem. Run one Basalt process that writes to each vault, and keep other\nsync tools and the Obsidian plugin off that same directory. For everyday\nediting, use the\n[Obsidian plugin](https://github.com/waynehoover/basalt-sync/blob/main/docs/plugin.md).\n\n## Set up a mirror\n\nCreate an invite on an existing device, using **Add another device** in the\nplugin or `basalt invite`. An invite works once and expires after ten minutes;\n`--ttl` raises that to at most one hour. Then, on the mirror machine:\n\n```bash\nnpm install -g basalt-sync\nmkdir -p ~/basalt-mirror\ncd ~/basalt-mirror\nbasalt pair 'INVITE' --read-only\nbasalt sync --watch\n```\n\nReplace `INVITE` with the string you created. It works once and expires after\nten minutes by default. `--read-only` is saved during pairing, so subsequent\nsyncs keep local changes from being uploaded even without the flag.\n\nKeep the process running for continuous sync. For a scheduled job, use\n`basalt sync --dir /path/to/basalt-mirror` instead.\n\n## Start a new vault\n\nIf no device has claimed the server yet, use its setup string:\n\n```bash\nbasalt init 'wss://homelab.example.ts.net#TOKEN' --dir ~/vault\nbasalt sync --dir ~/vault\n```\n\nThis creates a writable client. Save the recovery key printed during setup,\nseparate from your devices. If every device is lost, the key lets you pair a\nreplacement. Basalt cannot recover it for you.\n\nSee [server setup](https://github.com/waynehoover/basalt-sync/blob/main/docs/server.md)\nfor TLS and obtaining the token. A named server vault also needs\n`--vault-id NAME` on `init`.\n\n## Everyday commands\n\nCommands use the current directory unless you pass `--dir DIR`.\n\n| Command | Use it to… |\n|---|---|\n| `basalt sync` | Sync once and exit. |\n| `basalt sync --watch` | Keep syncing and reconnect after temporary outages. |\n| `basalt mcp` | Expose this paired directory over stdio, or HTTP with `--listen`. |\n| `basalt mcp-token` | Issue or rotate the HTTP MCP credential; `--revoke` revokes it. |\n| `basalt status` | Check connection, local changes, and recovery issues. |\n| `basalt invite` | Add another device with a single-use invite. |\n| `basalt devices` | List devices and outstanding invites. |\n| `basalt rename NAME` | Rename this device's label. |\n| `basalt history \"Note.md\"` | View a note's versions, newest first. |\n| `basalt deleted` | List deleted notes and whether they can be restored. |\n| `basalt restore \"Note.md\"` | Restore the newest version with content. |\n| `basalt unlink` | Remove local pairing and index while keeping notes. |\n\nThe [command reference](https://github.com/waynehoover/basalt-sync/blob/main/docs/cli-reference.md)\ncovers all flags, device revocation, rotation, repair, and server recovery.\n\n## Connect a local agent\n\n`basalt mcp` lets a local MCP host read notes and make exact edits while Basalt\nsyncs its own headless copy. The host and any model service it uses can receive\nplaintext note content. Choose a host you trust with those notes.\n\nFirst create an invite on an existing device and pair a **separate directory**:\n\n```bash\nmkdir -p /absolute/path/to/agent-vault\nbasalt pair --dir /absolute/path/to/agent-vault --key-file /private/path/invite.txt\n```\n\nFor an inspection-only host, add `--read-only` at pairing or launch. A saved\nread-only pairing cannot be made writable by omitting the flag. Never point the\nCLI at the local vault already being synced by the Obsidian plugin.\n\nConfigure the host to launch Node with an absolute executable path, the absolute\ninstalled `basalt.mjs` path, and `--dir`. For a host using `mcpServers` JSON:\n\n```json\n{\n  \"mcpServers\": {\n    \"basalt\": {\n      \"command\": \"/absolute/path/to/node\",\n      \"args\": [\n        \"/absolute/path/to/basalt-sync/dist/basalt.mjs\",\n        \"mcp\",\n        \"--dir\",\n        \"/absolute/path/to/agent-vault\"\n      ]\n    }\n  }\n}\n```\n\nReplace all paths with your installation's paths. `command -v node` locates Node;\nfor a global npm installation, `npm root -g` locates the directory containing\n`basalt-sync/dist/basalt.mjs`. Use Node 22 or newer. Node 22 and 24 have been\nexercised with the production MCP artifact. Hosts may use a different outer\nconfiguration format; the executable and argument array stay the same.\n\nThe host owns this long-running process. Stop `sync --watch` first, and configure\none host process per directory. MCP holds the vault lock and handles ongoing\nsync itself. Stdout is reserved for protocol messages; do not add `--json` or\n`--watch`. EOF, SIGINT and SIGTERM drain admitted writes before releasing the\nlock. A host that force-kills its child can interrupt that drain; inspect any\nunknown outcome.\n\nStart with `sync_status`, `list_notes` and `read_note`. Initialization and local\nreads work during connection setup or outages. They can be stale; a missing local\nfile may simply be waiting to download. Edits require `writeReady:true` after\ninitial sync. History and restore need a server connection.\n\nSearch by content, filename or tag with `search_notes`. Tag changes, moves and\nrecoverable deletion use a preview first, then require the returned exact\nchanges and bases to apply. `compare_versions` shows differences from retained\nhistory; `delivery_status` reports device checkpoints without promising that a\nparticular edit reached every device.\n\nTo expose several separately paired directories, replace `--dir` with repeated\n`--vault name=/absolute/path` arguments. `list_vaults` discovers those aliases;\nevery other tool requires `vault` when several are configured. For HTTP, the\nfirst configured directory's credential grants access to the whole explicit set.\nSee [multiple vaults](https://github.com/waynehoover/basalt-sync/blob/main/docs/cli-reference.md#several-vaults)\nfor credential scope and per-vault permissions.\n\nTo change a note, read it and supply its returned `base` with exact `{old,new}`\nspans to `edit_note`. Each old span must be unique; all spans are validated\nagainst the same original and published as one replacement. `append_note` and `prepend_note` also\nrequire a base and add exactly the supplied text, including only the newlines\nyou supply. `create_note` and `restore_note` require free destination paths.\nUTF-8 Markdown and plain text are supported up to 1 MiB; drawings and attachments\ncannot be mutated. There is no whole-file writer.\n\nEvery mutation of an existing note preserves a verified, flushed\nbefore-image. Read the returned `beforeImage` to inspect it, or list with\n`includeBackups:true` to find older copies. Backups sync as ordinary notes and\nMCP cannot alter or delete them.\n`applied:true` and `durable:true` describe the local commit, not delivery to the\nserver or another device. Errors may report an applied change or preserved paths.\nAfter `stale`, a timeout or a lost response, reread and reconsider before retrying.\n\nFollow continuation fields to read later pages. `--read-only` omits every mutation\ntool but still downloads remote edits. The\n[MCP reference and recovery example](https://github.com/waynehoover/basalt-sync/blob/main/docs/cli-reference.md#mcp-over-stdio)\ncover exact limits, partial results and restoring an inspected version to a new\npath.\n\n## Connect over HTTP\n\nFor an agent running on the same machine, stdio can use the configuration above.\nHTTP lets multiple clients share one running process. Use the same separately\npaired headless directory and stop its existing watcher first. Issue the HTTP\ncredential, exporting it outside the vault to a new private file:\n\n```bash\nbasalt mcp-token --dir /srv/vault --key-out /private/path/basalt-mcp.key\nbasalt mcp --dir /srv/vault --listen 127.0.0.1:3010\n```\n\nThe output directory must already exist. Without `--key-out`, the command prints\nthe token once. With it, only the credential id and file path are printed.\nEvery HTTP request needs `Authorization: Bearer TOKEN`, including requests on\nloopback. The token is separate from your recovery key and device credential.\nHTTP has read-only tools by default; add `--writable` only when the agent should\nedit notes. A saved read-only pairing cannot be overridden. This default limits\nMCP tools, while ordinary sync still uploads on a writable device.\n\nOn Linux, a service can own this directory. For example, save the following as\n`/etc/systemd/system/basalt-mcp.service`, adjusting the account, Node executable,\ninstalled artifact and vault paths:\n\n```ini\n[Unit]\nDescription=Basalt MCP\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=simple\nUser=basalt\nExecStart=/usr/local/bin/node /usr/local/lib/node_modules/basalt-sync/dist/basalt.mjs mcp --dir /srv/vault --listen 127.0.0.1:3010\nRestart=on-failure\nTimeoutStopSec=30\n\n[Install]\nWantedBy=multi-user.target\n```\n\nThe service account must own the paired directory and its credential state.\nUse `command -v node` and `npm root -g` to locate your installation. Then enable\nthe service:\n\n```bash\nsudo systemctl daemon-reload\nsudo systemctl enable --now basalt-mcp\n```\n\nSIGTERM drains admitted edits before releasing the vault lock. If the service\nmanager force-kills the process after its shutdown allowance, inspect uncertain\noutcomes and recovery copies. HTTP ignores stdin EOF and writes diagnostics only\nto stderr. Systemd acceptance of this example remains untested locally on macOS.\n\nOn the same machine, publish the loopback listener through Tailscale Serve:\n\n```bash\ntailscale serve --bg --https=8443 3010\n```\n\nReplace `host.ts.net` with the machine's full Tailscale DNS name. Enter\n`https://host.ts.net:8443/mcp` in the MCP client and put the token in its bearer\ntoken/API-key field, or configure the exact `Authorization` header above. The\nclient must support that header and have a network path into your tailnet.\nThis static-key service does not provide OAuth discovery or a browser login.\nIf your phone only sends prompts to an agent on your Mac, the Mac is the MCP\nclient and can use local stdio instead.\n\nRotate without restarting the service, then update each client:\n\n```bash\nbasalt mcp-token --dir /srv/vault --key-out /private/path/basalt-mcp-next.key\n```\n\nUse a new export filename; existing files are never overwritten. Old keys fail\ntheir next request, and old sessions end when the new credential is observed.\nQueued old-key operations are cancelled; admitted edits finish. Revoking uses\n`basalt mcp-token --dir /srv/vault --revoke`. Issuing another credential restores\naccess. The stored hash cannot recover a lost token.\n\nThe [HTTP reference](https://github.com/waynehoover/basalt-sync/blob/main/docs/cli-reference.md#mcp-over-http)\ncovers origins, limits and reconnect behavior. TLS terminators receive plaintext\nnotes; read the [Cloudflare and proxy warning](https://github.com/waynehoover/basalt-sync/blob/main/docs/security.md#http-access-for-an-agent)\nbefore choosing another proxy. Real Tailscale HTTPS was tested with official SDK\nclients, including edits, before-images, credential rotation and restart.\n**Cloudflare Tunnel, Collie and a specific phone MCP client remain unverified**,\nincluding phone lockout and re-entry after token rotation.\n\n## A mirror, and turning merging off\n\n`--read-only` stops ordinary sync from uploading local edits, deletions, and\nconflict copies. It still downloads and changes local files. Preserve local\nedits you care about separately; this mode does not make the local directory\nimmutable.\n\nThe setting is a client behavior, **not a server-enforced permission**. The\nclient keeps an ordinary device credential, and explicit administrative\ncommands still work. In particular, `basalt repair` can resend missing content.\nUse this mode on a machine you trust.\n\n`init` and `pair` persist `--read-only`; passing it to `sync` applies it to that\ninvocation. There is no flag to turn a persisted setting off.\n\nTo review conflicting edits yourself instead of merging them:\n\n```bash\nbasalt sync --no-merge\nbasalt sync --watch --no-merge\n```\n\nPass `--no-merge` on each invocation that should use it. Basalt keeps both\nversions when a merge would otherwise be needed.\n\n## Recovery\n\n```bash\nbasalt history \"Quarterly plan.md\"\nbasalt restore \"Quarterly plan.md\" --uid 42\nbasalt restore \"Quarterly plan.md\" --uid 42 --to \"Recovered plan.md\"\n```\n\nRestore never overwrites an existing file. If the target is occupied, it writes\na copy such as `Quarterly plan (restored 42).md`. On a writable client, it then\nattempts to send that copy. On a read-only mirror, the copy stays local.\n\nWhen the server has been restored from an older backup, use `basalt rebase`\nto inspect the recovery situation, then `basalt rebase --backup-taken` after\npreserving local notes and backing up the server. This rejoins without deleting\nlocal files and sends local-only versions when the device is writable.\n\nIf a command reports a version kept at a hidden path, preserve that file and\n`.basalt/`. Copy the retained version to a new visible filename and inspect it\nbefore removing recovery material. An unreadable recovery inventory needs\nattention even when other transfers succeed.\n\n## Automation and output\n\nUse `--json` for structured command output. `mcp` and `mcp-token` refuse this flag.\nMCP stdout is protocol-only for stdio and empty for HTTP; `mcp-token` prints\nthe token once, or the id and path when exporting.\nExit **0** means the command succeeded,\n**1** means a failure or unresolved issue, and **2** means invalid arguments.\nFor sync, `outcome` explains the result and the counters describe the work.\n\nA conflict exits 0 because both versions were preserved. Ignored files and\nchanges held back by read-only mode also do not make a sync fail. Inspect those\nfields if your job needs a stricter condition. Hidden versions awaiting recovery\nand an unreadable recovery inventory make sync fail until addressed.\n\nRestore separates `restored` (the local file was written), `sent` (that copy was\nacknowledged by the server), and `ok` (the overall operation succeeded). If the\ncopy was restored but sync failed, retry `basalt sync` to avoid creating another copy.\n\nTo keep setup strings, invites, and recovery keys out of command arguments, use\nan existing private file or standard input:\n\n```bash\nbasalt pair --key-file /private/path/invite.txt --read-only\nbasalt pair - --read-only < /private/path/invite.txt\nbasalt rotate --key-file /private/path/recovery.txt --key-out /private/path/new-recovery.txt\n```\n\n`--key-out` creates a new private file and refuses to overwrite one. Recovery\nkeys are also printed, so protect command output and logs. For `mcp-token`,\nexporting suppresses the token on stdout.\n\n## Files and local state\n\nBasalt stores credentials and the sync index in `.basalt/`, which never syncs.\nProtect this directory: it contains the keys this device needs to read notes.\nUnlink through the command rather than deleting state files by hand.\n\nThe CLI excludes dot-prefixed files and folders, `node_modules`, and the\nObsidian configuration folder. Use `--config-dir NAME` if yours differs from\n`.obsidian`. Add `--ignore NAME` for a file or folder name to exclude at every\ndepth; repeat the flag for more names. These choices apply to this device only.\n\nEquivalent Unicode filename spellings are normalized. If two distinct files\nwould become the same name, Basalt blocks those paths and identifies them;\nrename one yourself. Keep clients updated together to avoid older clients\nreintroducing obsolete spellings. Filesystem renames can appear as a deletion\nof the old path and a creation of the new one; both names retain their history.\n\n## A command says the vault is locked\n\nStop an existing watcher before starting another command that writes to the\nvault. On supported local macOS and Linux setups, process exit releases the\nlock automatically, including after a crash.\n\nIf Basalt reports that manual recovery is required, run `basalt unlock` after\nconfirming the previous process has stopped. It refuses a live local holder.\n`--force` is only for a holder recorded on another machine and requires you to\nverify that it is stopped. Shared network vaults remain unsupported.\n\n## More\n\n- [Install with an agent](https://github.com/waynehoover/basalt-sync/blob/main/llm.md)\n- [All documentation](https://github.com/waynehoover/basalt-sync/blob/main/docs/index.md)\n- [Command reference](https://github.com/waynehoover/basalt-sync/blob/main/docs/cli-reference.md)\n- [Security and privacy](https://github.com/waynehoover/basalt-sync/blob/main/docs/security.md)\n- [Build and contribute](https://github.com/waynehoover/basalt-sync/blob/main/docs/development.md)\n\n## Preview and verify\n\n`basalt preview --dir ~/vault` shows planned changes without writing notes.\nAdd `--json` for file actions and counts. Run `basalt sync --verify --dir ~/vault`\nto re-read every file when an external edit may have preserved its timestamps.\nHistory supports `--before UID` for older pages; see the\n[CLI reference](https://github.com/waynehoover/basalt-sync/blob/main/docs/cli-reference.md).\n","readmeFilename":"README.md"}