# MMS > MMS (Minecraft Metascript) is a language for Minecraft Java Edition data packs and resource packs. Declarations such as `LootTable`, `Recipe` and `Function` compile to the JSON files and `.mcfunction` files the game reads. ## Start - [Getting started](https://minecraftmetascript.github.io/mms/docs/start/getting-started): MMS is a small language that compiles to Minecraft Java Edition data packs. You declare resources and functions in .mms files, and mms build writes the JSON and .mcfunction files. The target is Minecraft 26.3. - [Tutorial: a custom dimension](https://minecraftmetascript.github.io/mms/docs/start/tutorial-dimension): This tutorial builds a dimension of floating islands, step by step. The finished project is examples/sky-islands, split into dimension.mms, terrain.mms and visit.mms. In the web editor, open it from Examples. The tests build it on every change, so it stays in step with the language. ## Guides - [Writing resources](https://minecraftmetascript.github.io/mms/docs/guides/resources): Every JSON resource kind can be written as an object literal that mirrors the JSON. Two kinds of shorthand sit on top of that. - [Functions](https://minecraftmetascript.github.io/mms/docs/guides/functions): Function bodies and event hooks (OnLoad, OnTick, OnFirstJoin, OnRespawn, OnAdvancement) compile to .mcfunction files. - [Lint rules](https://minecraftmetascript.github.io/mms/docs/guides/lint): The engine lints every declaration that checks without errors. Findings appear in the editor, in mms check (hints only with -hints), and as LSP diagnostics with quick fixes. mms fix and the editor's "Fix all" (Ctrl/⌘+Alt+F) apply every safe fix. In the web editor, Ctrl/⌘+. lists the quick fixes at the cursor, and Format is Shift+Alt+F (⌘+Shift+I on macOS) or Ctrl/⌘+S. A safe fix never changes the generated pack. ## Concepts - [How functions compile](https://minecraftmetascript.github.io/mms/docs/concepts/how-functions-compile): What a function becomes in the data pack: where its values live, and how branches, loops and early exits turn into commands. You don't need this to write functions, but it helps when reading the generated .mcfunction files. ## Language - [Declarations](https://minecraftmetascript.github.io/mms/docs/reference/language/declarations): A file is a list of declarations. Each one starts with its kind, a PascalCase word, then its name: - [Values and types](https://minecraftmetascript.github.io/mms/docs/reference/language/values): Values look like the JSON they become, with less punctuation. Every value is checked against the type its place expects, and that type also decides what shorthand means there. - [Constants, templates and loops](https://minecraftmetascript.github.io/mms/docs/reference/language/reuse): Four tools cut repetition: const names a value, Template names a value with parameters, comprehensions build lists, and a top-level for repeats declarations. They all run at compile time and write nothing of their own: only the declarations that use them reach the pack. - [Blueprints](https://minecraftmetascript.github.io/mms/docs/reference/language/blueprints): A Blueprint declares a new kind of declaration. Its fields are checked and completed like the game's own, its check block reports problems, and its emit block writes the declarations it stands for. CustomItem, Book and JigsawStructure are Blueprints written this way, in the prelude: their pages under Declaration kinds list their fields. - [Functions](https://minecraftmetascript.github.io/mms/docs/reference/language/functions): A Function body is code that compiles to a .mcfunction file. It mixes raw commands, which start with /, with statements that compile to commands. The Functions guide explains each part at length, and How functions compile shows what it becomes. - [Text](https://minecraftmetascript.github.io/mms/docs/reference/language/text): Wherever the game takes a text component, a string is markup: a small Markdown-like format for Minecraft text. A string without markup is the same plain string in the output. - [Tests](https://minecraftmetascript.github.io/mms/docs/reference/language/tests): A Test runs functions in an interpreter, without starting the game, and checks what they did: ## Reference - [Declaration kinds](https://minecraftmetascript.github.io/mms/docs/reference/kinds): the 94 kinds a declaration can have, and the folder each writes to - [Book](https://minecraftmetascript.github.io/mms/docs/reference/kinds/Book): its fields, and what its name stands for - [CustomItem](https://minecraftmetascript.github.io/mms/docs/reference/kinds/CustomItem): its fields, and what its name stands for - [JigsawStructure](https://minecraftmetascript.github.io/mms/docs/reference/kinds/JigsawStructure): its fields, and what its name stands for - [Templates and forms](https://minecraftmetascript.github.io/mms/docs/reference/prelude): the prelude's templates and types, and what each operator means by type - [Helpers](https://minecraftmetascript.github.io/mms/docs/reference/helpers): 756 helpers in 54 groups, each building one typed object - [Types](https://minecraftmetascript.github.io/mms/docs/reference/types): named types that parameters refer to - [Lint rules](https://minecraftmetascript.github.io/mms/docs/reference/lint): the 18 lint rules and their default severities ## Optional - [Everything in one file](https://minecraftmetascript.github.io/mms/docs/llms-full.txt): every page and the whole reference as Markdown - [Reference as YAML](https://minecraftmetascript.github.io/mms/docs/reference.yaml): kinds, helpers, types and lint rules as data