Skip to content

RGiskard7/Forevernote

Repository files navigation

Forevernote

Español | English
Forevernote Banner

License: MIT Version Java JavaFX SQLite Maven Platform

Local-first desktop note-taking app with Markdown preview, plugins, themes, and dual storage backends.

Table of Contents

Overview

Forevernote is a Java 17 + JavaFX 21 desktop application inspired by Obsidian-like workflows:

  • Fast note writing/editing with Markdown preview
  • Folder hierarchy + tags + favorites + recent + trash
  • Command palette and quick switcher
  • External plugins (plugins/) and external themes (themes/)
  • Storage mode: SQLite or FileSystem vault

Features

Core

  • Create, edit, save, delete, and restore notes
  • Hierarchical folders and subfolders
  • Tags with assignment/removal workflows
  • Favorites and recent notes
  • Trash with restore for notes and nested folders
  • Global search and sorting

Editor & Preview

  • Markdown rendering with GFM tables, autolinks, strikethrough
  • Live preview and split mode
  • Syntax highlighting for fenced code blocks (highlight.js)
  • Obsidian-style wikilinks parsing/indexing ([[note]], [[note|alias]], ![[asset]]) for navigation and graph

UI/UX

  • Light, dark, system themes + external themes
  • Retro phosphor sample external theme
  • Configurable sidebar/editor button presentation (text/icons/auto)
  • List and grid note views
  • Compact and responsive layout behavior
  • Multi-note tabs in editor
  • Integrated graph workspace (global/local) with zoom/pan and reindex support

Extensibility

  • External plugin loading from JAR files in plugins/
  • Plugin manager UI
  • Plugin lifecycle support (load/enable/disable/shutdown)
  • Theme catalog with external theme discovery and safe fallback

Screenshots

Main Interface

Main Interface

Dark Theme

Dark Theme

Light Theme

Light Theme

Editor & Preview

Editor Features

Technology Stack

  • Java 17
  • JavaFX 21
  • Maven 3.9+
  • SQLite JDBC
  • CommonMark
  • Ikonli (Feather icons)
  • JUnit 5 + H2 (tests)

Prerequisites

  1. Java JDK 17
  2. Maven 3.9+

Check installation:

java -version
mvn -version

Quick Start

1) Clone

git clone https://github.com/RGiskard7/Forevernote.git
cd Forevernote

2) Build

./scripts/build_all.sh
.\scripts\build_all.ps1

3) Run

./scripts/launch-forevernote.sh
.\scripts\launch-forevernote.bat
# or
.\scripts\launch-forevernote.ps1

Scripts and Commands (All OS)

All commands assume repository root:

/Users/edu/visual-studio-code-workspace/Forevernote

Build / Run Matrix

Purpose Linux/macOS Windows PowerShell Windows CMD
Build app ./scripts/build_all.sh .\scripts\build_all.ps1 N/A
Run app (dev runner) ./scripts/run_all.sh .\scripts\run_all.ps1 N/A
Run app (launcher, recommended) ./scripts/launch-forevernote.sh .\scripts\launch-forevernote.ps1 .\scripts\launch-forevernote.bat

Tests and Quality Gates

mvn -f Forevernote/pom.xml test
mvn -f Forevernote/pom.xml clean test
./scripts/smoke-phase-gate.sh
./scripts/hardening-storage-matrix.sh
.\scripts\smoke-phase-gate.ps1
.\scripts\hardening-storage-matrix.ps1

Plugins (external JARs)

./scripts/build-plugins.sh
./scripts/build-plugins.sh --clean
.\scripts\build-plugins.ps1
.\scripts\build-plugins.ps1 -Clean

Themes (external)

./scripts/build-themes.sh
./scripts/build-themes.sh --clean
./scripts/build-themes.sh --appdata
.\scripts\build-themes.ps1
.\scripts\build-themes.ps1 -Clean
.\scripts\build-themes.ps1 -AppData

Packaging

