diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index ef3c9451..7292b61b 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -50,6 +50,7 @@
 | mint |  |  |  | `mint` |
 | nickel | ✓ |  | ✓ | `nls` |
 | nix | ✓ |  | ✓ | `rnix-lsp` |
+| nu | ✓ |  |  |  |
 | ocaml | ✓ |  | ✓ | `ocamllsp` |
 | ocaml-interface | ✓ |  |  | `ocamllsp` |
 | org | ✓ |  |  |  |
diff --git a/languages.toml b/languages.toml
index 76b4ca16..3b2eedf2 100644
--- a/languages.toml
+++ b/languages.toml
@@ -1210,3 +1210,16 @@ indent = { tab-width = 4, unit = "    " }
 [[grammar]]
 name = "gdscript"
 source = { git = "https://github.com/PrestonKnopp/tree-sitter-gdscript", rev = "2a6abdaa47fcb91397e09a97c7433fd995ea46c6" }
+
+[[language]]
+name = "nu"
+scope = "source.nu"
+injection-regex = "nu"
+file-types = ["nu"]
+roots = []
+comment-token = "#"
+indent = { tab-width = 2, unit = "  " }
+
+[[grammar]]
+name = "nu"
+source = { git = "https://github.com/LhKipp/tree-sitter-nu", rev = "db4e990b78824c8abef3618e0f93b7fe1e8f4c0d" }
diff --git a/runtime/queries/nu/folds.scm b/runtime/queries/nu/folds.scm
new file mode 100644
index 00000000..f6b5acb1
--- /dev/null
+++ b/runtime/queries/nu/folds.scm
@@ -0,0 +1,4 @@
+[
+  (function_definition)
+  (block)
+] @fold
diff --git a/runtime/queries/nu/highlights.scm b/runtime/queries/nu/highlights.scm
new file mode 100644
index 00000000..b643a63a
--- /dev/null
+++ b/runtime/queries/nu/highlights.scm
@@ -0,0 +1,55 @@
+(string) @string
+(type) @type
+(value_path) @variable
+(comment) @comment
+
+(number_literal) @constant.numeric
+(range from: (number_literal) @constant.numeric)
+(range to: (number_literal) @constant.numeric)
+
+(command cmd_name: (identifier) @function)
+(function_definition func_name: (identifier) @function)
+
+[
+    (variable_declaration name: (identifier))
+    (parameter (identifier))
+    (flag (flag_name))
+    (flag (flag_shorthand_name))
+    (record_entry entry_name: (identifier))
+    (block_args block_param: (identifier))
+] @variable.other.member
+; (parameter (identifier) @variable.parameter) ; -- alternative highlighting group?
+
+(cmd_invocation) @embedded
+
+
+((identifier) @constant
+ (#match? @constant "^[A-Z][A-Z\\d_]*$"))
+
+[
+ "if"
+ "else"
+ "let"
+ "def"
+ "export"
+] @keyword
+
+[
+  ; "/" Not making / an operator may lead to better highlighting?
+  "$"
+  "|"
+  "+"
+  "-"
+  "*"
+  "="
+  "!="
+  "&&"
+  "||"
+  "=="
+  ">"
+] @operator
+
+["."
+ "," 
+ ";" 
+] @punctuation.delimiter
diff --git a/runtime/queries/nu/injections.scm b/runtime/queries/nu/injections.scm
new file mode 100644
index 00000000..321c90ad
--- /dev/null
+++ b/runtime/queries/nu/injections.scm
@@ -0,0 +1,2 @@
+((comment) @injection.content
+ (#set! injection.language "comment"))
diff --git a/runtime/queries/nu/locals.scm b/runtime/queries/nu/locals.scm
new file mode 100644
index 00000000..2a341f80
--- /dev/null
+++ b/runtime/queries/nu/locals.scm
@@ -0,0 +1,13 @@
+; Scopes
+(function_definition) @scope
+
+; Definitions
+(variable_declaration 
+  name: (identifier) @definition.var)
+
+(function_definition
+  func_name: (identifier) @definition.function)
+
+; References
+(value_path) @reference
+(word) @reference