# Slate > Slate is a monorepo divided up into multiple npm packages, so to install it you do: ## Pages - [Installing Slate](01-installing-slate.md): Slate is a monorepo divided up into multiple npm packages, so to install it you do: - [Interfaces](01-interfaces.md): Slate works with pure JSON objects. All it requires is that those JSON objects conform to certain interfaces. For exa... - [Adding Event Handlers](02-adding-event-handlers.md): Okay, so you've got Slate installed and rendered on the page, and when you type in it, you can see the changes reflec... - [Nodes](02-nodes.md): The most important types are the`Node`objects: - [Defining Custom Elements](03-defining-custom-elements.md): In our previous example, we started with a paragraph, but we never actually told Slate anything about the`paragraph`... - [Locations](03-locations.md): Locations are how you refer to specific places in the document when inserting, deleting, or doing anything else with ... - [Applying Custom Formatting](04-applying-custom-formatting.md): In the previous guide we learned how to create custom block types that render chunks of text inside different contain... - [Transforms](04-transforms.md): Slate's data structure is immutable, so you can't modify or delete nodes directly. Instead, Slate comes with a collec... - [Executing Commands](05-executing-commands.md): Up until now, everything we've learned has been about how to write one-off logic for your specific Slate editor. But ... - [Operations](05-operations.md): Operations are the granular, low-level actions that occur while invoking transforms. A single transform could result ... - [Commands](06-commands.md): While editing richtext content, your users will be doing things like inserting text, deleting text, splitting paragra... - [Saving to a Database](06-saving-to-a-database.md): Now that you've learned the basics of how to add functionality to the Slate editor, you might be wondering how you'd ... - [Editor](07-editor.md): All of the behaviors, content and state of a Slate editor is rolled up into a single, top-level`Editor`object. It h... - [Enabling Collaborative Editing](07-enabling-collaborative-editing.md): A common use case for text editors is collaborative editing, and the Slate editor was designed with this in mind. You... - [Plugins](08-plugins.md): You've already seen how the behaviors of Slate editors can be overridden. These overrides can also be packaged up int... - [Using the Bundled Source](08-using-the-bundled-source.md): For most folks, you'll want to install Slate via`npm`, in which case you can follow the regular [Installing Slate](h... - [Improving Performance](09-performance.md): When building a text editor, it's important for user interactions to take place without any noticeable delay. For sma... - [Rendering](09-rendering.md): One of the best parts of Slate is that it's built with React, so it fits right into your existing application. It doe... - [Serializing](10-serializing.md): Slate's data model has been built with serialization in mind. Specifically, its text nodes are defined in a way that ... - [Normalizing](11-normalizing.md): Slate editors can edit complex, nested data structures. And for the most part this is great. But in certain cases inc... - [TypeScript](12-typescript.md): Slate supports typing of one Slate document model (ie. one set of custom`Editor`,`Element`and`Text`types). If yo... - [Adding Event Handlers](adding-event-handlers.md): **Previous:**\ - [Applying Custom Formatting](applying-custom-formatting.md): **Previous:**\ - [Block](block.md): import { Block } from 'slate' - [Changelog](changelog.md): Since Slate is a monorepo with many packages that are versioned separately, we maintain a changelog for each individu... - [Commands & Queries](commands-and-queries.md): All commands to a Slate editor's value, whether it's the`selection`,`document`,`history`, etc. happen via "commands". - [Commands](commands.md): The core`Editor`ships with a bunch of built-in commands that provide common behaviors for rich text editors. - [Contributing](contributing.md): Want to contribute to Slate? That would be awesome! - [Data Model](data-model.md): Slate is based on an immutable data model that closely resembles the DOM. When you start using Slate, one of the most... - [Data](data.md): import { Data } from 'slate' - [Decoration](decoration.md): import { Decoration } from 'slate' - [Defining Custom Block Nodes](defining-custom-block-nodes.md): **Previous:**\ - [Document](document.md): import { Document } from 'slate' - [Editor](editor.md): import { Editor } from 'slate' - [Element](element.md): `Element`objects are a type of`Node`in a Slate document that contain other`Element`nodes or`Text`nodes. - [Event Handling](event-handling.md): By default, the`Editable`component comes with a set of event handlers that handle typical rich-text editing behavio... - [FAQ](faq.md): A series of common questions people have about Slate: - [Glossary](glossary.md): A glossary explaining the terms commonly used in Slate: - [HistoryEditor](history-editor.md): The`HistoryEditor`interface is added to the`Editor`when it is instantiated using the`withHistory`method. - [History](history.md): The`History`object contains the undo and redo history for the editor. - [Hooks](hooks.md): Get the current`composing`state of the editor. It deals with`compositionstart`,`compositionupdate`,`compositione... - [slate-hyperscript](index-1.md): import h from 'slate-hyperscript' - [slate-plain-serializer](index-2.md): import Plain from 'slate-plain-serializer' - [slate-prop-types](index-3.md): import Types from 'slate-prop-types' - [slate-html-serializer](index.md): import Html from 'slate-html-serializer' - [Inline](inline.md): import { Inline } from 'slate' - [Installing Slate](installing-slate.md): Slate is a monorepo divided up into multi npm packages, so to install it you do: - [Introduction](introduction.md): [Slate](http://slatejs.org) is a *completely* customizable framework for building rich text editors. - [Location](location.md): The Location interface is a union of the ways to refer to a specific location in a Slate document: paths, points or r... - [Location Types](locations.md): The`Location`interface is a union of the ways to refer to a specific location in a Slate document: paths, points or... - [Mark](mark.md): import { Mark } from 'slate' - [NodeEntry](node-entry.md): `NodeEntry`objects are returned when iterating over the nodes in a Slate document tree. They consist of an array wit... - [Node](node.md): `Node`is not a publicly accessible module, but instead an interface that [`Document`](https://docs.slatejs.org/v0.47... - [Node Types](nodes.md): The`Node`union type represents all of the different types of nodes that occur in a Slate document tree. - [Operation](operation.md): An operation is the lowest-level description of a specific change to a part of Slate's value. They are designed to be... - [Operation Types](operations.md): `Operation`objects define the low-level instructions that Slate editors use to apply changes to their internal state... - [PathRef](path-ref.md): `PathRef`objects keep a specific path in a document synced over time as new operations are applied to the editor. It... - [Path](path.md): `Path`arrays are a list of indexes that describe a node's exact position in a Slate node tree. Although they are usu... - [Plugins](plugins.md): With Slate, *all* of your editor's logic is controlled by "plugins". - [PointEntry](point-entry.md): `PointEntry`objects are returned when iterating over`Point`objects that belong to a range. - [PointRef](point-ref.md): `PointRef`objects keep a specific point in a document synced over time as new operations are applied to the editor. ... - [Point](point.md): import { Point } from 'slate' - [RangeRef](range-ref.md): `RangeRef`objects keep a specific range in a document synced over time as new operations are applied to the editor. ... - [Range](range.md): import { Range } from 'slate' - [ReactEditor](react-editor.md): `ReactEditor`is added to`Editor`when it is instantiated using the`withReact`method. - [Rendering](rendering.md): One of the best parts of Slate is that it's built with React, so it fits right into your existing application. It doe... - [Resources](resources.md): A few resources that are helpful for building with Slate. - [Saving and Loading HTML Content](saving-and-loading-html-content.md): **Previous:**\ - [Saving to a Database](saving-to-a-database.md): **Previous:**\ - [Schema](schema.md): Every Slate editor has a "schema" associated with it, which contains information about the structure of its content. ... - [Schemas](schemas.md): One of Slate's principles is that it doesn't assume anything about the type of content you're building an editor for.... - [Scrubber](scrubber.md): When Slate throws an exception, it includes a stringified representation of the relevant data. For example, if your a... - [Selection](selection.md): import { Selection } from 'slate' - [Slate History](slate-history.md): This sub-library tracks changes to the Slate value state over time, and enables undo and redo functionality. - [Slate Hyperscript](slate-hyperscript.md): This package contains a hyperscript helper for creating Slate documents with JSX! - [Slate React](slate-react.md): This sub-library contains the React-specific logic for Slate. - [Slate Component](slate.md): The`Slate`component must include somewhere in its`children`the`Editable`component. - [Span](span.md): A`Span`is a low-level way to refer to a`Range`using`Element`as the end points instead of a`Point`which requir... - [Text](text.md): import { Text } from 'slate' - [Transforms](transforms.md): Transforms are helper functions operating on the document. They can be used in defining your own commands. - [Introduction](undefined.md): [Slate](http://slatejs.org) is a *completely* customizable framework for building rich text editors. - [Using Plugins](using-plugins.md): **Previous:**\ - [Utils](utils.md): import { KeyUtils } from 'slate' - [Value](value.md): import { Value } from 'slate' - [withHistory](with-history.md): The`withHistory`plugin adds the`HistoryEditor`to an`Editor`instance and keeps track of the operation history of... - [withReact](with-react.md): Adds React and DOM specific behaviors to the editor. - [Migrating](xx-migrating.md): Migrating from earlier versions of Slate to the`0.50.x`versions is not a simple task. The entire framework was re-c...