OpenIDEA 0.1.38 adds Docker and Compose run targets, Oracle data sources, Astro support, PHP Remote Debug with PHPStan and PHP-CS-Fixer, Ruby test runs with coverage, a choice of update source with a China mirror, and ships Plugin API 1.2.
Download
| Architecture | Windows | macOS | Linux |
|---|---|---|---|
| x86-64 (64-bit) | EXE MSI | Intel | AppImage DEB RPM |
| AArch64 (ARM64) | EXE MSI | Apple Silicon | AppImage DEB RPM |
Remote development: openidea-server for Linux x86-64 · Linux ARM64 · macOS x86-64 · macOS ARM64, each with a .sha256 file.
Already installed? OpenIDEA updates itself: use Check for Updates.
What's new
Plugins (Preview)
- Plugin API 1.2 (
openidea:plugin@1.2.0): commands can ask the user with a picker, an input box or a confirmation, read every file selected in the Project view, and set context keys for theirwhenclauses. whenclauses can test whether the project contains a file; plugin tree and list views get a right-click menu on their items; plugins can set their own icon.- A background document-indexer API, and project files are listed from the index instead of walking the disk.
- Plugins built for API 1.0 and 1.1 keep loading.
Run and debug
- Docker and Compose run targets.
- PHP Remote Debug (Xdebug) run configuration; OpenIDEA offers to install php-debug and Bash Debug when they are missing.
- Search the debug console output; console actions sit in a toolbar on its left, and the program's input can be typed there.
- Reload Changed Classes from the editor context menu, and the taskbar flashes when a breakpoint hits while the window is unfocused.
- Ruby: a test tree with jump to source and gutter actions, run tests from the editor and Project view, and Run with Coverage (SimpleCov).
- Runs and terminals stop when the app exits; rerun uses the configuration as edited.
- Gradle module tests run from the build root; Delve's leftover
__debug_binfiles are cleaned up.
Languages and editor
- Astro language support.
- PHP: PHPStan errors on save, PHP-CS-Fixer reformatting, New › PHP File / PHP Class with the namespace from
composer.json, source and test roots from its autoload, and an offer to runcomposer installwhenvendor/is missing or stale. - Python: semantic highlighting, and Ruff formatting with config directories.
- Log files are highlighted by level, timestamp and stack frame.
- Enter after
/**inserts a documentation comment stub; paste puts one line per caret when the counts match. - Force click navigates instead of opening macOS Look Up.
- Java: usages are searched in Project Files first, with Project and Libraries on demand; implementations in project sources come first; Lombok builders work on compact record constructors.
Database
- Oracle data sources.
- One-Row extractor, and ⌘C copies in the chosen extractor's format.
- Submit and revert table edits from the keyboard, and go to a column with File Structure's shortcut.
Version control
- The Git log shows lines added and deleted; diff and merge changes are marked on the scrollbar.
- Preview Diff toggle in the Commit tool window; delete changed files from the Changes view.
- The Push dialog's commits and changed files resize with a splitter; spaces typed in a branch name become a separator.
- Local changes and staging stay intact across Git operations, and partial multi-repository operations roll back.
Desktop
- Choose the update source, including a CNB mirror for users in China.
- Each project's terminal tabs are restored.
- Add trusted folders from Settings.
- Middle-click closes tabs and panel headers.
- Windows: open recent projects from the taskbar jump list, and every project window reopens on startup.
- macOS: OpenIDEA asks before quitting from the Dock or at logout, and traffic lights stay still during live resize.
- Linux: starts on Wayland with the NVIDIA driver.
- Korean translations are complete.
All changes (151 pull requests and commits)
- fix(notebook): send the notebook path to the UI with forward slashes by @kevinh458 in #1466
- feat(windows): open recent projects from the Windows taskbar jump list by @ppxb in #1499
- fix(lsp): wait for a loading server before reporting no definition by @l0ng-ai in #1444
- fix(run): swap ruby/bundle launcher when toggling Bundler by @kjeldahl in #1533
- fix(editor): navigate on force click instead of opening macOS Look Up by @lleviathe in #1515
- fix(editor): copy references to resolved methods by @zzxzz12345 in #1531
- fix(ui): stop bolding tool window titles, toolbar widgets and commit groups (IntelliJ shows them in regular weight) by @dervarex in #1551
- perf(vcs): keep multi-root Git Log refresh bounded by @shohruh-genius in #1554
- feat(debugger): search the debug console output by @DomKing in #1502
- feat(terminal): restore each project's terminal tabs by @tomgor in #1526
- fix(vcs): keep changes left out of a commit excluded by @xtr-hub in #1556
- feat(coverage): Run with Coverage and report import for Ruby (SimpleCov) by @kjeldahl in #1535
- feat(run): run Ruby tests from the editor and Project view (-I roots, test-root folders) by @kjeldahl in #1545
- feat(run): Ruby test tree, jump to source and gutter actions by @kjeldahl in #1546
- feat(run): load a Minitest reporter into Ruby test runs by @kjeldahl in #1547
- feat(vcs): stage Unity metadata with new assets by @hacbit in #1509
- feat(vcs): mark diff and merge changes on the scrollbar, as IntelliJ's error stripe by @jaw52 in #1519
- feat(php): show PHPStan errors in the editor on save by @DanielADK in #1518
- feat(editor): add PyCharm-style Python semantic highlighting by @muutot in #1523
- fix(editor): log why an edit was rejected before the editor drops it by @l0ng-ai in #1569
- fix(windows): reopen every project window on startup by @l0ng-ai in #1574
- fix(vcs): translate the question in the add/remove to Git confirmation by @l0ng-ai in #1575
- fix(ruby): Ruby LSP no longer crash-loops on dead shims or a spaced gem home by @kjeldahl in #1534
- fix(tomcat): keep the web app's META-INF/context.xml in the generated descriptor by @l0ng-ai in #1576
- fix(editor): colour PHP variables and function calls by @l0ng-ai in #1581
- fix(markdown): keep the blocks between an HTML container's tags inside it by @jaw52 in #1566
- feat(vcs): replace spaces typed in a branch name with a separator, as IntelliJ by @jaw52 in #1571
- fix(run): rerun with the configuration as edited, and drop deleted ones from Services by @l0ng-ai in #1579
- fix(editor): keep selections whole over line backgrounds and indent guides by @l0ng-ai in #1568
- feat(editor): highlight log files by level, timestamp and stack frame by @jaw52 in #1577
- fix(editor): align Python identifier colors and unused-parameter styling by @muutot in #1572
- feat(vcs): let the Git log show lines added and deleted by @liqiujiong in #1564
- feat(python): support Ruff formatting and config directories by @muutot in #1573
- fix(run): run PHP files with the interpreter chosen in Settings by @l0ng-ai in #1584
- fix(sdk): detect versioned PHP binaries such as php8.1 on PATH by @l0ng-ai in #1586
- feat(php): list PHP versions newest first by @l0ng-ai in #1587
- fix(terminal): disable pwsh update banners by default on Windows by @l0ng-ai in #1588
- feat(database): submit and revert table edits from the keyboard by @l0ng-ai in #1589
- fix(themes): include PHP tokens in Harbor Night and the reference by @shohruh-genius in #1585
- fix(project-tree): sort workspace projects by folder name by @shohruh-genius in #1583
- fix: detect external file edits that preserve mtime and length by @qtvbwfn in #1582
- fix(plugins): explain how to approve a process program installed after its grant by @l0ng-ai in #1590
- feat(vcs): resize the Push dialog's commits and changed files with a splitter by @l0ng-ai in #1591
- feat(database): go to a column of the table editor with File Structure's shortcut by @l0ng-ai in #1592
- fix(editor): open the launched file when the window restores its last tabs by @l0ng-ai in #1594
- feat(debugger): console actions in a toolbar on the left of the debug Console by @l0ng-ai in #1595
- feat(vcs): delete changed files from the Changes view by @l0ng-ai in #1596
- fix(lsp): keep rust-analyzer's developer notices out of notifications by @l0ng-ai in #1597
- fix(keymap): bind table editor Submit and Revert in the VS Code presets by @l0ng-ai in #1598
- feat(editor): insert a documentation comment stub on Enter after /** by @l0ng-ai in #1600
- feat(php): mark source and test roots from composer.json autoload by @l0ng-ai in #1602
- fix(plugins): list project files from the index instead of walking the disk by @l0ng-ai in #1604
- feat(php): New › PHP File and PHP Class with the namespace from composer.json by @l0ng-ai in #1605
- feat(php): reformat PHP files with the project's PHP-CS-Fixer configuration by @l0ng-ai in #1606
- fix(app): close a project window without blocking the UI thread by @l0ng-ai in #1610
- fix(window): cover the whole screen with a full-screen project window group on notched Macs by @KJ-AIML in #1608
- feat(php): offer composer install when vendor/ is missing or differs from composer.lock by @l0ng-ai in #1611
- feat(ui): close tabs and panel headers with middle mouse button by @Inf1mum in #1613
- fix(debugger): type input for the program in the debug console by @l0ng-ai in #1614
- perf(java): find implementations in the project sources first by @l0ng-ai in #1616
- fix(agents): wrap a permission request line in a narrow conversation by @l0ng-ai in #1617
- feat(vcs): add Preview Diff toggle to the Commit tool window by @Inf1mum in #1615
- feat(plugins): when clauses that test whether the project contains a file by @arnaud-ritti in #1620
- fix(linux): start on Wayland with the NVIDIA driver by @l0ng-ai in #1625
- feat(debugger): Reload Changed Classes in the editor context menu by @l0ng-ai in #1627
- fix(language): update tree-sitter-haskell to 0.24.1 by @NealimeKenna in #1630
- test(smoke): switch the failing test on in the saved configuration by @l0ng-ai in #1631
- test(phpstan): read the pause before logging the run by @l0ng-ai in #1632
- fix(editor): pad the Reformat File dialog by @Inf1mum in #1634
- fix(debugger): offer to install php-debug when it is missing by @Inf1mum in #1633
- feat(debugger): add PHP Remote Debug (Xdebug) run configuration by @Inf1mum in #1635
- fix(editor): auto-save when the app is deactivated while focus is in a frame by @l0ng-ai in #1636
- fix(debugger): offer to install Bash Debug, and point debugger hints to Settings by @l0ng-ai in #1637
- fix(viewers): yield image viewer to registered text editor wrappers by @dengliu in #1638
- fix(debugger): finish PHP Remote Debug: taken port, waiting state, Port field by @DanielADK in #1639
- fix(debugger): debug PHP with php-debug on the configured PHP by @l0ng-ai in #1641
- feat(run): Docker and Compose run targets by @andreabasile in #1640
- fix(vim): save Normal-mode Vim edits by @l0ng-ai in #1642
- fix(settings): fit long labels in aligned settings forms by @l0ng-ai in #1643
- fix(java): list dependencies' implementations after the project's in Go to Implementation by @l0ng-ai in #1644
- fix(remote): build the Docker run tests' helpers only where they run by @l0ng-ai in #1645
- feat(plugins): open plugin API 1.2 by @l0ng-ai in #1654
- Add Astro language support and editor mode by @d0whc3r in #712
- fix(vcs): remove redundant commit message expansion by @l0ng-ai in #1652
- feat(database): Oracle data source support by @boenkkk in #1510
- feat(plugins): add background document-indexer API by @qjlqyf in #1021
- chore(release): prepare the release commit with one command by @l0ng-ai in #1672
- fix(java): support Lombok builders on compact record constructors by @egasa21 in #950
- fix(vcs): keep local changes and staging intact across Git operations; roll back partial multi-repository operations by @l0ng-ai in #1701
- perf(java): prewarm and cache configuration navigation by @qjlqyf in #947
- fix(vcs): update, push, rebase, tags and file history behave as expected by @l0ng-ai in #1708
- fix(window): keep macOS traffic lights still during live resize by @l0ng-ai in #1712
- fix(agents): render local and web images in replies by @l0ng-ai in #1711
- perf(agents): switch back to a long conversation without rebuilding it by @l0ng-ai in #1710
- fix(welcome): allow cancelling project reopen and prevent startup reopen loop by @dengliu in #1706
- fix(project-tree): search a file's own symbols, not its package, in Safe Delete and Find Usages by @jaw52 in #1688
- fix(debugger): put no breakpoint on blank or comment-only lines by @ldg030201 in #1678
- ci(release): mirror published releases to CNB by @l0ng-ai in #1683
- perf(debugger): send each file's breakpoints together and redraw the gutter less by @ldg030201 in #1679
- fix(tools): install GitHub releases when the API is rate-limited by @l0ng-ai in #1715
- feat(updates): choose the update source, with a CNB mirror by @l0ng-ai in #1673
- fix(terminal): keep Windows shell paths intact by @l0ng-ai in #1723
- fix(debugger): run debug adapters on the tool search path by @l0ng-ai in #1725
- fix(run): stop runs and terminals when the app exits by @l0ng-ai in #1727
- fix(app): ask before quitting from the Dock or a logout on macOS by @l0ng-ai in #1730
- fix(workspace): unify nested project discovery and run ownership by @l0ng-ai in #1716
- fix(vcs): exclude symbolic aliases from containing branches by @l0ng-ai in #1747
- perf(vfs): share nested repo GitignoreStacks and bound synchronous watch_tree startup by @dengliu in #1705
- fix(window): keep merged project tabs from moving the frame or menu bar by @youngledo in #1697
- fix(editor): use search-match foreground color on find highlights by @a-rookie-of-C-language in #1796
- fix(menu): show tooltip for truncated labels by @a-rookie-of-C-language in #1797
- fix(tabs): keep close button visible in squeezed tab strip by @a-rookie-of-C-language in #1798
- fix(mybatis): skip annotation arguments when parsing mapper method names by @a-rookie-of-C-language in #1799
- feat(debugger): flash the taskbar when a breakpoint hits unfocused by @a-rookie-of-C-language in #1803
- fix(run): run Gradle module tests from the build root by @a-rookie-of-C-language in #1805
- Revert merge-commit landings of #1796 #1797 #1798 #1799 #1803 #1805 by @a-rookie-of-C-language in #1814
- fix(editor): use search-match foreground color on find highlights (re-land of #1796) by @a-rookie-of-C-language in #1815
- fix(menu): show tooltip for truncated labels (re-land of #1797) by @a-rookie-of-C-language in #1816
- fix(tabs): keep close button visible in squeezed tab strip (re-land of #1798) by @a-rookie-of-C-language in #1817
- fix(mybatis): skip annotation arguments when parsing mapper method names (re-land of #1799) by @a-rookie-of-C-language in #1818
- feat(debugger): flash the taskbar when a breakpoint hits unfocused (re-land of #1803) by @a-rookie-of-C-language in #1819
- fix(run): run Gradle module tests from the build root (re-land of #1805) by @a-rookie-of-C-language in #1820
- fix(http): join multipart request bodies with CRLF by @a-rookie-of-C-language in #1802
- fix(editor): paste one line per caret when the counts match by @a-rookie-of-C-language in #1830
- feat(usages): search Java usages in Project Files first, Project and Libraries on demand by @l0ng-ai in #1837
- fix(vfs): tolerate fsync ENOTTY/EINVAL on filesystems without fsync by @a-rookie-of-C-language in #1804
- fix(go): sweep Delve's leftover __debug_bin files when a session ends by @a-rookie-of-C-language in #1829
- fix(project-tree): reveal WSL paths through the wsl.localhost share by @a-rookie-of-C-language in #1806
- fix(vfs): hint at inotify limits when the file watcher hits them by @a-rookie-of-C-language in #793
- fix(java): pass the configured Maven local repository to jdtls by @a-rookie-of-C-language in #1813
- feat(trust): let users add trusted folders from settings by @a-rookie-of-C-language in #1812
- test(smoke): retry the temp-directory cleanup on ENOTEMPTY by @a-rookie-of-C-language in #1838
- fix(spelling): merge the two dictionary saves into one row by @a-rookie-of-C-language in #1833
- feat(database): One-Row extractor, and ⌘C copies in the chosen extractor's format by @a-rookie-of-C-language in #1842
- fix(i18n): fill in the Korean catalogs and align terms with IntelliJ and Microsoft by @ldg030201 in #1647
- feat(plugins): let a plugin set its own icon by @arnaud-ritti in #1761
- feat(plugins): right-click menu on the items of plugin tree and list views by @arnaud-ritti in #1746
- fix(terminal): remove redundant scroll-to-end button by @l0ng-ai in #1849
- docs(readme): show contributor avatars in the Community section by @l0ng-ai in #1848
- feat(plugins): let a command read every file selected in the Project view by @arnaud-ritti in #1744
- feat(plugins): let plugin code set context keys for its when clauses by @arnaud-ritti in #1762
- fix(agents): don't offer the previous model's thinking levels for a new task by @a-rookie-of-C-language in #1846
- fix(settings): align fallback font and size fields on the Appearance page by @Inf1mum in #1782
- feat(plugins): let a command ask the user with a picker, an input box or a confirmation by @arnaud-ritti in #1779
- fix(gradle): launch linked builds with the platform's path separators by @l0ng-ai in 1aec21b
- docs(readme): add a Community section with Discord and the WeChat group by @l0ng-ai in 9bd4238
- test(e2e): wait for xterm to open before pasting into the terminal by @l0ng-ai in 915fec5
- fix(sdk): detect versioned PHP binaries such as php8.1 on PATH by @l0ng-ai in 9717748
- docs: remove unused Kotlin debugging, Unity and workspace notes by @l0ng-ai in 6b0dc93
- test(vcs): check the files a commit takes from its options by @l0ng-ai in c75a630
- fix(workbench): align settings with right stripe icons by @l0ng-ai in 763bcc0
New contributors
Thanks to everyone who contributed for the first time:
- @kjeldahl made their first contribution in #1533
- @lleviathe made their first contribution in #1515
- @dervarex made their first contribution in #1551
- @muutot made their first contribution in #1523
- @liqiujiong made their first contribution in #1564
- @KJ-AIML made their first contribution in #1608
- @Inf1mum made their first contribution in #1613
- @arnaud-ritti made their first contribution in #1620
- @NealimeKenna made their first contribution in #1630
- @boenkkk made their first contribution in #1510
- @egasa21 made their first contribution in #950
- @youngledo made their first contribution in #1697
Full Changelog: v0.1.37...v0.1.38