Skip to content

Update main with latest dev changes#117

Merged
DaRealTurtyWurty merged 42 commits intomainfrom
dev
Jan 16, 2026
Merged

Update main with latest dev changes#117
DaRealTurtyWurty merged 42 commits intomainfrom
dev

Conversation

@DaRealTurtyWurty
Copy link
Member

This PR introduces the recent commits from dev to the main branch. A brief summary of said changes is as follows, but check for the full commit list for exact changes.

Localization UTF-8

Localization now supports UTF-8 allowing for languages such as russian or chinese to work. Work still needs to be done to allow for RTL languages, however.

Russian language added

Russian language has been added now that UTF-8 languages are possible.

Admin-related changes

  • CODEOWNERS
  • SECURITY.md
  • Clean-up build.gradle template files

UI redesigns

  • Welcome UI
  • Plugins UI
  • Keybinds UI

Dynamic Language Loading

Languages can now be loaded purely from the language files in the resources. It is no longer required to have them hardcoded.

Display facets for project in welcome screen

Facets now display as tags in the project list in the welcome screen.

Rewrite code editor

  • Fix a bunch of weird issues, especially with lagging, and rewrite to be easier to modify
  • Implement signature popup
  • Refactor each text editor feature into their own classes

Add support for developing with NixOS

Adds flake.lock and flake.nix for easier development on NixOS

Implement markdown viewer

Added a markdown viewer with rich view, code view and split view, with toolbar for bolding, headings and more.

JDK Discovery and Management

The system/user's JDKs are now discovered during initialization and remembered by Railroad, for later ability to select a specific JDK. This system also supports adding custom paths to JDKs and will later be extended to allow for downloading JDKs.

Fullscreen Toggle

Toggling between fullscreen and not using a keybind and the menu item in the IDE now work.

Per-project data

Each project can now store its own data which will live inside $PROJECT_FOLDER/.railroad/. These files will be managed independently by the system that uses them, and have no specific file type or data structures required (this is by design to allow for fluid data storage and configuration).

Run Configurations

The IDE now supports being able to run a program. This can be through a variety of formats:

  • Java Application
  • Gradle
  • Compound (sync and parallel)
  • Jar Application
  • Shell Script

Java Process Builder

Running java processes is now made significantly easier with the Java Process Builder, which allows you to easily construct common Java processes, passing in the required arguments. This system supports many of the default java command-line executables, including:

  • jar
  • jarsigner
  • javadoc
  • java
  • javap
  • jcmd
  • jdb
  • jdeprscan
  • jdeps
  • jfr
  • jinfo
  • jlink
  • jmap
  • jmod
  • jpackage
  • jps
  • jshell
  • jstack
  • jstat
  • jstatd
  • keytool
  • rmic
  • rmid
  • rmiregistry
  • serialver

Gradle Manager

Handling gradle integration is now made significantly easier with the Gradle Manager, which allows for direct integration with the gradle tooling system for a specific project, and with no need to directly access it outside of that system.

Fixes to theme-related issues and introduce new UI components

Fixes a bunch of inconsistencies and bugs int he theme/styling of many Railroad components, and also introduces some new components for future consistency.

Fixes to keybinds having duplicate control keys

Keybinds had an issue where pressing control would insert it multiple times, this has been fixed.

Gradle Tab

Introduces a new tab within the IDE for Gradle projects which provides the ability to list and run specific gradle tasks, list dependencies, download sources, sync the gradle project and some other internal gradle-related changes and improvements, including the connection to a new Gradle plugin developed specifically for Railroad.

DaRealTurtyWurty and others added 30 commits October 24, 2025 19:52
Signed-off-by: TurtyWurty <43997792+DaRealTurtyWurty@users.noreply.github.com>
Extended the auto-closing character logic in JsonCodeEditorPane to support parentheses, single quotes, angle brackets, and backticks for improved editing experience.
* Added new language localization: Russian (ru-ru)

* Update src/main/resources/assets/railroad/lang/ru_ru.lang

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: fredtheking <113716640+fredtheking@users.noreply.github.com>

* Update src/main/resources/assets/railroad/lang/ru_ru.lang

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: fredtheking <113716640+fredtheking@users.noreply.github.com>

