downstage.nvim

March 29, 2026 ยท View on GitHub

Neovim plugin for the Downstage stage play markup language. Provides filetype detection, buffer settings, and LSP integration for .ds files.

Requires Neovim 0.11+ and the downstage binary on your PATH.

Installation

lazy.nvim

{ "jscaltreto/downstage.nvim", ft = "downstage" }

To limit nvim-cmp suggestions for Downstage buffers to LSP results only:

{
  "jscaltreto/downstage.nvim",
  ft = "downstage",
  opts = {
    cmp = true,
  },
}

Manual

Copy the contents of this repo into your Neovim config directory (~/.config/nvim/).

What's included

FilePurpose
ftdetect/downstage.luaRegisters .ds as the downstage filetype
ftplugin/downstage.luaBuffer settings: soft wrap, spell check, comment format
plugin/downstage.luaAuto-initializes the plugin with default settings
lua/downstage/init.luaSetup API and optional nvim-cmp integration

Installing Downstage

The downstage CLI must be installed separately:

go install github.com/jscaltreto/downstage@latest

Or via Homebrew:

brew tap jscaltreto/tap
brew install downstage

LSP Features

  • Semantic syntax highlighting
  • Document outline (acts, scenes, characters)
  • Hover info on character names
  • Go-to-definition (jump to dramatis personae entry)
  • Diagnostics (parse errors, unknown character warnings)

Configuration

Call require("downstage").setup() to configure the plugin explicitly.

If your plugin manager does not infer the main module correctly from the repo name, set main = "downstage" in your plugin spec.

Options:

  • cmp = true: if nvim-cmp is installed, limit Downstage completion sources to nvim_lsp for downstage buffers

License

MIT