Skip to main content

max / balanced_breakfast

Bump keyring to 4.1.5 keyring 4 removed the per-backend cargo features (apple-native / linux-native / windows-native); the platform backend is now selected automatically by target via the default v1 feature. API is v1-compatible, so no source changes. Note: v4 on Linux defaults to the secret-service (D-Bus) store, where keyring 3 linux-native used linux-keyutils, so Linux-stored credentials move to a different backend and need re-entry on first run after the bump. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-07-21 00:29 UTC
Commit: 4fb06de7f5ccad0834d5fb2e2e65e3b13cd9531d
Parent: 4c2811d
2 files changed, +298 insertions, -34 deletions
M Cargo.lock +297 -33
@@ -116,6 +116,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
116 116 checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea"
117 117
118 118 [[package]]
119 + name = "apple-native-keyring-store"
120 + version = "1.0.1"
121 + source = "registry+https://github.com/rust-lang/crates.io-index"
122 + checksum = "797f94b6a53d7d10b56dc18290e0d40a2158352f108bb4ff32350825081a9f29"
123 + dependencies = [
124 + "keyring-core",
125 + "log",
126 + "security-framework",
127 + ]
128 +
129 + [[package]]
119 130 name = "arbitrary"
120 131 version = "1.4.2"
121 132 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -147,6 +158,137 @@ dependencies = [
147 158 ]
148 159
149 160 [[package]]
161 + name = "async-broadcast"
162 + version = "0.7.2"
163 + source = "registry+https://github.com/rust-lang/crates.io-index"
164 + checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532"
165 + dependencies = [
166 + "event-listener",
167 + "event-listener-strategy",
168 + "futures-core",
169 + "pin-project-lite",
170 + ]
171 +
172 + [[package]]
173 + name = "async-channel"
174 + version = "2.5.0"
175 + source = "registry+https://github.com/rust-lang/crates.io-index"
176 + checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2"
177 + dependencies = [
178 + "concurrent-queue",
179 + "event-listener-strategy",
180 + "futures-core",
181 + "pin-project-lite",
182 + ]
183 +
184 + [[package]]
185 + name = "async-executor"
186 + version = "1.14.0"
187 + source = "registry+https://github.com/rust-lang/crates.io-index"
188 + checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a"
189 + dependencies = [
190 + "async-task",
191 + "concurrent-queue",
192 + "fastrand",
193 + "futures-lite",
194 + "pin-project-lite",
195 + "slab",
196 + ]
197 +
198 + [[package]]
199 + name = "async-io"
200 + version = "2.6.0"
201 + source = "registry+https://github.com/rust-lang/crates.io-index"
202 + checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc"
203 + dependencies = [
204 + "autocfg",
205 + "cfg-if",
206 + "concurrent-queue",
207 + "futures-io",
208 + "futures-lite",
209 + "parking",
210 + "polling 3.11.0",
211 + "rustix",
212 + "slab",
213 + "windows-sys 0.61.2",
214 + ]
215 +
216 + [[package]]
217 + name = "async-lock"
218 + version = "3.4.2"
219 + source = "registry+https://github.com/rust-lang/crates.io-index"
220 + checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311"
221 + dependencies = [
222 + "event-listener",
223 + "event-listener-strategy",
224 + "pin-project-lite",
225 + ]
226 +
227 + [[package]]
228 + name = "async-process"
229 + version = "2.5.0"
230 + source = "registry+https://github.com/rust-lang/crates.io-index"
231 + checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75"
232 + dependencies = [
233 + "async-channel",
234 + "async-io",
235 + "async-lock",
236 + "async-signal",
237 + "async-task",
238 + "blocking",
239 + "cfg-if",
240 + "event-listener",
241 + "futures-lite",
242 + "rustix",
243 + ]
244 +
245 + [[package]]
246 + name = "async-recursion"
247 + version = "1.1.1"
248 + source = "registry+https://github.com/rust-lang/crates.io-index"
249 + checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
250 + dependencies = [
251 + "proc-macro2",
252 + "quote",
253 + "syn 2.0.114",
254 + ]
255 +
256 + [[package]]
257 + name = "async-signal"
258 + version = "0.2.14"
259 + source = "registry+https://github.com/rust-lang/crates.io-index"
260 + checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485"
261 + dependencies = [
262 + "async-io",
263 + "async-lock",
264 + "atomic-waker",
265 + "cfg-if",
266 + "futures-core",
267 + "futures-io",
268 + "rustix",
269 + "signal-hook-registry",
270 + "slab",
271 + "windows-sys 0.61.2",
272 + ]
273 +
274 + [[package]]
275 + name = "async-task"
276 + version = "4.7.1"
277 + source = "registry+https://github.com/rust-lang/crates.io-index"
278 + checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
279 +
280 + [[package]]
281 + name = "async-trait"
282 + version = "0.1.91"
283 + source = "registry+https://github.com/rust-lang/crates.io-index"
284 + checksum = "ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec"
285 + dependencies = [
286 + "proc-macro2",
287 + "quote",
288 + "syn 3.0.2",
289 + ]
290 +
291 + [[package]]
150 292 name = "atk"
151 293 version = "0.18.2"
152 294 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -359,9 +501,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
359 501
360 502 [[package]]
361 503 name = "bitflags"
362 - version = "2.10.0"
504 + version = "2.13.1"
363 505 source = "registry+https://github.com/rust-lang/crates.io-index"
364 - checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
506 + checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da"
365 507 dependencies = [
366 508 "serde_core",
367 509 ]
@@ -385,6 +527,15 @@ dependencies = [
385 527 ]
386 528
387 529 [[package]]
530 + name = "block-padding"
531 + version = "0.3.3"
532 + source = "registry+https://github.com/rust-lang/crates.io-index"
533 + checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93"
534 + dependencies = [
535 + "generic-array",
536 + ]
537 +
538 + [[package]]
388 539 name = "block2"
389 540 version = "0.6.2"
390 541 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -394,6 +545,19 @@ dependencies = [
394 545 ]
395 546
396 547 [[package]]
548 + name = "blocking"
549 + version = "1.6.2"
550 + source = "registry+https://github.com/rust-lang/crates.io-index"
551 + checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21"
552 + dependencies = [
553 + "async-channel",
554 + "async-task",
555 + "futures-io",
556 + "futures-lite",
557 + "piper",
558 + ]
559 +
560 + [[package]]
397 561 name = "brotli"
398 562 version = "8.0.2"
399 563 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -458,7 +622,7 @@ version = "0.18.5"
458 622 source = "registry+https://github.com/rust-lang/crates.io-index"
459 623 checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2"
460 624 dependencies = [
461 - "bitflags 2.10.0",
625 + "bitflags 2.13.1",
462 626 "cairo-sys-rs",
463 627 "glib",
464 628 "libc",
@@ -520,6 +684,15 @@ dependencies = [
520 684 ]
521 685
522 686 [[package]]
687 + name = "cbc"
688 + version = "0.1.2"
689 + source = "registry+https://github.com/rust-lang/crates.io-index"
690 + checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6"
691 + dependencies = [
692 + "cipher",
693 + ]
694 +
695 + [[package]]
523 696 name = "cc"
524 697 version = "1.2.55"
525 698 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -732,7 +905,7 @@ version = "0.24.0"
732 905 source = "registry+https://github.com/rust-lang/crates.io-index"
733 906 checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1"
734 907 dependencies = [
735 - "bitflags 2.10.0",
908 + "bitflags 2.13.1",
736 909 "core-foundation 0.10.1",
737 910 "core-graphics-types",
738 911 "foreign-types 0.5.0",
@@ -745,7 +918,7 @@ version = "0.2.0"
745 918 source = "registry+https://github.com/rust-lang/crates.io-index"
746 919 checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
747 920 dependencies = [
748 - "bitflags 2.10.0",
921 + "bitflags 2.13.1",
749 922 "core-foundation 0.10.1",
750 923 "libc",
751 924 ]
@@ -1086,7 +1259,7 @@ version = "0.3.0"
1086 1259 source = "registry+https://github.com/rust-lang/crates.io-index"
1087 1260 checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
1088 1261 dependencies = [
1089 - "bitflags 2.10.0",
1262 + "bitflags 2.13.1",
1090 1263 "block2",
1091 1264 "libc",
1092 1265 "objc2",
@@ -1222,6 +1395,33 @@ dependencies = [
1222 1395 ]
1223 1396
1224 1397 [[package]]
1398 + name = "endi"
1399 + version = "1.1.1"
1400 + source = "registry+https://github.com/rust-lang/crates.io-index"
1401 + checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099"
1402 +
1403 + [[package]]
1404 + name = "enumflags2"
1405 + version = "0.7.12"
1406 + source = "registry+https://github.com/rust-lang/crates.io-index"
1407 + checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef"
1408 + dependencies = [
1409 + "enumflags2_derive",
1410 + "serde",
1411 + ]
1412 +
1413 + [[package]]
1414 + name = "enumflags2_derive"
1415 + version = "0.7.12"
1416 + source = "registry+https://github.com/rust-lang/crates.io-index"
1417 + checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827"
1418 + dependencies = [
1419 + "proc-macro2",
1420 + "quote",
1421 + "syn 2.0.114",
1422 + ]
1423 +
1424 + [[package]]
1225 1425 name = "equivalent"
1226 1426 version = "1.0.2"
1227 1427 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1271,6 +1471,16 @@ dependencies = [
1271 1471 ]
1272 1472
1273 1473 [[package]]
1474 + name = "event-listener-strategy"
1475 + version = "0.5.4"
1476 + source = "registry+https://github.com/rust-lang/crates.io-index"
1477 + checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
1478 + dependencies = [
1479 + "event-listener",
1480 + "pin-project-lite",
1481 + ]
1482 +
1483 + [[package]]
1274 1484 name = "fallible-iterator"
1275 1485 version = "0.3.0"
1276 1486 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1484,6 +1694,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1484 1694 checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
1485 1695
1486 1696 [[package]]
1697 + name = "futures-lite"
1698 + version = "2.6.1"
1699 + source = "registry+https://github.com/rust-lang/crates.io-index"
1700 + checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad"
1701 + dependencies = [
1702 + "fastrand",
1703 + "futures-core",
1704 + "futures-io",
1705 + "parking",
1706 + "pin-project-lite",
1707 + ]
1708 +
1709 + [[package]]
1487 1710 name = "futures-macro"
1488 1711 version = "0.3.31"
1489 1712 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1749,7 +1972,7 @@ version = "0.18.5"
1749 1972 source = "registry+https://github.com/rust-lang/crates.io-index"
1750 1973 checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5"
1751 1974 dependencies = [
1752 - "bitflags 2.10.0",
1975 + "bitflags 2.13.1",
1753 1976 "futures-channel",
1754 1977 "futures-core",
1755 1978 "futures-executor",
@@ -2360,6 +2583,7 @@ version = "0.1.4"
2360 2583 source = "registry+https://github.com/rust-lang/crates.io-index"
2361 2584 checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01"
2362 2585 dependencies = [
2586 + "block-padding",
2363 2587 "generic-array",
2364 2588 ]
2365 2589
@@ -2503,24 +2727,30 @@ version = "0.7.0"
2503 2727 source = "registry+https://github.com/rust-lang/crates.io-index"
2504 2728 checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a"
2505 2729 dependencies = [
2506 - "bitflags 2.10.0",
2730 + "bitflags 2.13.1",
2507 2731 "serde",
2508 2732 "unicode-segmentation",
2509 2733 ]
2510 2734
2511 2735 [[package]]
2512 2736 name = "keyring"
2513 - version = "3.6.3"
2737 + version = "4.1.5"
2514 2738 source = "registry+https://github.com/rust-lang/crates.io-index"
2515 - checksum = "eebcc3aff044e5944a8fbaf69eb277d11986064cba30c468730e8b9909fb551c"
2739 + checksum = "0298a59b384c540e408a600c8b375a09b49c3f97debc080e2c30675d79a6368a"
2740 + dependencies = [
2741 + "apple-native-keyring-store",
2742 + "keyring-core",
2743 + "windows-native-keyring-store",
2744 + "zbus-secret-service-keyring-store",
2745 + ]
2746 +
2747 + [[package]]
2748 + name = "keyring-core"
2749 + version = "1.0.0"
2750 + source = "registry+https://github.com/rust-lang/crates.io-index"
2751 + checksum = "fb1e621458ca9c51aa110bd0339d4751a056b9576bf1253aee1aa560dda0fc9d"
2516 2752 dependencies = [
2517 - "byteorder",
2518 - "linux-keyutils",
2519 2753 "log",
2520 - "security-framework 2.11.1",
2521 - "security-framework 3.6.0",
2522 - "windows-sys 0.60.2",
2523 - "zeroize",
2524 2754 ]
2525 2755
2526 2756 [[package]]
@@ -2608,7 +2838,7 @@ version = "0.1.12"
2608 2838 source = "registry+https://github.com/rust-lang/crates.io-index"
2609 2839 checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616"
2610 2840 dependencies = [
2611 - "bitflags 2.10.0",
2841 + "bitflags 2.13.1",
2612 2842 "libc",
2613 2843 "redox_syscall 0.7.0",
2614 2844 ]
@@ -2631,16 +2861,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
2631 2861 checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
2632 2862
2633 2863 [[package]]
2634 - name = "linux-keyutils"
2635 - version = "0.2.5"
2636 - source = "registry+https://github.com/rust-lang/crates.io-index"
2637 - checksum = "83270a18e9f90d0707c41e9f35efada77b64c0e6f3f1810e71c8368a864d5590"
2638 - dependencies = [
2639 - "bitflags 2.10.0",
2640 - "libc",
2641 - ]
2642 -
2643 - [[package]]
2644 2864 name = "linux-raw-sys"
2645 2865 version = "0.11.0"
2646 2866 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2825,7 +3045,7 @@ dependencies = [
2825 3045 "flume",
2826 3046 "if-addrs",
2827 3047 "log",
2828 - "polling",
3048 + "polling 2.8.0",
2829 3049 "socket2 0.5.10",
2830 3050 ]
2831 3051
@@ -2910,7 +3130,7 @@ dependencies = [
2910 3130 "openssl-probe",
2911 3131 "openssl-sys",
2912 3132 "schannel",
2913 - "security-framework 3.6.0",
3133 + "security-framework",
2914 3134 "security-framework-sys",
2915 3135 "tempfile",
2916 3136 ]
@@ -2921,7 +3141,7 @@ version = "0.9.0"
2921 3141 source = "registry+https://github.com/rust-lang/crates.io-index"
2922 3142 checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
2923 3143 dependencies = [
2924 - "bitflags 2.10.0",
3144 + "bitflags 2.13.1",
2925 3145 "jni-sys",
2926 3146 "log",
2927 3147 "ndk-sys",
@@ -2976,6 +3196,30 @@ dependencies = [
2976 3196 ]
2977 3197
2978 3198 [[package]]
3199 + name = "num"
3200 + version = "0.4.3"
3201 + source = "registry+https://github.com/rust-lang/crates.io-index"
3202 + checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
3203 + dependencies = [
3204 + "num-bigint",
3205 + "num-complex",
3206 + "num-integer",
3207 + "num-iter",
3208 + "num-rational",
3209 + "num-traits",
3210 + ]
3211 +
3212 + [[package]]
3213 + name = "num-bigint"
3214 + version = "0.4.8"
3215 + source = "registry+https://github.com/rust-lang/crates.io-index"
3216 + checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367"
3217 + dependencies = [
3218 + "num-integer",
3219 + "num-traits",
3220 + ]
3221 +
3222 + [[package]]
2979 3223 name = "num-bigint-dig"
2980 3224 version = "0.8.6"
2981 3225 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2992,6 +3236,15 @@ dependencies = [
2992 3236 ]
2993 3237
2994 3238 [[package]]
3239 + name = "num-complex"
3240 + version = "0.4.6"
3241 + source = "registry+https://github.com/rust-lang/crates.io-index"
3242 + checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
3243 + dependencies = [
3244 + "num-traits",
3245 + ]
3246 +
3247 + [[package]]
2995 3248 name = "num-conv"
2996 3249 version = "0.2.0"
2997 3250 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3018,6 +3271,17 @@ dependencies = [
3018 3271 ]
3019 3272
3020 3273 [[package]]
3274 + name = "num-rational"
3275 + version = "0.4.2"
3276 + source = "registry+https://github.com/rust-lang/crates.io-index"
3277 + checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
3278 + dependencies = [
3279 + "num-bigint",
3280 + "num-integer",
3281 + "num-traits",
3282 + ]
3283 +
3284 + [[package]]
3021 3285 name = "num-traits"
3022 3286 version = "0.2.19"
3023 3287 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3075,7 +3339,7 @@ version = "0.3.2"
3075 3339 source = "registry+https://github.com/rust-lang/crates.io-index"
3076 3340 checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c"
3077 3341 dependencies = [
3078 - "bitflags 2.10.0",
3342 + "bitflags 2.13.1",
3079 3343 "block2",
3080 3344 "libc",
3081 3345 "objc2",
@@ -3096,7 +3360,7 @@ version = "0.3.2"
3096 3360 source = "registry+https://github.com/rust-lang/crates.io-index"
3097 3361 checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c"
3098 3362 dependencies = [
3099 - "bitflags 2.10.0",
3363 + "bitflags 2.13.1",
3100 3364 "objc2",
3101 3365 "objc2-foundation",
3102 3366 ]
@@ -3107,7 +3371,7 @@ version = "0.3.2"
3107 3371 source = "registry+https://github.com/rust-lang/crates.io-index"
3108 3372 checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa"
3109 3373 dependencies = [
3110 - "bitflags 2.10.0",
3374 + "bitflags 2.13.1",
3111 3375 "objc2",
Lines truncated
M Cargo.toml +1 -1
@@ -37,7 +37,7 @@ base64 = "0.22"
37 37 rand = "0.10"
38 38
39 39 # Keychain access
40 - keyring = { version = "3", features = ["apple-native", "linux-native", "windows-native"] }
40 + keyring = { version = "4" }
41 41
42 42 # Concurrency
43 43 parking_lot = "0.12"