https://github.com/rgiskard7/forevernote
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.
https://github.com/rgiskard7/forevernote
actory-pattern composite-pattern crud dao-pattern database hierarchical-structure java logging note-taking repository-pattern sqlite-dao-pattern
Last synced: about 2 months ago
JSON representation
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.
- Host: GitHub
- URL: https://github.com/rgiskard7/forevernote
- Owner: RGiskard7
- License: other
- Created: 2024-06-10T22:28:31.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-07T00:38:33.000Z (over 1 year ago)
- Last Synced: 2025-03-07T01:28:34.460Z (over 1 year ago)
- Topics: actory-pattern, composite-pattern, crud, dao-pattern, database, hierarchical-structure, java, logging, note-taking, repository-pattern, sqlite-dao-pattern
- Language: Java
- Homepage:
- Size: 15.1 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Forevernote
[](LICENSE)
[](changelog.md)
[](https://www.oracle.com/java/)
[](https://openjfx.io/)
[](https://www.sqlite.org/)
[](https://maven.apache.org/)
[]()
Local-first desktop note-taking app with Markdown preview, plugins, themes, and dual storage backends.
## Table of Contents
- [Overview](#overview)
- [Features](#features)
- [Screenshots](#screenshots)
- [Technology Stack](#technology-stack)
- [Prerequisites](#prerequisites)
- [Quick Start](#quick-start)
- [Scripts and Commands (All OS)](#scripts-and-commands-all-os)
- [Project Structure](#project-structure)
- [Configuration](#configuration)
- [Documentation](#documentation)
- [Troubleshooting](#troubleshooting)
- [Contributing](#contributing)
- [License](#license)
## 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

### Dark Theme

### Light Theme

### Editor & Preview

## 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:
```bash
java -version
mvn -version
```
## Quick Start
### 1) Clone
```bash
git clone https://github.com/RGiskard7/Forevernote.git
cd Forevernote
```
### 2) Build
```bash
./scripts/build_all.sh
```
```powershell
.\scripts\build_all.ps1
```
### 3) Run
```bash
./scripts/launch-forevernote.sh
```
```powershell
.\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
```bash
mvn -f Forevernote/pom.xml test
mvn -f Forevernote/pom.xml clean test
```
```bash
./scripts/smoke-phase-gate.sh
./scripts/hardening-storage-matrix.sh
```
```powershell
.\scripts\smoke-phase-gate.ps1
.\scripts\hardening-storage-matrix.ps1
```
### Plugins (external JARs)
```bash
./scripts/build-plugins.sh
./scripts/build-plugins.sh --clean
```
```powershell
.\scripts\build-plugins.ps1
.\scripts\build-plugins.ps1 -Clean
```
### Themes (external)
```bash
./scripts/build-themes.sh
./scripts/build-themes.sh --clean
./scripts/build-themes.sh --appdata
```
```powershell
.\scripts\build-themes.ps1
.\scripts\build-themes.ps1 -Clean
.\scripts\build-themes.ps1 -AppData
```
### Packaging
```bash
mvn -f Forevernote/pom.xml clean package -DskipTests
./scripts/package-linux.sh
./scripts/package-macos.sh
```
```powershell
.\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
```bash
mvn -f Forevernote/pom.xml clean compile exec:java -Dexec.mainClass="com.example.forevernote.Launcher"
```
## Project Structure
```text
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:
```text
themes//theme.properties
themes//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
- [doc/BUILD.md](doc/BUILD.md)
- [doc/ARCHITECTURE.md](doc/ARCHITECTURE.md)
- [doc/PLUGINS.md](doc/PLUGINS.md)
- [doc/LAUNCH_APP.md](doc/LAUNCH_APP.md)
- [doc/PACKAGING.md](doc/PACKAGING.md)
- [doc/EVENT_BUS_CONTRACT.md](doc/EVENT_BUS_CONTRACT.md)
- [doc/DEFINITION_OF_DONE.md](doc/DEFINITION_OF_DONE.md)
- [doc/PROJECT_STATUS.md](doc/PROJECT_STATUS.md)
- [doc/PROJECT_ANALYSIS.md](doc/PROJECT_ANALYSIS.md)
- [AGENTS.md](AGENTS.md)
## 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`:
```bash
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](LICENSE).