書くのは心地よく、開発は軽く。
スラッシュメニュー、Markdown、AIの提案、コメント、リアルタイム共同編集を備えたWebエディターです。本体は30 kBで、一緒に入ってくるパッケージはありません。すべてこの場で試せます。
npm install @yonailab/levit
さくら
はると
「/」でブロック、文字を選ぶと書式メニュー。行頭に「# 」や「- [ ] 」と入力してみてください。
文を選んで整えるか、末尾にカーソルを置いて続きを書かせてみてください。用意した回答なので、実際のAIは呼びません。
二人で一つの文書を書きます。どちらに書いても、もう一方のカーソルが追いかけます。
文字を選んで💬か下のボタンを押してください。コメントを押すとその箇所に移動します。
一つの文書、三つの形式
下に書いてみてください。LevitはJSONの文書を持ち、MarkdownとHTMLにも書き出します。
Levit
HTML
JSON
入っているもの
本体に付いてくるものはありません。
ランタイム依存0個:信頼すべきほかのパッケージなし · 本体30 kB(gzip) · AI 7.5 kB · Yjs連携5 kB(yjsは別途インストール)
$ npm install @yonailab/levit
added 1 package in 1s
$ npm ls --all
my-app@1.0.0
└── @yonailab/levit@0.7.2長い文書でも速いままです。
2万ブロック · キー入力あたりのスクリプト約5 ms、通常のcontenteditableとほぼ同じ
このエディターには2万ブロックあります。どこでも入力してみてください。
メニューは三つの言語で。
英語・韓国語・日本語を標準搭載 · スクリーンリーダー用ラベル · Alt+F10でツールバーへ
貼り付けたHTMLはきれいに。
スクリプト、イベントハンドラー、javascript:リンクを除去 · サーバー用のvalidateDocument()
貼り付けたもの
残ったもの
古いブラウザでも動きます。
Chrome 87、Edge 88、Firefox 78、Safari 14以降 · Chrome・Firefox・WebKitで自動テスト
- Chrome87+
- Edge88+
- Firefox78+
- Safari14+
変更のたびに自動テスト
-
インストールからエディターまで
npm install @yonailab/levitまずパッケージを一つ入れます。
-
import { createLevitEditor } from '@yonailab/levit'; import '@yonailab/levit/levit.css'; const editor = createLevitEditor( document.querySelector('#editor'), );どの要素にでも取り付けます。
-
const editor = createLevitEditor(el, { onChange: (editor) => save(editor.getJSON()), });文書はJSONで保存します。
-
createLevitEditor(el, { plugins: [ commentsPlugin(), aiPlugin({ provider }), ], }); bindYjs(editor, ydoc.getArray('blocks'));AI、コメント、Yjsは後から。
パッケージと対応環境
パッケージ
- @yonailab/levitエディター本体
- @yonailab/levit-reactReact 18・19
- @yonailab/levit-vueVue 3
- @yonailab/levit-yjsYjs 13.6以降
さらに読む
- 書く人のための使い方使い方
- 開発者ドキュメントドキュメント
- AIツール向けllms.txtllms.txt
- ソースとIssueazusawa/levit
よくある質問
無料で使えますか?
はい。MITライセンスのオープンソースなので、個人・商用どちらのプロジェクトにも使えます。
どのフレームワークで使えますか?
どれでも使えます。素のJavaScript、Svelte、Angularでは<levit-editor>要素かcreateLevitEditor()を使い、ReactとVueには専用パッケージがあります。
HTMLとJSON、どちらを保存すべきですか?
JSONの文書を保存してください。バージョンがあり、検証もできます。HTMLとMarkdownは表示や書き出しに使い、読み込み直すこともできます。
ユーザーが書いた内容をそのまま表示して安全ですか?
LevitはHTMLの読み込みや貼り付けの際に、スクリプト、イベントハンドラー、危険なリンクを取り除きます。それでもサーバーでvalidateDocument()による検証を行い、コンテンツセキュリティポリシー(CSP)も併用してください。
AI機能は外部サービスを呼びますか?
いいえ。モデルの回答をMarkdownのストリームで返す関数(provider)を渡すので、モデルは自由に選べ、キーはサーバーに置けます。
共同編集にはサーバーが必要ですか?
LevitはYjsにつながり、Yjsはy-websocket、y-webrtc、独自の接続など任意のプロバイダーで同期します。このページのデモはブラウザ内で二つのエディターをつないでいます。
日本語や韓国語の入力は大丈夫ですか?
はい。IMEの変換入力を最初から最後まで扱い、変換中にほかの人の変更が届いても崩れません。
本番で使えますか?
現在は0.6です。マイナーバージョン間でAPIが変わることがあり、変更点はすべてリリースノートに記載します。セキュリティ修正は最新の二つのマイナーバージョンに適用します。