No description
  • TypeScript 90.1%
  • HTML 5.6%
  • CSS 3.9%
  • JavaScript 0.4%
Find a file
John Costa 0ae8075f61
Fix sanitize type to accept per-field SanitizerConfig
The sanitize property on BlockTool and BaseToolConstructable was typed
as SanitizerConfig, which only allows tag-name keys with SanitizerRule
values. In practice, Block Tools return an object mapping data field
names to their own SanitizerConfig (as documented and used by official
plugins like Paragraph and Quote).

This caused TypeScript errors when using functions as sanitizer rules
within per-field configs, since the type system tried to match the
function against TagConfig's { [attr: string]: boolean | string }.

Widen the type to SanitizerConfig | Record<string, SanitizerConfig>
to match the runtime behavior already handled by cleanObject() in
src/components/utils/sanitizer.ts.

Fixes #2957
2026-03-11 19:56:18 -07:00
.github ci: update deprecated GitHub Actions runners (#2974) 2026-01-07 21:54:34 +03:00
.vscode feat(shortcuts): convert block by tools shortcut (#2419) 2023-07-20 23:27:18 +03:00
assets Update a readme (#2267) 2023-02-15 22:51:43 +03:00
docs fix(link-tool): open new window with url when formatted link clicked via ctrl key (#2996) 2026-03-11 20:58:30 +03:00
example i18n and rtl examples updated 2026-02-18 15:32:29 +03:00
public/assets Use Vite builder (#2300) 2023-04-13 22:25:29 +03:00
src fix(link-tool): open new window with url when formatted link clicked via ctrl key (#2996) 2026-03-11 20:58:30 +03:00
test fix(link-tool): open new window with url when formatted link clicked via ctrl key (#2996) 2026-03-11 20:58:30 +03:00
types Fix sanitize type to accept per-field SanitizerConfig 2026-03-11 19:56:18 -07:00
.editorconfig Release 2.14 (#799) 2019-06-12 20:38:16 +03:00
.eslintignore Release / 2.18 (#1181) 2020-06-03 11:17:29 +03:00
.eslintrc fix(types): tools export types added (#2802) 2024-08-09 18:04:57 +03:00
.gitignore fix(block-tunes): enter keydown problems (#2650) 2024-03-13 17:30:16 +03:00
.npmignore fix(npm): ignore redundant files in sub-directories (#2307) 2023-03-16 12:08:15 +00:00
.nvmrc Create .nvmrc 2025-09-06 16:14:27 +03:00
.postcssrc.yml Use Vite builder (#2300) 2023-04-13 22:25:29 +03:00
.stylelintrc Release 2.0-beta (#387) 2018-08-05 14:51:58 +03:00
CODEOWNERS fix(#2036): scrolling issue with block hovering (#2042) 2022-05-01 15:09:16 +03:00
cypress.config.ts fix(types): tools export types added (#2802) 2024-08-09 18:04:57 +03:00
index.html feat(ui): placeholders updated (#2758) 2024-07-04 14:55:01 +03:00
LICENSE Release 2.16 (#966) 2019-11-30 23:42:39 +03:00
package.json fix(link-tool): open new window with url when formatted link clicked via ctrl key (#2996) 2026-03-11 20:58:30 +03:00
README.md Update readme (#2762) 2024-07-08 23:02:42 +03:00
tsconfig.build.json fix(types): tools export types added (#2802) 2024-08-09 18:04:57 +03:00
tsconfig.json fix(types): tools export types added (#2802) 2024-08-09 18:04:57 +03:00
tslint.json Basic initialisation test for Editor.js (#1410) 2020-11-21 21:01:31 +03:00
vite.config.js fix(types): tools export types added (#2802) 2024-08-09 18:04:57 +03:00
vite.config.test.js fix(types): tools export types added (#2802) 2024-08-09 18:04:57 +03:00
yarn.lock fix(merge): after merge caret will be set in a place of glue (#2841) 2024-10-09 21:28:04 +03:00

Editor.js Logo

editorjs.io | documentation | changelog

npm Minzipped size Backers on Open Collective Sponsors on Open Collective

About

Editor.js is an open-source text editor offering a variety of features to help users create and format content efficiently. It has a modern, block-style interface that allows users to easily add and arrange different types of content, such as text, images, lists, quotes, etc. Each Block is provided via a separate plugin making Editor.js extremely flexible.

Editor.js outputs a clean JSON data instead of heavy HTML markup. Use it in Web, iOS, Android, AMP, Instant Articles, speech readers, AI chatbots — everywhere. Easy to sanitize, extend and integrate with your logic.

  • 😍  Modern UI out of the box
  • 💎  Clean JSON output
  • ⚙️  Well-designed API
  • 🛍  Various Tools available
  • 💌  Free and open source
Editor.js Overview

Installation

It's quite simple:

  1. Install Editor.js
  2. Install tools you need
  3. Initialize Editor's instance

Install using NPM, Yarn, or CDN:

npm i @editorjs/editorjs

Choose and install tools:

See the 😎 Awesome Editor.js list for more tools.

Initialize the Editor:

<div id="editorjs"></div>
import EditorJS from '@editorjs/editorjs'

const editor = new EditorJS({
  tools: {
   // ... your tools
  }
})

See details about Installation and Configuration at the documentation.

Saving Data

Call editor.save() and handle returned Promise with saved data.

const data = await editor.save()

Example

Take a look at the example.html to view more detailed examples.

Roadmap

  • Unified Toolbars
    • Block Tunes moved left
    • Toolbox becomes vertical
    • Ability to display several Toolbox buttons by the single Tool
    • Block Tunes become vertical
    • Block Tunes support nested menus
    • Block Tunes support separators
    • Conversion Menu added to the Block Tunes
    • Unified Toolbar supports hints
    • Conversion Toolbar uses Unified Toolbar
    • Inline Toolbar uses Unified Toolbar
  • Collaborative editing
    • Implement Inline Tools JSON format
    • Operations Observer, Executor, Manager, Transformer
    • Implement Undo/Redo Manager
    • Implement Tools API changes
    • Implement Server and communication
    • Update basic tools to fit the new API
  • Other features
    • Blocks drag'n'drop
    • New cross-block selection
    • New cross-block caret moving
  • Ecosystem improvements
    • CodeX Icons — the way to unify all tools and core icons
    • New Homepage and Docs
    • @editorjs/create-tool for Tools bootstrapping
    • Editor.js DevTools — stand for core and tools development
    • Editor.js Design System
    • Editor.js Preset Env
    • Editor.js ToolKit
    • New core bundle system
    • New documentation and guides
Support Editor.js

Like Editor.js?

You can support project improvement and development of new features with a donation to our team.

Donate via OpenCollective
Donate via Crypto
Donate via Patreon

Why donate

Donations to open-source products have several advantages for your business:

  • If your business relies on Editor.js, you'll probably want it to be maintained
  • It helps Editor.js to evolve and get the new features
  • We can support contributors and the community around the project. You'll receive well organized docs, guides, etc.
  • We need to pay for our infrastructure and maintain public resources (domain names, homepages, docs, etc). Supporting it guarantees you to access any resources at the time you need them.
  • You can advertise by adding your brand assets and mentions on our public resources

Sponsors

Support us by becoming a sponsor. Your logo will show up here with a link to your website.

Mister Auto UPLUCID, K.K. Kane Jamison Content Harmony

Become a Sponsor

Backers

Thank you to all our backers

Become a Backer

Contributors

This project exists thanks to all the people who contribute.

Need something special?

Hire CodeX experts to resolve technical challenges and match your product requirements.

  • Resolve a problem that has high value for you
  • Implement a new feature required by your business
  • Help with integration or tool development
  • Provide any consultation

Contact us via team@codex.so and share your details

Community

About CodeX

CodeX is a team of digital specialists around the world interested in building high-quality open source products on a global market. We are open for young people who want to constantly improve their skills and grow professionally with experiments in cutting-edge technologies.

🌐 Join 👋 Twitter Instagram
codex.so codex.so/join @codex_team @codex_team