* Update src/main/resources/assets/railroad/lang/ru_ru.lang

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: fredtheking <113716640+fredtheking@users.noreply.github.com>

* Update src/main/resources/assets/railroad/lang/ru_ru.lang

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: fredtheking <113716640+fredtheking@users.noreply.github.com>

---------

Signed-off-by: fredtheking <113716640+fredtheking@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Added a comprehensive security policy outlining supported versions, vulnerability reporting, disclosure policy, and best practices for plugin developers.

Signed-off-by: TurtyWurty <43997792+DaRealTurtyWurty@users.noreply.github.com>
Refactors KeybindsList to a card-based, searchable, and filterable UI with category chips, empty state, and shortcut management. Updates KeyComboNode for better editing and display, adds new localized strings, and introduces a dedicated CSS file for keybinds styling.
* feat(welcome): Display project facets as tags in the project list

Updates ProjectListCell to display a project's facets (e.g., Java, Gradle) as styled tags on the welcome screen.

This gives users an at-a-glance understanding of a project's nature directly from the list.

* Apply suggestions from code review

Co-authored-by: TurtyWurty <43997792+DaRealTurtyWurty@users.noreply.github.com>
Signed-off-by: Subhashini Ganesh <105427420+subha0319@users.noreply.github.com>

* feat(welcome): Display project facets as tags in the project list

Updates ProjectListCell to display a project's facets (e.g., Java, Gradle) as styled tags on the welcome screen.

This gives users an at-a-glance understanding of a project's nature directly from the list.

---------

Signed-off-by: Subhashini Ganesh <105427420+subha0319@users.noreply.github.com>
Co-authored-by: TurtyWurty <43997792+DaRealTurtyWurty@users.noreply.github.com>
Major refactor of JavaCodeEditorPane to improve diagnostics, syntax highlighting, code completion, and bracket matching. Replaces previous error and completion logic with more robust, asynchronous implementations using AST parsing and type analysis. TextEditorPane now features debounced auto-saving, external file change detection, and improved font resizing. Removes legacy code and streamlines event handling for better performance and maintainability.
Introduces a signature help feature in JavaCodeEditorPane that displays method and constructor signatures as a popup near the caret. Implements logic to compute active parameter, display relevant type information, and styles the popup and its contents in code-area.css for improved user experience during code editing.
Moved signature help computation from JavaCodeEditorPane to new SignatureHelpProvider interface and JdtSignatureHelpProvider implementation. Added SignatureHelp and ParameterInfo records for immutable signature metadata. JavaCodeEditorPane now delegates signature help requests to the provider, improving separation of concerns and maintainability.
Extracted completion-related classes (CompletionItem, CompletionProvider, CompletionResult, JdtCompletionProvider) into a new package for better modularity and reuse. Updated JavaCodeEditorPane and JdtSignatureHelpProvider to use the new completion API, removing duplicated logic and improving maintainability.
Introduces DiagnosticsProvider, EditorDiagnostic, and JdtDiagnosticsProvider for unified diagnostics handling. Refactors JavaCodeEditorPane to use EditorDiagnostic instead of ProblemDiagnostic, removing duplicate logic and improving modularity and maintainability.
Changed the Discord menu item URL to 'https://discord.turtywurty.dev/' and removed unnecessary 'this' qualifier in getMenus().
Introduced isMac(), isWindows(), and isLinux() methods to OperatingSystem for cleaner OS checks. Refactored usages across the codebase to use these methods, improving readability and maintainability, especially for Mac-specific logic in menu bar handling and keybind localization.
* Updated Russian (ru-ru) localization

* Updated Russian (ru-ru) localization 2.fix
Introduces a 'square' property and setter to RRButton, allowing buttons to be forced into a square shape via a style class. Updates button.css to ensure square buttons have fixed dimensions and no padding.
Updated RRButton initialization to add 'rr-button' style class only if not already present, preventing duplicate entries and ensuring custom styles override the default button theme.
Updated RRListView and RRTextField to only add custom style classes if they are not already present, avoiding duplicate entries in the style class list.
not-a-cowfr and others added 12 commits November 4, 2025 21:54
* add nix flake

* add lombok

* fix file picker error on gtk4

* fix missing libs

* Delete .envrc

---------

Co-authored-by: TurtyWurty <43997792+DaRealTurtyWurty@users.noreply.github.com>
* Added markdown viewer

