# vue2-editor: tags stopped in 2018, the package is at 2.10.3, and every release commits dist

> A Quill editor wrapped as a Vue 2 component, where the newest GitHub release is eight years old, the version you install comes from the registry, and the image upload example lists three parameters while the code passes four.

**davidroyer/vue2-editor** — A text editor using Vue.js and Quill

- Repository: https://github.com/davidroyer/vue2-editor
- Stars: 2,512 · Forks: 353
- Language: JavaScript
- License: MIT
- Published: 2026-09-28 · Updated: 2026-09-28 · Language: en
- Canonical page: https://hysenlabs.com/projects/davidroyer-vue2-editor

## The tags stopped in 2018 while the package kept climbing

Installation is one line, with either package manager:

```bash
npm install vue2-editor
```

The three newest releases are 2.6.4, 2.6.5 and 2.6.6, and all three were published on the same day in August 2018, minutes apart. The package manifest, in the same repository, declares version 2.10.3, and the last commit on the default branch is dated 2026-09-30.

So the release list and the package have been living in different years for a long time. The tags stopped when the project was at a 2.6 line, while the published artifact kept moving and is now four minor versions beyond that.

The practical consequence is that the releases page tells you nothing about what you would install. Anyone pinning a dependency from that list is pinning 2018 code. The authoritative version is the one in the package manifest, and the release notes live in the changelog file the README links at the top.

Nothing is archived, so the project is not abandoned, but the tag history is a poor guide to its activity and the changelog is the only record.

## Every version bump commits the built output

The release process is configured to produce a commit as part of releasing. The version tool is configured with a post-bump hook that runs the build, adds the dist directory to the index, and commits it with a fixed message about a new build.

Combined with the release script, which runs the version tool, pushes the tags and then publishes to the registry, the shape of a release is: bump the version, rebuild, commit the build output under a chore message, push tags, publish. Three release scripts exist, and each publishes under a different tag.

The reason this is visible to you as a consumer is that the repository root contains the dist directory. This is not a source-only repository with a build pipeline that runs in continuous integration. It is a repository that carries its own build output, which means you can inspect exactly what was published for a given version, and also that diffs between versions include generated files.

## Three release channels from three branches

There are three release scripts and they do not all publish to the same place.

The main one bumps, pushes tags and publishes. The second produces a prerelease, pushes to a branch named for development, and publishes under a prerelease tag. The third produces a prerelease under a different name, pushes to a branch with that same short name, and publishes under that tag.

The third channel is the interesting one, because it explains a directory in the repository. There is a Nuxt subdirectory, and the README has a Nuxt section telling you to add the package's Nuxt module to the modules array of your config file. Nuxt is a server-rendered framework, so the package ships a server-rendering aware variant as a prerelease line maintained on its own branch.

The documentation has its own two commands, one serving it in development and one building it, with a preview command that serves the built VuePress output from the docs directory. So there are three outputs in this repository: the library, the server-rendering variant, and the documentation site.

## The image upload example lists three parameters and passes four

The events table documents an image-added event carrying three parameters: the file, the editor instance, and the cursor location at the time of the upload. The prose above the example repeats that count and enumerates the three, explaining that the cursor position exists so the image can be inserted at the right place when the upload succeeds.

The code in the example declares a handler taking four: the file, the editor, the cursor location, and a fourth argument for resetting the uploader. So the documented contract and the shipped example disagree about the arity, and the fourth argument is undocumented.

The example code block also ends mid-thought. It opens the handler, comments that an example is using form data, notes that a key name could differ, and the file stops there with the fence closed on an unfinished comment. A separate example repository is pointed at for a version of this feature wired to an actual server, which is the honest place to look for complete code.

The cursor argument is the part worth keeping in either case: without it an image uploaded asynchronously lands at the caret position rather than where the user was typing.

## Two editors on one page collide on the default container id

The id prop has a default value and a warning attached. The default is a single shared container id, and the description says an id is necessary if you have multiple editors in the same view.

That is not a stylistic note, it is a collision. Quill needs a container element to mount into, and if you render two editors without setting distinct ids they will both ask for the same one. The multiple editors example therefore gives each instance its own id and its own bound model, and adds a stylesheet rule setting a fixed height for both containers.

