diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,5 +1,8 @@
 # Change log for esqueleto-postgis project
 
+## Version 2.2.0 
+* add st_dwithin to find stuf within a range
+
 ## Version 2.1.0 
 * add st_unions
 
diff --git a/Readme.md b/Readme.md
--- a/Readme.md
+++ b/Readme.md
@@ -1,5 +1,5 @@
 [![https://jappieklooster.nl](https://img.shields.io/badge/blog-jappieklooster.nl-lightgrey)](https://jappieklooster.nl/tag/haskell.html)
-[![Githbu actions build status](https://img.shields.io/github/workflow/status/jappeace/esqueleto-postgis/Test)](https://github.com/jappeace/esqueleto-postgis/actions)
+[![Github actions build status](https://img.shields.io/github/actions/workflow/status/jappeace/esqueleto-postgis/nix.yaml?branch=master)](https://github.com/jappeace/esqueleto-postgis/actions)
 [![Jappiejappie](https://img.shields.io/badge/discord-jappiejappie-black?logo=discord)](https://discord.gg/Hp4agqy)
 [![Hackage version](https://img.shields.io/hackage/v/esqueleto-postgis.svg?label=Hackage)](https://hackage.haskell.org/package/esqueleto-postgis) 
 
diff --git a/esqueleto-postgis.cabal b/esqueleto-postgis.cabal
--- a/esqueleto-postgis.cabal
+++ b/esqueleto-postgis.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           esqueleto-postgis
-version:        2.1.0
+version:        2.2.0
 homepage:       https://github.com/jappeace/esqueleto-postgis#readme
 bug-reports:    https://github.com/jappeace/esqueleto-postgis/issues
 author:         Jappie Klooster
diff --git a/src/Database/Esqueleto/Postgis.hs b/src/Database/Esqueleto/Postgis.hs
--- a/src/Database/Esqueleto/Postgis.hs
+++ b/src/Database/Esqueleto/Postgis.hs
@@ -14,6 +14,7 @@
     st_intersects,
     st_union,
     st_unions,
+    st_dwithin,
 
     -- * points
     point,
@@ -247,6 +248,17 @@
   SqlExpr (Value Bool)
 st_contains a b = unsafeSqlFunction "ST_CONTAINS" (a, b)
 
+-- | Returns true if the geometries are within a given distance
+--   https://postgis.net/docs/ST_DWithin.html
+st_dwithin ::
+  -- | geometry g1
+  SqlExpr (Value (PostgisGeometry a)) ->
+  -- | geometry g2
+  SqlExpr (Value (PostgisGeometry a)) ->
+  -- | distance of srid
+  SqlExpr (Value Double) ->
+  SqlExpr (Value Bool)
+st_dwithin a b c = unsafeSqlFunction "ST_DWithin" (a, b, c)
 
 -- | allows union of geometries, eg group a bunch together,
 --   https://postgis.net/docs/ST_Union.html
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -275,7 +275,35 @@
                   where_ $ (unit ^. UnitGeom) `st_intersects` (val $ unValue combined)
                 pure unit
 
-            entityVal <$> result @?= [Unit {unitGeom = Point (PointXY {_xyX = 1.0, _xyY = 1.0})}, Unit {unitGeom = Point (PointXY {_xyX = 1.0, _xyY = 2.0})}, Unit {unitGeom = Point (PointXY {_xyX = 2.0, _xyY = 2.0})}]
+            entityVal <$> result @?= [Unit {unitGeom = Point (PointXY {_xyX = 1.0, _xyY = 1.0})}, Unit {unitGeom = Point (PointXY {_xyX = 1.0, _xyY = 2.0})}, Unit {unitGeom = Point (PointXY {_xyX = 2.0, _xyY = 2.0})}],
+          testCase ("st_dwithin finds it wihtin range") $ do
+            result <- runDB $ do
+              _ <-
+                insert $
+                  Unit
+                    { unitGeom = point 1 1
+                    }
+
+              select $ do
+                unit <- from $ table @Unit
+                where_ $ st_dwithin (unit ^. UnitGeom) (st_point (val 1) (val 0)) (val 1)
+                pure unit
+
+            entityVal <$> result @?= [Unit {unitGeom = Point (PointXY {_xyX = 1.0, _xyY = 1.0})} ],
+          testCase ("st_dwithin doesn't finds it out range") $ do
+            result <- runDB $ do
+              _ <-
+                insert $
+                  Unit
+                    { unitGeom = point 1 1
+                    }
+
+              select $ do
+                unit <- from $ table @Unit
+                where_ $ st_dwithin (unit ^. UnitGeom) (st_point (val 2) (val 0)) (val 1)
+                pure unit
+
+            entityVal <$> result @?= []
         ]
     ]
 
