JSPM

  • Created
  • Published
  • Downloads 6765
  • Score
    100M100P100Q135534F
  • License MIT

A lightweight, fully customizable, Markdown editor

Package Exports

    Readme

    Carta.png

    Carta

    Modern, lightweight, powerful Markdown Editor.


    Introduction

    Carta is a lightweight, fast and extensible Svelte Markdown editor and viewer. It is powered by unified, remark and rehype. Check out the examples to see it in action. Differently from most editors, Carta does not include a code editor, but it is just a textarea with syntax highlighting, shortcuts and more.

    Features

    • ๐ŸŒˆ Markdown syntax highlighting (Shiki);
    • ๐Ÿ› ๏ธ Toolbar (extensible);
    • โŒจ๏ธ Keyboard shortcuts (extensible);
    • ๐Ÿ“ฆ Supports 150+ plugins thanks to remark;
    • ๐Ÿ”€ Scroll sync;
    • โœ… Accessibility friendly;
    • ๐Ÿ–ฅ๏ธ SSR compatible;
    • โš—๏ธ KaTeX support (plugin);
    • ๐Ÿ”จ Slash commands (plugin);
    • ๐Ÿ˜„ Emojis, with included search (plugin);
    • โœ๏ธ TikZ support (plugin);
    • ๐Ÿ“‚ Attachment support (plugin);
    • โš“ Anchor links in headings (plugin);
    • ๐ŸŒˆ Code blocks syntax highlighting (plugin);
    • โš™๏ธ Embed Components (plugin).

    Packages

    Package Status Docs
    carta-md carta-md /
    plugin-math plugin-math /plugins/math
    plugin-code plugin-code /plugins/code
    plugin-emoji plugin-emoji /plugins/emoji
    plugin-slash plugin-slash /plugins/slash
    plugin-tikz plugin-tikz /plugins/tikz
    plugin-attachment plugin-attachment /plugins/attachment
    plugin-anchor plugin-anchor /plugins/anchor
    plugin-component plugin-component /plugins/component

    Community plugins

    Plugin Description
    carta-plugin-video Render online videos
    carta-plugin-imsize Render images in specific sizes
    carta-plugin-subscript Render subscripts and superscripts
    carta-plugin-ins-del <ins> and <del> tags support

    Getting started

    WARNING Sanitization is not dealt with by Carta. You need to provide a sanitizer in the options. Common sanitizers are isomorphic-dompurify (suggested) and sanitize-html. Checkout the documentation for an example.

    Installation

    Core package:

    npm i carta-md

    Plugins:

    npm i @cartamd/plugin-name

    Basic configuration

    <script lang="ts">
        import { Carta, MarkdownEditor } from 'carta-md';
        // Component default theme
        import 'carta-md/default.css';
    
        const carta = new Carta({
            // Remember to use a sanitizer to prevent XSS attacks
            // sanitizer: mySanitizer
        });
    
        let value = $state('');
    </script>
    
    <MarkdownEditor bind:value {carta} />
    
    <style>
        /* Or in global stylesheet */
        /* Set your monospace font */
        /* Required to have the editor working correctly! */
        :global(.carta-font-code) {
            font-family: '...', monospace;
            font-size: 1.1rem;
            line-height: 1.1rem;
            letter-spacing: normal;
        }
    </style>

    Flags

    You can reduce the server-side bundle by using the following vite config. This will remove shiki from the bundle. It may cause issues if you try to use plugin-code on the server, as the highlighter is no longer present there.

    // vite.config.js
    import { sveltekit } from '@sveltejs/kit/vite';
    
    /** @type {import('vite').UserConfig} */
    const config = {
        plugins: [sveltekit()],
        define: {
            __ENABLE_CARTA_SSR_HIGHLIGHTER__: false
        }
    };
    export default config;

    Documentation

    For the full documentation, examples, guides and more checkout the website.

    Contributing & Development

    Every contribution is well accepted. If you have a feature request you can open a new issue.

    This package uses a pnpm workspace, so pnpm is required to download and put everything together properly.

    Committing

    This repository is commitizen friendly. To commit use:

    npm run commit
    # or, if you have commitizen installed globally
    git cz

    Running docs

    If you want to preview the docs:

    cd docs
    npm run dev