The fixed height in that example is worth noticing too, because it is not a prop in the table. Editor height in this component is a styling concern rather than a configuration one, so the way you size an editor is by giving its container a size.

The table also carries a leftover artefact: the default cell for the toolbar prop contains an escaped bold marker and a note saying the value is too long for the table and to see the example below, so that one default is only discoverable by reading the source or the example.

## Images become Base64 unless you turn the handler on

One boolean prop decides how images work, and its default is off. With the default, an image added to the editor is converted to Base64 and becomes part of the content. With the flag set, the component stops doing that and emits events instead, handing you the file so your own code can upload it.

The events in that mode are the two image events, each carrying the file, the editor instance and the cursor location, one when a photo is being added and one when it has been deleted. Everything else about the editor, the content model and the surrounding application, is unchanged.

The reason this matters more than a boolean suggests is the content model. Your bound value is the editor's HTML, so with the default setting every pasted or inserted image makes that string substantially larger, and the size lands in whatever field you persist. The flag is not about upload speed, it is about where image bytes live.

Alongside it, the editor options prop merges an object into the default configuration for things like additional formats and custom Quill modules, and a separate prop registers Quill modules outright.

## A TODO file and a Yarn error log are committed to the root

The root listing includes a file named TODO and a file named yarn-error.log. Both are the residue of local work rather than project files: the first is a to-do list that was never folded into the issue tracker, the second is the log from an install that failed on somebody's machine.

Alongside them sit five configuration files for the toolchain, including the eslint config, a commit message lint config, the Vue CLI config, the Babel config, and one for a third-party Vue CLI plugin. That last one comes with a dedicated script whose only job is to upgrade the plugin, which tells you the build depends on a package maintained outside the project and that its version is something you upgrade deliberately rather than transitively.

The changelog configuration is also customised. Alongside the conventional types, the project defines one of its own that is filed under Improvements, while the chore, docs, style, performance and test types are marked hidden, so the release notes only surface features, fixes, improvements and refactoring.

## Conclusion

vue2-editor fits a Vue 2 codebase that needs a Quill editor with a familiar component interface, custom toolbars, custom Quill modules, and a Nuxt module rather than an integration you build yourself. Four things to check before you commit. The version you install comes from the registry, not from the release list, because the tags stopped in 2018 while the package kept climbing, so read the changelog rather than the releases page. The component binds your content as HTML, and with the default image handling an image becomes part of that string as Base64, which decides your database column size and your export story. Every release commits the built output, so the repository is both source and artifact and you can pin a tag or the registry. And the editor is documented as a Vue 2 component with no Vue 3 path in the file, so if you are on Vue 3 this is the wrong package and the ecosystem has moved on.

## FAQ

### How do I install vue2-editor?

With `npm install vue2-editor` or `yarn add vue2-editor`. Basic use imports the `VueEditor` component from the package, and the advanced path also imports `Quill` so you can reach the editor API for custom functionality.

### Which Vue versions does vue2-editor support?

The package describes itself as an HTML editor using Vue.js 2 and Quill.js, and the repository contains no Vue 3 path. There is also a Nuxt module, added as `vue2-editor/nuxt` in the modules array of the config file.

### How does vue2-editor handle image uploads?

By default an image is converted to Base64 and becomes part of the content. Setting `useCustomImageHandler` turns that off and emits `image-added` and `image-removed` instead, passing the file, the editor instance and the cursor location so your own code can upload and insert it.

### What is the latest version of vue2-editor?

The package manifest declares 2.10.3, while the newest GitHub release tags are 2.6.4 to 2.6.6, all published on the same day in August 2018. The registry version is the current one, and the changelog file carries the release notes.

### Can I use more than one vue2-editor on a page?

Yes, but the id prop defaults to a single shared container id and is described as necessary when multiple editors share a view. Give each editor its own id and its own bound model, and size them through their container elements.

## Sources

- [davidroyer/vue2-editor on GitHub](https://github.com/davidroyer/vue2-editor)
- [Issues](https://github.com/davidroyer/vue2-editor/issues)
- [License: MIT](https://github.com/davidroyer/vue2-editor/blob/master/LICENSE)
- [README](https://github.com/davidroyer/vue2-editor/blob/master/README.md)
- [Releases](https://github.com/davidroyer/vue2-editor/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/davidroyer-vue2-editor
