diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,7 +8,11 @@
 
 - Awesome upcoming features!
 
-## 0.1.0.3 - Restrict `crypton <1.1.0` - 2026-08-03
+## 0.1.0.4 - Unlash `crypton` - 2026-06-25
+
+- No longer restrict transient dependency `crypton`.
+
+## 0.1.0.3 - Restrict `crypton <1.1.0` - 2026-03-08
 
 - Restrict `crypton <1.1.0`.
 
diff --git a/test/TypesSpec.hs b/test/TypesSpec.hs
--- a/test/TypesSpec.hs
+++ b/test/TypesSpec.hs
@@ -46,8 +46,8 @@
 prop_identity :: StatePatch -> Bool
 prop_identity a = mempty <> a == a && a <> mempty == a
 
-prop :: StateComplete -> StatePatch -> Bool
-prop c p = c == append c (diff (append c p) c)
+prop_appendInverse :: StateComplete -> StatePatch -> Bool
+prop_appendInverse c p = c == append c (diff (append c p) c)
 
 prop_appendIdentity :: StateComplete -> Bool
 prop_appendIdentity c = append c mempty == c
@@ -81,8 +81,8 @@
         let complete :: StateComplete = State True 255 0 0 0 (Nightlight False 0 0 0 0) 0 0 []
         let patch :: StatePatch = (mempty :: StatePatch) { stateSeg = Just [(mempty :: SegmentPatch) { segmentBri = Just 255 }] }
         append complete patch `shouldBe` complete
-      it "append/diff" $
-        property prop
+      it "diff generates an inverse patch that applied with append reverses the original patch" $
+        property prop_appendInverse
       it "delete_segments" $ do
         let c1 :: StateComplete = State {stateOn = False, stateBri = 1, stateTransition = 1, statePs = 1, statePl = 0, stateNl = Nightlight {nightlightOn = True, nightlightDur = 0, nightlightMode = -1, nightlightTbri = -1, nightlightRem = -1}, stateLor = 0, stateMainseg = -1, stateSeg = [Segment {segmentId = 0, segmentStart = 1, segmentStop = -1, segmentLen = -1, segmentGrp = 0, segmentSpc = 1, segmentOf = 0, segmentOn = True, segmentFrz = True, segmentBri = -1, segmentCct = 1, segmentSet = 0, segmentCol = [], segmentFx = 0, segmentSx = 1, segmentIx = -1, segmentPal = 0, segmentC1 = 0, segmentC2 = -1, segmentC3 = 0, segmentSel = False, segmentRev = False, segmentMi = False, segmentO1 = False, segmentO2 = True, segmentO3 = False, segmentSi = -1, segmentM12 = -1}]}
         let c2 :: StateComplete = State {stateOn = False, stateBri = 1, stateTransition = 1, statePs = 1, statePl = 0, stateNl = Nightlight {nightlightOn = True, nightlightDur = 0, nightlightMode = -1, nightlightTbri = -1, nightlightRem = -1}, stateLor = 0, stateMainseg = -1, stateSeg = []}
diff --git a/wled-json.cabal b/wled-json.cabal
--- a/wled-json.cabal
+++ b/wled-json.cabal
@@ -1,11 +1,11 @@
 cabal-version: 2.2
 
--- This file has been generated from package.yaml by hpack version 0.39.1.
+-- This file has been generated from package.yaml by hpack version 0.39.6.
 --
 -- see: https://github.com/sol/hpack
 
 name:           wled-json
-version:        0.1.0.3
+version:        0.1.0.4
 synopsis:       Convenient interface for interacting with WLED devices
 description:    Please see the README on GitHub at <https://github.com/alaendle/wled-json#readme>
 category:       Interfaces
@@ -23,7 +23,8 @@
   , GHC == 9.6.7
   , GHC == 9.8.4
   , GHC == 9.10.3
-  , GHC == 9.12.2
+  , GHC == 9.12.4
+  , GHC == 9.14.1
 extra-source-files:
     README.md
 extra-doc-files:
@@ -48,19 +49,13 @@
       src
   ghc-options: -O0 -Weverything -Wno-unsafe -Wno-missing-import-lists -Wno-prepositive-qualified-module -Wno-implicit-prelude -Wno-missing-safe-haskell-mode -Wno-safe -Wno-missing-role-annotations
   build-depends:
-      aeson >=2.2.3 && <2.3
+      aeson >=2.2.3 && <2.4
     , barbies >=2.0.5 && <2.2
     , base >=4.7 && <5
     , bytestring >=0.11.5.3 && <0.13
     , deriving-aeson >=0.2.9 && <0.3
     , http-conduit >=2.3.9.1 && <2.4
   default-language: Haskell2010
-  if impl(ghc < 9.6)
-    build-depends:
-        crypton-x509-store <1.6.12
-  else
-    build-depends:
-        crypton <1.1.0
 
 executable wled-json-demo
   main-is: Main.hs
@@ -76,6 +71,10 @@
     , rhine >=1.4.0.1 && <1.7
     , wled-json
   default-language: Haskell2010
+  if impl(ghc > 9.12)
+    build-depends:
+        semialign <1.4
+  else
 
 executable wled-json-simple
   main-is: Main.hs
