diff --git a/README.md b/README.md
index 0cd9ac7..a17c3fc 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,95 @@
-# Classy
+# nvim-classy
+nvim-classy hides your HTML `class` attributes so your code goes from looking
+like this:
+```html
+
+```
+to this:
+```html
+
+```
+Of course, when you put your cursor on one of lines, the `"."`s will expand
+into their normal form.
+
+Multiple filetypes are supported and its incredibly easy to configure your own!
+
+This plugin was heavily inspired by the VSCode plugin,
+[Inline Fold](https://github.com/moalamri/vscode-inline-fold).
+
+## Installation
+Install with your favorite package manager!
+
+For example, with [packer.nvim](https://github.com/wbthomason/packer.nvim):
+```lua
+use {
+ 'dzfrias/nvim-classy',
+ requires = 'nvim-treesitter/nvim-treesitter',
+}
+```
+This plugin has out-of-the-box configuration, so just install it and it should
+work!
+
+### Treesitter
+It will not work without
+[nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter) and the
+appropriate grammar must be installed.
+
+For example, to use it with HTML, make sure treesitter is installed and run
+`:TSInstall html`.
+
+## Commands
+nvim-classy has two main commands:
+- `:ClassyConceal`
+- `:ClassyUnconceal`
+
+These commands allow for fine-grained control over the plugin.
+
+### ClassyConceal
+ClassyConceal turns on concealing for the current file. It is updated every
+time the buffer is modified. This is run automatically by classy if the
+`auto_start` option is set to `true` (the default).
+
+### ClassyUnconceal
+This command wipes every conceal set by nvim-classy from the buffer.
+
+## Configuration
+The behavior of nvim-classy can be fully customized.
+
+Here are the available options and their default values:
+```lua
+{
+ conceal_char = ".",
+ conceal_hl_group = "",
+ filetypes = {
+ html = [[ ((attribute_name) @attr_name (#eq? @attr_name "class") (quoted_attribute_value (attribute_value) @attr_value)) ]],
+ javascript = [[
+ ;; jsx
+ ((property_identifier) @attr_name (#eq? @attr_name "class") [(jsx_expression (_)?) (string)] @attr_value) ]],
+ svelte = [[ ((attribute_name) @attr_name (#eq? @attr_name "class") (quoted_attribute_value (attribute_value) @attr_value)) ]],
+ },
+ auto_start = true,
+}
+```
+**conceal_char**:
+The character to conceal the classes. Note that this can only be a single
+character due to the limitations of nvim, so setting it to a string will use
+the first character.
+
+**conceal_hl_group**:
+The highlight group of the conceal character. Set it to `string` if you'd like
+the `conceal_char` to be the same color as the expanded classes.
+
+**filetypes**:
+Contains queries of the filetypes that classy supports. To write your own, make
+sure to include an `@attr_value` capture so classy knows what to conceal!
+Make sure to read about writing treesitter queries!
+
+**auto_start**:
+If `true`, runs `:ClassyConceal` when you start editing the file.
+
+## License
+This plugin is licensed under the MIT license.