julIDE v0.2.0
julIDE v0.2.0
The first release without the beta label.
The headline fix: julIDE now works offline. Previously the editor was downloaded
from a CDN every time the app started, so with no network connection you got a blank
window and no explanation. Monaco is now bundled with the application.
Alongside that, this release brings in-app updates, a guided first run, a permission
model for plugins, and a set of security fixes worth reading about below.
Updating from 0.1.0-beta4? You will need to download this release manually. The
updater ships in this version, so earlier builds have no way to fetch it. From
0.2.0 onward, AppImage, Windows, and macOS installs update themselves.
Which download do I want?
| Platform | File | Notes |
|---|---|---|
| Linux | .AppImage |
Recommended. Supports in-app updates. chmod +x and run. |
| Linux | .deb / .rpm |
Installs system wide and registers .jl files. Update through your package manager. |
| Windows | .msi or .exe |
|
| macOS | .dmg |
Apple Silicon and Intel builds are published separately. |
You also need Julia 1.6 or later, which julIDE does not bundle. If it is missing on
first launch, julIDE will offer to help you install or locate it.
These builds are not code signed yet, so your OS will warn you the first time:
- Windows: SmartScreen says "Windows protected your PC". Click More info, then
Run anyway. - macOS: Gatekeeper says the app "cannot be opened". Either right click the app and
choose Open, or run
xattr -dr com.apple.quarantine /Applications/julide.app. - Linux: no warning. AppImages just need the executable bit.
Fixed
julIDE works without an internet connection. The Monaco editor was being fetched
from a CDN at runtime rather than bundled, so the core of the app silently failed to
load whenever the network was unavailable, blocked, or behind a proxy. It is now part
of the application.
Windows and macOS installers are published again. The bundle configuration had
been narrowed to Debian packages only, so those platforms built successfully and then
uploaded nothing. Releases now include every format, and the build fails loudly if any
of them go missing.
Deleting a file could run code hidden in its name. The delete confirmation put the
filename straight into the page as HTML, so a file named with an HTML tag could execute
when you tried to remove it. Since workspaces are often cloned from other people's
repositories, this was reachable without doing anything unusual. The dialog also now
responds to Enter and Escape, and returns keyboard focus when it closes.
Access tokens could be sent in the clear. For self hosted Git providers, julIDE
derived the API address from the repository's origin and kept its scheme. A
repository configured to point at an attacker's http:// host would cause your stored
token to be transmitted unencrypted to it. Provider endpoints are now forced to HTTPS
for every non local host.
A pasted token with a stray character crashed the app instead of reporting a
problem.
Other fixes:
- The debugger could hang indefinitely when a subprocess repeatedly failed to produce
output. - A crash inside the terminal, container, or debugger subsystems used to leave that
subsystem permanently broken until you restarted julIDE. - Opening a recent project whose folder had been deleted did nothing at all. It now
tells you what happened and removes the dead entry. - A bad value in
settings.json(a font size of 99999, a Pluto port of 0) could make
julIDE unusable with no obvious way back. Values are now checked and corrected, and
settings are written atomically so an interrupted save cannot corrupt the file.
Added
In-app updates. julIDE checks for new releases and can install them itself.
AppImage, Windows, and macOS builds update in place. .deb and .rpm installs belong
to your system package manager, so those are told a new version exists and pointed at
the download instead. There is also a Check for Updates command in the palette.
A guided first run. If Julia is not installed, julIDE now offers to download it,
locate an existing installation, or check again, rather than showing a line of grey
text with no way to act on it. Once Julia is found, it offers one click installs for
LanguageServer, Revise, Debugger, and Pluto.
Permissions for plugins. Plugins are unsigned third party code, and they previously
ran with unrestricted access to everything julIDE can do. They now declare what they
need in plugin.json, you approve it once, and every request is checked against that
approval. Approvals are tied to the plugin's exact contents, so an updated or swapped
plugin asks again. You can review and revoke them under Settings, Plugins.
Workspace trust for dev containers. A devcontainer.json can declare an
initializeCommand, which by design runs on your machine rather than in the container.
julIDE now shows exactly which commands would run, and which of them run outside the
container, before starting anything.
A native application menu. File, Edit, View, Run, and Help. On macOS this also
restores the standard Edit menu, which is what makes system clipboard shortcuts work
properly there.
Your layout is remembered. Window size and position, sidebar width, and bottom panel
height all survive a restart.
Better failure handling. A crash in one panel no longer blanks the entire window,
and background errors are reported instead of disappearing into a console you cannot
see.
Linux desktop integration. julIDE now installs a proper desktop entry and can be
set as your default handler for .jl files, and appears correctly in GNOME Software
and KDE Discover.
Accessibility improvements. Dialogs now trap and restore keyboard focus instead of
letting Tab wander behind them, settings labels are properly associated with their
controls, and icon only buttons are labelled for screen readers.
Changed
- The application's own permissions were narrowed. Filesystem and shell APIs are no
longer exposed to the interface layer at all, since nothing was using them. - The Julia interpreter is verified before use. A binary that does not identify itself
as Julia is rejected rather than silently used for every run. - Settings are saved shortly after you stop typing rather than on every keystroke, and
a save that fails now tells you so. - Settings can be reset to defaults, keeping your recent projects.
For contributors
Continuous integration now runs on every push and pull request: type checking, linting,
formatting, and both test suites. Previously nothing ran automatically.
ESLint and Prettier are configured for the first time, and test files are type checked.
Setting that up immediately surfaced a broken import and a test helper that had quietly
been wrong for several releases.
Test coverage grew from 103 to 176 frontend tests and from 73 to 113 Rust tests.
SECURITY.md, CHANGELOG.md, CODE_OF_CONDUCT.md, issue templates, and a pull request
template have been added. CONTRIBUTING.md now documents the checks that CI actually
runs.
Full changelog: v0.1.0-beta4...v0.2.0