- Added a new pane that allows users to view and edit markdown files more easily, with a markdown viewer.

* Introduced live updating of markdown preview

- The markdown preview now updates live when the markdown file is edited.
- Created fields for the various panes for increased reusability.

* Fixed invisible code view bug and auto scroll when switching views

- Refactor MarkdownPreviewPane to improve content display and layout management.
- Fixed a bug where the code view is invisible.
- The code editor pane now auto scrolls to the top when switching between split view and code editor view.

* Refactor MarkdownPreviewPane to create view and markdown buttons dynamically

* Adds code for markdown formatting buttons

Adds buttons for headings (with a submenu for H1-H6), bold, italic, quote, code, link, unordered list and ordered list. Each button inserts the corresponding markdown syntax at the current cursor position in the editor.

Temporarily removed the task list button as it isn't previewed correctly.

* Dark theme for the markdown preview pane

Added dark theme for the preview markdown pane. This is enabled by default when the theme name contains the word "dark", and automatically updates to either dark or light mode when a new theme is applied.
In the future, themes will have dark/light mode tags which will be used instead.

* Fixed requested changes for pull request

* Remove unnecessary comment

Signed-off-by: TurtyWurty <43997792+DaRealTurtyWurty@users.noreply.github.com>

* Fixed copilot requested changes for pull request

---------

