diff --git a/contrib/textmate/Factor.tmbundle/Syntaxes/Factor.tmLanguage b/contrib/textmate/Factor.tmbundle/Syntaxes/Factor.tmLanguage
new file mode 100644
index 0000000000..5b01909a04
--- /dev/null
+++ b/contrib/textmate/Factor.tmbundle/Syntaxes/Factor.tmLanguage
@@ -0,0 +1,95 @@
+
+
+
+
+ fileTypes
+
+ factor
+
+ foldingStartMarker
+ ^\s*(M|C)?:|#(V|H|C)\{
+ foldingStopMarker
+ ^\s*$
+ keyEquivalent
+ ^~F
+ name
+ Factor
+ patterns
+
+
+ captures
+
+ 3
+
+ name
+ keyword.colon.factor
+
+ 4
+
+ name
+ keyword.colon.factor
+
+ 5
+
+ name
+ keyword.colon.factor
+
+ 6
+
+ name
+ entity.name.class.factor
+
+ 7
+
+ name
+ comment.stack-effect.factor
+
+
+ match
+ ^(((M:)\s+[^\s]+)|(:)|(C:))\s*([^\s]+)\s*(\(\s.*\))?
+ name
+ definition.word.factor
+
+
+ match
+ \b(drop|2drop|3drop|nip|2nip|dup|2dup|3dup|dupd|over|pick|tuck|swap|rot|-rot|2swap|swapd|>r|r>)\b
+ name
+ keyword.control.stack.factor
+
+
+ match
+ \b(f|t)\b
+ name
+ constant.language.factor
+
+
+ begin
+ "
+ end
+ "
+ name
+ string.quoted.double.factor
+
+
+ begin
+ #!|!
+ end
+ $
+ name
+ comment.line.factor
+
+
+ begin
+ \(\s+
+ end
+ \s+\)
+ name
+ comment.parens.factor
+
+
+ scopeName
+ source.factor
+ uuid
+ 3C9C9C2A-314A-475B-A4E4-A68BAAF3F36E
+
+
diff --git a/contrib/textmate/Factor.tmbundle/info.plist b/contrib/textmate/Factor.tmbundle/info.plist
new file mode 100644
index 0000000000..8def3807d7
--- /dev/null
+++ b/contrib/textmate/Factor.tmbundle/info.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ name
+ Factor
+ uuid
+ 8061D2F3-B603-411D-AFFE-61784A07906D
+
+