diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 3f56dd60..28dfeb04 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -9,6 +9,7 @@
 | bicep | ✓ |  |  | `bicep-langserver` |
 | c | ✓ | ✓ | ✓ | `clangd` |
 | c-sharp | ✓ | ✓ |  | `OmniSharp` |
+| cabal | ✓ |  |  |  |
 | cairo | ✓ |  |  |  |
 | capnp | ✓ |  | ✓ |  |
 | clojure | ✓ |  |  | `clojure-lsp` |
diff --git a/languages.toml b/languages.toml
index 479777f9..e7c37499 100644
--- a/languages.toml
+++ b/languages.toml
@@ -2437,6 +2437,18 @@ language-server = { command = "nimlangserver" }
 name = "nim"
 source = { git = "https://github.com/aMOPel/tree-sitter-nim", rev = "240239b232550e431d67de250d1b5856209e7f06" }
 
+[[language]]
+name = "cabal"
+scope = "source.cabal"
+file-types = [ "cabal" ]
+roots = ["cabal.project", "Setup.hs"]
+indent = { tab-width = 2, unit = "  " }
+comment-token = "--"
+
+[[grammar]]
+name = "cabal"
+source = { git = "https://gitlab.com/magus/tree-sitter-cabal/", rev = "7d5fa6887ae05a0b06d046f1e754c197c8ad869b" }
+
 [[language]]
 name = "hurl"
 scope = "source.hurl"
@@ -2449,4 +2461,3 @@ indent = { tab-width = 2, unit = "  " }
 [[grammar]]
 name = "hurl"
 source = { git = "https://github.com/pfeiferj/tree-sitter-hurl", rev = "264c42064b61ee21abe88d0061f29a0523352e22" }
-
diff --git a/runtime/queries/cabal/highlights.scm b/runtime/queries/cabal/highlights.scm
new file mode 100644
index 00000000..d6b9f462
--- /dev/null
+++ b/runtime/queries/cabal/highlights.scm
@@ -0,0 +1,15 @@
+(comment) @comment
+
+[
+  "cabal-version"
+  (field_name)
+] @type
+
+(section_name) @type
+
+[
+  (section_type)
+  "if"
+  "elseif"
+  "else"
+] @keyword