Signed-off-by: TurtyWurty <43997792+DaRealTurtyWurty@users.noreply.github.com>
Co-authored-by: TurtyWurty <43997792+DaRealTurtyWurty@users.noreply.github.com>
* Discover JDKs during initialisation (#87)

* Add JDK management UI and brand detection

Introduces new settings panes for managing JDK scan paths and manual JDKs, adds detected JDK list UI, and enhances JDK brand detection with icons and images. Updates JDKManager to support exclusion and manual addition of JDKs, and adds new settings for JDK management. Integrates SVG support and updates build dependencies.

* Refactor JDK discovery logic and add JDKUtils helper

Moved JDK discovery and parsing utilities from JDKManager to a new JDKUtils class for better separation of concerns. Updated JDKManager to use JDKUtils and FileUtils for path normalization and JDK metadata extraction. Improved platform-specific JDK detection, added more robust version parsing, and enhanced comments for clarity. Minor UI logic fix in DetectedJdkListPane for icon handling and version formatting.

* Implement copilot suggestions

- Check for vendor and implementor as first port of call
- Scan only C-Z drives as A and B are floppy only.
- Add setting for java version checking timeout
- Minor formatting cleanups

---------

Signed-off-by: TurtyWurty <43997792+DaRealTurtyWurty@users.noreply.github.com>
Co-authored-by: TurtyWurty <43997792+DaRealTurtyWurty@users.noreply.github.com>
* Adds fullscreen toggle functionality

- Implements a fullscreen toggle feature using the F11 key or a menu item.
- This allows users to easily switch between windowed and fullscreen modes.
- The key can be changed in the keybinds setting menu.

* Fixed bug

Fixed a bug preventing the fullscreen taskbar button from working correctly.

* Fixed a bug

Removed a line of code that caused the screen to be set to fullscreen then windowed when the f11 key was pressed

* Extracted repeated code to method.

Extracted repeated code and created a new method in WindowManager to contain this.

* Update src/main/java/dev/railroadide/railroad/ide/IDESetup.java

Co-authored-by: TurtyWurty <43997792+DaRealTurtyWurty@users.noreply.github.com>
Signed-off-by: Alex <88453457+FrostyFlippper@users.noreply.github.com>

* Update src/main/java/dev/railroadide/railroad/settings/keybinds/Keybinds.java

Co-authored-by: TurtyWurty <43997792+DaRealTurtyWurty@users.noreply.github.com>
Signed-off-by: Alex <88453457+FrostyFlippper@users.noreply.github.com>

---------

Signed-off-by: Alex <88453457+FrostyFlippper@users.noreply.github.com>
Co-authored-by: TurtyWurty <43997792+DaRealTurtyWurty@users.noreply.github.com>
* Move around some directories to be more consistent

* Create ProjectDataStore

* Fix weird import error (unsure why this was here)

* Improve file path resolution and watcher cleanup

Enhances security by verifying resolved file paths do not escape the project data directory using real paths. Also refactors watcher shutdown logic to ensure both the watch service and executor are properly closed.
* Add core run configuration system (before details pane)

* Refactor run configuration form handling and validation

Updated RunConfigurationData and related classes to pass the RunConfiguration instance to form creation methods, enabling improved validation and context handling. Refactored RunConfigurationEditorPane to cache and manage configuration form contexts per UUID, and implemented proper form validation and data application for configuration changes. Improved GradleRunConfigurationType to close handles asynchronously and merged environment variables with system environment.

* Refactor IDESetup and implement stop and restart buttons

IDESetup became really hard to work with in this PR, and so even though the changes are a bit unrelated, I figured I'd do this now rather than keep delaying it.

Stop Buttons for run configurations have been added, with support for stopping multiple configurations.

The run and debug buttons now turn into restart buttons for configurations that allow multiple ran at once.

The run configuration drop-down has been cleaned up and fixed a little bit, though it still needs some work to iron out bugs.

* Refactor compound run config selection and execution

Compound run configurations now store selected configuration UUIDs instead of direct references, resolving them at execution time. Added FormRunConfigurationPicker and RunConfigurationPickerComponent for UI selection, updated form and validation logic, and improved execution handling for parallel/sequential modes. Also fixed Path conversion in form data application for Java, Jar, and ShellScript run configs, and updated styles and localization for the new picker UI.

* Add Gradle task autocomplete and validation

Introduces auto-complete support for text fields, including a new RRAutoCompleteTextField and AutoCompleteOptions. Gradle run configuration now loads and caches Gradle tasks and CLI options for autocomplete, with improved validation for Gradle project paths and JAR files. Updates language resources for new validation messages.

* Cleanup and fix text field autocomplete suggestion
* Create JDK CLI system

* Add javadocs to all JDK-Java Process related code
* Updated Russian (ru-ru) localization (2nd)

* Update src/main/resources/assets/railroad/lang/ru_ru.lang

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: fredtheking <113716640+fredtheking@users.noreply.github.com>

---------

Signed-off-by: fredtheking <113716640+fredtheking@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Overhaul Gradle integration with Tooling API

This commit completely revamps the Gradle integration by replacing the old, fragile system with a new one built on the Gradle Tooling API. This provides a more robust and feature-rich foundation for interacting with Gradle projects.

  The key changes include:

   - New Service Layer: Introduced a new service layer with GradleExecutionService and GradleModelService to handle task execution and model building respectively. This separates concerns and makes the system more modular.
   - Gradle Tooling API: The new implementation leverages the Gradle Tooling API to fetch project models and execute tasks. This is a more reliable and efficient approach than the previous method of parsing gradle --help output.
   - Asynchronous Operations: All Gradle operations are now asynchronous, using CompletableFuture to avoid blocking the UI thread.
   - Event-Driven Architecture: The execution service now emits events for progress, output, and status changes, allowing for a more responsive and informative UI.
   - New Data Models: Introduced new data models for Gradle projects, tasks, and arguments, providing a structured representation of Gradle metadata.
   - Code Cleanup: Removed the old GradleHelper, GradleHelpParser, and GradleTask classes.

* Improve autocomplete filtering for Gradle tasks

Refactored GradleRunConfigurationData to use a query-based autocomplete filter for Gradle tasks, providing more relevant suggestions based on user input. Adjusted RRAutoCompleteTextField popup sizing logic for better UI consistency.

* Flush output after every write in GradleOutputStream

Overrides write methods to call flushOutput after each write operation, ensuring output is processed immediately. This improves responsiveness when handling Gradle output streams.

* Delete GradleProjectContext.java

* Add TODO for runtime JDK change support

Added a TODO comment in GradleManager to indicate future support for changing the JDK at runtime, which would require recreating the execution service.

* Fix JVM argument handling in Gradle execution service

Improves JVM argument processing by splitting and filtering arguments before adding them to the build. Also replaces setJvmArguments with addJvmArguments for debug JVM arguments to ensure proper argument accumulation.

* Add TODO for custom JVM support in Gradle connector

A TODO comment was added to indicate that setting Java home via environment.jvm() should be enabled when custom JVM support is implemented.

* Change Gradle model refresh to non-forced mode

Updated the fetchTasksForProject method to call refreshModel with 'false' instead of 'true', preventing forced refreshes of the Gradle model. This will improve performance and avoid unnecessary reloads.

* Fix type check in Gradle environment loop

Replaces unsafe cast with instanceof check for GradleRunConfigurationData in the configurations loop to prevent ClassCastException.
* Fix styling and translation of the appearence section

* Added a lot of new UI components

* Fix: Theme preview window

* Fix styling and translation of the appearence section

* Added a lot of new UI components

* Fix: Theme preview window

* Fixa buncha things

* Fix stuff

* Make translation of components easier, using beans properties were i cared to

* Fixed typos & minor issues

* Applied remarks of Turty

* Fixed localized text formatting error

* Fixed Theme related UI

* Removed impossible statement

* Fixes and sunshine :)

