Page control
Use standard sizes, orientation, margins, rulers, headers, footers, and page breaks.
Why teams choose it
Page decisions are first-class editor state rather than application-side decoration.
Open Working Demo const editor = await Editra.init({
selector: "#editra-editor",
pageSize: "A4",
orientation: "portrait",
margins: { top: "1in", right: "1in", bottom: "1in", left: "1in" }
});
Advanced tables
Insert from a grid, resize, merge, split, style, select, and paginate tables.
Why teams choose it
Document-oriented operations and large-table flow are available through commands.
Open Working Demo editor.executeCommand("insertTable", { rows: 6, columns: 4 });
editor.executeCommand("setTableBorderColor", "#15171a");
QR codes and barcodes
Generate Code128, Code39, EAN13, and QR SVG objects from focused dialogs.
Why teams choose it
Encoded values persist in the document model and remain selectable, draggable, resizable, deletable, and export-safe.
Open Working Demo await editor.executeCommand("insertBarcode", {
value: "EDITRA-2026", format: "CODE128"
});
await editor.executeCommand("insertQrCode", {
value: "https://editra.in"
});
Formatting refinements
Use compact color palettes, No Fill, stable list toggles, superscript, subscript, block quotes, and Format Painter.
Why teams choose it
Unified commands keep toolbar, menu, and keyboard behavior synchronized without escalating inline font size.
Open Working Demo editor.executeCommand("superscript");
editor.executeCommand("blockQuote");
editor.executeCommand("formatPainter");
Draggable objects
Select, move, resize, and delete images, QR codes, barcodes, emoji, tables, and rich objects.
Why teams choose it
Object interactions use a consistent selection model and Delete-key handling across the editor.
Open Working Demo const editor = await Editra.init({
selector: "#editra-editor",
plugins: ["image", "structure", "codes"]
});
Multilingual and symbols
Build locale-aware interfaces and insert categorized emoji, currency, text, math, arrow, and Latin characters.
Why teams choose it
Language resources and specialized tools load only when the configuration requests them.
Open Working Demo const editor = await Editra.init({
selector: "#editra-editor",
language: "en",
plugins: ["structure", "formatting"]
});
Complete integration recipe
HTML, JavaScript, and CSS that stay readable.
The browser-native surface is easy to embed, configure, and brand without framework lock-in.
HTML<div id="editra-editor">
<p>Start writing…</p>
</div>
JavaScriptconst editor = await Editra.init({
selector: "#editra-editor",
plugins: ["bold", "table", "image"],
toolbar: "bold | insertTable insertImage"
});
CSS#editra-editor {
min-height: 12rem;
color: #182033;
font-family: "Segoe UI", sans-serif;
}