{"id":26871231,"url":"https://github.com/rgiskard7/forevernote","last_synced_at":"2026-04-30T01:38:49.016Z","repository":{"id":281099097,"uuid":"813338862","full_name":"RGiskard7/Forevernote","owner":"RGiskard7","description":"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.","archived":false,"fork":false,"pushed_at":"2025-03-07T00:38:33.000Z","size":15858,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-07T01:28:34.460Z","etag":null,"topics":["actory-pattern","composite-pattern","crud","dao-pattern","database","hierarchical-structure","java","logging","note-taking","repository-pattern","sqlite-dao-pattern"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RGiskard7.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2024-06-10T22:28:31.000Z","updated_at":"2025-03-07T00:43:17.000Z","dependencies_parsed_at":"2025-03-07T01:38:41.894Z","dependency_job_id":null,"html_url":"https://github.com/RGiskard7/Forevernote","commit_stats":null,"previous_names":["rgiskard7/forevernote"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RGiskard7%2FForevernote","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RGiskard7%2FForevernote/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RGiskard7%2FForevernote/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RGiskard7%2FForevernote/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RGiskard7","download_url":"https://codeload.github.com/RGiskard7/Forevernote/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246429486,"owners_count":20775809,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["actory-pattern","composite-pattern","crud","dao-pattern","database","hierarchical-structure","java","logging","note-taking","repository-pattern","sqlite-dao-pattern"],"created_at":"2025-03-31T07:18:49.951Z","updated_at":"2026-04-30T01:38:49.009Z","avatar_url":"https://github.com/RGiskard7.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Forevernote\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"README.es.md\"\u003eEspañol\u003c/a\u003e |\n  \u003cstrong\u003eEnglish\u003c/strong\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"resources/images/banner.png\" alt=\"Forevernote Banner\" style=\"width: 100%; max-width: 100%;\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![Version](https://img.shields.io/badge/version-1.0.0-success.svg)](changelog.md)\n[![Java](https://img.shields.io/badge/Java-17+-orange.svg)](https://www.oracle.com/java/)\n[![JavaFX](https://img.shields.io/badge/JavaFX-21-blue.svg)](https://openjfx.io/)\n[![SQLite](https://img.shields.io/badge/SQLite-3-lightgrey.svg)](https://www.sqlite.org/)\n[![Maven](https://img.shields.io/badge/Maven-3.9+-red.svg)](https://maven.apache.org/)\n[![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey.svg)]()\n\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cstrong\u003eLocal-first desktop note-taking app with Markdown preview, plugins, themes, and dual storage backends.\u003c/strong\u003e\n\u003c/div\u003e\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Features](#features)\n- [Screenshots](#screenshots)\n- [Technology Stack](#technology-stack)\n- [Prerequisites](#prerequisites)\n- [Quick Start](#quick-start)\n- [Scripts and Commands (All OS)](#scripts-and-commands-all-os)\n- [Project Structure](#project-structure)\n- [Configuration](#configuration)\n- [Documentation](#documentation)\n- [Troubleshooting](#troubleshooting)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Overview\n\nForevernote is a Java 17 + JavaFX 21 desktop application inspired by Obsidian-like workflows:\n\n- Fast note writing/editing with Markdown preview\n- Folder hierarchy + tags + favorites + recent + trash\n- Command palette and quick switcher\n- External plugins (`plugins/`) and external themes (`themes/`)\n- Storage mode: SQLite or FileSystem vault\n\n## Features\n\n### Core\n\n- Create, edit, save, delete, and restore notes\n- Hierarchical folders and subfolders\n- Tags with assignment/removal workflows\n- Favorites and recent notes\n- Trash with restore for notes and nested folders\n- Global search and sorting\n\n### Editor \u0026 Preview\n\n- Markdown rendering with GFM tables, autolinks, strikethrough\n- Live preview and split mode\n- Syntax highlighting for fenced code blocks (highlight.js)\n- Obsidian-style wikilinks parsing/indexing (`[[note]]`, `[[note|alias]]`, `![[asset]]`) for navigation and graph\n\n### UI/UX\n\n- Light, dark, system themes + external themes\n- Retro phosphor sample external theme\n- Configurable sidebar/editor button presentation (text/icons/auto)\n- List and grid note views\n- Compact and responsive layout behavior\n- Multi-note tabs in editor\n- Integrated graph workspace (global/local) with zoom/pan and reindex support\n\n### Extensibility\n\n- External plugin loading from JAR files in `plugins/`\n- Plugin manager UI\n- Plugin lifecycle support (load/enable/disable/shutdown)\n- Theme catalog with external theme discovery and safe fallback\n\n## Screenshots\n\n### Main Interface\n\n![Main Interface](resources/images/interfaz-3.png)\n\n### Dark Theme\n\n![Dark Theme](resources/images/interfaz-1.png)\n\n### Light Theme\n\n![Light Theme](resources/images/interfaz-2.png)\n\n### Editor \u0026 Preview\n\n![Editor Features](resources/images/interfaz-4.png)\n\n## Technology Stack\n\n- Java 17\n- JavaFX 21\n- Maven 3.9+\n- SQLite JDBC\n- CommonMark\n- Ikonli (Feather icons)\n- JUnit 5 + H2 (tests)\n\n## Prerequisites\n\n1. Java JDK 17\n2. Maven 3.9+\n\nCheck installation:\n\n```bash\njava -version\nmvn -version\n```\n\n## Quick Start\n\n### 1) Clone\n\n```bash\ngit clone https://github.com/RGiskard7/Forevernote.git\ncd Forevernote\n```\n\n### 2) Build\n\n```bash\n./scripts/build_all.sh\n```\n\n```powershell\n.\\scripts\\build_all.ps1\n```\n\n### 3) Run\n\n```bash\n./scripts/launch-forevernote.sh\n```\n\n```powershell\n.\\scripts\\launch-forevernote.bat\n# or\n.\\scripts\\launch-forevernote.ps1\n```\n\n## Scripts and Commands (All OS)\n\nAll commands assume repository root:\n\n`/Users/edu/visual-studio-code-workspace/Forevernote`\n\n### Build / Run Matrix\n\n| Purpose | Linux/macOS | Windows PowerShell | Windows CMD |\n|---|---|---|---|\n| Build app | `./scripts/build_all.sh` | `.\\scripts\\build_all.ps1` | N/A |\n| Run app (dev runner) | `./scripts/run_all.sh` | `.\\scripts\\run_all.ps1` | N/A |\n| Run app (launcher, recommended) | `./scripts/launch-forevernote.sh` | `.\\scripts\\launch-forevernote.ps1` | `.\\scripts\\launch-forevernote.bat` |\n\n### Tests and Quality Gates\n\n```bash\nmvn -f Forevernote/pom.xml test\nmvn -f Forevernote/pom.xml clean test\n```\n\n```bash\n./scripts/smoke-phase-gate.sh\n./scripts/hardening-storage-matrix.sh\n```\n\n```powershell\n.\\scripts\\smoke-phase-gate.ps1\n.\\scripts\\hardening-storage-matrix.ps1\n```\n\n### Plugins (external JARs)\n\n```bash\n./scripts/build-plugins.sh\n./scripts/build-plugins.sh --clean\n```\n\n```powershell\n.\\scripts\\build-plugins.ps1\n.\\scripts\\build-plugins.ps1 -Clean\n```\n\n### Themes (external)\n\n```bash\n./scripts/build-themes.sh\n./scripts/build-themes.sh --clean\n./scripts/build-themes.sh --appdata\n```\n\n```powershell\n.\\scripts\\build-themes.ps1\n.\\scripts\\build-themes.ps1 -Clean\n.\\scripts\\build-themes.ps1 -AppData\n```\n\n### Packaging\n\n```bash\nmvn -f Forevernote/pom.xml clean package -DskipTests\n./scripts/package-linux.sh\n./scripts/package-macos.sh\n```\n\n```powershell\n.\\scripts\\package-windows.ps1\n```\n\nPackaging scripts now prepare both external plugins and external themes automatically before calling `jpackage`:\n- `package-macos.sh` -\u003e runs `build-plugins.sh` + `build-themes.sh`\n- `package-linux.sh` -\u003e runs `build-plugins.sh` + `build-themes.sh`\n- `package-windows.ps1` -\u003e runs `build-plugins.ps1` + `build-themes.ps1`\n\n### Maven Development Run\n\n```bash\nmvn -f Forevernote/pom.xml clean compile exec:java -Dexec.mainClass=\"com.example.forevernote.Launcher\"\n```\n\n## Project Structure\n\n```text\nForevernote/\n├── Forevernote/\n│   ├── pom.xml\n│   ├── src/main/java/com/example/forevernote/\n│   │   ├── config/\n│   │   ├── data/\n│   │   ├── event/\n│   │   ├── exceptions/\n│   │   ├── plugin/\n│   │   ├── service/\n│   │   ├── sync/\n│   │   ├── ui/\n│   │   └── util/\n│   ├── src/main/resources/com/example/forevernote/\n│   │   ├── i18n/\n│   │   ├── plugin/\n│   │   ├── ui/css/\n│   │   ├── ui/preview/\n│   │   └── ui/view/\n│   ├── src/test/\n│   └── themes/                     # runtime-installed external themes\n├── plugins/                        # external plugin jars\n├── plugins-source/                 # sample plugin source workspace\n├── themes/                         # source external themes\n├── scripts/\n├── doc/\n├── AGENTS.md\n├── changelog.md\n├── README.md\n└── README.es.md\n```\n\n## Configuration\n\n### Storage\n\n- SQLite database (default) or FileSystem vault mode\n- Runtime folders are created automatically as needed:\n  - `Forevernote/data/`\n  - `Forevernote/logs/`\n\n### Themes\n\nExternal theme format:\n\n```text\nthemes/\u003ctheme-id\u003e/theme.properties\nthemes/\u003ctheme-id\u003e/theme.css\n```\n\n### Plugins\n\n- Place plugin JAR files in `plugins/`\n- Open plugin manager from Tools menu for enable/disable operations\n\n### Do I Need to Move Plugins/Themes Manually?\n\nShort answer: usually **no**.\n\n- Development run (`run_all.*` / `launch-forevernote.*`):\n  - `build-plugins.*` places JARs into `Forevernote/plugins/`\n  - `build-themes.*` places themes into `Forevernote/themes/`\n  - App resolves both locations directly, no manual move required.\n\n- Packaged installers (`package-*`):\n  - Scripts already build plugins/themes automatically.\n  - If your JDK supports `jpackage --app-content`, plugins/themes are bundled.\n  - If not (common with JDK 17), app still works but users should place files in AppData:\n    - Windows: `%APPDATA%\\Forevernote\\plugins` and `%APPDATA%\\Forevernote\\themes`\n    - macOS: `~/Library/Application Support/Forevernote/plugins` and `~/Library/Application Support/Forevernote/themes`\n    - Linux: `~/.config/Forevernote/plugins` and `~/.config/Forevernote/themes`\n\n## Documentation\n\n- [doc/BUILD.md](doc/BUILD.md)\n- [doc/ARCHITECTURE.md](doc/ARCHITECTURE.md)\n- [doc/PLUGINS.md](doc/PLUGINS.md)\n- [doc/LAUNCH_APP.md](doc/LAUNCH_APP.md)\n- [doc/PACKAGING.md](doc/PACKAGING.md)\n- [doc/EVENT_BUS_CONTRACT.md](doc/EVENT_BUS_CONTRACT.md)\n- [doc/DEFINITION_OF_DONE.md](doc/DEFINITION_OF_DONE.md)\n- [doc/PROJECT_STATUS.md](doc/PROJECT_STATUS.md)\n- [doc/PROJECT_ANALYSIS.md](doc/PROJECT_ANALYSIS.md)\n- [AGENTS.md](AGENTS.md)\n\n## Troubleshooting\n\n### JavaFX Runtime Errors\n\nIf you get JavaFX runtime/module-path issues, use launcher scripts (`launch-forevernote.*`) instead of running JAR directly.\n\n### Maven/Java Missing\n\nEnsure both are available in `PATH`:\n\n```bash\njava -version\nmvn -version\n```\n\n### JavaFX Parent-POM Warnings\n\nWarnings such as `Failed to build parent project for org.openjfx:javafx-*` are known and non-blocking.\n\n### Markdown Preview Notes\n\n- Emoji rendering depends on the platform font stack and JavaFX WebView behavior. Some emoji glyphs may not render consistently across OSes.\n- 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).\n\n## Contributing\n\n- Keep changes focused and incremental.\n- Run tests before opening PR.\n- Preserve SQLite/FileSystem and plugin compatibility.\n- Update documentation when behavior changes.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frgiskard7%2Fforevernote","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frgiskard7%2Fforevernote","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frgiskard7%2Fforevernote/lists"}