Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a2455c3f8a | ||
|
|
1b2ab7b55c | ||
|
|
cfe134931f | ||
|
|
77f8ba3d9d | ||
|
|
0be46d4bac | ||
|
|
1e24b52f3e | ||
|
|
58bd19ecd1 | ||
|
|
7ab5a0ddb4 | ||
|
|
efca458495 | ||
|
|
c4dcbd8caf | ||
|
|
b83ba91731 | ||
|
|
0babf97f0e | ||
|
|
eeda3f28eb | ||
|
|
4c00406bcd | ||
|
|
363de75375 | ||
|
|
2e16868f59 | ||
|
|
dd6d97c35d | ||
|
|
0604c65683 | ||
|
|
c43caf3902 | ||
|
|
25dcaaa816 | ||
|
|
c6ec1cef64 | ||
|
|
5fcc282fe0 | ||
|
|
8a95144bf3 | ||
|
|
bc47316746 | ||
|
|
02ce06d364 | ||
|
|
2e3af826f7 | ||
|
|
758dcb4166 | ||
|
|
1f5db511ba | ||
|
|
63c35ef2dc | ||
|
|
c8883e77fe | ||
|
|
8a28c21512 | ||
|
|
d6baa2daf7 | ||
|
|
44624cd4bf | ||
|
|
2334ab30ed | ||
|
|
abcfb03e52 | ||
|
|
6ba3174480 | ||
|
|
b83b86b31e | ||
|
|
f271e27177 | ||
|
|
8dc1ae1c45 | ||
|
|
a353a695b5 | ||
|
|
174eb3d6e9 | ||
|
|
8bada008b3 | ||
|
|
949053a7c5 | ||
|
|
b80e34fcf5 | ||
|
|
11b1c9e13e | ||
|
|
e09853952b | ||
|
|
d43fbaea59 | ||
|
|
66938968db | ||
|
|
5d9c46afc3 | ||
|
|
bf3438902b | ||
|
|
edb5db358a | ||
|
|
6d564261b2 | ||
|
|
f5dcffeb8d | ||
|
|
7095b34280 | ||
|
|
58868eece0 | ||
|
|
cd3385ec69 | ||
|
|
f04a20252f | ||
|
|
e5e14c88ce | ||
|
|
7a5a2ecba6 | ||
|
|
fac0d3d4a6 | ||
|
|
269d4ac028 | ||
|
|
cdc318ebc7 | ||
|
|
0c4043121f | ||
|
|
151be60b03 | ||
|
|
228ee04b09 | ||
|
|
9fd81ff5a0 | ||
|
|
f22cacd554 | ||
|
|
2f3b552608 | ||
|
|
cb27b47b91 | ||
|
|
01e2df44ed | ||
|
|
adfa43c278 | ||
|
|
879600da46 | ||
|
|
7b73ab07d7 | ||
|
|
57bbf91245 | ||
|
|
5178d91187 | ||
|
|
3f0bf911a0 | ||
|
|
2cac075c0e |
@@ -0,0 +1,9 @@
|
|||||||
|
# Text artifacts that are hash-pinned must check out byte-identical everywhere
|
||||||
|
assets/fonts/FiraCode-LICENSE.txt -text
|
||||||
|
# Binaries: never normalize
|
||||||
|
*.ttf -text
|
||||||
|
*.woff -text
|
||||||
|
*.woff2 -text
|
||||||
|
*.png -text
|
||||||
|
*.ico -text
|
||||||
|
*.icns -text
|
||||||
@@ -25,6 +25,13 @@ jobs:
|
|||||||
- name: Download external tools (pandoc)
|
- name: Download external tools (pandoc)
|
||||||
run: node scripts/download-tools.js
|
run: node scripts/download-tools.js
|
||||||
|
|
||||||
|
- name: Bundle MarkItDown (optional, best effort)
|
||||||
|
# Freezes markitdown + Python into bin/linux/markitdown; failure is
|
||||||
|
# non-fatal — the build then ships without it and the app falls back
|
||||||
|
# to a system markitdown at runtime.
|
||||||
|
run: npm run bundle:markitdown
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: npm test
|
run: npm test
|
||||||
|
|
||||||
@@ -59,6 +66,12 @@ jobs:
|
|||||||
- name: Download external tools (pandoc)
|
- name: Download external tools (pandoc)
|
||||||
run: node scripts/download-tools.js
|
run: node scripts/download-tools.js
|
||||||
|
|
||||||
|
- name: Bundle MarkItDown (optional, best effort)
|
||||||
|
# Windows runners ship python + venv; non-fatal on failure — the
|
||||||
|
# package then omits the bundled binary by design
|
||||||
|
run: npm run bundle:markitdown
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: npm test
|
run: npm test
|
||||||
|
|
||||||
@@ -94,8 +107,44 @@ jobs:
|
|||||||
dist/*.zip
|
dist/*.zip
|
||||||
retention-days: 5
|
retention-days: 5
|
||||||
|
|
||||||
|
build-macos:
|
||||||
|
runs-on: macos-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 20
|
||||||
|
cache: npm
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Download external tools (pandoc)
|
||||||
|
run: node scripts/download-tools.js
|
||||||
|
|
||||||
|
- name: Bundle MarkItDown (optional, best effort)
|
||||||
|
run: npm run bundle:markitdown
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: npm test
|
||||||
|
|
||||||
|
- name: Build macOS packages
|
||||||
|
run: npm run build:mac -- --publish=never
|
||||||
|
|
||||||
|
- name: Upload macOS artifacts
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: macos-artifacts
|
||||||
|
path: |
|
||||||
|
dist/*.dmg
|
||||||
|
dist/*.zip
|
||||||
|
retention-days: 5
|
||||||
|
|
||||||
release:
|
release:
|
||||||
needs: [build-linux, build-windows]
|
needs: [build-linux, build-windows, build-macos]
|
||||||
if: always()
|
if: always()
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
@@ -115,6 +164,13 @@ jobs:
|
|||||||
name: windows-artifacts
|
name: windows-artifacts
|
||||||
path: dist
|
path: dist
|
||||||
|
|
||||||
|
- name: Download macOS artifacts
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
continue-on-error: true
|
||||||
|
with:
|
||||||
|
name: macos-artifacts
|
||||||
|
path: dist
|
||||||
|
|
||||||
- name: Create GitHub Release
|
- name: Create GitHub Release
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
<p align="center">
|
||||||
|
<img src="assets/markdown-converter-assets/logo-horizontal.svg" alt="Markdown Converter" width="420">
|
||||||
|
</p>
|
||||||
|
|
||||||
# MarkdownConverter
|
# MarkdownConverter
|
||||||
|
|
||||||
A powerful cross-platform Markdown editor and document converter powered by Pandoc, built with Electron. 100% open-source with no proprietary dependencies.
|
A powerful cross-platform Markdown editor and document converter powered by Pandoc, built with Electron. 100% open-source with no proprietary dependencies.
|
||||||
@@ -43,6 +47,7 @@ A powerful cross-platform Markdown editor and document converter powered by Pand
|
|||||||
- **EPUB** - E-book format
|
- **EPUB** - E-book format
|
||||||
- **LaTeX** - Academic document format
|
- **LaTeX** - Academic document format
|
||||||
- **RTF** - Rich Text Format
|
- **RTF** - Rich Text Format
|
||||||
|
- **Export themes** - Five visual styles (Modern, Classic, Sepia, Minimal, Elegant) for PDF and Word exports — recolored headings, links, and fonts
|
||||||
|
|
||||||
### Advanced Features
|
### Advanced Features
|
||||||
- **Custom headers & footers** - Add headers/footers to exports with dynamic fields
|
- **Custom headers & footers** - Add headers/footers to exports with dynamic fields
|
||||||
@@ -51,12 +56,24 @@ A powerful cross-platform Markdown editor and document converter powered by Pand
|
|||||||
- **ASCII Art Generator** - Create text banners and diagrams
|
- **ASCII Art Generator** - Create text banners and diagrams
|
||||||
- **Word templates** - Use custom Word templates for enhanced exports
|
- **Word templates** - Use custom Word templates for enhanced exports
|
||||||
- **Import documents** - Import from 30+ formats (DOCX, PDF, HTML, etc.)
|
- **Import documents** - Import from 30+ formats (DOCX, PDF, HTML, etc.)
|
||||||
|
- **MarkItDown import** - Any file → Markdown via [Microsoft MarkItDown](https://github.com/microsoft/markitdown): PDF, DOCX, PPTX, XLSX, Outlook .msg, EPUB, images, ZIP (audio/OCR with the `[all]` extras)
|
||||||
|
- **Excel export** - Markdown tables to native .xlsx workbooks (one sheet per table)
|
||||||
|
- **AI Assistant** - Multi-provider AI help (OpenAI/Anthropic/Ollama/LM Studio): chat panel, summarize/improve/translate commands, grammar proofreading
|
||||||
|
- **Inline comments** - Anchor-based document comments in `.comments/` sidecars with F8 navigation
|
||||||
|
- **Wiki-links & Backlinks** - `[[Note]]` links with click-to-create and a "what links here?" panel (local knowledge base)
|
||||||
|
- **Crash recovery** - Session restore of open tabs and unsaved buffers after a crash
|
||||||
|
- **Version history** - Automatic pre-save snapshots with restore/diff/delete from the History panel
|
||||||
|
- **Vim mode & snippet expansion** - Vim keybindings toggle; Tab expands saved snippets
|
||||||
|
- **Quick Note** - Global scratchpad (Ctrl+Alt+Q) that appends to `notes/quick-notes.md`
|
||||||
|
- **Real PDF encryption** - Password protection, removal, and permissions actually work
|
||||||
|
- **Offline math & diagrams** - KaTeX bundled locally; PlantUML renders locally when the CLI is installed
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
- [Node.js](https://nodejs.org/) (v16 or later)
|
- [Node.js](https://nodejs.org/) (v16 or later)
|
||||||
- [Pandoc](https://pandoc.org/installing.html) (required for export functionality)
|
- [Pandoc](https://pandoc.org/installing.html) (required for export functionality)
|
||||||
|
- Optional: [MarkItDown](https://github.com/microsoft/markitdown) (`pip install "markitdown[all]"`) for any-file → Markdown import
|
||||||
|
|
||||||
### Install Dependencies
|
### Install Dependencies
|
||||||
```bash
|
```bash
|
||||||
@@ -96,9 +113,18 @@ npm run build:linux
|
|||||||
| Redo | Ctrl+Shift+Z |
|
| Redo | Ctrl+Shift+Z |
|
||||||
| New Tab | Ctrl+T |
|
| New Tab | Ctrl+T |
|
||||||
| Close Tab | Ctrl+W |
|
| Close Tab | Ctrl+W |
|
||||||
| Toggle Preview | Ctrl+Shift+P |
|
| Toggle Preview | Ctrl+Shift+V |
|
||||||
| Zoom In | Ctrl+Shift++ |
|
| Zoom In | Ctrl+Shift++ |
|
||||||
| Zoom Out | Ctrl+Shift+- |
|
| Zoom Out | Ctrl+Shift+- |
|
||||||
|
| Command Palette | Ctrl+Shift+P |
|
||||||
|
| Zen Mode | F11 |
|
||||||
|
| Writing Analytics | Ctrl+Shift+A |
|
||||||
|
| Quick Note | Ctrl+Alt+Q |
|
||||||
|
| Universal Converter | Ctrl+Shift+C |
|
||||||
|
| Table Generator | Ctrl+Shift+T |
|
||||||
|
| ASCII Art Generator | Ctrl+Shift+A |
|
||||||
|
| Next Comment | F8 |
|
||||||
|
| Add Comment at Cursor | Ctrl+Alt+M |
|
||||||
|
|
||||||
## Themes
|
## Themes
|
||||||
|
|
||||||
@@ -140,6 +166,43 @@ Open PDF files directly in MarkdownConverter:
|
|||||||
- Rotate pages left or right
|
- Rotate pages left or right
|
||||||
- Close PDF to return to editor
|
- Close PDF to return to editor
|
||||||
|
|
||||||
|
## Bundled Dependencies, Legal Notices & Credits
|
||||||
|
|
||||||
|
MarkdownConverter ships as a self-contained package. Everything needed for the
|
||||||
|
core workflows is **bundled**; a few large optional tools are detected from
|
||||||
|
the system when present.
|
||||||
|
|
||||||
|
### Bundled with the app
|
||||||
|
|
||||||
|
| Component | License | Role |
|
||||||
|
|---|---|---|
|
||||||
|
| [Pandoc](https://pandoc.org) 3.9 | GPL-2.0+ (separate process) | 25+ export/import formats |
|
||||||
|
| [FFmpeg](https://ffmpeg.org) (via ffmpeg-static) | GPL-3.0+ build (separate process) | audio/video tools |
|
||||||
|
| [MarkItDown](https://github.com/microsoft/markitdown) (MIT) + embedded Python runtime (PSF) | MIT / PSF | any-file → Markdown import (PDF/DOCX/PPTX/XLSX/Outlook/EPUB/images/ZIP) |
|
||||||
|
| [sharp](https://sharp.pixelplumbing.com) + libvips | Apache-2.0 / LGPL-2.1+ (dynamic) | image tools |
|
||||||
|
| [KaTeX](https://katex.org), [marked](https://marked.js.org), [highlight.js], [DOMPurify], [mermaid], [CodeMirror 6], pdf-lib (@cantoo fork), pdfjs-dist, JSZip, simple-git | MIT / Apache-2.0 / BSD-3 / MPL-2.0 | editor, preview, PDF, Git |
|
||||||
|
| JetBrains Mono & Fira Code fonts | SIL OFL 1.1 | editor typography |
|
||||||
|
|
||||||
|
GPL-licensed tools run as **separate processes** (never linked into the app)
|
||||||
|
and their complete corresponding sources are offered in
|
||||||
|
[SOURCES.md](SOURCES.md). Full details: [THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md),
|
||||||
|
also available inside the app under **Help → Third-Party Notices & Licenses**.
|
||||||
|
|
||||||
|
### Not bundled (used when installed)
|
||||||
|
|
||||||
|
LibreOffice (Office conversion), MiKTeX/TeX Live (LaTeX PDF), ImageMagick
|
||||||
|
(extra image formats), PlantUML + Java (local diagrams), Calibre (MOBI),
|
||||||
|
MarkItDown `[all]` extras (audio transcription / OCR).
|
||||||
|
|
||||||
|
### Credits
|
||||||
|
|
||||||
|
Built on open source: [Electron], [CodeMirror], [marked], [KaTeX],
|
||||||
|
[highlight.js], [DOMPurify](https://github.com/cure53/DOMPurify),
|
||||||
|
[mermaid](https://mermaid.js.org), [pdf-lib], [pdf.js](https://mozilla.github.io/pdf.js/),
|
||||||
|
[sharp]/libvips, [Pandoc], [FFmpeg], [MarkItDown] by Microsoft,
|
||||||
|
[simple-git], [JSZip], [JetBrains Mono], [Fira Code]. Thank you to all their
|
||||||
|
authors and maintainers.
|
||||||
|
|
||||||
## Open Source
|
## Open Source
|
||||||
|
|
||||||
MarkdownConverter is 100% open-source. All dependencies are permissively licensed:
|
MarkdownConverter is 100% open-source. All dependencies are permissively licensed:
|
||||||
@@ -162,4 +225,4 @@ Amit Haridas (amit.wh@gmail.com)
|
|||||||
|
|
||||||
## Version
|
## Version
|
||||||
|
|
||||||
v4.4.5
|
v4.7.1
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
# Source Code Availability (GPL / LGPL Written Offer)
|
||||||
|
|
||||||
|
MarkdownConverter distributes the following binaries built from GPL-licensed
|
||||||
|
software. Per GPL §3(b), this document is the written offer: **corresponding
|
||||||
|
source code for the exact versions listed below is available on request for
|
||||||
|
at least three years from each release**, and permanently at the referenced
|
||||||
|
public locations. Write to: amit.wh@gmail.com (or open a GitHub issue at
|
||||||
|
https://github.com/amitwh/markdown-converter/issues).
|
||||||
|
|
||||||
|
## Pandoc — GPL-2.0-or-later
|
||||||
|
|
||||||
|
- Binary shipped: `bin/pandoc` (v3.9.0.2, official upstream release, unmodified)
|
||||||
|
- SHA-256 (linux): `7d124235998ecd3cdd9a463b1e5f6691a178b6461824c29a36170a0882f05597`
|
||||||
|
- Source: <https://github.com/jgm/pandoc/archive/refs/tags/3.9.0.2.tar.gz>
|
||||||
|
- Pandoc statically links Haskell libraries (GHC ecosystem, mostly BSD-3);
|
||||||
|
their sources are included in the upstream release tarball's dependency set.
|
||||||
|
|
||||||
|
## FFmpeg — GPL-3.0-or-later (build configuration)
|
||||||
|
|
||||||
|
- Binary shipped: `ffmpeg` provided by the npm package `ffmpeg-static@5.3.0`
|
||||||
|
(Linux: johnvansickle.com build; Windows: gyan.dev; macOS: evermeet.cx —
|
||||||
|
all `--enable-gpl` builds including x264/x265, per the build banner)
|
||||||
|
- Source:
|
||||||
|
- FFmpeg: <https://ffmpeg.org/releases/> (use the release matching
|
||||||
|
`ffmpeg -version` of the shipped binary)
|
||||||
|
- Build scripts & pinned versions: <https://github.com/eugeneware/ffmpeg-static>
|
||||||
|
- x264: <https://code.videolan.org/videolan/x264> ·
|
||||||
|
x265: <https://bitbucket.org/multicoreware/x265_git/> ·
|
||||||
|
other `--enable-lib*` components: their upstream sources (all free/open)
|
||||||
|
|
||||||
|
## PyInstaller bootloader (inside the bundled MarkItDown binary) — GPL-2.0 with boot-exception
|
||||||
|
|
||||||
|
- Binary shipped: `bin/markitdown` (MarkItDown 0.1.7 frozen with PyInstaller 6.x)
|
||||||
|
- PyInstaller grants a special exception allowing the bootloader to be
|
||||||
|
embedded in non-GPL frozen applications; source anyway:
|
||||||
|
<https://github.com/pyinstaller/pyinstaller>
|
||||||
|
- Everything frozen above the bootloader (markitdown + Python packages +
|
||||||
|
CPython runtime) is permissively licensed (MIT/Apache/BSD/PSF/MPL);
|
||||||
|
see THIRD-PARTY-NOTICES.md §2 for the list.
|
||||||
|
- CPython runtime source: <https://www.python.org/downloads/source/>
|
||||||
|
(PSF License — not GPL, listed here for completeness).
|
||||||
|
|
||||||
|
## libvips (via sharp prebuilt binaries) — LGPL-2.1-or-later
|
||||||
|
|
||||||
|
- Shipped as dynamically-loaded libraries from `@img/*` prebuilts for sharp 0.35.4
|
||||||
|
- Source: <https://github.com/libvips/libvips> · prebuilt bundle sources:
|
||||||
|
<https://github.com/lovell/sharp-builds>
|
||||||
|
- LGPL compliance: the app's own source is public (MIT) and the libraries
|
||||||
|
remain separately replaceable files in the installation directory
|
||||||
|
(`node_modules/@img/`), satisfying the relinking requirement.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_Versions and hashes above correspond to the release this file ships with;
|
||||||
|
update them when bumping bundled tool versions._
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
# Third-Party Notices & Licenses
|
||||||
|
|
||||||
|
MarkdownConverter (this app) is MIT-licensed. This document lists the
|
||||||
|
third-party components that are **distributed with** the application, their
|
||||||
|
licenses, and where to obtain source code. Full license texts for the
|
||||||
|
copyleft and font licenses referenced here are in the `third-party-licenses/`
|
||||||
|
folder shipped alongside this file (and in the source repository).
|
||||||
|
|
||||||
|
This product includes software developed by third parties under the licenses
|
||||||
|
below. Copyright and license notices are reproduced verbatim or referenced
|
||||||
|
per each license's terms.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. This application
|
||||||
|
|
||||||
|
**MarkdownConverter** — Copyright (C) 2024-2025 ConcreteInfo (Amit Haridas) —
|
||||||
|
MIT License. See the repository `LICENSE` file.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Bundled external binaries
|
||||||
|
|
||||||
|
These run as separate operating-system processes, launched via `execFile`
|
||||||
|
with literal argv (never a shell, never linked into the app).
|
||||||
|
|
||||||
|
| Component | Version | License | Notes |
|
||||||
|
|---|---|---|---|
|
||||||
|
| Pandoc | 3.9.0.2 | GPL-2.0-or-later | Downloaded at build time by `scripts/download-tools.js` (SHA-256 pinned); license: [GPL-2.0](third-party-licenses/GPL-2.0.txt) |
|
||||||
|
| FFmpeg | bundled by `ffmpeg-static` 5.3.0 | **GPL-3.0-or-later build** (`--enable-gpl --enable-libx264/x265`) | License text: <https://ffmpeg.org/legal.html>; source offer below |
|
||||||
|
| MarkItDown | 0.1.7 (+ Python deps) | MIT | Microsoft's any-file→Markdown importer, frozen with PyInstaller by `scripts/bundle-markitdown.js`; includes an embedded CPython runtime (PSF license) |
|
||||||
|
| sharp / libvips prebuilt binaries | 0.35.4 | Apache-2.0 / **LGPL-2.1-or-later** (libvips) | Dynamically loaded native addon; LGPL compliance: this app's full MIT source is public, enabling relinking; license: [LGPL-2.1](third-party-licenses/LGPL-2.1.txt) |
|
||||||
|
| KaTeX (CSS + fonts) | 0.18.5 | MIT | `assets/katex/` |
|
||||||
|
| JetBrains Mono, Fira Code fonts | — | SIL OFL 1.1 | `assets/fonts/`; license: [OFL-1.1](third-party-licenses/OFL-1.1.txt) |
|
||||||
|
| Electron | 41.x | MIT | and its bundled Chromium (BSD-style licenses) / Node.js (MIT) / OpenSSL (Apache-2.0) — see <https://www.electronjs.org/blog/electron-licensing> |
|
||||||
|
|
||||||
|
### GPL source availability (GPL §3 offer)
|
||||||
|
|
||||||
|
Corresponding source for every GPL-licensed binary distributed with this app
|
||||||
|
is available on written request and from these permanent locations — see
|
||||||
|
**[SOURCES.md](SOURCES.md)** for exact versions and URLs.
|
||||||
|
|
||||||
|
### Python packages inside the bundled MarkItDown binary
|
||||||
|
|
||||||
|
The frozen MarkItDown binary embeds CPython and (each MIT/Apache-2.0/BSD-3/
|
||||||
|
PSF/MPL-2.0 licensed unless noted): markitdown, onnxruntime (MIT), numpy
|
||||||
|
(BSD-3), magika (Apache-2.0), beautifulsoup4 / soupsieve (MIT), requests
|
||||||
|
(Apache-2.0) + urllib3/idna/charset-normalizer, certifi (MPL-2.0),
|
||||||
|
markdownify, defusedxml (PSF), protobuf (BSD-3), flatbuffers (Apache-2.0),
|
||||||
|
pdfminer.six (MIT), python-docx, python-pptx, openpyxl, extract-msg,
|
||||||
|
markdown-it-py / mdurl, pyinstaller (GPL-2.0-with-exception — build tool
|
||||||
|
only; its bootloader is embedded, source offer included in SOURCES.md),
|
||||||
|
Packaging, six, click, chardet (LGPL — dynamically loadable Python module).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. npm dependencies shipped in the app (runtime)
|
||||||
|
|
||||||
|
| Package | Version | License |
|
||||||
|
|---|---|---|
|
||||||
|
| @cantoo/pdf-lib | 2.9.1 | MIT |
|
||||||
|
| @codemirror/* (autocomplete, commands, lang-*, language, lint, search, state, theme-one-dark, view), codemirror | 6.x | MIT |
|
||||||
|
| @replit/codemirror-vim | 6.4.0 | MIT |
|
||||||
|
| core-util-is | 1.0.3 | MIT |
|
||||||
|
| docx | 9.6.1 | MIT |
|
||||||
|
| dompurify | 3.4.14 | (MPL-2.0 OR Apache-2.0) |
|
||||||
|
| electron-store | 10.1.0 | MIT |
|
||||||
|
| ffmpeg-static | 5.3.0 | GPL-3.0-or-later (binary; see §2) |
|
||||||
|
| highlight.js | 11.11.1 | BSD-3-Clause |
|
||||||
|
| html2pdf.js | 0.14.0 | MIT |
|
||||||
|
| jszip | 3.10.1 | (MIT OR GPL-3.0-or-later) |
|
||||||
|
| katex | 0.18.5 | MIT |
|
||||||
|
| marked, marked-footnote, marked-highlight | 17.x / 1.4 / 2.2 | MIT |
|
||||||
|
| mermaid | 11.17.2 | MIT |
|
||||||
|
| pdfjs-dist | 5.5.207 | Apache-2.0 |
|
||||||
|
| pdfkit | 0.17.2 | MIT |
|
||||||
|
| pizzip | 3.2.0 | (MIT OR GPL-3.0) |
|
||||||
|
| sharp | 0.35.4 | Apache-2.0 (+ LGPL libvips binaries; see §2) |
|
||||||
|
| simple-git | 3.36.0 | MIT |
|
||||||
|
| tslib | 2.8.1 | 0BSD |
|
||||||
|
|
||||||
|
(Development-only dependencies — electron-builder, eslint, prettier, jest,
|
||||||
|
cross-env, @testing-library/dom — are not distributed with the application.)
|
||||||
|
|
||||||
|
## 4. Optional external tools (NOT bundled)
|
||||||
|
|
||||||
|
These are detected and used when the user installs them; no copy is
|
||||||
|
distributed with this app, so no redistribution obligations arise:
|
||||||
|
|
||||||
|
- **LibreOffice** (MPL-2.0) — enhanced Office-format conversion
|
||||||
|
- **MiKTeX / TeX Live** (LPPL/GPL per component) — LaTeX PDF export
|
||||||
|
- **ImageMagick** (Apache-2.0-style) — extra image formats in the universal converter
|
||||||
|
- **PlantUML** (GPL-3.0) + a Java runtime — local diagram rendering
|
||||||
|
- **Calibre** (`ebook-convert`) — MOBI export
|
||||||
|
- **System MarkItDown with `[all]` extras** — audio transcription / OCR
|
||||||
|
|
||||||
|
## 5. Trademarks
|
||||||
|
|
||||||
|
Product names used to describe compatibility (Pandoc, FFmpeg, LibreOffice,
|
||||||
|
MarkItDown, Microsoft, Excel, Word, PowerPoint…) are trademarks of their
|
||||||
|
respective owners and are not affiliated with this project.
|
||||||
|
|
||||||
|
## 6. License texts
|
||||||
|
|
||||||
|
See the `third-party-licenses/` directory: `GPL-2.0.txt`, `LGPL-2.1.txt`,
|
||||||
|
`MPL-2.0.txt`, `Apache-2.0.txt`, `OFL-1.1.txt`, `PSF-Python.txt`. MIT and
|
||||||
|
BSD-3-Clause texts are short and reproduced in each package's own repository;
|
||||||
|
per-package LICENSE files also ship inside `node_modules/` in source form.
|
||||||
@@ -1,5 +1,157 @@
|
|||||||
# PanConverter - Updates & Changelog
|
# PanConverter - Updates & Changelog
|
||||||
|
|
||||||
|
## Version 4.7.1 (2026-09-05)
|
||||||
|
|
||||||
|
### New: Export Themes (Word + PDF)
|
||||||
|
- Theme picker in the export dialog (basic and advanced mode) for PDF and DOCX:
|
||||||
|
**Default (Pandoc), Modern, Classic, Sepia, Minimal, Elegant**
|
||||||
|
- PDF: LaTeX header recolors/reformats headings + links (xcolor/titlesec,
|
||||||
|
core-TeX packages only); DOCX: styles.xml surgery recolors Heading1-6/Title/
|
||||||
|
Subtitle/Hyperlink and swaps heading/body fonts
|
||||||
|
- Themes persist in export presets; unknown ids in old presets fall back to
|
||||||
|
Default instead of failing the export
|
||||||
|
|
||||||
|
### Branding
|
||||||
|
- New M↓ brand identity: app icons, favicons, tray icon, welcome mark,
|
||||||
|
README wordmark (vector kit in assets/markdown-converter-assets/)
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
- **Windows**: pdfjs text/image extraction failed on Windows —
|
||||||
|
standardFontDataUrl is now a proper file:// URL (raw backslash paths
|
||||||
|
failed pdfjs's trailing-slash URL validation)
|
||||||
|
- **Windows**: sharp temp-file cleanup (EPERM retry), path-separator test
|
||||||
|
assertions, and pdfjs test timeouts fixed — the Windows CI job is green
|
||||||
|
- FiraCode tooling downloads pinned to the immutable 6.2 release;
|
||||||
|
.gitattributes stops CRLF checkout rewriting hash-pinned files
|
||||||
|
- macOS pandoc extractor locates the binary in the archive (layout changed)
|
||||||
|
- Packaged apps resolve bundled pandoc/markitdown next to the executable
|
||||||
|
(resourcesPath lookup was wrong since 4.5 — packaged builds silently used
|
||||||
|
system pandoc)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Version 4.7.0 (2026-09-05)
|
||||||
|
|
||||||
|
### Bundling & Legal Compliance
|
||||||
|
- **MarkItDown is now bundled**: `npm run bundle:markitdown` freezes Microsoft's
|
||||||
|
markitdown (MIT) + embedded Python runtime into a single ~75MB per-platform
|
||||||
|
binary (`bin/<platform>/markitdown`) via PyInstaller (ML extras excluded);
|
||||||
|
the app prefers the bundled binary and falls back to system installs
|
||||||
|
- Packaging copies the bundled markitdown for Windows/macOS/Linux alongside Pandoc
|
||||||
|
- **THIRD-PARTY-NOTICES.md** — full license inventory of everything distributed
|
||||||
|
(bundled binaries, npm runtime deps, fonts, embedded Python packages)
|
||||||
|
- **SOURCES.md** — GPL §3(b) written source offer for Pandoc / FFmpeg (GPL build) /
|
||||||
|
PyInstaller bootloader, with pinned versions + SHA-256; LGPL relinking note for libvips
|
||||||
|
- **third-party-licenses/** — canonical texts: GPL-2.0, LGPL-2.1, MPL-2.0,
|
||||||
|
Apache-2.0, OFL-1.1, PSF-Python
|
||||||
|
- **Help → Third-Party Notices & Licenses** — in-app viewer for both documents
|
||||||
|
- **download-tools.js** now SHA-256 pins and verifies every downloaded artifact
|
||||||
|
(post-download and against the cache on every run; hard-fails on mismatch)
|
||||||
|
- README gains a "Bundled Dependencies, Legal Notices & Credits" section
|
||||||
|
- Large optional tools intentionally NOT bundled (documented): LibreOffice,
|
||||||
|
MiKTeX/TeX Live, ImageMagick, PlantUML+JRE, Calibre
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Version 4.6.1 (2026-09-05)
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
- **MarkItDown import** — "File → Import with MarkItDown (Any Format)…" embeds
|
||||||
|
Microsoft's [markitdown](https://github.com/microsoft/markitdown) (MIT) as an
|
||||||
|
any-file → Markdown path: PDF, DOCX, PPTX, XLSX, Outlook .msg/.eml, EPUB,
|
||||||
|
images, CSV/JSON/XML, ZIP; audio transcription and OCR with the `[all]` extras
|
||||||
|
- Command auto-resolution: `markitdown` binary, then `python -m markitdown` /
|
||||||
|
`python3 -m markitdown` (probed once, cached)
|
||||||
|
- Same SEC-1 argv discipline as Pandoc (execFile only, paths never through a shell),
|
||||||
|
50MB input cap, 120s timeout, path-sanitized errors that surface markitdown's
|
||||||
|
actionable `pip install 'markitdown[...]'` hints
|
||||||
|
- Output written next to the source as `<name>.md` (numeric suffix instead of
|
||||||
|
overwriting) and opened in a new tab; `markitdown:available` / `markitdown:convert`
|
||||||
|
IPC for future renderer flows
|
||||||
|
- **AI Assistant: Anthropic-compatible provider** — any base URL speaking the
|
||||||
|
Anthropic messages schema (LiteLLM proxies, Bedrock gateways, local servers);
|
||||||
|
x-api-key + Bearer auth, keyless proxies supported, tolerates bases with or
|
||||||
|
without a trailing `/v1`
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
- File → Open PDF crashed the PDF editor (null operation matched no section; now
|
||||||
|
defaults to Merge)
|
||||||
|
- Backlinks panel required the wrong module path (failed at registration)
|
||||||
|
- writing-studio engines/panels now await their IPC-backed settings/file backends
|
||||||
|
(eliminates `JSON.parse("[object Promise]")` crashes)
|
||||||
|
- Manuscript panel's window.prompt (unsupported in Electron) replaced with an
|
||||||
|
inline dialog; collaboration comment store made async to match its IO
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Version 4.6.0 (2026-09-05)
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
#### AI Assistant Plugin (multi-provider)
|
||||||
|
- Chat sidebar panel with rolling conversation history and insert-reply-into-document
|
||||||
|
- Providers: OpenAI, Anthropic, Ollama, LM Studio, and any OpenAI-compatible endpoint
|
||||||
|
- All provider traffic proxied through the main process — API keys never enter the renderer and the CSP stays closed to AI endpoints
|
||||||
|
- Commands: AI Summarize / Improve / Explain / Translate selection
|
||||||
|
- Answers the writing-studio `ai:analyze` contract, finally enabling the Proofread panel
|
||||||
|
|
||||||
|
#### Collaboration Plugin (inline comments)
|
||||||
|
- Anchor-based comments stored in `.comments/` sidecar files (never exported, never committed)
|
||||||
|
- Comments sidebar panel: add at cursor, list, resolve, delete, jump to anchor
|
||||||
|
- Drift detection flags moved/edited anchors; F8 navigates to the next open comment
|
||||||
|
|
||||||
|
#### Local Knowledge Base (wiki-links + backlinks)
|
||||||
|
- `[[Note]]`, `[[Note|alias]]`, `[[Note#section]]` render as links in the preview (code blocks excluded)
|
||||||
|
- Clicking a wiki-link opens the note or offers to create it
|
||||||
|
- Backlinks sidebar panel scans the folder (bounded BFS) for documents linking to the current one
|
||||||
|
|
||||||
|
#### Crash Recovery / Session Restore
|
||||||
|
- Open tabs (paths + unsaved buffer content) snapshotted to localStorage, debounced on edits, on tab changes, on unload, and once a minute
|
||||||
|
- Restore prompt on launch with per-tab restore, clean-fresh option, and 2MB content budget
|
||||||
|
|
||||||
|
#### Document Version History
|
||||||
|
- Every save snapshots the previous on-disk content to `<userData>/versions/`
|
||||||
|
- History sidebar panel: list, restore (with safety snapshot), unified diff vs. current, delete, manual "save version now"
|
||||||
|
- Per-document pruning (20 versions), path-hash storage, id-validated reads
|
||||||
|
|
||||||
|
#### Editor
|
||||||
|
- Vim keybindings (View → Vim Mode, persisted, live toggle via CodeMirror Compartment)
|
||||||
|
- Snippet Tab-expansion: type a snippet name and press Tab to insert it
|
||||||
|
- Zen Mode word-goal setter (the HUD progress bar finally has UI)
|
||||||
|
|
||||||
|
#### Export / Conversion
|
||||||
|
- **Real PDF encryption**: pdf-lib swapped for @cantoo/pdf-lib — encrypt/decrypt/permissions now actually work (UI auto-enables via the capability probe)
|
||||||
|
- **XLSX export**: markdown tables → native Excel workbook, one sheet per table (no Pandoc needed)
|
||||||
|
- **ODT headers/footers + page size**: real ODF styles.xml patching replaces the empty stub
|
||||||
|
- **Local PlantUML rendering**: diagrams render on-machine via the `plantuml` CLI when installed; plantuml.com stays as fallback
|
||||||
|
- **KaTeX bundled locally** (CSS + fonts): math renders offline, no CDN calls
|
||||||
|
- Writing heatmap (GitHub-style 30-day grid) in the writing-studio Goals panel
|
||||||
|
|
||||||
|
#### Platform
|
||||||
|
- Quick Note global scratchpad (Ctrl+Alt+Q, works when unfocused; appends to `notes/quick-notes.md`)
|
||||||
|
- Deep link protocol `markdownconverter://open?path=…`
|
||||||
|
- REPL confirmation dialog before first code execution per language per session (unsandboxed-execution guard rail)
|
||||||
|
- Writing-studio's four sidebar panels (Manuscript/Goals/Snapshots/Proofread) are now actually wired with rail icons
|
||||||
|
- Plugin sidebar panels get automatic rail icons via `registerPanel({icon})`
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
- `Ctrl+Shift+P` collision: PDF (Enhanced) export now `Ctrl+Alt+Shift+P`; Command Palette keeps `Ctrl+Shift+P`
|
||||||
|
- Universal Converter's Pandoc tool no longer always reports "not installed" (`checkConverterAvailable` gained a pandoc case with bundled-binary check)
|
||||||
|
- CLI headless export: removed dangling `--css` / `--reference-doc` flags that made pandoc exit with an error; `--self-contained` replaced with `--standalone` (Pandoc 3.x)
|
||||||
|
- Removed dead "Open Export Options Dialog…" button from the converter dialog
|
||||||
|
- Removed duplicate `styles-zen.css` include
|
||||||
|
|
||||||
|
### Security
|
||||||
|
- AI provider requests carry size caps (200KB prompt), timeouts (120s), and user-safe error surfaces
|
||||||
|
- Version-history reads validate ids against traversal; history listing requires a valid document path
|
||||||
|
- PlantUML local rendering removes the diagram-text exfiltration path when a local CLI exists (CVE-MC-007 follow-up)
|
||||||
|
|
||||||
|
### Tests
|
||||||
|
- New suites: OdtStyling, AiProviders, ai-assistant prompts, collaboration comment-store, wiki-links/backlinks, session-store, XlsxExporter, VersionHistory
|
||||||
|
- PDFOperations encryption tests rewritten for the real-encryption reality
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Version 4.0.0 (2026-03-04)
|
## Version 4.0.0 (2026-03-04)
|
||||||
|
|
||||||
### Major Changes
|
### Major Changes
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 869 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1,93 @@
|
|||||||
|
Copyright (c) 2014, The Fira Code Project Authors (https://github.com/tonsky/FiraCode)
|
||||||
|
|
||||||
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
This license is copied below, and is also available with a FAQ at:
|
||||||
|
http://scripts.sil.org/OFL
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
|
development of collaborative font projects, to support the font creation
|
||||||
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
|
open framework in which fonts may be shared and improved in partnership
|
||||||
|
with others.
|
||||||
|
|
||||||
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
|
redistributed and/or sold with any software provided that any reserved
|
||||||
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
|
however, cannot be released under any other type of license. The
|
||||||
|
requirement for fonts to remain under this license does not apply
|
||||||
|
to any document created using the fonts or their derivatives.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
|
copyright statement(s).
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components as
|
||||||
|
distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting -- in part or in whole -- any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to a
|
||||||
|
new environment.
|
||||||
|
|
||||||
|
"Author" refers to any designer, engineer, programmer, technical
|
||||||
|
writer or other person who contributed to the Font Software.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
|
1) Neither the Font Software nor any of its individual components,
|
||||||
|
in Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
|
redistributed and/or sold with any software, provided that each copy
|
||||||
|
contains the above copyright notice and this license. These can be
|
||||||
|
included either as stand-alone text files, human-readable headers or
|
||||||
|
in the appropriate machine-readable metadata fields within text or
|
||||||
|
binary files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
|
Name(s) unless explicit written permission is granted by the corresponding
|
||||||
|
Copyright Holder. This restriction only applies to the primary font name as
|
||||||
|
presented to the users.
|
||||||
|
|
||||||
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
|
Software shall not be used to promote, endorse or advertise any
|
||||||
|
Modified Version, except to acknowledge the contribution(s) of the
|
||||||
|
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
5) The Font Software, modified or unmodified, in part or in whole,
|
||||||
|
must be distributed entirely under this license, and must not be
|
||||||
|
distributed under any other license. The requirement for fonts to
|
||||||
|
remain under this license does not apply to any document created
|
||||||
|
using the Font Software.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This license becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)
|
||||||
|
|
||||||
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
This license is copied below, and is also available with a FAQ at:
|
||||||
|
https://scripts.sil.org/OFL
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
|
development of collaborative font projects, to support the font creation
|
||||||
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
|
open framework in which fonts may be shared and improved in partnership
|
||||||
|
with others.
|
||||||
|
|
||||||
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
|
redistributed and/or sold with any software provided that any reserved
|
||||||
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
|
however, cannot be released under any other type of license. The
|
||||||
|
requirement for fonts to remain under this license does not apply
|
||||||
|
to any document created using the fonts or their derivatives.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
|
copyright statement(s).
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components as
|
||||||
|
distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting -- in part or in whole -- any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to a
|
||||||
|
new environment.
|
||||||
|
|
||||||
|
"Author" refers to any designer, engineer, programmer, technical
|
||||||
|
writer or other person who contributed to the Font Software.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
|
1) Neither the Font Software nor any of its individual components,
|
||||||
|
in Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
|
redistributed and/or sold with any software, provided that each copy
|
||||||
|
contains the above copyright notice and this license. These can be
|
||||||
|
included either as stand-alone text files, human-readable headers or
|
||||||
|
in the appropriate machine-readable metadata fields within text or
|
||||||
|
binary files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
|
Name(s) unless explicit written permission is granted by the corresponding
|
||||||
|
Copyright Holder. This restriction only applies to the primary font name as
|
||||||
|
presented to the users.
|
||||||
|
|
||||||
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
|
Software shall not be used to promote, endorse or advertise any
|
||||||
|
Modified Version, except to acknowledge the contribution(s) of the
|
||||||
|
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
5) The Font Software, modified or unmodified, in part or in whole,
|
||||||
|
must be distributed entirely under this license, and must not be
|
||||||
|
distributed under any other license. The requirement for fonts to
|
||||||
|
remain under this license does not apply to any document created
|
||||||
|
using the Font Software.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This license becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
|
Before Width: | Height: | Size: 206 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 885 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 885 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 606 B After Width: | Height: | Size: 655 B |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 206 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.1 KiB |
@@ -0,0 +1,95 @@
|
|||||||
|
# Markdown Converter — Brand Assets
|
||||||
|
|
||||||
|
Visual identity for [markdown-converter](https://github.com/amitwh/markdown-converter): a cross-platform Markdown editor & document converter powered by Pandoc.
|
||||||
|
|
||||||
|
## Concept
|
||||||
|
|
||||||
|
The mark is a stylized **M** whose right descender becomes a downward chevron — a literal "**M↓**" for **Markdown**, suggesting the source document flowing downward into rendered output (PDF, DOCX, PPTX, …).
|
||||||
|
|
||||||
|
The palette is a vibrant orange-to-deep-orange gradient (`#FB923C → #C2410C`) on a white mark — warm, energetic, distinctive. The mark itself is **white** on light surfaces, and a luminous peach-to-orange gradient (`#FFEDD5 → #FB923C`) on dark surfaces.
|
||||||
|
|
||||||
|
## Files
|
||||||
|
|
||||||
|
### App icon (vector, primary)
|
||||||
|
|
||||||
|
These are **true SVG app icons** — clean vector paths, no rasters. Drop them straight into a macOS/Windows/Linux app bundle, a PWA manifest, an iOS asset catalog, an Electron build, or any HTML page.
|
||||||
|
|
||||||
|
| File | Use it for |
|
||||||
|
| --- | --- |
|
||||||
|
| `app-icon.svg` | **Primary app icon.** Emerald→teal vertical gradient, subtle white highlight upper-left, white M↓ mark. |
|
||||||
|
| `app-icon-dark.svg` | **Dark-mode app icon.** Charcoal gradient background, soft teal radial glow upper-left, mint-to-emerald gradient on the M↓ mark. |
|
||||||
|
| `app-icon-flat.svg` | **Flat solid variant.** Single emerald background, white M↓ mark. Use when you can't render gradients (print, stickers, single-color contexts). |
|
||||||
|
|
||||||
|
### Logo (wordmark)
|
||||||
|
|
||||||
|
| File | Use it for |
|
||||||
|
| --- | --- |
|
||||||
|
| `logo-horizontal.jpg` (2752×1536) | High-res raster master. README hero, press kit. |
|
||||||
|
| `logo-horizontal-1600w.jpg` (1600×893) | Web-ready compressed version. |
|
||||||
|
| `logo-horizontal.svg` | Vector wordmark. Use in HTML, CSS, anywhere that needs to scale. |
|
||||||
|
|
||||||
|
### Vector mark (for code & inline use)
|
||||||
|
|
||||||
|
| File | Use it for |
|
||||||
|
| --- | --- |
|
||||||
|
| `mark.svg` | Gradient SVG mark. Drop into HTML, use as a UI element, or rasterize at any size. |
|
||||||
|
| `mark-mono.svg` | Monochrome SVG. Uses `currentColor` — style it from CSS (`color: white;`) for any single-color context. |
|
||||||
|
| `mark-standalone.jpg` (2048×2048) | Raster M↓ on white, for places that need a PNG (GitHub avatar, doc thumbnails). |
|
||||||
|
|
||||||
|
### Favicons (rasterized from `app-icon.svg`)
|
||||||
|
|
||||||
|
In the `favicons/` directory:
|
||||||
|
|
||||||
|
| File | Use it for |
|
||||||
|
| --- | --- |
|
||||||
|
| `favicon.ico` | Legacy `.ico` (16/32/48/64 embedded). Drop at the site root. |
|
||||||
|
| `favicon-16x16.png`, `favicon-32x32.png`, `favicon-48x48.png` | Standard browser favicons. |
|
||||||
|
| `apple-touch-icon.png` (180×180) | iOS home screen & "Add to Home Screen". |
|
||||||
|
| `icon-192.png`, `icon-512.png` | Android home screen, PWA manifest, web app. |
|
||||||
|
|
||||||
|
### Social preview
|
||||||
|
|
||||||
|
| File | Use it for |
|
||||||
|
| --- | --- |
|
||||||
|
| `og-social-preview-1200x630.jpg` | **GitHub social preview** — set as the repository's social card image (Settings → Social preview). Also works as Open Graph / Twitter Card. |
|
||||||
|
|
||||||
|
## Usage in the repo
|
||||||
|
|
||||||
|
Drop the vector icons + favicon set into the repo root or a `/brand` folder, then in `README.md`:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
<p align="left">
|
||||||
|
<img src="./brand/app-icon.svg" width="80" alt="Markdown Converter">
|
||||||
|
</p>
|
||||||
|
```
|
||||||
|
|
||||||
|
For the favicon, in `index.html` (or any HTML site):
|
||||||
|
|
||||||
|
```html
|
||||||
|
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||||
|
```
|
||||||
|
|
||||||
|
For an Electron app, point `build.icon` at the SVG (or a 512×512 PNG export):
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"build": {
|
||||||
|
"icon": "brand/icon-512.png"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Color tokens
|
||||||
|
|
||||||
|
```
|
||||||
|
--mc-orange-400: #FB923C /* gradient start (light) */
|
||||||
|
--mc-orange-700: #C2410C /* gradient end (light) */
|
||||||
|
--mc-orange-500: #F97316 /* flat / accent */
|
||||||
|
--mc-peach-100: #FFEDD5 /* dark-mode mark start */
|
||||||
|
--mc-orange-300: #FDBA74 /* dark-mode mark mid */
|
||||||
|
--mc-ink-900: #0F172A /* primary text */
|
||||||
|
--mc-ink-500: #475569 /* secondary text */
|
||||||
|
--mc-ink-400: #94A3B8 /* tagline / muted */
|
||||||
|
```
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" role="img" aria-label="Markdown Converter app icon (dark)">
|
||||||
|
<title>Markdown Converter (dark)</title>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="darkBg" x1="0" y1="0" x2="0" y2="1024" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0%" stop-color="#1C1917"/>
|
||||||
|
<stop offset="100%" stop-color="#0C0A09"/>
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient id="darkGlow" cx="280" cy="180" r="780" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0%" stop-color="#EA580C" stop-opacity="0.65"/>
|
||||||
|
<stop offset="60%" stop-color="#9A3412" stop-opacity="0.15"/>
|
||||||
|
<stop offset="100%" stop-color="#9A3412" stop-opacity="0"/>
|
||||||
|
</radialGradient>
|
||||||
|
<linearGradient id="darkMark" x1="0" y1="180" x2="0" y2="844" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0%" stop-color="#FFEDD5"/>
|
||||||
|
<stop offset="100%" stop-color="#FB923C"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1024" height="1024" rx="224" ry="224" fill="url(#darkBg)"/>
|
||||||
|
<rect width="1024" height="1024" rx="224" ry="224" fill="url(#darkGlow)"/>
|
||||||
|
<g transform="translate(154, 176) scale(7.16)" fill="none" stroke="url(#darkMark)" stroke-width="9" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<line x1="26" y1="22" x2="26" y2="72"/>
|
||||||
|
<line x1="63" y1="22" x2="63" y2="75"/>
|
||||||
|
<polyline points="22,18 44.5,56 67,18"/>
|
||||||
|
<polyline points="48,60 63,76 78,60"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" role="img" aria-label="Markdown Converter app icon (flat)">
|
||||||
|
<title>Markdown Converter (flat)</title>
|
||||||
|
<rect width="1024" height="1024" rx="224" ry="224" fill="#F97316"/>
|
||||||
|
<g transform="translate(154, 176) scale(7.16)" fill="none" stroke="#FFFFFF" stroke-width="9" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<line x1="26" y1="22" x2="26" y2="72"/>
|
||||||
|
<line x1="63" y1="22" x2="63" y2="75"/>
|
||||||
|
<polyline points="22,18 44.5,56 67,18"/>
|
||||||
|
<polyline points="48,60 63,76 78,60"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 609 B |
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" role="img" aria-label="Markdown Converter app icon">
|
||||||
|
<title>Markdown Converter</title>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="iconBg" x1="0" y1="0" x2="0" y2="1">
|
||||||
|
<stop offset="0%" stop-color="#FB923C"/>
|
||||||
|
<stop offset="100%" stop-color="#C2410C"/>
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient id="iconHighlight" cx="0.28" cy="0.18" r="0.55">
|
||||||
|
<stop offset="0%" stop-color="#FFFFFF" stop-opacity="0.28"/>
|
||||||
|
<stop offset="60%" stop-color="#FFFFFF" stop-opacity="0"/>
|
||||||
|
</radialGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1024" height="1024" rx="224" ry="224" fill="url(#iconBg)"/>
|
||||||
|
<rect width="1024" height="1024" rx="224" ry="224" fill="url(#iconHighlight)"/>
|
||||||
|
<g transform="translate(154, 176) scale(7.16)" fill="none" stroke="#FFFFFF" stroke-width="9" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<line x1="26" y1="22" x2="26" y2="72"/>
|
||||||
|
<line x1="63" y1="22" x2="63" y2="75"/>
|
||||||
|
<polyline points="22,18 44.5,56 67,18"/>
|
||||||
|
<polyline points="48,60 63,76 78,60"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 724 B |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 13 KiB |