Last Updated: 2026-03-17
This document tracks planned and proposed work for SnapFX. This roadmap keeps a high-level progress view plus planned/proposed work; detailed completed/fixed release history is tracked in CHANGELOG.md. Planned items stay high-level in this file; granular test-count tracking and change-by-change history are intentionally kept outside the roadmap.
| Phase | Status | Completion |
|---|---|---|
| Phase 1: Core Stability | β Completed | 100% |
| Phase 2: Floating Windows | β Completed | 100% |
| Phase 3: User Experience | π§ In Progress | 75% |
| Phase 4: Advanced Features | π§ In Progress | 35% |
| Phase 5: Themes & Customization | π§ In Progress | 60% |
| Phase 6: Performance & Polish | π Planned | 0% |
| Phase 7: Developer Experience | π§ In Progress | 50% |
| Phase 8: Production Readiness | π§ In Progress | 40% |
Total Project Completion: ~86%
- β Completed - Feature fully implemented and tested
- π§ In Progress - Currently being worked on
- π Planned - Scheduled for implementation
- π‘ Proposed - Idea under consideration
- β Blocked - Waiting on dependencies or decisions
Priority: π΄ Critical
- β
Tiny-bounds drop-zone stability: Drop-zone edge sizing now avoids
Math.clampmin/max-order exceptions during drag hover on very small bounds - π No planned items; see CHANGELOG.md for completed fixes.
Priority: π‘ High
- β
DockDebugOverlay HUD fixes: Fixed missing panel background rendering (layout sizing), top-left clipping, and stale
nonetarget/zone diagnostics text during active drags; MainDemo HUD remains a local debug-toggle option - β MainDemo debug/settings split divider stability: The outer demo split divider between the dock area and Debug/Settings tabs now remains stable during dock-layout rebuilds by updating a persistent left-side host container instead of replacing the split item
Priority: π‘ High
- β
CI module-split follow-up: Stability-check test filters were updated to
org.snapfx...and now run on:snapfx-core:test - β Add performance tests: Large layouts with 50+ nodes
- β Add memory leak tests: Ensure proper cleanup
- β Add edge case tests: More boundary conditions
- β Floating drag-state regression hardening: Added scene-level drag release/reset and non-primary activation guard coverage for floating title-bar movement
- β Persistence edge-case hardening: Added complex floating snapshot roundtrip coverage and invalid floating snapshot validation/no-partial-apply tests
- β
CI flake guard for critical interactions: CI now reruns
SnapFXTest,DockFloatingWindowTest, andDockDragServiceTestthree times per run - β
Sidebar overlay width test CI race hardening:
SnapFXTestoverlay-width/resize-handle tests avoid prebuildingSnapFXbefore reflective sidebar icon clicks, preventing an async sidebarrequestRebuild()race before the final scene build on CI - β Floating reattach structure hardening: Added three-window floating-layout detach/attach roundtrip regression coverage (top-left/top-right/bottom nodes), plus detach-close-remaining-attach host-restore fallback cases
Estimated Time: Completed
Priority: π‘ High
- β Smart divider positioning: Better initial divider positions
- β Empty layout handling: Proper behavior when graph is empty
- β Single node optimization: Skip unnecessary containers
- β
Demo baseline split ratio preset: MainDemo primary three-pane split initializes as
25% | 50% | 25%
Estimated Time: Completed
Priority: π‘ High
- β
Container tab title/icon UX: Tabs containing nested split/tab layouts now derive title/icon from a representative DockNode (
Title +N) instead of showing container class names - β
Layout-load diagnostics UX: Invalid layout files now return typed
DockLayoutLoadExceptionfailures with JSON path context, and MainDemo surfaces the details in an error dialog - β Unknown-type layout recovery UX: Corrupted/unsupported serialized node types now recover via factory custom fallback or framework placeholder diagnostics without aborting full layout load
- π No planned items; see CHANGELOG.md for completed fixes.
Priority: π’ Medium
- β DockFloatingWindow class: Manage external stages
- β Detach from main window: Drag node outside main window to create floating window
- β Attach to main window: Drag-attach and title-bar attach are both supported
- β
Multi-monitor support: Position by explicit screen coordinates (
floatNode(node, x, y)) - β Cross-window D&D: Dock between main and floating windows, including floating-to-floating
- β Empty-main-layout re-dock parity: When all nodes are floating and the main layout is empty, center-drop into the empty main area now restores dragged nodes back to the main layout
- β Window state persistence: Save/load floating window positions
Estimated Time: Completed
Priority: π’ Medium
- β MainDemo close-hook sample: Demo now shows editor-specific save prompts on close requests
- β
MainDemo editor file actions: Demo now includes open/save/save-as workflow for
SerializableEditornodes - β MainDemo FileChooser consolidation: Layout and editor open/save dialogs now share reusable chooser builders, filter constants, and save-default resolution helpers
- β
Theme runtime switching API:
initialize(...)now auto-applies the default SnapFX stylesheet,setThemeStylesheet(...)updates primary/floating scenes at runtime, and built-in themes are exposed as an ordered named catalog (Light,Dark) via list/map helpers - β MainDemo theme selector: Settings tab now reads themes from the SnapFX named catalog and switches styles via API
- β
Theme modularization: Theme catalog metadata and stylesheet apply/resolve logic are extracted from
SnapFXinto dedicated classes underorg.snapfx.theme - β MainDemo layout menu icon parity: Hidden/Floating menu entries display dock-node icons when available
- β Maximize/restore: Custom floating title-bar toggle implemented
- β Maximized drag restore: Dragging the title bar from maximized restores and moves the window
- β Title-bar drag continuity: Floating window drag continues even when the cursor leaves the title bar during a pressed drag
- β Floating D&D visual feedback: Floating windows show drop zones and active drop indicator during drag
- β Topmost overlap targeting: In overlapping floating/main windows, preview and drop target only the frontmost surface under cursor
- β Locked-mode floating controls: Floating title-bar controls now hide in locked mode and close is blocked while locked
- β Single-node inner control cleanup: Inner dock-node close/float controls are hidden for single-node floating layouts
- β Float-from-floating detach parity: Float actions and unresolved D&D releases inside floating sub-layouts create a new floating window for the selected node
- β
Configurable close behavior: Close behavior is centrally configurable (
HIDE/REMOVE) withHIDEas default - β Close callback hooks: Source-aware close callbacks now support interception/outcome handling for tab, title-bar, and floating-window close requests
- β
Always on top / pinning: Floating windows now support configurable pin-button visibility (
ALWAYS/AUTO/NEVER), default pinned state, lock-mode behavior, and persisted always-on-top snapshots - β Window decorations: Custom title bar styling and controls
- β Resizable undecorated windows: Edge/corner resize behavior for floating stages
- β Tab-level float action: Float button available in tab headers
- β Floating title-bar icon reliability: Title-bar icons now stay visible across dock/header/tab views and track active tab selection
- β Floating title-bar context-menu dismiss behavior: Context menu now hides immediately when clicking the title bar outside the menu
- β Maximized restore drag threshold: Restore-on-drag from maximized requires deliberate pointer movement
- β Adaptive resize minimum constraints: Floating resize honors effective stage/content minimum sizes
- β Interactive-target resize cursor reliability: Edge resize cursors now apply consistently over content controls (for example console text areas)
- β Owner-aware MainDemo error alerts: Error dialogs attach to the primary stage for better multi-monitor usability
- β Host-aware floating reattach restore: Attach now restores detached floating-sub-layout nodes back to remembered host context (preferred/neighbor anchors) and falls back silently to active host root or main layout when anchors are unavailable, including when source floating-layout neighbors changed after detach
Estimated Time: Completed
Priority: π’ Medium
- β
Framework shortcut API:
SnapFXnow supports configurable key mappings (setShortcut,clearShortcut,resetShortcutsToDefaults,getShortcuts) - β Ctrl+W: Close active dock node (default mapping, fully configurable)
- β Ctrl+Tab: Switch to next tab (default mapping, fully configurable)
- β Ctrl+Shift+Tab: Switch to previous tab (default mapping, fully configurable)
- β Escape: Cancel active drag operation (default mapping, fully configurable)
- β Escape reliability: Active drag cancellation now works even while the mouse button is still held
- β Ctrl+Shift+P: Toggle active floating window always-on-top (default mapping, fully configurable)
- β F11 (MainDemo): Fullscreen toggle implemented at application level (kept out of framework defaults)
Estimated Time: Completed (framework baseline)
Priority: π’ Medium
- β Right-click on tab: Close, Close Others, Close All, Float (with control-glyph icons for close/float)
- β Right-click on splitter: Reset splitter ratios to balanced layout
- β Right-click on header: Float and Close actions for dock-node headers (with control-glyph icons)
- β Header context-menu dismiss behavior: Dock-node header context menu now hides when pressing the header (including the same toolbar area)
- β
Right-click on floating title bar:
Attach to Layoutand toggle "Always on Top" - π‘ Customizable menu items: API for adding custom actions
Estimated Time: Remaining ~0.5 day
Priority: π‘ Low
- β Completed: Demo About dialog easter egg animation (triple-click logo trigger on SnapFX Icon).
- π‘ Smooth docking: Fade in/out when adding/removing nodes
- π‘ Tab switching: Slide animation
- π‘ Splitter adjustment: Smooth resize
- π‘ Ghost overlay: Fade in/out
- π‘ Configurable: Enable/disable animations globally
Estimated Time: 2-3 days
Priority: π’ Medium
Note: This can be easily implemented in the application code as well, but it is a common feature for many applications and is a good candidate for a framework-level API.
- π Perspective API: Save/load named layouts
- π Perspective switcher: Quick switch between predefined layouts
- π Default perspectives: "Editor", "Debug", "Review" modes
- π Custom perspectives: User-defined layouts
Estimated Time: 2 days
Priority: π’ Medium
- β
Phase 1 API + MainDemo manual controls:
SnapFXfacade APIs and MainDemo Settings/Layout-menu controls now exercise pinned side-bar model/persistence foundations (pinned entries, pinned-open state, deterministic restore anchors) - β MainDemo visual sidebar strips (validation UI): MainDemo now renders visible left/right pinned-sidebar strips for manual Phase-C testing without waiting for framework-side view integration
- β Phase 1 visual side-panel integration: SnapFX now renders framework-level left/right side bars (icon strips + pinned side panels) connected to the existing model/persistence state
- β
Phase 1 restore placement reliability: Sidebar restore in
SnapFXnow reuses the floating-style placement-memory fallback pipeline (preferred + neighbor anchors + fallback) to restore nodes to their remembered layout context more reliably - β
Phase 1 naming cleanup (pre-release): Sidebar API/model semantics were renamed to
pinOpen.../collapse.../is...PinnedOpenand serializer state keyvisible->pinnedOpen(no compatibility aliases while project is private) - β Phase 1 overlay interaction baseline: Click-to-open/click-to-toggle overlay panels, outside-click close, pin/unpin transitions, configurable pinned active-icon collapse policy (with pin-mode-preserving temporary collapse), default-collapsed pinning, and hit-testing/side placement fixes are implemented
- β Phase 1 persistence UX coverage: Manual SnapFX/MainDemo verification for mixed main/floating/sidebar save-load and lock-mode scenarios is completed on top of the model/serializer/test coverage
- β Phase 2 scope refinement: Hover auto-hide/reveal behavior was dropped from the near-term plan in favor of higher-value sidebar interaction parity (DnD, framework context menus, and resize)
- β
Phase 2 model foundation (sidebar ordering):
DockGraphnow supports index-based sidebar insertion/reordering and cross-side moves with clamped bounds, providing the base semantics for sidebar DnD drop-positioning - β
Phase 2 sidebar DnD baseline (strip target):
SnapFXnow accepts unresolved drops onto visible sidebar icon strips with exact insertion index resolution, renders a sidebar insert-position line during drag hover, supports strip-icon drag as a sidebar DnD source, and reuses the sidebar-ordering model semantics for reorder/cross-source moves; pinned sidebar nodes are also handled correctly as DnD sources for main/floating drops - β
Framework sidebar move context menus: Built-in
Move to Left Sidebar/Move to Right Sidebaractions are now available in framework dock-node header and tab context menus (including floating layouts), wired to SnapFX sidebar pinning with lock-aware disabling - β
Framework sidebar node context menus: Sidebar strip icons and expanded sidebar panel headers now provide built-in restore/move/pin actions (
Restore from Sidebar,Move to Left/Right Sidebar,Pin/Unpin Sidebar Panel) with lock-aware disabling - β Resizable sidebar panel widths: Sidebar panels are resizable per side via framework resize handles; pinned and overlay modes share the same per-side width with runtime clamping and MainDemo Settings controls
- β
Sidebar width persistence: Per-side sidebar panel widths now roundtrip via
DockLayoutSerializerside-bar state (panelWidth) with backward-compatible default fallback - β
Sidebar visibility mode API (
DockSideBarMode): SnapFX now exposesALWAYS/AUTO/NEVERsidebar UI modes;ALWAYSrenders empty strips for direct DnD targets,AUTOkeeps the current behavior, andNEVERsuppresses sidebar UI plus framework sidebar move context-menu actions - β Right overlay sidebar resize handle reliability: Unpinned right sidebar overlays now resize correctly after raising the resize handle above overlay panel chrome/shadow and making the full handle bounds explicitly pickable
- β Phase 2 completion (current scope): Sidebar interaction parity scope is complete for the current release target (DnD strip baseline, framework/sidebar context menus, resize + persistence, and sidebar visibility mode); broader panel-surface DnD targeting/polish is deferred to optional backlog
- π Sidebar view extraction/refactor: Optional extraction of the current framework sidebar rendering from
SnapFXinto a dedicated view/controller component if complexity grows further - π‘ Optional sidebar DnD panel-surface targeting: Extend sidebar DnD beyond the current strip-target baseline (for example broader sidebar-surface targeting around pinned/overlay panels) while keeping deterministic target resolution and lock-aware behavior
- π‘ Optional sidebar DnD preview polish: Extend/align sidebar insertion preview behavior beyond the current strip-target line baseline (for example additional target surfaces or richer preview states)
Status: β Completed for current scope (optional follow-ups remain in backlog)
Priority: π΅ Low
Note: The current implementation shows no high demand for size constraints. However, it is important to ensure that panels have a minimum size to prevent them from becoming too small and unreadable.
- π Min/max width: Prevent panels from becoming too small/large
- π Preferred size: Respect component size hints
- π Resize limits: Constrain splitter movement
- π Proportional resize: Maintain ratios when resizing
Estimated Time: 2 days
Priority: π΅ Low
Note: The Idea behind this feature is to provide a 2D grid container that can be used to organize and arrange panels in a grid-like layout. However, this would be only usable via API and not directly in the UI in a reliable manner. This is why the feature is not included in the current release and maybe never will. If experimental tests show that it is useful and can be implemented in a way that is not too difficult and fits the current design, then it might be considered for future releases.
- π‘ DockGridPane class: 2D grid container
- π‘ Row/column spanning: Multi-cell panels
- π‘ Grid resize: Adjust row heights and column widths
- π‘ Nested layouts: Combine with split/tab containers
Estimated Time: 5-7 days
Priority: π’ Medium
- β Window-to-window snapping: Floating windows now snap to other floating-window edges while moving or resizing
- β Snap to main docking area: Floating windows now snap to the main-window edges while moving or resizing
- β
Configurable snap distance:
SnapFX.setFloatingWindowSnapDistance(...)controls tolerance in pixels - β
Configurable snap targets:
SnapFX.setFloatingWindowSnapTargets(...)controls screen/main/floating snap surfaces - β MainDemo snapping settings controls: Debug settings tab now exposes snapping enable, snap distance, and snap targets for direct manual API verification
- β
Snapping engine consolidation: Candidate generation and overlap-aware snap logic are centralized in
DockFloatingSnapEnginefor maintainability and focused testing - π‘ Visual snap guides: Alignment indicator lines while dragging
Estimated Time: 1-2 hours
Priority: π’ Medium
- β
Light theme: Bright, clean appearance (
snapfx.css) is built in and remains the default - β
Dark theme: Low-light alternative (
snapfx-dark.css) is built in - β Custom theme API: Runtime stylesheet switching supports classpath resources and absolute stylesheet URLs
- β Theme switcher: Runtime theme changes are wired through API and exposed in MainDemo Settings
- β
Named theme discovery: Built-in themes are exposed as ordered name/path metadata (
Light,Dark) for UI pickers
Estimated Time: Completed
Priority: π΅ Low
Note: All visual aspects of the framework are designed to be customizable via CSS, the goal is to provide some examples of how this can be done.
- β Control glyph styling via CSS: Dock/floating control icons are stylesheet-defined (no hardcoded vector icon factory)
- β MainDemo application icon: Multi-size SnapFX app icons are wired to the demo stage
- π‘ Custom icons: Replace default icons
- π‘ Tab styles: Different tab appearances
- π‘ Header styles: Customizable node headers
- π‘ Splitter styles: Custom divider appearance
Estimated Time: 2 days
Priority: π‘ High
- π Lazy view creation: Create views only when visible
- π View recycling: Reuse views when possible
- π Virtual rendering: For large tab sets
- π Async layout: Background layout calculations
- π Benchmark suite: Measure and track performance
Estimated Time: 3-4 days
Priority: π‘ High
- π Weak references: For cached views
- π Proper cleanup: Ensure no memory leaks
- π Resource disposal: Cleanup on close
- π Memory profiling: Identify and fix leaks
Estimated Time: 2 days
Priority: π’ Medium
- π Screen reader support: Proper ARIA labels
- π Keyboard navigation: Full keyboard access
- π Focus management: Logical tab order
- π High contrast: Support high contrast themes
- π Font scaling: Respect system font sizes
Estimated Time: 2-3 days
Priority: π’ Medium
- β
Split ratio API: Configure split pane ratios directly via
SnapFX.setRootSplitRatios(...)/setSplitRatios(...) - β
Localization runtime API: Added locale/provider property APIs, built-in
EN/DE, provider extension SPI, and FX-thread mutation enforcement - π§ Pre-
v1.0.0maintainability refactor track: Decompose oversized orchestration classes (starting withSnapFX), deduplicate DnD/floating interaction policies, and reduce internal coupling while keeping public API behavior stable - π Builder pattern: Fluent API for layout construction
- π Event API: Listen to layout changes
- π Validation API: Check layout validity
- π Query API: Find nodes by criteria
Estimated Time: 2 days
Priority: π‘ High
- β
Documentation ownership baseline: Scope split clarified (
STATUScurrent,ROADMAPplanned,DONEcompleted,TESTING_POLICYrules-only) - β Minimal-diff editing baseline: collaboration rules now require targeted edits over full-file rewrites whenever smaller diffs are sufficient
- β
Unicode icon readability baseline:
\u...icon constants in doc consistency tests now include inline rendered-icon comments - β
ADR baseline: Significant design decisions are documented under
docs/adr/and mirrored in API/architecture documentation - β License wording baseline: README/SETUP now state MIT licensing and explicit personal/commercial use positioning
- β README consumer-focus baseline: Quick Start now focuses on SnapFX usage, without generic Gradle/module templates or repository workflow sections
- β Maintainer docs baseline: Collaboration/release workflow is now documented in CONTRIBUTING.md and RELEASING.md
- β Versioned changelog baseline: Historical changes are now consolidated in CHANGELOG.md and grouped by release tags
- β Status scope baseline: STATUS.md now keeps only current state and open issues; completed/fixed history is maintained in CHANGELOG.md
- β Roadmap signal baseline: Overall progress is now the first section, legend follows directly below, and version-track metadata was removed
- β
README public-preview messaging baseline: Top-level messaging now clearly states
0.xrelease-readiness/public-preview status, pre-Maven-Central publication state, and links users to live status/roadmap tracking. - π Roadmap structure cleanup: Keep each subsection as one block (
Priority+ open/planned items) and move detailed completed history to CHANGELOG.md / DONE.md - β
API documentation:
snapfx-coreJavaDoc completion baseline is now warning-free via./gradlew :snapfx-core:javadoc --rerun-tasks, collaboration rules require immediate full JavaDoc updates for new/changed public API, and API docs are now published athttps://snapfx.org/api/. - β
JavaDoc discoverability baseline: Exported API packages now include
package-info.javaoverviews, and key API classes now include usage snippets to improve first-time navigation on hosted docs. - β User guide baseline: Docusaurus now includes a practical SnapFX user guide covering core concepts, setup flow, docking/floating/sidebars, persistence, and theme usage.
- β Tutorial baseline: Docusaurus now includes a "First Layout" step-by-step tutorial from root setup through save/load.
- β Examples baseline: Docusaurus now includes reusable code examples for common integration patterns (IDE layout, tab grouping, floating, lock mode, shortcuts, themes, save/load).
- β
GitHub Pages site: Docusaurus-based documentation portal is now live at
https://snapfx.org/(guides, architecture, release status) with JavaDoc integrated under/api. - β Localization documentation baseline: Added ADR 0006, architecture updates, and dedicated Docusaurus localization guide (API usage, provider extension, fallback/threading/RTL/formatting notes).
- β
Changelog release hygiene baseline:
CHANGELOG.mdnow keeps explicit sections per release tag (including backfilledv0.5.0andv0.6.0), andUnreleasedis reserved for post-tag work. - β
Docs link + status hygiene pass: docs pages now use clickable links for references (including API links), and release-readiness status content is aligned to the current
v0.7.xstate. - π Docs versioning (post-
1.0.0): Start Docusaurus multi-version docs and versioned API JavaDoc paths only after the first stable release to keep pre-1.0.0maintenance overhead low. - π Video tutorials: Screen recordings
- π Doc consistency guardrails: Keep markdown consistency tests aligned with documentation scope rules while avoiding brittle content-specific assertions (focus on encoding/format guardrails)
Estimated Time: 5-7 days
Priority: π΅ Low
- β
Completed:
runSimpleExampletask for launchingSimpleExamplewith JavaFX module runtime wiring. - β
Completed: automated MainDemo GIF preview capture task (
:snapfx-demo:captureMainDemoGif) with scripted interaction playback, duplicate-frame collapse, and optionalgifsiclepost-optimization for docs/media updates. - π‘ Layout validator: Check for common issues (circular references, missing nodes)
- π‘ CSS inspector: Debug styling issues (similar to browser dev tools)
- π‘ FXML support: Alternative to programmatic API (under consideration, as it may not fit well with the dynamic nature of SnapFX layouts)
- π‘ Layout designer: Visual layout editor (this is a stretch goal, but it would be cool to have a layout designer that can be used to create layouts directly in the IDE)
Estimated Time: 7-10 days
Priority: π‘ High
- β
GitHub tag release workflow: Pushing
v*tags now runs build/test and publishes a GitHub Release with distribution artifacts - β
Release notes automation:
git-cliffnow generates tag-based release notes used as GitHub Release body - β
Wrapper execution hardening:
gradlewis tracked as executable (100755) for Linux runner compatibility - β
Headless JavaFX CI stability: CI/release workflows run Gradle tests via
xvfb-run -ato support JavaFX toolkit initialization on Linux runners - β
Test JVM arg cleanup: Removed obsolete JavaFX
--add-opens/--add-exportsflags to avoid classpath-run warning noise - β
JavaFX module-path test launch: Gradle test runtime now moves required JavaFX jars to
--module-pathand applies TestFX access flags to avoid unnamed-module startup warnings and reflective-access stack traces - β
Version catalog migration: Build script now sources plugin/dependency versions from
gradle/libs.versions.tomlto reduce duplicated version literals - β
Core/demo module split baseline: Gradle project now separates framework code/resources/tests (
snapfx-core) from demo app code/resources/tests (snapfx-demo); root now acts as the aggregate Gradle entry point - β
Release workflow split-path alignment: Release build now runs
:snapfx-demo:distZip/:distTarexplicitly and uploads artifacts from split module output paths - β
Domain-backed Maven namespace baseline: Gradle publish namespace now uses
org.snapfx(aligned withsnapfx.org) and README documents planned first-release coordinatesorg.snapfx:snapfx-core - β
Package/module namespace baseline: Java packages and JPMS module names now use
org.snapfx...across core/demo code and tests - β
Repository metadata hygiene baseline:
.idea/is fully ignored and tracked IntelliJ workspace/project metadata has been removed from Git - β
Maven publish dry-run baseline (
snapfx-core):maven-publish+ optional signing wiring,sourcesJar/javadocJar, and POM metadata are in place; local:snapfx-core:publishToMavenLocalsucceeds - β
Maven Central publish readiness gate (
0.8.x):snapfx-corenow includes Sonatype Central repository wiring, release workflow support, secret/signing preflight checks, and maintainer checklist guidance; live publish remains intentionally gated to stable tags>= v1.0.0. - β
jlink support baseline:
snapfx-demonow usesorg.beryx.jlinkand provides:snapfx-demo:jlinkruntime-image packaging - β
jpackage support baseline:
snapfx-demonow provides:snapfx-demo:jpackageImageand:snapfx-demo:packageJPackageImageZipwith OS-specific app icon selection (.ico/.icns/.png) plus macOS-compatible app-version normalization (major version floor1), and release automation now publishes per-OS demo ZIP assets (Windows/macOS/Linux); installer generation/signing remains pending - β
Smoke validation policy baseline:
RELEASING.mdnow defines required local-OS smoke validation per RC, cross-OS checks as nice-to-have, per-OS start commands/checklist, and optional CI startup-smoke scope (validated against successfulv0.4.1-rc.2release workflow run). - β
Release checksum baseline: Release automation now generates SHA256 checksum files for all release assets (
.zip/.tar/.jar) and publishes matching*.sha256files in GitHub Releases. - β Version management: Semantic versioning
- π Remove temporary macOS appVersion workaround at v1.x: After the first real
v1.xproject release, drop the major-floor mapping so demo appVersion equals the core/project version again.
Estimated Time: 2-3 days
Priority: π‘ High
- π Policy baseline (not release-now): Keep SnapFX continuously release-ready while feature development continues; cut
1.0.0only after an explicit go-public decision. - β
0.5.xDocumentation baseline: Public API JavaDoc is now warning-free forsnapfx-core(./gradlew :snapfx-core:javadoc --rerun-tasks), and AGENTS workflow rules now enforce immediate complete JavaDoc updates for API changes. - β
0.6.xPublic docs + domain baseline: GitHub Pages now publishes a Docusaurus documentation portal athttps://snapfx.org/and generated JavaDoc athttps://snapfx.org/api/, withCNAME-based domain routing and release docs covering setup/validation flow. - β
0.7.xPackaging hardening: Cross-platform demo packaging baseline, smoke-check policy, and release-asset checksum flow are in place. - π§
0.8.xPublishing readiness: Active: Adding more features and fixes. Maven Central CI/signing/checklist baseline is complete, including stable-tag publish policy gating (>= v1.0.0) - π§
0.9.xRelease rehearsal + freeze: Run end-to-end RC drills (v0.9.x-rc.y), close final blockers, and freeze public API for1.0.0. - π
1.0.0stable cut: Tag and publish the first stable public release once all release-readiness gates are green. - π Scope guard: Keep optional backlog items (for example video tutorials, layout designer, major UX expansions) out of the
1.0.0critical path unless explicitly promoted.
Estimated Time: Iterative across 0.5.x to 0.9.x
Priority: π΄ Critical
Note: The code has already been tested extensively and has a lot of automated tests to ensure stability and correctness. The goal is to maintain high code quality and prevent regressions.
- π Code coverage: Target 85%+ coverage
- π Mutation testing: Verify test quality
- π Static analysis: SonarQube, SpotBugs
- π Security audit: Check for vulnerabilities
- π Compliance check: License compliance
Estimated Time: 3-4 days
Priority: π΄ Critical
Note: User acceptance testing is hard to do before the first release. Would love to see some real-world usage feedback from early adopters.
- π User acceptance testing: Real user feedback
- π Load testing: Handle complex layouts
- π Stress testing: Resource exhaustion scenarios
- π Compatibility testing: Multiple Java versions
- π Platform testing: Windows, macOS, Linux
Estimated Time: 5-7 days
- π‘ Layout history: Undo/redo for layout changes
- π‘ Layout diff: Compare two layouts
- π‘ Layout merge: Combine layouts (if that is even possible?)
- π‘ Layout versioning: Track layout changes over time
- π‘ Layout templates: Pre-built layout patterns
- π‘ Layout marketplace: Share layouts with community (application level feature, not layout level...)
- π‘ Gesture support: Touch gestures for tablets
- π‘ AI-assisted layout: Suggest optimal layouts
- π‘ Refactor DockDragService: Simplify complex logic
- π‘ Refactor SnapFX: The main class is getting a bit large and could be split into smaller components
- π‘ Improve error handling: Better error messages
- π‘ Logging: Current logging is very basic and rare, a decision about logging framework is needed (there is an argument for not using any logging at all)
- π‘ Reduce coupling: Further decouple components
- π‘ Optimize imports: Clean up dependencies
- Feature Complete: Change status from π to β
- Also capture release-relevant details in CHANGELOG.md under the correct tag section.
- Started Work: Change status from π to π§
- New Feature: Add to appropriate phase or Future Ideas
- Priority Change: Update priority emoji (π΄π‘π’π΅)
- Blocked: Change status to β and document reason
- Update Date: Update "Last Updated" at the top
- Recalculate
Overall Progressphase percentages andTotal Project Completionwhen status mix changes.
- Recalculate
If you'd like to contribute to SnapFX:
- Pick an item marked π (Planned)
- Create an issue discussing the implementation
- Fork the repository
- Implement the feature with tests
- Submit a pull request
- Update this roadmap when merged
- Follow repository collaboration standards in AGENTS.md (commit message and callback-structure conventions).
Maintained by: SnapFX Development Team
Questions?: Open an issue on GitHub