{"id":13553544,"url":"https://github.com/ssshooter/mind-elixir-core","last_synced_at":"2026-04-02T17:49:13.960Z","repository":{"id":37359286,"uuid":"199951138","full_name":"SSShooter/mind-elixir-core","owner":"SSShooter","description":"⚗ Mind Elixir is a JavaScript, framework-agnostic mind map core.","archived":false,"fork":false,"pushed_at":"2026-03-29T04:51:35.000Z","size":5628,"stargazers_count":2988,"open_issues_count":15,"forks_count":396,"subscribers_count":29,"default_branch":"master","last_synced_at":"2026-03-29T07:33:07.562Z","etag":null,"topics":["graph","mind-map","mind-mapping","mindmap","tool","visualization"],"latest_commit_sha":null,"homepage":"https://docs.mind-elixir.com/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SSShooter.png","metadata":{"files":{"readme":"readme.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["ssshooter"],"patreon":null,"open_collective":"ssshooter","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2019-08-01T01:04:36.000Z","updated_at":"2026-03-29T04:50:05.000Z","dependencies_parsed_at":"2024-02-09T15:03:44.638Z","dependency_job_id":"4e48f654-f91d-4281-bb00-29fb10c6d1ee","html_url":"https://github.com/SSShooter/mind-elixir-core","commit_stats":{"total_commits":550,"total_committers":20,"mean_commits":27.5,"dds":0.2654545454545455,"last_synced_commit":"706469b693e5412c94f0ab766965bd47b894fede"},"previous_names":[],"tags_count":121,"template":false,"template_full_name":null,"purl":"pkg:github/SSShooter/mind-elixir-core","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SSShooter%2Fmind-elixir-core","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SSShooter%2Fmind-elixir-core/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SSShooter%2Fmind-elixir-core/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SSShooter%2Fmind-elixir-core/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SSShooter","download_url":"https://codeload.github.com/SSShooter/mind-elixir-core/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SSShooter%2Fmind-elixir-core/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31312730,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["graph","mind-map","mind-mapping","mindmap","tool","visualization"],"created_at":"2024-08-01T12:02:27.774Z","updated_at":"2026-04-02T17:49:13.951Z","avatar_url":"https://github.com/SSShooter.png","language":"TypeScript","readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://docs.mind-elixir.com\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cimg width=\"150\" src=\"https://raw.githubusercontent.com/ssshooter/mind-elixir-core/master/images/logo2.png\" alt=\"mindelixir logo2\"\u003e\n  \u003c/a\u003e\n  \u003ch1 align=\"center\"\u003eMind Elixir\u003c/h1\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://trendshift.io/repositories/13049\" target=\"_blank\"\u003e\u003cimg src=\"https://trendshift.io/api/badge/repositories/13049\" alt=\"SSShooter%2Fmind-elixir-core | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/mind-elixir\"\u003e\n    \u003cimg src=\"https://img.shields.io/npm/v/mind-elixir\" alt=\"version\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/ssshooter/mind-elixir-core/blob/master/LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/npm/l/mind-elixir\" alt=\"license\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://app.codacy.com/gh/ssshooter/mind-elixir-core?utm_source=github.com\u0026utm_medium=referral\u0026utm_content=ssshooter/mind-elixir-core\u0026utm_campaign=Badge_Grade_Settings\"\u003e\n    \u003cimg src=\"https://api.codacy.com/project/badge/Grade/09fadec5bf094886b30cea6aabf3a88b\" alt=\"code quality\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://bundlephobia.com/result?p=mind-elixir\"\u003e\n    \u003cimg src=\"https://badgen.net/bundlephobia/dependency-count/mind-elixir\" alt=\"dependency-count\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://dependents.info/SSShooter/mind-elixir-core\"\u003e\n    \u003cimg src=\"https://dependents.info/SSShooter/mind-elixir-core/badge\" alt=\"dependents count badge\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://packagephobia.com/result?p=mind-elixir\"\u003e\n    \u003cimg src=\"https://packagephobia.com/badge?p=mind-elixir\" alt=\"package size\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n[English](/readme.md) |\n[中文](/readme/zh.md) |\n[Español](/readme/es.md) |\n[Français](/readme/fr.md) |\n[Português](/readme/pt.md) |\n[Русский](/readme/ru.md) |\n[日本語](/readme/ja.md) |\n[한국어](/readme/ko.md)\n\nMind elixir is a open source JavaScript mind map core. You can use it with any frontend framework you like.\n\n## Features\n\n### 🎨 **User Experience**\n\n- **Fluent UX** - Smooth and intuitive interactions\n- **Well designed** - Clean and modern interface\n- **Mobile friendly** - Touch events for mobile devices\n- **Efficient shortcuts** - Keyboard shortcuts for power users\n\n### ⚡ **Performance \u0026 Architecture**\n\n- **Lightweight** - Minimal bundle size\n- **High performance** - Optimized for large mind maps\n- **Framework agnostic** - Works with any frontend framework\n- **Pluginable** - Extensible architecture\n\n### 🛠️ **Core Features**\n\n- **Interactive editing** - Built-in drag and drop / node edit capabilities\n- **Bulk operations** - Multi-node selection and operations\n- **Undo / Redo** - Complete operation history\n- **Node connections \u0026 summarization** - Custom node linking and content summarization\n\n### 📤 **Export \u0026 Customization**\n\n- **Multiple export formats** - SVG / PNG / HTML export\n- **Easy styling** - Customize mindmap with CSS variables\n- **Theme support** - Built-in themes and custom styling\n\n[v5 Breaking Changes](https://github.com/SSShooter/mind-elixir-core/wiki/Breaking-Change#500)\n\n## Build with AI\n\nUse `npx skills add` to install guides to your project:\n\n**Integration Guide**:\n\n```bash\nnpx skills add ssshooter/mind-elixir-core\n```\n\n![mind elixir skills](./images/skills.jpg)\n\n\u003cdetails\u003e\n\u003csummary\u003eTable of Contents\u003c/summary\u003e\n\n- [Used by](#used-by)\n- [Features](#features)\n  - [🎨 **User Experience**](#-user-experience)\n  - [⚡ **Performance \\\u0026 Architecture**](#-performance--architecture)\n  - [🛠️ **Core Features**](#️-core-features)\n  - [📤 **Export \\\u0026 Customization**](#-export--customization)\n- [Build with AI](#%EF%B8%8F-build-with-ai)\n- [Try now](#try-now)\n  - [Playground](#playground)\n- [Documentation](#documentation)\n- [Usage](#usage)\n  - [Install](#install)\n    - [NPM](#npm)\n    - [Script tag](#script-tag)\n  - [Init](#init)\n  - [Data Structure](#data-structure)\n  - [Event Handling](#event-handling)\n  - [Data Export And Import](#data-export-and-import)\n  - [Markdown Support](#markdown-support)\n  - [Operation Guards](#operation-guards)\n- [Export as a Image](#export-as-a-image)\n  - [Deprecated API](#deprecated-api)\n- [Theme](#theme)\n- [Shortcuts](#shortcuts)\n- [Who's using](#whos-using)\n- [Ecosystem](#ecosystem)\n- [Development](#development)\n- [Acknowledgments](#acknowledgments)\n- [Contributors](#contributors)\n\n\u003c/details\u003e\n\n## Used by\n\n\u003ca href=\"https://dependents.info/SSShooter/mind-elixir-core\"\u003e\n  \u003cimg src=\"https://dependents.info/SSShooter/mind-elixir-core/image\" alt=\"network dependents image\" /\u003e\n\u003c/a\u003e\n\n## Try now\n\n![mindelixir](https://raw.githubusercontent.com/ssshooter/mind-elixir-core/master/images/screenshot5_2.jpg)\n\n### Playground\n\n- Vanilla JS - https://codepen.io/ssshooter/pen/vEOqWjE\n- React - https://codesandbox.io/p/devbox/mind-elixir-3-x-react-18-x-forked-f3mtcd\n- Vue3 - https://codesandbox.io/p/sandbox/mind-elixir-3-x-vue3-lth484\n\n## Documentation\n\nhttps://docs.mind-elixir.com/\n\n## Usage\n\n### Install\n\n#### NPM\n\n```bash\nnpm i mind-elixir -S\n```\n\n```javascript\nimport MindElixir from 'mind-elixir'\nimport 'mind-elixir/style.css'\n```\n\n#### Script tag\n\n```html\n\u003cscript type=\"module\" src=\"https://cdn.jsdelivr.net/npm/mind-elixir/dist/MindElixir.js\"\u003e\u003c/script\u003e\n```\n\nAnd in your CSS file:\n\n```css\n@import 'https://cdn.jsdelivr.net/npm/mind-elixir/dist/style.css';\n```\n\n### Init\n\n```html\n\u003cdiv id=\"map\"\u003e\u003c/div\u003e\n\u003cstyle\u003e\n  #map {\n    height: 500px;\n    width: 100%;\n  }\n\u003c/style\u003e\n```\n\n```javascript\nimport MindElixir from 'mind-elixir'\nimport { en } from 'mind-elixir/i18n'\nimport 'mind-elixir/style.css'\nimport example from 'mind-elixir/dist/example1'\n\nlet options = {\n  el: '#map', // or HTMLDivElement\n  direction: MindElixir.LEFT,\n  toolBar: true, // default true\n  keypress: true, // default true\n  overflowHidden: false, // default false\n  mouseSelectionButton: 0, // 0 for left button, 2 for right button, default 0\n  contextMenu: {\n    locale: en, // [cn,zh_CN,zh_TW,en,ru,ja,pt,it,es,fr,ko,ro,da,fi,de,nl,nb,sv]\n    focus: true,\n    link: true,\n    extend: [\n      {\n        name: 'Node edit',\n        onclick: () =\u003e {\n          alert('extend menu')\n        },\n      },\n    ],\n  }, // default true\n  before: {\n    insertSibling(type, obj) {\n      return true\n    },\n  },\n  // Custom markdown parser (optional)\n  // markdown: (text) =\u003e customMarkdownParser(text), // provide your own markdown parser function\n}\n\nlet mind = new MindElixir(options)\n\nmind.install(plugin) // install your plugin\n\n// create new map data\nconst data = MindElixir.new('new topic')\n// or `example`\n// or the data return from `.getData()`\nmind.init(data)\n\n// get a node\nMindElixir.E('node-id')\n```\n\n### Data Structure\n\n```javascript\n// whole node data structure up to now\nconst nodeData = {\n  topic: 'node topic',\n  id: 'bd1c24420cd2c2f5',\n  style: { fontSize: '32', color: '#3298db', background: '#ecf0f1' },\n  expanded: true,\n  parent: null,\n  tags: ['Tag'],\n  icons: ['😀'],\n  hyperLink: 'https://github.com/ssshooter/mind-elixir-core',\n  image: {\n    url: 'https://raw.githubusercontent.com/ssshooter/mind-elixir-core/master/images/logo2.png', // required\n    // you need to query the height and width of the image and calculate the appropriate value to display the image\n    height: 90, // required\n    width: 90, // required\n  },\n  children: [\n    {\n      topic: 'child',\n      id: 'xxxx',\n      // ...\n    },\n  ],\n}\n```\n\n### Event Handling\n\n```javascript\nmind.bus.addListener('operation', operation =\u003e {\n  console.log(operation)\n  // return {\n  //   name: action name,\n  //   obj: target object\n  // }\n\n  // name: [insertSibling|addChild|removeNode|beginEdit|finishEdit]\n  // obj: target\n\n  // name: moveNode\n  // obj: {from:target1,to:target2}\n})\n\nmind.bus.addListener('selectNodes', nodes =\u003e {\n  console.log(nodes)\n})\n\nmind.bus.addListener('expandNode', node =\u003e {\n  console.log('expandNode: ', node)\n})\n```\n\n### Data Export And Import\n\n```javascript\n// data export\nconst data = mind.getData() // javascript object, see src/example.js\nmind.getDataString() // stringify object\n\n// data import\n// initiate\nlet mind = new MindElixir(options)\nmind.init(data)\n// data update\nmind.refresh(data)\n```\n\n### Markdown Support\n\nMind Elixir supports custom markdown parsing:\n\n```javascript\n// Disable markdown (default)\nlet mind = new MindElixir({\n  // markdown option omitted - no markdown processing\n})\n\n// Use custom markdown parser\nlet mind = new MindElixir({\n  markdown: text =\u003e {\n    // Your custom markdown implementation\n    return text\n      .replace(/\\*\\*(.*?)\\*\\*/g, '\u003cstrong\u003e$1\u003c/strong\u003e')\n      .replace(/\\*(.*?)\\*/g, '\u003cem\u003e$1\u003c/em\u003e')\n      .replace(/`(.*?)`/g, '\u003ccode\u003e$1\u003c/code\u003e')\n  },\n})\n\n// Use any markdown library (e.g., marked, markdown-it, etc.)\nimport { marked } from 'marked'\nlet mind = new MindElixir({\n  markdown: text =\u003e marked(text),\n})\n```\n\n### Operation Guards\n\n```javascript\nlet mind = new MindElixir({\n  // ...\n  before: {\n    async addChild(el, obj) {\n      try {\n        await saveDataToDb()\n        return true\n      } catch (err) {\n        return false\n      }\n    },\n  },\n})\n```\n\n## Export as a Image\n\nInstall `@zumer/snapdom`, then:\n\n```typescript\nimport { snapdom } from '@zumer/snapdom'\n\nconst download = async () =\u003e {\n  const result = await snapdom(mind.nodes)\n  await result.download({ format: 'jpg', filename: 'my-capture' })\n}\n```\n\nFor other export formats and advanced options, see the [Mind Elixir documentation](https://ssshooter.com/en/how-to-use-mind-elixir/#exporting-images).\n\n### Deprecated API\n\n\u003e ⚠️ **Deprecated**: The `mind.exportSvg()` method is deprecated and will be removed in a future version.\n\n```typescript\n// DEPRECATED - Do not use in new projects\nconst svgData = await mind.exportSvg()\n```\n\n## Theme\n\n```javascript\nconst options = {\n  // ...\n  theme: {\n    name: 'Dark',\n    // main lines color palette\n    palette: ['#848FA0', '#748BE9', '#D2F9FE', '#4145A5', '#789AFA', '#706CF4', '#EF987F', '#775DD5', '#FCEECF', '#DA7FBC'],\n    // overwrite css variables\n    cssVar: {\n      '--main-color': '#ffffff',\n      '--main-bgcolor': '#4c4f69',\n      '--color': '#cccccc',\n      '--bgcolor': '#252526',\n      '--panel-color': '255, 255, 255',\n      '--panel-bgcolor': '45, 55, 72',\n    },\n    // all variables see /src/index.less\n  },\n  // ...\n}\n\n// ...\n\nmind.changeTheme({\n  name: 'Latte',\n  palette: ['#dd7878', '#ea76cb', '#8839ef', '#e64553', '#fe640b', '#df8e1d', '#40a02b', '#209fb5', '#1e66f5', '#7287fd'],\n  cssVar: {\n    '--main-color': '#444446',\n    '--main-bgcolor': '#ffffff',\n    '--color': '#777777',\n    '--bgcolor': '#f6f6f6',\n  },\n})\n```\n\nBe aware that Mind Elixir will not observe the change of `prefers-color-scheme`. Please change the theme **manually** when the scheme changes.\n\n## Shortcuts\n\nSee [Shortcuts Guide](https://docs.mind-elixir.com/docs/guides/shortcuts) for detailed information.\n\n## Who's using\n\n- [Mind Elixir Desktop](https://desktop.mind-elixir.com/)\n- [ebook-to-mindmap](https://github.com/SSShooter/ebook-to-mindmap)\n- [M10C-Video-Summary](https://github.com/SSShooter/M10C-Video-Summary)\n\n## Ecosystem\n\n- [@mind-elixir/node-menu](https://github.com/ssshooter/node-menu)\n- [@mind-elixir/node-menu-neo](https://github.com/ssshooter/node-menu-neo)\n- [@mind-elixir/export-xmind](https://github.com/ssshooter/export-xmind)\n- [@mind-elixir/export-html](https://github.com/ssshooter/export-html)\n- [mind-elixir-react](https://github.com/ssshooter/mind-elixir-react)\n\nPRs are welcome!\n\n## Development\n\n```\npnpm i\npnpm dev\n```\n\nTest generated files with `dev.dist.ts`:\n\n```\npnpm build\npnpm link ./\n```\n\nUpdate docs:\n\n```\n# Install api-extractor\npnpm install -g @microsoft/api-extractor\n# Maintain /src/docs.ts\n# Generate docs\npnpm doc\npnpm doc:md\n```\n\nUse [DeepWiki](https://deepwiki.com/SSShooter/mind-elixir-core) to learn more about Mind Elixir\n\n## Acknowledgments\n\n- [@viselect/vanilla](https://github.com/simonwep/selection/tree/master/packages/vanilla)\n\n## Contributors\n\nThanks for your contributions to Mind Elixir! Your support and dedication make this project better.\n\n\u003ca href=\"https://github.com/SSShooter/mind-elixir-core/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=SSShooter/mind-elixir-core\" /\u003e\n\u003c/a\u003e\n","funding_links":["https://github.com/sponsors/ssshooter","https://opencollective.com/ssshooter"],"categories":["JavaScript","others"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fssshooter%2Fmind-elixir-core","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fssshooter%2Fmind-elixir-core","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fssshooter%2Fmind-elixir-core/lists"}