diff --git a/package.json b/package.json
new file mode 100644
index 0000000..1339fad
--- /dev/null
+++ b/package.json
@@ -0,0 +1,69 @@
+{
+	"name": "embedded-string-highlighting",
+	"displayName": "fuck fuck fuck",
+	"description": "yeet",
+	"version": "0.0.1",
+	"engines": {
+		"vscode": "^1.98.0"
+	},
+	"categories": [
+		"Programming Languages"
+	],
+	"scripts": {
+		"build": "node build.mjs",
+		"build:watch": "nodemon -e js,mjs,cjs --exec npm run build"
+	},
+	"devDependencies": {
+		"dprint": "^0.49.0",
+		"js-yaml": "^4.1.0",
+		"nodemon": "^3.1.9",
+		"vscode-textmate": "^9.2.0"
+	},
+	"contributes": {
+		"grammars": [
+			{
+				"path": "./syntaxes/javascript.injection.json",
+				"scopeName": "embedded-string-highlighting.injection",
+				"injectTo": [
+					"source.js"
+				],
+				"embeddedLanguages": {
+					"meta.embedded.inline.javascript": "javascript",
+					"meta.embedded.block.javascript": "javascript",
+					"meta.embedded.inline.typescript": "typescript",
+					"meta.embedded.block.typescript": "typescript",
+					"meta.embedded.inline.javascriptreact": "javascriptreact",
+					"meta.embedded.block.javascriptreact": "javascriptreact",
+					"meta.embedded.inline.typescriptreact": "typescriptreact",
+					"meta.embedded.block.typescriptreact": "typescriptreact",
+					"meta.embedded.inline.json": "json",
+					"meta.embedded.block.json": "json",
+					"meta.embedded.inline.jsonc": "jsonc",
+					"meta.embedded.block.jsonc": "jsonc",
+					"meta.embedded.inline.jsonl": "jsonl",
+					"meta.embedded.block.jsonl": "jsonl",
+					"meta.embedded.inline.shellscript": "shellscript",
+					"meta.embedded.block.shellscript": "shellscript",
+					"meta.embedded.inline.rust": "rust",
+					"meta.embedded.block.rust": "rust",
+					"meta.embedded.inline.css": "css",
+					"meta.embedded.block.css": "css",
+					"meta.embedded.inline.scss": "scss",
+					"meta.embedded.block.scss": "scss",
+					"meta.embedded.inline.less": "less",
+					"meta.embedded.block.less": "less",
+					"meta.embedded.inline.html": "html",
+					"meta.embedded.block.html": "html",
+					"meta.embedded.inline.sql": "sql",
+					"meta.embedded.block.sql": "sql",
+					"meta.embedded.inline.markdown": "markdown",
+					"meta.embedded.block.markdown": "markdown",
+					"meta.embedded.inline.xml": "xml",
+					"meta.embedded.block.xml": "xml",
+					"meta.embedded.inline.yaml": "yaml",
+					"meta.embedded.block.yaml": "yaml"
+				}
+			}
+		]
+	}
+}
\ No newline at end of file
diff --git a/syntaxes/javascript.injection.json b/syntaxes/javascript.injection.json
new file mode 100644
index 0000000..f42a7ff
--- /dev/null
+++ b/syntaxes/javascript.injection.json
@@ -0,0 +1,450 @@
+{
+	"scopeName": "embedded-string-highlighting.injection",
+	"injectionSelector": "L:source.js -string -comment",
+	"repository": {
+		"tagged-template-literal-block-javascript": {
+			"begin": "(javascript|js)(`)",
+			"end": "`",
+			"beginCaptures": {
+				"1": {
+					"name": "entity.name.function.tagged-template.js entity.name.embedded-source"
+				},
+				"2": {
+					"name": "string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin"
+				}
+			},
+			"endCaptures": {
+				"0": {
+					"name": "string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end"
+				}
+			},
+			"contentName": "meta.embedded.block.javascript",
+			"patterns": [
+				{
+					"include": "source.js"
+				}
+			]
+		},
+		"tagged-template-literal-block-typescript": {
+			"begin": "(typescript|ts)(`)",
+			"end": "`",
+			"beginCaptures": {
+				"1": {
+					"name": "entity.name.function.tagged-template.js entity.name.embedded-source"
+				},
+				"2": {
+					"name": "string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin"
+				}
+			},
+			"endCaptures": {
+				"0": {
+					"name": "string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end"
+				}
+			},
+			"contentName": "meta.embedded.block.typescript",
+			"patterns": [
+				{
+					"include": "source.ts"
+				}
+			]
+		},
+		"tagged-template-literal-block-javascriptreact": {
+			"begin": "(javascriptreact|jsx)(`)",
+			"end": "`",
+			"beginCaptures": {
+				"1": {
+					"name": "entity.name.function.tagged-template.js entity.name.embedded-source"
+				},
+				"2": {
+					"name": "string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin"
+				}
+			},
+			"endCaptures": {
+				"0": {
+					"name": "string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end"
+				}
+			},
+			"contentName": "meta.embedded.block.javascriptreact",
+			"patterns": [
+				{
+					"include": "source.js.jsx"
+				}
+			]
+		},
+		"tagged-template-literal-block-typescriptreact": {
+			"begin": "(typescriptreact|tsx)(`)",
+			"end": "`",
+			"beginCaptures": {
+				"1": {
+					"name": "entity.name.function.tagged-template.js entity.name.embedded-source"
+				},
+				"2": {
+					"name": "string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin"
+				}
+			},
+			"endCaptures": {
+				"0": {
+					"name": "string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end"
+				}
+			},
+			"contentName": "meta.embedded.block.typescriptreact",
+			"patterns": [
+				{
+					"include": "source.tsx"
+				}
+			]
+		},
+		"tagged-template-literal-block-json": {
+			"begin": "(json)(`)",
+			"end": "`",
+			"beginCaptures": {
+				"1": {
+					"name": "entity.name.function.tagged-template.js entity.name.embedded-source"
+				},
+				"2": {
+					"name": "string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin"
+				}
+			},
+			"endCaptures": {
+				"0": {
+					"name": "string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end"
+				}
+			},
+			"contentName": "meta.embedded.block.json",
+			"patterns": [
+				{
+					"include": "source.json"
+				}
+			]
+		},
+		"tagged-template-literal-block-jsonc": {
+			"begin": "(jsonc)(`)",
+			"end": "`",
+			"beginCaptures": {
+				"1": {
+					"name": "entity.name.function.tagged-template.js entity.name.embedded-source"
+				},
+				"2": {
+					"name": "string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin"
+				}
+			},
+			"endCaptures": {
+				"0": {
+					"name": "string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end"
+				}
+			},
+			"contentName": "meta.embedded.block.jsonc",
+			"patterns": [
+				{
+					"include": "source.json.comments"
+				}
+			]
+		},
+		"tagged-template-literal-block-jsonl": {
+			"begin": "(jsonl)(`)",
+			"end": "`",
+			"beginCaptures": {
+				"1": {
+					"name": "entity.name.function.tagged-template.js entity.name.embedded-source"
+				},
+				"2": {
+					"name": "string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin"
+				}
+			},
+			"endCaptures": {
+				"0": {
+					"name": "string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end"
+				}
+			},
+			"contentName": "meta.embedded.block.jsonl",
+			"patterns": [
+				{
+					"include": "source.json.lines"
+				}
+			]
+		},
+		"tagged-template-literal-block-shellscript": {
+			"begin": "(shellscript|sh)(`)",
+			"end": "`",
+			"beginCaptures": {
+				"1": {
+					"name": "entity.name.function.tagged-template.js entity.name.embedded-source"
+				},
+				"2": {
+					"name": "string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin"
+				}
+			},
+			"endCaptures": {
+				"0": {
+					"name": "string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end"
+				}
+			},
+			"contentName": "meta.embedded.block.shellscript",
+			"patterns": [
+				{
+					"include": "source.shell"
+				}
+			]
+		},
+		"tagged-template-literal-block-rust": {
+			"begin": "(rust|rs)(`)",
+			"end": "`",
+			"beginCaptures": {
+				"1": {
+					"name": "entity.name.function.tagged-template.js entity.name.embedded-source"
+				},
+				"2": {
+					"name": "string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin"
+				}
+			},
+			"endCaptures": {
+				"0": {
+					"name": "string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end"
+				}
+			},
+			"contentName": "meta.embedded.block.rust",
+			"patterns": [
+				{
+					"include": "source.rust"
+				}
+			]
+		},
+		"tagged-template-literal-block-css": {
+			"begin": "(css)(`)",
+			"end": "`",
+			"beginCaptures": {
+				"1": {
+					"name": "entity.name.function.tagged-template.js entity.name.embedded-source"
+				},
+				"2": {
+					"name": "string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin"
+				}
+			},
+			"endCaptures": {
+				"0": {
+					"name": "string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end"
+				}
+			},
+			"contentName": "meta.embedded.block.css",
+			"patterns": [
+				{
+					"include": "source.css"
+				}
+			]
+		},
+		"tagged-template-literal-block-scss": {
+			"begin": "(scss)(`)",
+			"end": "`",
+			"beginCaptures": {
+				"1": {
+					"name": "entity.name.function.tagged-template.js entity.name.embedded-source"
+				},
+				"2": {
+					"name": "string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin"
+				}
+			},
+			"endCaptures": {
+				"0": {
+					"name": "string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end"
+				}
+			},
+			"contentName": "meta.embedded.block.scss",
+			"patterns": [
+				{
+					"include": "source.css.scss"
+				}
+			]
+		},
+		"tagged-template-literal-block-less": {
+			"begin": "(less)(`)",
+			"end": "`",
+			"beginCaptures": {
+				"1": {
+					"name": "entity.name.function.tagged-template.js entity.name.embedded-source"
+				},
+				"2": {
+					"name": "string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin"
+				}
+			},
+			"endCaptures": {
+				"0": {
+					"name": "string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end"
+				}
+			},
+			"contentName": "meta.embedded.block.less",
+			"patterns": [
+				{
+					"include": "source.css.less"
+				}
+			]
+		},
+		"tagged-template-literal-block-html": {
+			"begin": "(html)(`)",
+			"end": "`",
+			"beginCaptures": {
+				"1": {
+					"name": "entity.name.function.tagged-template.js entity.name.embedded-source"
+				},
+				"2": {
+					"name": "string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin"
+				}
+			},
+			"endCaptures": {
+				"0": {
+					"name": "string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end"
+				}
+			},
+			"contentName": "meta.embedded.block.html",
+			"patterns": [
+				{
+					"include": "text.html.derivative"
+				}
+			]
+		},
+		"tagged-template-literal-block-sql": {
+			"begin": "(sql)(`)",
+			"end": "`",
+			"beginCaptures": {
+				"1": {
+					"name": "entity.name.function.tagged-template.js entity.name.embedded-source"
+				},
+				"2": {
+					"name": "string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin"
+				}
+			},
+			"endCaptures": {
+				"0": {
+					"name": "string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end"
+				}
+			},
+			"contentName": "meta.embedded.block.sql",
+			"patterns": [
+				{
+					"include": "source.sql"
+				}
+			]
+		},
+		"tagged-template-literal-block-markdown": {
+			"begin": "(markdown|md)(`)",
+			"end": "`",
+			"beginCaptures": {
+				"1": {
+					"name": "entity.name.function.tagged-template.js entity.name.embedded-source"
+				},
+				"2": {
+					"name": "string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin"
+				}
+			},
+			"endCaptures": {
+				"0": {
+					"name": "string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end"
+				}
+			},
+			"contentName": "meta.embedded.block.markdown",
+			"patterns": [
+				{
+					"include": "text.html.markdown"
+				}
+			]
+		},
+		"tagged-template-literal-block-xml": {
+			"begin": "(xml)(`)",
+			"end": "`",
+			"beginCaptures": {
+				"1": {
+					"name": "entity.name.function.tagged-template.js entity.name.embedded-source"
+				},
+				"2": {
+					"name": "string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin"
+				}
+			},
+			"endCaptures": {
+				"0": {
+					"name": "string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end"
+				}
+			},
+			"contentName": "meta.embedded.block.xml",
+			"patterns": [
+				{
+					"include": "text.xml"
+				}
+			]
+		},
+		"tagged-template-literal-block-yaml": {
+			"begin": "(yaml)(`)",
+			"end": "`",
+			"beginCaptures": {
+				"1": {
+					"name": "entity.name.function.tagged-template.js entity.name.embedded-source"
+				},
+				"2": {
+					"name": "string.template.js punctuation.definition.string.template.begin.js punctuation.definition.embedded-source.begin"
+				}
+			},
+			"endCaptures": {
+				"0": {
+					"name": "string.template.js punctuation.definition.string.template.end.js punctuation.definition.embedded-source.end"
+				}
+			},
+			"contentName": "meta.embedded.block.yaml",
+			"patterns": [
+				{
+					"include": "source.yaml"
+				}
+			]
+		}
+	},
+	"patterns": [
+		{
+			"include": "#tagged-template-literal-block-javascript"
+		},
+		{
+			"include": "#tagged-template-literal-block-typescript"
+		},
+		{
+			"include": "#tagged-template-literal-block-javascriptreact"
+		},
+		{
+			"include": "#tagged-template-literal-block-typescriptreact"
+		},
+		{
+			"include": "#tagged-template-literal-block-json"
+		},
+		{
+			"include": "#tagged-template-literal-block-jsonc"
+		},
+		{
+			"include": "#tagged-template-literal-block-jsonl"
+		},
+		{
+			"include": "#tagged-template-literal-block-shellscript"
+		},
+		{
+			"include": "#tagged-template-literal-block-rust"
+		},
+		{
+			"include": "#tagged-template-literal-block-css"
+		},
+		{
+			"include": "#tagged-template-literal-block-scss"
+		},
+		{
+			"include": "#tagged-template-literal-block-less"
+		},
+		{
+			"include": "#tagged-template-literal-block-html"
+		},
+		{
+			"include": "#tagged-template-literal-block-sql"
+		},
+		{
+			"include": "#tagged-template-literal-block-markdown"
+		},
+		{
+			"include": "#tagged-template-literal-block-xml"
+		},
+		{
+			"include": "#tagged-template-literal-block-yaml"
+		}
+	]
+}
\ No newline at end of file