mvn -f Forevernote/pom.xml clean package -DskipTests
./scripts/package-linux.sh
./scripts/package-macos.sh
.\scripts\package-windows.ps1

Packaging scripts now prepare both external plugins and external themes automatically before calling jpackage:

  • package-macos.sh -> runs build-plugins.sh + build-themes.sh
  • package-linux.sh -> runs build-plugins.sh + build-themes.sh
  • package-windows.ps1 -> runs build-plugins.ps1 + build-themes.ps1

Maven Development Run

mvn -f Forevernote/pom.xml clean compile exec:java -Dexec.mainClass="com.example.forevernote.Launcher"

Project Structure

Forevernote/
├── Forevernote/
│   ├── pom.xml
│   ├── src/main/java/com/example/forevernote/
│   │   ├── config/
│   │   ├── data/
│   │   ├── event/
│   │   ├── exceptions/
│   │   ├── plugin/
│   │   ├── service/
│   │   ├── sync/
│   │   ├── ui/
│   │   └── util/
│   ├── src/main/resources/com/example/forevernote/
│   │   ├── i18n/
│   │   ├── plugin/
│   │   ├── ui/css/
│   │   ├── ui/preview/
│   │   └── ui/view/
│   ├── src/test/
│   └── themes/                     # runtime-installed external themes
├── plugins/                        # external plugin jars
├── plugins-source/                 # sample plugin source workspace
├── themes/                         # source external themes
├── scripts/
├── doc/
├── AGENTS.md
├── changelog.md
├── README.md
└── README.es.md

Configuration

Storage

  • SQLite database (default) or FileSystem vault mode
  • Runtime folders are created automatically as needed:
    • Forevernote/data/
    • Forevernote/logs/

Themes

External theme format:

themes/<theme-id>/theme.properties
themes/<theme-id>/theme.css

Plugins

  • Place plugin JAR files in plugins/
  • Open plugin manager from Tools menu for enable/disable operations

Do I Need to Move Plugins/Themes Manually?

Short answer: usually no.

  • Development run (run_all.* / launch-forevernote.*):

    • build-plugins.* places JARs into Forevernote/plugins/
    • build-themes.* places themes into Forevernote/themes/
    • App resolves both locations directly, no manual move required.
  • Packaged installers (package-*):

    • Scripts already build plugins/themes automatically.
    • If your JDK supports jpackage --app-content, plugins/themes are bundled.
    • If not (common with JDK 17), app still works but users should place files in AppData:
      • Windows: %APPDATA%\Forevernote\plugins and %APPDATA%\Forevernote\themes
      • macOS: ~/Library/Application Support/Forevernote/plugins and ~/Library/Application Support/Forevernote/themes
      • Linux: ~/.config/Forevernote/plugins and ~/.config/Forevernote/themes

Documentation

Troubleshooting

JavaFX Runtime Errors

If you get JavaFX runtime/module-path issues, use launcher scripts (launch-forevernote.*) instead of running JAR directly.

Maven/Java Missing

Ensure both are available in PATH:

java -version
mvn -version

JavaFX Parent-POM Warnings

Warnings such as Failed to build parent project for org.openjfx:javafx-* are known and non-blocking.

Markdown Preview Notes

  • Emoji rendering depends on the platform font stack and JavaFX WebView behavior. Some emoji glyphs may not render consistently across OSes.
  • For local embeds (![[file.ext]]), ensure files exist in the selected vault/path and use supported image formats (e.g. png, jpg, jpeg, gif, svg, webp where available on your platform/runtime).

Contributing

  • Keep changes focused and incremental.
  • Run tests before opening PR.
  • Preserve SQLite/FileSystem and plugin compatibility.
  • Update documentation when behavior changes.

License

MIT. See LICENSE.

About

A note-taking application with a structured data management system, using SQLite for persistence. Implements DAO patterns for folder, note, and tag management. Supports hierarchical organization, tagging, and geolocation metadata.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors