License

April 1, 2026 ยท View on GitHub

Sparql Editor

SPARQL Editor

Built on CodeMirror 6

Version License: MIT NPM Publish Status


Features

  • ๐Ÿณโ€๐ŸŒˆ Syntax Highlighting
  • ๐Ÿ“” History Tracking
  • ๐Ÿ’ข Linting
  • ๐Ÿ”Ž Search Functionality
  • ๐Ÿ”ฝ Tooltips
  • โœจ Query Formatting

๐Ÿ“š Documentation

Usage

The SPARQL Editor is stable and actively used in the sparql-browser-extension. It returns a CodeMirror 6 EditorView instance, enabling you to manipulate the editor as detailed in the CodeMirror documentation.

Overview

This editor instance leverages CodeMirror 6 with sensible defaults and enhanced features. It utilizes the codemirror-lang-sparql parser for syntax highlighting, while linting is facilitated by the SPARQL.js library.

Getting Started

npm i sparql-editor

  import { createSparqlEditor } from "sparql-editor"
  
  const domElement = document.getElementById("editor")

  const editor = createSparqlEditor({
    parent: domElement,
    onChange: onChange,
    value: "SELECT * WHERE { ?s ?p ?o }"
  });

  function onChange(value, codemirrorViewInstance) {
      console.log(codemirrorViewInstance)
      alert(value)
  }

Options

ArgumentDescriptiondefaultrequired
parenthtml dom element to attach editor to/required
onChangefunction that gets called whenever editor value changes/
valueInitial value of editorSELECT * WHERE { ?s ?p ?o } LIMIT 100
extensionsadditional CodeMirror 6 extensions to load alongside the built-in ones[]

Formatting

The editor includes built-in SPARQL query formatting powered by sparqljs.

Keyboard shortcut: Shift + Alt + F

Programmatic access: formatQuery is exported so you can trigger formatting from your own UI (e.g. a button):

import { createSparqlEditor, formatQuery } from "sparql-editor"

const editor = createSparqlEditor({ parent: domElement });

document.getElementById("format-btn").addEventListener("click", () => {
  formatQuery(editor);
});

Formatting silently no-ops if the query has syntax errors.

Extending the editor

Pass any CodeMirror 6 extensions via the extensions prop. They are loaded after the built-in defaults, so they can override themes, keymaps, or other behaviour.

Import CodeMirror primitives (EditorView, StateField, StateEffect, etc.) from sparql-editor when building extensions:

import { createSparqlEditor, EditorView } from "sparql-editor";

const myTheme = EditorView.theme({ "&": { fontSize: "14px" } });

const editor = createSparqlEditor({
  parent: document.getElementById("editor"),
  extensions: [myTheme]
});

For full control, the built-in extension set is also exported so you can compose your own:

import { defaultExtensions, EditorView } from "sparql-editor";

const editor = new EditorView({
  parent: document.getElementById("editor"),
  extensions: [...defaultExtensions, myCustomExtension]
});

Development guide

  • clone this repo
  • cd into it
  • run npm install
  • run npm run dev

This will start the TypeScript compiler in watch mode and automatically open test/index.html in your browser at http://127.0.0.1:8080/test/index.html. Hard-refresh the browser after making changes to see them reflected.

๐Ÿ“ Roadmap

  • Tooltip functionality
  • Linting (via SPARQL.js)
  • Autocomplete (keywords + local variables)
  • Query formatting (via SPARQL.js)
  • Extensible extensions API

License

This project is MIT licensed.