diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index caf5d525..c166af29 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -120,6 +120,7 @@
 | v | ✓ |  |  | `vls` |
 | vala | ✓ |  |  | `vala-language-server` |
 | verilog | ✓ | ✓ |  | `svlangserver` |
+| vhs | ✓ |  |  |  |
 | vue | ✓ |  |  | `vls` |
 | wast | ✓ |  |  |  |
 | wat | ✓ |  |  |  |
diff --git a/languages.toml b/languages.toml
index 0a87fad2..c5c45afc 100644
--- a/languages.toml
+++ b/languages.toml
@@ -1872,3 +1872,16 @@ formatter = { command = "dfmt" }
 [[grammar]]
 name = "d"
 source = { git = "https://github.com/gdamore/tree-sitter-d", rev="601c4a1e8310fb2f3c43fa8a923d0d27497f3c04" }
+
+[[language]]
+name = "vhs"
+scope = "source.vhs"
+file-types = ["tape"]
+roots = []
+comment-token = "#"
+indent = { tab-width = 2, unit = "  " }
+grammar = "vhs"
+
+[[grammar]]
+name = "vhs"
+source = { git = "https://github.com/charmbracelet/tree-sitter-vhs", rev = "c6d81f34c011c29ee86dd73b45a8ecc9f2e2bdaf" }
diff --git a/runtime/queries/vhs/highlights.scm b/runtime/queries/vhs/highlights.scm
new file mode 100644
index 00000000..9a2d05cf
--- /dev/null
+++ b/runtime/queries/vhs/highlights.scm
@@ -0,0 +1,36 @@
+[ 
+  "Output"
+  "Backspace"
+  "Down"
+  "Enter"
+  "Escape"
+  "Left"
+  "Right"
+  "Space"
+  "Tab"
+  "Up"
+  "Set"
+  "Type"
+  "Sleep"
+  "Hide"
+  "Show" ] @keyword
+
+[ "FontFamily"
+  "FontSize"
+  "Framerate"
+  "Height"
+  "LetterSpacing"
+  "TypingSpeed"
+  "LineHeight"
+  "Padding"
+  "Theme"
+  "Width" ] @type
+
+[ "@" ] @operator
+(control) @function.macro
+(float) @constant.numeric.float
+(integer) @constant.numeric.integer
+(comment) @comment
+(path) @string.special.path
+[(string) (json)] @string
+(time) @string.special.symbol
\ No newline at end of file