---------

Co-authored-by: Exanc <12597611-Exanc@users.noreply.gitlab.com>
* Fix duplicate control key on Windows

* Fix localization

---------

Co-authored-by: Exanc <12597611-Exanc@users.noreply.gitlab.com>
…s) (#115)

* Add Gradle UI components and refactor Gradle model

Introduces new Gradle UI classes for project and task context menus, task tree builder, and tasks pane. Refactors RRButton to use a support class for shared logic and adds LocalizedTab for localized JavaFX tabs. GradleSettings is converted from a record to a class with getters/setters, and related usages are updated. GradleModelMapper and GradleTaskModel are updated to associate tasks with their project, improving model mapping and equality checks. GradleManager now supports saving Gradle settings. Various improvements and new features for Gradle integration and UI localization.

* Add Gradle sources download feature

Introduces a new 'Download Sources' button in the Gradle tool window, which triggers a bundled init script to download sources for all Gradle projects using the updated download-sources plugin (v1.0.1). Implements supporting logic in GradleManager and adds the required init script resource.

* Reuse existing Gradle run configurations if available

GradleTaskContextMenu now checks for an existing run configuration before creating a new one, preventing duplicate configurations for the same Gradle task. Added a helper to set the selected run configuration in RunConfigurationManager. GradleTasksPane updated to use the new logic.

* Refactor Gradle UI to support dependency tree view

Replaces GradleTasksPane and related classes with a generic GradleTreeViewPane and GradleTreeBuilder interface, enabling both task and dependency tree views. Adds support for displaying Gradle dependency configurations and their trees in the UI, updates model mapping to include dependency data, and refactors context menus and resource keys for consistency. Removes obsolete task tree classes and updates styles and resource references accordingly.

* Remove plugin properties files from META-INF

Deleted dev.railroadide.fabricExtractorPlugin.properties and dev.railroadide.javaVersionExtractorPlugin.properties from META-INF/gradle-plugins

* Refactor Gradle model to use plugin DTOs

Replaces custom Gradle model and task classes with DTOs from railroad-gradle-plugin. Removes obsolete mapping and argument classes, updates UI and service layers to use new types, and simplifies model loading logic. Also updates build.gradle to depend on the unified plugin and removes unused init scripts.

This is a WIP.

* Refactor Gradle integration and improve model loading

Refactored GradleManager to detect Gradle projects and extract Gradle version directly from gradle-wrapper.properties. Updated GradleFacetDetector to simplify facet data and rely on GradleManager for detection. Improved Gradle model loading by injecting an init script for plugin application in ToolingGradleModelService. Enhanced GradleTasksPane and GradleDependenciesPane to extract data from the cached model. Added error logging for model reload failures. Moved Gradle tab opening logic into a reusable method in IDESetup. Added the init-gradle-plugin.gradle script to resources.

* Refactor Gradle plugin integration and dependency tree

Updated Gradle plugin usage to 'RailroadGradlePlugin:1.0.0' and refactored init scripts for improved plugin application. Enhanced dependency tree builder to group configurations by module and display module nodes. Improved model service to handle missing models gracefully. Minor code cleanups and bug fixes in JavaFacetDetector, GradleTasksPane, and JDK class.

* Implement copilot suggestions and fix merge errors

---------

Signed-off-by: Ryan <43997792+DaRealTurtyWurty@users.noreply.github.com>
@DaRealTurtyWurty DaRealTurtyWurty merged commit ad76428 into main Jan 16, 2026
4 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants