# MML - Metaverse Markup Language > MML is an open source system for building multi-user interactive 3D experiences on the web. It uses familiar HTML/JS patterns extended with 3D-specific elements. ## Docs - [Get Started](https://mml.io/docs/guides/get-started): Learn how to create and serve MML documents. - [Collision Events](https://mml.io/docs/guides/mml-collide-events-guide): Learn how to make MML content that can react to users colliding with it. - [Getting Started: Hosting the MML Starter Project](https://mml.io/docs/guides/mml-starter-project-hosting): Learn how to deploy the Starter Project. - [Getting Started: MML with React](https://mml.io/docs/guides/mml-with-react): Composability, reusability, and extensibility made easy. ## Elements Reference - [](https://mml.io/docs/reference/elements/m-group): The `m-group` element can contain other MML tags, allowing all of them to be transformed as single item. - [](https://mml.io/docs/reference/elements/m-cube): The `m-cube` element is a primitive 3D cube that can be coloured. It is often used for debugging or initial development purposes. - [](https://mml.io/docs/reference/elements/m-sphere): The `m-sphere` element is a primitive 3D sphere that can be coloured. It is often used for debugging or initial development purposes. - [](https://mml.io/docs/reference/elements/m-cylinder): The `m-cylinder` element is a primitive 3D cylinder that can be coloured. It is often used for debugging or initial development purposes. - [](https://mml.io/docs/reference/elements/m-light): The `m-light` element is a light that supports various types (e.g. `point`, `spotlight`) and can be coloured. - [](https://mml.io/docs/reference/elements/m-plane): The `m-plane` element is a primitive 3D plane that can be coloured. - [](https://mml.io/docs/reference/elements/m-model): The `m-model` element is a 3D model. It can be used to load and display various 3D model file formats, such as OBJ, FBX, or GLTF, depending on the rendering engine being used. The model can be positioned, rotated, and scaled within the 3D scene. It also supports animations. - [](https://mml.io/docs/reference/elements/m-animation): The `m-animation` element is used as a child of `m-model` or `m-character` elements to provide weighted animations. Multiple animations can be mixed together using their weight attributes. - [](https://mml.io/docs/reference/elements/m-character): The `m-character` element is a 3D character. It supports containing other `m-model` elements, allowing for composing a character from multiple models. - [](https://mml.io/docs/reference/elements/m-frame): The `m-frame` element is a 3D frame. It enables composing other MML documents into the document and transforming them as a unit. - [](https://mml.io/docs/reference/elements/m-audio): The `m-audio` element is used to play audio in a 3D scene. - [](https://mml.io/docs/reference/elements/m-image): The `m-image` element is used to display an image in a 3D scene. - [](https://mml.io/docs/reference/elements/m-video): The `m-video` element is used to display a video in a 3D scene. - [](https://mml.io/docs/reference/elements/m-label): The `m-label` element is used to display text on a plane in a 3D scene. - [](https://mml.io/docs/reference/elements/m-position-probe): The `m-position-probe` element is used to request the position of a user (either camera or avatar depending upon the experience). - [](https://mml.io/docs/reference/elements/m-prompt): The `m-prompt` element is used to request a string from the user when the element is clicked in a 3D scene. - [](https://mml.io/docs/reference/elements/m-link): The `m-link` element is used to open a web address when the element is clicked in a 3D scene. The web address is opened in a new tab or window depending on the client implementation. The `m-link` element has no visual representation in the scene; clicking children of element activates the link. - [](https://mml.io/docs/reference/elements/m-overlay): The `m-overlay` element is used to display a 2D element on top of the 3D scene. It is expected that the child elements to display in the overlay are SVG elements. Not all clients will support this element or choose to allow all documents to use it. - [](https://mml.io/docs/reference/elements/m-interaction): The `m-interaction` element is used to describe an action that a user can take at a point in 3D space. - [](https://mml.io/docs/reference/elements/m-chat-probe): The `m-chat-probe` element is used to receive messages from a chat system. Which chat system that is depends on the client implementation. - [](https://mml.io/docs/reference/elements/m-attr-anim): The `m-attr-anim` element is used to describe document time-synchronized changes to element attributes. - [](https://mml.io/docs/reference/elements/m-attr-lerp): The `m-attr-lerp` element is used to describe time-transitioned changes to element attributes. ## Events Reference - [ConnectionEvent](https://mml.io/docs/reference/events/ConnectionEvent): A class that extends Event | `Event`. - [MMLChatEvent](https://mml.io/docs/reference/events/MMLChatEvent): A class that extends Event | `Event`. - [MMLClickEvent](https://mml.io/docs/reference/events/MMLClickEvent): Received when a user clicks on a 3D object. - [MMLCollisionEndEvent](https://mml.io/docs/reference/events/MMLCollisionEndEvent): Received when a user stops colliding with an element. - [MMLCollisionMoveEvent](https://mml.io/docs/reference/events/MMLCollisionMoveEvent): Received when a user moves the collision point they are colliding at on an element. - [MMLCollisionStartEvent](https://mml.io/docs/reference/events/MMLCollisionStartEvent): Received when a user starts colliding with an element. - [MMLInteractionEvent](https://mml.io/docs/reference/events/MMLInteractionEvent): Received when a user interacts with an m-interaction. - [MMLPositionEnterEvent](https://mml.io/docs/reference/events/MMLPositionEnterEvent): Received when a user enters the range of an m-position-probe. - [MMLPositionLeaveEvent](https://mml.io/docs/reference/events/MMLPositionLeaveEvent): Received when a user leaves the range of an m-position-probe after having entered. - [MMLPositionMoveEvent](https://mml.io/docs/reference/events/MMLPositionMoveEvent): Received when a user moves after having entered the range of an m-position-probe. - [MMLPromptEvent](https://mml.io/docs/reference/events/MMLPromptEvent): Received when a user triggers a prompt with a value. - [RemoteEvent](https://mml.io/docs/reference/events/RemoteEvent): A class that extends Event | `Event`. ## Blog - [AI-Powered NPC with MML](https://mml.io/blog/ai-powered-npc): How to create an MML NPC powered by OpenAI in your virtual world. - [August 2023: React, Collision Events, and More](https://mml.io/blog/aug-2023): Check out what's been added since MML's initial release up to August 2023. - [Introducing MML](https://mml.io/blog/introducing-mml): MML: An Open Source Metaverse Markup Language for Multi-User Interactive 3D Experiences - [Live Streaming to the Metaverse](https://mml.io/blog/live-stream-to-the-metaverse): An easy way to have your live event in the Metaverse. ## Optional - [Examples](https://mml.io/examples): Interactive code examples - [GitHub](https://github.com/mml-io/mml): Source code and issues