TOAST UI Editor VS ProseMirror

Compare TOAST UI Editor vs ProseMirror and see what are their differences.

Our great sponsors
  • SurveyJS - Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
TOAST UI Editor ProseMirror
17 43
16,745 7,325
0.5% 1.9%
0.0 3.8
5 days ago about 1 month ago
TypeScript JavaScript
MIT License MIT License
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

TOAST UI Editor

Posts with mentions or reviews of TOAST UI Editor. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-06-09.
  • I'm making a GlowUI text editor to get back into coding
    3 projects | /r/Windows11 | 9 Jun 2023
    If you need a WYSIWYG markdown editor you can try Toast UI Editor or simply use Markdown Live add-on for Visual Studio Code
  • Is there a way to edit callouts in preview mode
    1 project | /r/ObsidianMD | 30 Jan 2023
    - Toast UI Editor: https://ui.toast.com/tui-editor
  • Ask HN: Any good out of the box WYSIWYG and MD JavaScript libs?
    1 project | news.ycombinator.com | 21 Jan 2023
    https://github.com/nhn/tui.editor Might be close to what you are after.
  • Using external Editor
    1 project | /r/ObsidianMD | 6 Jan 2023
  • Ask HN: Help me pick a front-end framework
    13 projects | news.ycombinator.com | 11 Sep 2022
    Can you elaborate a bit more on this part, please?

    > I'm thinking of building a text-annotation based app _alone in my spare time_. The core usage loop is about viewing and interacting with "visual markup" applied to a body of text. So lots of tooltips/hoverbars I guess.

    Or show us a mockup... doesn't have to be anything fancy, just like a pen and paper sketch or a simple Figma.

    I'm asking because it kinda sounds like you're wanting to do something like an online IDE or Google Docs, where you're manipulating a body of text in the style of a rich text editor. If that's the case, it's possible the HTML DOM model isn't quite the right fit for you... you may find it better to abstract over a Canvas or WebGL object instead of trying to shoehorn that experience into the raw DOM. That way you have full control over rendering, outside of the normal layout/styling/rendering loop. It might also make a good case for a single-page app (at least the majority of the editor itself would be, and the other stuff -- marketing, blog, etc. -- can be routed to individual pages).

    In that case, it wouldn't be so much a question of "framework" in the sense of React, Vue, etc., which traditionally work on the DOM. It might be more a question of "engine", like whether to use something like PixiJS to manipulate the graphics layer vs rolling your own. State management can be done with something like Redux (even without React), or if you choose to use a frontend framework for the rest of it, you can maybe use their state solution with your rendering engine.

    In addition to choosing a low-level graphics lib, you can also look at some existing rich text markup solutions. A CMS I used had a good blog post on this: https://www.datocms.com/docs/structured-text/dast#datocms-ab... along with their open-source editor: https://github.com/datocms/structured-text

    A more widespread one is the toast UI editor: https://ui.toast.com/tui-editor

    I know you're not just working in Markdown, but these give you an idea of what it's like to work with complex text trees in JS.

    Once you have the actual text editor part figured out, choosing the wrapper around it (again, just for marketing pages, etc.) is relatively trivial compared to the difficulty of your editor app. I really like Next.js myself (if you choose React), but I don't think you could really go wrong with any of the major choices today... React/Vue/Svelte/etc. And it looks to me like the complexity of your site wouldn't really be around that anyway, but the editor portion.

    Lastly: I don't think ANY JS tool or package is going to be maintained in 10 years. Frankly, 2 years is a long time in the JS ecosystem :( I'm not defending this phenomenon, I hate it too, but that's the reality of it. If long-term maintenance is a goal of yours, you might want to consider writing abstraction layers over third-party tools you use, so you can easily swap them out when future things come out (because they will). The web itself is changing too fast for libraries to keep up; instead, people just write new ones every few years. An example of this is the pathway from the Canvas to WebGL to workers to WASM (and how to juggle heavy computational vs rendering loops around)... a lot of the old Canvas-based renderers, which were super powerful in their time, are now too slow vs the modern alternatives. Nobody is going to port the old stuff over, they just make new libs. It's likely that trend will continue in the JS world (that whatever you write today will be obsoleted by a new web API in a few years).

    Lastly, as an aside, TypeScript is a superset of JS... if you find a JS project/lib/plugin that you want to use, there will often be types for it made by the community (https://github.com/DefinitelyTyped/DefinitelyTyped) , or you can write your own types for it. I don't really have an opinion about TypeScript vs writing in some other language and compiling to JS, but it would probably be easier to find help (especially frontend) in the future if you stick with TypeScript instead of convoluting your stack with multiple languages. Sounds like most of your app will be clientside anyway with limited backend needs.

    ---------

    Tech aside... have you considered partnering with a frontend dev for this? I know you said "alone", but just having someone set up the basic skeleton of such an app with you for the first month or two could be super helpful. Or a UX person to help you with some of the interactions before you start serious coding. They don't have to be with you the whole journey, but maybe they can help jumpstart your project so you can then work on adding features & polish in your spare time, instead of figuring out basic architecture? Unless, of course, that's the part you actually enjoy. In that case, don't let anyone rob of you that :)

    Have fun! Sounds like a cool project.

  • Is there any *real* WYSIWYG markdown editor besides Typora?
    2 projects | /r/opensource | 8 Aug 2022
    I think the Toast UI Editor can achieve what you want, and it does a pretty good job at that. Is built upon ProseMirror. Won't be a lot else out there since it's actually quite a hard thing to achieve once you get into the detail.
  • Stick - Shareable Git-powered notebooks
    1 project | /r/linux | 8 Jun 2022
    Ideas to add: - add markdown editor that works via plain JS - ability from UI to rollback to previous note version (git checkout) - Ability to create directories for notes
  • TOAST UI Editor VS ink - a user suggested alternative
    2 projects | 7 May 2022
  • Implement ToastUI Editor with Next.JS (w/ TypeScript)
    3 projects | dev.to | 5 Apr 2022
    To make it as brief as possible, this post will only deal with some of the issues that you might encounter while implementing ToastUI Editor inside Next.JS projects.
  • Switching Rich Text Editors, Part 1: Picking Tiptap
    13 projects | news.ycombinator.com | 11 Feb 2022
    ToastUI (https://ui.toast.com/tui-editor), which builds on ProseMirror, was really easy to set up and has been very stable for us. It's a WYSIWYG editor that just renders markdown, which is what we wanted to have as the base representation for written content so we have some portability later depending on how our product evolves.

ProseMirror

Posts with mentions or reviews of ProseMirror. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-03-07.
  • Eloquent JavaScript 4th edition (2024)
    10 projects | news.ycombinator.com | 7 Mar 2024
    For those that don't know the author, Marijn Haverbeke, is the creator of CodeMirror (code editor) and later ProseMirror (text editor).

    https://codemirror.net/

    https://prosemirror.net/

  • ProseMirror open source rich text editor
    1 project | news.ycombinator.com | 27 Feb 2024
  • WYSIWYG for MDX?! Introducing Vrite's Hybrid Editor
    4 projects | dev.to | 18 Oct 2023
    Behind the scenes, Vrite processes the content and makes it accessible in ProseMirror-based JSON format, including the type and all the props of the Element block.
  • Show HN: Minimal note-taking app
    1 project | news.ycombinator.com | 9 Aug 2023
    This seems to be using https://prosemirror.net
  • Vrite Editor: Open-Source WYSIWYG Markdown Editor
    11 projects | dev.to | 18 Jul 2023
    No good tool is built without using good tools, and Vrite Editor is no different. Before getting into WYSIWYG editors, I extensively researched available RTE frameworks, that could provide the tooling and functionality I was looking for. Ultimately, I picked TipTap and underlying ProseMirror ā€” IMO, the best tools currently available for all kinds of WYSIWYG editors.
  • Show HN: I've built open-source, collaborative, WYSIWYG Markdown editor
    9 projects | news.ycombinator.com | 23 Jun 2023
    A little dissapointed to see ProseMirror not mentioned.

    It's an amazing rich-text editing toolkit that provides all the bits and pieces needed to write any kind of rich-text editor. Tiptap is a wrapper over ProseMirror for minimizing the vast API surface and providing simpler configurations.

    The project is using TipTap and that is mentioned.

    https://prosemirror.net

  • How I put ChatGPT into a WYSIWYG editor
    6 projects | dev.to | 19 Jun 2023
    The buttons had to be absolutely positioned, which required both a custom TipTap extension and tapping deeper into the underlying ProseMirror (both libraries powering the Vrite editor).
  • All about the Prosemirror library
    1 project | /r/prosemirror | 29 May 2023
  • Better blogging on Dev.to with Vrite - headless CMS for technical content
    6 projects | dev.to | 19 May 2023
    You might have noticed that the body_markdown property is set to the result of processContent() call. Thatā€™s because the Vrite API serves its content in a JSON format. Derived from the ProseMirror library powering Vrite editor, the format allows for versatile content delivery as it can be easily adapted to various needs.
  • Show HN: Hyvor Blogs ā€“ Multi-language blogging platform
    9 projects | news.ycombinator.com | 9 May 2023
    Redis for cache

    PHP isnā€™t dead. It definitely has some weirdness introduced in older versions that cannot be removed due to backward compatibility promises. However, recent versions of PHP have improved performance and developer experience significantly. Also, we use strict types and PHPStan [https://phpstan.org] (max level) to ensure type safety. And, we try to have 95%+ coverage using Pest PHP [https://pestphp.com]. With those tools, writing PHP is fun. Laravel saves a lot of time by abstracting away many HTTP, queue, and CLI-related tasks. MYSQL is the single source of truth. We sync data to Meilisearch for search. Laravel Scout makes syncing effortless. Redis is used for caching and queues.

    More details on the open-source software we use are available here: [https://blogs.hyvor.com/docs/oss]

    Theme Development:

    In Hyvor Blogs, all themes are fully customizable. We wanted to make the theme development process as friendly as possible for developers. Being a hosted software, this is quite hard. Developers arenā€™t fond of (including me) editing a file on the browser to make something work. Providing an online web editor to create themes wasnā€™t an option. So, we created a simple CLI tool [https://github.com/hyvor/hyvor-blogs-cli] that developers can install locally via NPM. This CLI tool listens for file changes and syncs all theme files to a development blog in our production system. So, developers can make changes in their local editor and see changes with almost no delay. This has worked pretty well so far!

    Theme Structure:

    We wanted to keep the theme structure simple. No Javascript frameworks - just plain old-school HTML because it works the best with search engines, minimizes the data transfer required between the server and the browser, and even provides a better experience for end users.

    We obviously needed a templating language to render HTML from data. There were many options like Handlebars, Liquid, and Twig. All do the job. We went with Twig because its original package is written in PHP and managed by the Symfony team so we could trust it and easily integrate it into our system.

    Another thing we cared about a lot is creating standardized theme guidelines. For example, if you take WordPress themes, most themes have their own structure and are very different from each other. This adds a learning curve to each theme. To prevent that, we created standardized theme guidelines for all published themes to follow. We also standardized how common things in blogs like color theme switching, searching, language switching, etc. work. This helps users switch between and customize their themes effortlessly.

    Then, there is one important thing we realized. ā€œThe structure of a blog is very simpleā€. First, you might think you need several stylesheets, jQuery, bootstrap, etc. NO! Just one stylesheet and barely some vanilla javascript for interactive elements like search. Realizing this helped us further improve theme performance. In our themes, the developer writes several SCSS files inside the /styles directory. This makes it easier for them to manage styles in chunks. Then, we convert all SCSS files into a single styles.css when loading it in the blog. That way, only 1 HTTP request is needed for styles - itā€™s super fast!

    You can see more about theme development here: [https://blogs.hyvor.com/docs/themes-overview]

    All official themes are free and open-source. [https://github.com/hyvor/hyvor-blogs-themes]

    We have ported multiple open-source themes, and now working on a couple of original themes as well.

    Caching:

    We incrementally cache content using ā€œfirst-request cachingā€. If you visit a post in the blog, the response is dynamically created and cached. Subsequent responses are served from the cache until the blogger updates the post.

    This is highly efficient and scalable. Also, there is no building step involved as in Netlify or similar static hosting platforms. You can immediately see changes but also benefit from caching.

    The cache is saved on a Redis server in our data centers, but we may try CDN edge caching in the future.

    Multi-language support:

    Multi-language support is probably the most unique selling point of Hyvor Blogs. The first version of Hyvor Blogs did not have a multi-language feature. Adding that feature took a lot of careful thought and effort, but it was totally worth it. I can safely say thereā€™s no other hosted blogging platform that makes managing multiple languages as easy as Hyvor Blogs does.

    First, we had to figure out what data was translatable. For example, post content, description, etc. Then instead of saving that data in the `posts` table, we created a new `post_variants` table to save them linked to a specific `language_id`. The blogger can create multiple languages and each entity (`post` , `tag` , `user`) can have variants for each language.

    Additionally, we integrated DeepL [https://deep.com] to let bloggers automatically translate posts into many languages.

    Data API filtering:

    Our Data API [https://blogs.hyvor.com/docs/api-data] returns public data of the blog. This is also internally used in themes to fetch additional data. If you think about filtering data (ex: posts), one may want to filter `published_at < {time}` while another wants `published_at > {time}`. If we went with the normal API approach, weā€™d need many query parameters like `published_at_greater_than`, `published_at_less_than`, etc. Thatā€™s ineffective. So, we wrote a little query language called FilterQ to take a single `filter` input parameter and safely convert it to the `WHERE` part of the SQL query. With it, you can call the API with `filter=published_at>{time}` param. And, itā€™s even possible to use `and` / `or` and grouping for complex filtering.

    Library (implemented in Laravel): https://github.com/hyvor/laravel-filterq

    Sub-directory hosting:

    We designed a new way to host a blog in a subdirectory of a web application. Letā€™s say you have a Laravel application at example.com. We created Delivery API [https://blogs.hyvor.com/docs/api-delivery] to help you host your blog at example.com/blog.

    This API tells you how to deliver a response for a request (hence ā€œDeliveryā€ API). For example, when your Laravel app receives a request to /blog/hello-world, your app calls the Delivery API to learn how to respond to ā€œ/hello-worldā€. The Delivery API returns a JSON with all the data needed. Your app will then use that JSON response to create an HTTP response and send back the response to the client. It will also save the response in the cache so that it doesnā€™t have to call the Delivery API next time for the same path.

    This is quite similar to a reverse proxy with caching, but the JSON API makes it easier to use it in web applications as we do not need HTTP parsing logic.

    This is also similar to how our ā€œfirst-requestā€ caching works, but this time this caching happens inside your web application. To clear the cache, we use webhooks.

    For now, we have developed libraries for Laravel and Symfony for sub-directory hosting, with plans to cover more frameworks in the future.

    Rich Editor

    This was probably the hardest part of all. We spent months testing many frameworks like Draft.js, Prosemirror, and even pre-built rich editors like TinyMCE. We wanted customizability and also ease-of-use. No framework checked all boxes.

    We decided to go with ProseMirror [https://prosemirror.net]. It was complex but eventually, we came to understand the power of it. It has a steep learning curve, but itā€™s totally worth it. We actually enjoy writing Prosemirror plugins now to add some functionality to the Rich Editor. Also, recently the author added typescript support, which incredibly improved the experience. We created many nodes like Blockquotes, Callouts (with emoji), Images with captions, Embeds, and Bookmarks pretty easily after that. ProseMirror has quite good browser support as well.

    Flashload

    Iā€™ve been a fan of InstantClick [http://instantclick.io/]. We wanted to add something similar to all blogs to add a ā€œfake-fastā€ effect. If you havenā€™t used InstantClick before, it is a simple library that turns separate HTML pages into a single-page app. It starts loading content on the mouseoever event of a link and replaces the when clicked on it. This makes navigation super fast. We created an almost copy of Instantclick named Flashload [https://github.com/hyvor/flashload] with additional configurations and optimized caching. Feel free to use it in your projects :)

    Overall, itā€™s been a great learning experience working on Hyvor Blogs. Weā€™d love to know what HN thinks about our project. I am happy to answer any questions you might have.

What are some alternatives?

When comparing TOAST UI Editor and ProseMirror you can also consider the following projects:

daisyui - šŸŒ¼ šŸŒ¼ šŸŒ¼ šŸŒ¼ šŸŒ¼ ā€ƒThe most popular, free and open-source Tailwind CSS component library

slate - A completely customizable framework for building rich text editors. (Currently in beta.)

quill - Quill is a modern WYSIWYG editor built for compatibility and extensibility.

TinyMCE - The world's #1 JavaScript library for rich text editing. Available for React, Vue and Angular

CodeMirror - In-browser code editor (version 5, legacy)

SimpleMDE - A simple, beautiful, and embeddable JavaScript Markdown editor. Delightful editing for beginners and experts alike. Features built-in autosaving and spell checking.

tiptap - The headless rich text editor framework for web artisans.

fullcalendar - Full-sized drag & drop event calendar in JavaScript

ckeditor-releases - Official distribution releases of CKEditor 4.

Draft.js - A React framework for building text editors.