A lightweight and modern Markdown editor built with JavaFX.
Author: Frédéric Delorme (McG) - contact.snapgames@gmail.com
Repository: https://github.com/mcgivrer/marknote
- Markdown Editing - Full-featured Markdown editor with syntax highlighting (headings, bold, italic, strikethrough, code, blockquotes, lists, links, images, horizontal rules)
- Live Preview - Real-time HTML preview with WebView rendering
- Syntax Highlighting - Code blocks with automatic language detection and theme-aware syntax coloring (via highlight.js); each app theme maps to a matching highlight.js style
- Code Block Copy Button - One-click copy for code blocks in preview, with visual "✓ Copied" feedback
- Markdown Tables - Full GFM table support with styled rendering
- PlantUML Diagrams - Render PlantUML diagrams directly in preview; supports both the official PlantUML online server and a local PlantUML jar (configurable in Options → Tools); when local rendering is active a spinning ⚙ gear icon and a status indicator are shown in the status bar during generation
- Mermaid Diagrams - Render Mermaid diagrams (flowcharts, sequences, etc.) directly in preview; Mermaid theme auto-matches app theme
- Math Equations - LaTeX/MathML support via KaTeX for inline (
$...$) and block ($$...$$) equations - Front Matter Panel - Collapsible panel above the editor for visual editing of YAML front matter (title, tags, authors, summary, UUID, created date, draft); supports custom fields and UUID-based document linking via drag & drop
- Collapsible Front Matter Preview - Front matter rendered as a styled, collapsible block at the top of the preview showing title, draft badge, tags, summary, author, date, and linked documents
- Project Explorer - Browse and manage your project files with drag & drop support;
.mdfiles display front matter titles; directories first, alphabetically sorted; hidden file filtering; multi-file selection - Git Integration - Automatic git detection (presence of
.git/); files annotated with colored status dots (🟢 clean, 🟡 modified, 🔵 staged, 🔴 untracked); a ⇅ Sync button in the Project Explorer toolbar commits all local changes (auto-generated message including date, hostname and file list), pulls latest remote changes (rebase) and pushes; SSH (passphrase-less key) and HTTPS personal access token authentication configured in Options → Git; status dots refresh automatically after every file operation - Project Indexing - Automatic incremental indexing of all Markdown files by front matter metadata (title, tags, authors, summary, created date, draft, links) and filenames, stored as a persistent local JSON index (
.marknote-index.json) - Search - Instant full-text search across indexed documents with a live results popup (up to 20 results); matches on title, filename, tags, summary, authors, and UUID; keyboard navigation
- Search & Replace - In-editor search/replace overlay (
Ctrl+F/Ctrl+H) with optional Regular Expression, Full Word, and Match Case toggles; navigate occurrences with▲/▼; replace current match or all matches at once; result counter; closes withEscape - Tag Cloud - Visual tag cloud panel below the project explorer showing tag frequency; click any tag to search for it
- Network Diagram - Interactive force-directed graph visualizing document links and shared tags; drag nodes, pan, zoom, click to open documents, click tags for search popup; tooltips with title/author/date; current document highlighted with orange border; isolated nodes hidden; auto zoom-to-fit; document groups shown with pastel-colored circles (click to zoom, double-click to name); detach button to open diagram in a dedicated tab; automatic label hiding at high zoom-out for large projects
- Status Bar - Bottom status bar showing current document name, cursor position (line:column), document statistics (docs/lines/words), indexing progress bar, and a PlantUML local-jar indicator (⚙ spinning gear during rendering + "● PlantUML: local jar" badge when local mode is active); indexing runs in a background thread
- Multi-document Tabs - Work on multiple documents simultaneously; drag tabs to reorder; tab name truncation with tooltip; modified indicator (
*prefix) - Drag & Drop into Editor - Drop files from Project Explorer into the editor to insert Markdown image or link syntax at the drop position
- Theme Support - Built-in themes (Light, Dark, Solarized Light, Solarized Dark, High Contrast) with custom theme creation via a full CSS theme editor with syntax highlighting; syntax highlighting themes coordinate automatically
- Splash Screen - Themed splash screen at startup with application logo (can be disabled in options), also used as About dialog (modal with Close button)
- Image Preview - Quick preview for images with zoom (10%–1000%) and pan; info banner showing format and dimensions; zoom level overlay with fade-out
- Recent Files & Projects - Quick access to recently opened files and projects, organized in separate sections with Clear History
- Welcome Page - Configurable welcome screen with recent projects
- Cross-platform - Works on Linux, macOS, and Windows
- Application Icon - Custom SVG icon with PNG exports (16, 32, 64, 128 px) shown in the title bar, taskbar, and Alt+Tab switcher
- View Menu Controls - Toggle visibility of Project Explorer (
Ctrl+E), Preview (Ctrl+P), Tag Cloud (Ctrl+T), and Network Diagram (Ctrl+L) via the View menu; Show Welcome - Close Tab - Close the active document tab with
Ctrl+W
MarkNote is available in 5 languages:
| Language | Locale |
|---|---|
| Français (French) | fr |
| English | en |
| Deutsch (German) | de |
| Español (Spanish) | es |
| Italiano (Italian) | it |
The application automatically uses your system's locale.
- Java 25 or higher
- JavaFX 24 (included in libs folder)
Clone the repository and run the build script:
git clone https://github.com/mcgivrer/marknote.git
cd marknote
./build| Command | Description |
|---|---|
./build |
Compile the project and create the JAR |
./build run |
Compile and run the application |
./build test |
Run unit tests |
./build package |
Create a distributable package for the current platform with embedded JRE |
./build package-all |
Create distributable packages for all platforms (linux, mac, win) |
After building, run the application:
./target/build/MarkNote.shOr use the build script:
./build runjava -Duser.language=en -Duser.country=US --module-path target/build/libs --add-modules javafx.base,javafx.graphics,javafx.controls,javafx.fxml,javafx.media,javafx.web -cp "target/build/MarkNote-0.1.0.jar:target/build/libs/*" MainCreate a distributable package for the current host platform with an embedded minimal JRE:
./build packageThis creates a ZIP archive in target/ containing:
- The application JAR
- Common platform-independent libraries (
libs/common/) - Platform-specific JavaFX native libraries (
libs/{platform}/) - Embedded minimal JRE (created with
jlink) - Platform-specific launcher script (
MarkNote.shorMarkNote.bat) - Platform-specific installer script (
install.shorinstall.bat)
Create packages for all three platforms in one shot:
./build package-allThis produces three ZIP archives in target/:
| Archive | Platform |
|---|---|
MarkNote-{version}-linux.zip |
Linux x64 |
MarkNote-{version}-mac.zip |
macOS |
MarkNote-{version}-win.zip |
Windows x64 |
Note: A minimal embedded JRE (via
jlink) is bundled only for the current host platform. Cross-platform packages include all required JARs but require a compatible Java runtime already installed on the target system. Cross-platform JRE bundling requires a JDK for each target OS to be available on the build host.
The package is named: MarkNote-{version}-{platform}.zip
Where {platform} is:
linux- Linux x64mac- macOSwin- Windows x64
- Download or build the package for your platform
- Extract the ZIP archive:
unzip MarkNote-0.1.0-linux.zip cd MarkNote-0.1.0-linux - Run the application:
- Linux/macOS:
./MarkNote.sh - Windows:
MarkNote.bat
- Linux/macOS:
- Clone and build the project (see Building section)
- Run directly from the build output:
./target/build/MarkNote.sh
MarkNote/
├── build # Build script
├── libs/ # External libraries
│ ├── common/ # Platform-independent JARs
│ ├── linux/ # Linux-specific JavaFX natives
│ ├── mac/ # macOS-specific JavaFX natives
│ └── win/ # Windows-specific JavaFX natives
├── src/main/
│ ├── java/ # Java source files
│ │ ├── Main.java
│ │ ├── MarkNote.java
│ │ ├── config/ # Configuration (AppConfig, ThemeManager)
│ │ ├── ui/ # UI components (Editor, Preview, SearchBox, TagCloud, VisualLinkPanel...)
│ │ └── utils/ # Utilities (DocumentService, FrontMatter, IndexService, PlantUmlEncoder, GitService)
│ └── resources/
│ ├── css/ # Stylesheets
│ │ ├── markdown-editor.css
│ │ └── themes/ # Theme CSS files
│ ├── i18n/ # Internationalization
│ │ ├── messages.properties
│ │ ├── messages_fr.properties
│ │ ├── messages_en.properties
│ │ ├── messages_de.properties
│ │ ├── messages_es.properties
│ │ └── messages_it.properties
│ └── images/ # Application icons
└── target/ # Build output
Contributions are welcome! Here's how you can help:
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-new-feature - Commit your changes:
git commit -am 'Add some feature' - Push to the branch:
git push origin feature/my-new-feature - Submit a Pull Request
- Follow existing code style and conventions
- Add/update i18n messages for all supported languages when adding UI text
- Test on multiple platforms if possible
- Update documentation as needed
- Create a new
messages_{locale}.propertiesfile insrc/main/resources/i18n/ - Translate all messages from the default file
- Update this README to list the new language
MIT License
Copyright (c) 2026 Frédéric Delorme - SnapGames
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
