diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,20 @@
+Copyright (c) 2016 David Reaver
+Copyright (c) 2022 Markus Schirp
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/gen/Stratosphere/DSQL/Cluster.hs b/gen/Stratosphere/DSQL/Cluster.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DSQL/Cluster.hs
@@ -0,0 +1,68 @@
+module Stratosphere.DSQL.Cluster (
+        module Exports, Cluster(..), mkCluster
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DSQL.Cluster.MultiRegionPropertiesProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Cluster
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dsql-cluster.html>
+    Cluster {haddock_workaround_ :: (),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dsql-cluster.html#cfn-dsql-cluster-deletionprotectionenabled>
+             deletionProtectionEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dsql-cluster.html#cfn-dsql-cluster-kmsencryptionkey>
+             kmsEncryptionKey :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dsql-cluster.html#cfn-dsql-cluster-multiregionproperties>
+             multiRegionProperties :: (Prelude.Maybe MultiRegionPropertiesProperty),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dsql-cluster.html#cfn-dsql-cluster-tags>
+             tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCluster :: Cluster
+mkCluster
+  = Cluster
+      {haddock_workaround_ = (),
+       deletionProtectionEnabled = Prelude.Nothing,
+       kmsEncryptionKey = Prelude.Nothing,
+       multiRegionProperties = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties Cluster where
+  toResourceProperties Cluster {..}
+    = ResourceProperties
+        {awsType = "AWS::DSQL::Cluster", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DeletionProtectionEnabled"
+                              Prelude.<$> deletionProtectionEnabled,
+                            (JSON..=) "KmsEncryptionKey" Prelude.<$> kmsEncryptionKey,
+                            (JSON..=) "MultiRegionProperties"
+                              Prelude.<$> multiRegionProperties,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON Cluster where
+  toJSON Cluster {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DeletionProtectionEnabled"
+                 Prelude.<$> deletionProtectionEnabled,
+               (JSON..=) "KmsEncryptionKey" Prelude.<$> kmsEncryptionKey,
+               (JSON..=) "MultiRegionProperties"
+                 Prelude.<$> multiRegionProperties,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "DeletionProtectionEnabled" Cluster where
+  type PropertyType "DeletionProtectionEnabled" Cluster = Value Prelude.Bool
+  set newValue Cluster {..}
+    = Cluster {deletionProtectionEnabled = Prelude.pure newValue, ..}
+instance Property "KmsEncryptionKey" Cluster where
+  type PropertyType "KmsEncryptionKey" Cluster = Value Prelude.Text
+  set newValue Cluster {..}
+    = Cluster {kmsEncryptionKey = Prelude.pure newValue, ..}
+instance Property "MultiRegionProperties" Cluster where
+  type PropertyType "MultiRegionProperties" Cluster = MultiRegionPropertiesProperty
+  set newValue Cluster {..}
+    = Cluster {multiRegionProperties = Prelude.pure newValue, ..}
+instance Property "Tags" Cluster where
+  type PropertyType "Tags" Cluster = [Tag]
+  set newValue Cluster {..}
+    = Cluster {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DSQL/Cluster/EncryptionDetailsProperty.hs b/gen/Stratosphere/DSQL/Cluster/EncryptionDetailsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DSQL/Cluster/EncryptionDetailsProperty.hs
@@ -0,0 +1,55 @@
+module Stratosphere.DSQL.Cluster.EncryptionDetailsProperty (
+        EncryptionDetailsProperty(..), mkEncryptionDetailsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EncryptionDetailsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dsql-cluster-encryptiondetails.html>
+    EncryptionDetailsProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dsql-cluster-encryptiondetails.html#cfn-dsql-cluster-encryptiondetails-encryptionstatus>
+                               encryptionStatus :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dsql-cluster-encryptiondetails.html#cfn-dsql-cluster-encryptiondetails-encryptiontype>
+                               encryptionType :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dsql-cluster-encryptiondetails.html#cfn-dsql-cluster-encryptiondetails-kmskeyarn>
+                               kmsKeyArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEncryptionDetailsProperty :: EncryptionDetailsProperty
+mkEncryptionDetailsProperty
+  = EncryptionDetailsProperty
+      {haddock_workaround_ = (), encryptionStatus = Prelude.Nothing,
+       encryptionType = Prelude.Nothing, kmsKeyArn = Prelude.Nothing}
+instance ToResourceProperties EncryptionDetailsProperty where
+  toResourceProperties EncryptionDetailsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DSQL::Cluster.EncryptionDetails",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EncryptionStatus" Prelude.<$> encryptionStatus,
+                            (JSON..=) "EncryptionType" Prelude.<$> encryptionType,
+                            (JSON..=) "KmsKeyArn" Prelude.<$> kmsKeyArn])}
+instance JSON.ToJSON EncryptionDetailsProperty where
+  toJSON EncryptionDetailsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EncryptionStatus" Prelude.<$> encryptionStatus,
+               (JSON..=) "EncryptionType" Prelude.<$> encryptionType,
+               (JSON..=) "KmsKeyArn" Prelude.<$> kmsKeyArn]))
+instance Property "EncryptionStatus" EncryptionDetailsProperty where
+  type PropertyType "EncryptionStatus" EncryptionDetailsProperty = Value Prelude.Text
+  set newValue EncryptionDetailsProperty {..}
+    = EncryptionDetailsProperty
+        {encryptionStatus = Prelude.pure newValue, ..}
+instance Property "EncryptionType" EncryptionDetailsProperty where
+  type PropertyType "EncryptionType" EncryptionDetailsProperty = Value Prelude.Text
+  set newValue EncryptionDetailsProperty {..}
+    = EncryptionDetailsProperty
+        {encryptionType = Prelude.pure newValue, ..}
+instance Property "KmsKeyArn" EncryptionDetailsProperty where
+  type PropertyType "KmsKeyArn" EncryptionDetailsProperty = Value Prelude.Text
+  set newValue EncryptionDetailsProperty {..}
+    = EncryptionDetailsProperty {kmsKeyArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DSQL/Cluster/EncryptionDetailsProperty.hs-boot b/gen/Stratosphere/DSQL/Cluster/EncryptionDetailsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DSQL/Cluster/EncryptionDetailsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DSQL.Cluster.EncryptionDetailsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EncryptionDetailsProperty :: Prelude.Type
+instance ToResourceProperties EncryptionDetailsProperty
+instance Prelude.Eq EncryptionDetailsProperty
+instance Prelude.Show EncryptionDetailsProperty
+instance JSON.ToJSON EncryptionDetailsProperty
diff --git a/gen/Stratosphere/DSQL/Cluster/MultiRegionPropertiesProperty.hs b/gen/Stratosphere/DSQL/Cluster/MultiRegionPropertiesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DSQL/Cluster/MultiRegionPropertiesProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.DSQL.Cluster.MultiRegionPropertiesProperty (
+        MultiRegionPropertiesProperty(..), mkMultiRegionPropertiesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MultiRegionPropertiesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dsql-cluster-multiregionproperties.html>
+    MultiRegionPropertiesProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dsql-cluster-multiregionproperties.html#cfn-dsql-cluster-multiregionproperties-clusters>
+                                   clusters :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dsql-cluster-multiregionproperties.html#cfn-dsql-cluster-multiregionproperties-witnessregion>
+                                   witnessRegion :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMultiRegionPropertiesProperty :: MultiRegionPropertiesProperty
+mkMultiRegionPropertiesProperty
+  = MultiRegionPropertiesProperty
+      {haddock_workaround_ = (), clusters = Prelude.Nothing,
+       witnessRegion = Prelude.Nothing}
+instance ToResourceProperties MultiRegionPropertiesProperty where
+  toResourceProperties MultiRegionPropertiesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DSQL::Cluster.MultiRegionProperties",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Clusters" Prelude.<$> clusters,
+                            (JSON..=) "WitnessRegion" Prelude.<$> witnessRegion])}
+instance JSON.ToJSON MultiRegionPropertiesProperty where
+  toJSON MultiRegionPropertiesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Clusters" Prelude.<$> clusters,
+               (JSON..=) "WitnessRegion" Prelude.<$> witnessRegion]))
+instance Property "Clusters" MultiRegionPropertiesProperty where
+  type PropertyType "Clusters" MultiRegionPropertiesProperty = ValueList Prelude.Text
+  set newValue MultiRegionPropertiesProperty {..}
+    = MultiRegionPropertiesProperty
+        {clusters = Prelude.pure newValue, ..}
+instance Property "WitnessRegion" MultiRegionPropertiesProperty where
+  type PropertyType "WitnessRegion" MultiRegionPropertiesProperty = Value Prelude.Text
+  set newValue MultiRegionPropertiesProperty {..}
+    = MultiRegionPropertiesProperty
+        {witnessRegion = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DSQL/Cluster/MultiRegionPropertiesProperty.hs-boot b/gen/Stratosphere/DSQL/Cluster/MultiRegionPropertiesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DSQL/Cluster/MultiRegionPropertiesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DSQL.Cluster.MultiRegionPropertiesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MultiRegionPropertiesProperty :: Prelude.Type
+instance ToResourceProperties MultiRegionPropertiesProperty
+instance Prelude.Eq MultiRegionPropertiesProperty
+instance Prelude.Show MultiRegionPropertiesProperty
+instance JSON.ToJSON MultiRegionPropertiesProperty
diff --git a/stratosphere-dsql.cabal b/stratosphere-dsql.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-dsql.cabal
@@ -0,0 +1,75 @@
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.38.2.
+--
+-- see: https://github.com/sol/hpack
+
+name:           stratosphere-dsql
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS DSQL.
+description:    Integration into stratosphere to generate resources and properties for AWS DSQL
+category:       AWS, Cloud, DSQL
+stability:      experimental
+homepage:       https://github.com/mbj/stratosphere#readme
+bug-reports:    https://github.com/mbj/stratosphere/issues
+maintainer:     Markus Schirp
+license:        MIT
+license-file:   LICENSE.md
+build-type:     Simple
+
+source-repository head
+  type: git
+  location: https://github.com/mbj/stratosphere
+
+flag development
+  description: Run GHC with development flags
+  manual: True
+  default: False
+
+library
+  exposed-modules:
+      Stratosphere.DSQL.Cluster
+      Stratosphere.DSQL.Cluster.EncryptionDetailsProperty
+      Stratosphere.DSQL.Cluster.MultiRegionPropertiesProperty
+  other-modules:
+      Paths_stratosphere_dsql
+  hs-source-dirs:
+      gen
+  default-extensions:
+      DataKinds
+      DeriveGeneric
+      DerivingStrategies
+      DerivingVia
+      DuplicateRecordFields
+      FlexibleContexts
+      FlexibleInstances
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      LambdaCase
+      MultiParamTypeClasses
+      NoFieldSelectors
+      NoImplicitPrelude
+      NumericUnderscores
+      OverloadedLists
+      OverloadedRecordDot
+      OverloadedStrings
+      PolyKinds
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      Strict
+      TemplateHaskell
+      TupleSections
+      TypeApplications
+      TypeFamilies
+  ghc-options: -Wall -Wcompat -Widentities -Wimplicit-prelude -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-local-signatures -Wmissing-signatures -Wmonomorphism-restriction -Wredundant-constraints -fhide-source-paths -funbox-strict-fields -optP-Wno-nonportable-include-path -Wno-unused-imports
+  build-depends:
+      aeson ==2.*
+    , base >=4.8 && <4.22
+    , stratosphere ==1.0.0
+  default-language: Haskell2010
+  if flag(development)
+    ghc-options: -Werror
+  else
+    ghc-options: -Wwarn
