julIDE
A modern, fully-featured IDE for the Julia programming language, built with Tauri 2, React, TypeScript, and Rust.
Credits
@ Rakesh - conributed multiple bug fixs and featue suggestions π
@ RockyBeast - contributed the new julIDE icons π
Features
Code Editing
- Monaco Editor with full Julia syntax highlighting via a custom Monarch tokenizer
- 25+ Julia snippets β function, struct, try/catch, @testset, comprehensions, macros, and more
- Tabbed multi-file editing with dirty indicators and auto-save
- Split editor β side-by-side editing with a resizable divider
- Breadcrumb navigation showing the file path below the tab bar
- Find & Replace (Cmd/Ctrl+F, Cmd/Ctrl+H) via Monaco's built-in widget
- Configurable font size, font family, tab size, word wrap, and minimap
- LaTeX to Unicode β type
\alpha+ Tab to insertΞ±(based on Julia's LaTeX symbols table)
Language Intelligence (LSP)
- Powered by LanguageServer.jl
- Autocompletion, hover documentation, go-to-definition, find references
- Signature help with parameter info
- Real-time diagnostics (errors and warnings) shown inline and in the Problems panel
- Error lens β inline diagnostic messages displayed at the end of each line
- InlayHints β type and parameter hints displayed inline in the editor
- Semantic tokens β rich semantic highlighting beyond syntax-level tokenization
- Workspace and document symbol search
Julia Runtime
- Run scripts with rich output β inline images (PNG, JPEG, SVG), HTML, and plain text
- Interactive REPL via xterm.js with full PTY emulation
- Multi-terminal support β create, switch, and close multiple Julia REPL sessions
- Debugger integration via Debugger.jl β breakpoints, step-through, variable inspection, call stack
- Code cell execution β
##markers create code cells;Ctrl/Cmd+Enterruns the current cell with inline results - Variable Explorer β workspace variable introspection via the REPL with DataFrame viewer support
- Revise.jl toggle for hot-reload development
- Pluto.jl reactive notebook support β open
.jlfiles as Pluto notebooks in a native window - Package Manager β add and remove packages via
Pkg.jldirectly from the UI - Environment selector β switch between Julia project environments
File Management
- File explorer with tree view, create/rename/delete files and folders
- Drag-and-drop to move files between directories
- File watching β automatically detects external changes (git, other editors) and refreshes the tree
- Quick Open (Cmd/Ctrl+P) β fuzzy file finder across the entire workspace
- Global Search (Cmd/Ctrl+Shift+F) β search across all files with regex, case-sensitivity, and glob filters
Git Integration
- Source control panel β view staged, unstaged, and untracked files
- Stage / unstage individual files or stage all at once
- Commit with a message directly from the UI
- Branch management β create, delete, and switch branches from the UI
- Push / Pull / Fetch β sync with remote repositories
- Merge β fast-forward and normal merges with conflict detection
- Stash β save, list, and pop stashed changes
- Ahead/Behind tracking β see how far your branch is from the upstream
- GitHub / GitLab / Gitea provider integration β browse PRs, issues, and CI status directly in the IDE
- Auth settings β store personal access tokens securely via the OS keychain
- Git blame β toggle inline blame annotations showing author, date, and commit summary per line
- Diff viewer β side-by-side diff view using Monaco DiffEditor
- Merge conflict resolution β detects conflict markers and provides "Accept Current", "Accept Incoming", and "Accept Both" action buttons inline
- Powered by
libgit2(via thegit2Rust crate) β no shell dependency for core operations
Workspace & UI
- Activity bar β switch between Explorer, Outline, Search, Variables, Source Control, and Dev Containers views
- Command palette (Cmd/Ctrl+Shift+P) with 35+ commands
- Settings panel (Cmd/Ctrl+,) β configure editor, terminal, and appearance
- Theme support β Dark and Light themes with full CSS variable system
- Welcome screen with recent projects on startup
- Resizable panels β sidebar and bottom panel with drag handles
- Outline panel β LSP-powered document symbol tree in the sidebar (functions, structs, modules, etc.)
- Variable Explorer β workspace variable introspection in the sidebar with DataFrame viewer
- Plot Pane β image gallery in the bottom panel for plot output (PNG, JPEG, SVG, HTML)
- Test Runner β runs
Pkg.test()and parses@testsetresults in the bottom panel - Status bar β Julia version, environment, git branch, LSP status, Revise/Pluto indicators
Dev Container Support
- Auto-detect
devcontainer.jsonin the workspace and offer to build/start - Docker and Podman runtime auto-detection (with manual override in settings)
- Build, start, stop, rebuild, and tear down dev containers from the UI or command palette
- Container panel in the sidebar β list running containers and images, start/stop/restart/remove
- Container logs panel β stream and view container output in real time
- Container terminal β open a PTY session inside the running container
- Run Julia inside the container β execute scripts in the dev container environment
Plugin System
- Plugin discovery β automatically scans
~/.julide/plugins/for installed plugins - Plugin manifest (
plugin.json) β declare name, version, entry point, and contributions - Plugin API β register commands, sidebar panels, bottom panels, status bar items, and toolbar buttons
- Plugin panel in the activity bar sidebar β view installed plugins and their status
Prerequisites
- Julia 1.6 or later (download)
- Rust (latest stable) β install via rustup
- Bun β install (used as the package manager and script runner)
- System dependencies for Tauri β see Tauri prerequisites
Recommended Julia packages
Install these globally for the best experience:
using Pkg
Pkg.add("LanguageServer") # LSP support
Pkg.add("Revise") # Hot-reload
Pkg.add("Debugger") # Debugger integration
Pkg.add("Pluto") # Reactive notebooks
Getting Started
Clone and install
git clone https://github.com/sinisterMage/JulIde.git
cd JulIde
bun install
Development
# Start the Tauri dev server (frontend + native window with hot reload)
bun run tauri dev
This starts Vite on localhost:1420 and opens the native Tauri window. Changes to both the React frontend and Rust backend are hot-reloaded.
Production Build
# Build the distributable application
bun run tauri build
The output is placed in src-tauri/target/release/bundle/ and includes platform-specific installers (.dmg on macOS, .msi/.exe on Windows, .deb/.AppImage on Linux).
Architecture
julIDE
βββ src/ # React + TypeScript frontend
β βββ components/ # UI components
β β βββ ActivityBar/ # Sidebar view switcher
β β βββ CommandPalette/ # Cmd+Shift+P command search
β β βββ Debugger/ # Debug panel (variables, call stack)
β β βββ Editor/ # Monaco editor, tabs, breadcrumb, split view
β β βββ FileExplorer/ # File tree with drag-and-drop
β β βββ Container/ # Dev container management panel and logs
β β βββ Git/ # Source control panel, diff viewer
β β βββ Outline/ # LSP document symbol outline
β β βββ OutputPanel/ # Script output with MIME rendering
β β βββ PackageManager/ # Julia package management UI
β β βββ PlotPane/ # Plot output gallery
β β βββ Plugin/ # Plugin management panel
β β βββ QuickOpen/ # Fuzzy file finder (Cmd+P)
β β βββ SearchPanel/ # Global file search (Cmd+Shift+F)
β β βββ Settings/ # Preferences panel
β β βββ StatusBar/ # Bottom status indicators
β β βββ Terminal/ # Multi-terminal with xterm.js
β β βββ TestRunner/ # Test execution with result parsing
β β βββ Toolbar/ # Run, debug, Revise, Pluto buttons
β β βββ Variables/ # Variable explorer with DataFrame viewer
β β βββ Welcome/ # Welcome screen with recent projects
β βββ lsp/ # LSP client and Monaco providers
β βββ services/ # Keybinding service, plugin host, builtin contributions
β βββ stores/ # Zustand state management
β βββ themes/ # Theme definitions (dark + light)
β βββ types/ # TypeScript interfaces
β βββ App.tsx # Root layout component
β
βββ src-tauri/ # Rust backend (Tauri 2)
β βββ src/
β βββ main.rs # Entry point
β βββ lib.rs # Command registry and plugin setup
β βββ julia.rs # Julia discovery, execution, Pkg commands
β βββ lsp.rs # LanguageServer.jl JSON-RPC bridge
β βββ pty.rs # PTY terminal management
β βββ debugger.rs # Debugger.jl integration
β βββ fs.rs # File system operations and dialogs
β βββ git.rs # Git operations via libgit2
β βββ git_auth.rs # PAT token storage via OS keychain (keyring)
β βββ git_provider.rs # Git provider trait and commands for PRs/issues/CI
β βββ git_github.rs # GitHub REST API provider implementation
β βββ git_gitlab.rs # GitLab REST API provider implementation
β βββ git_gitea.rs # Gitea REST API provider implementation
β βββ container.rs # Docker/Podman container and devcontainer management
β βββ plugins.rs # Plugin discovery and manifest loading
β βββ search.rs # Workspace-wide file search
β βββ watcher.rs # File change detection (notify crate)
β βββ settings.rs # User settings persistence
β βββ pluto.rs # Pluto.jl notebook server
β
βββ package.json # Frontend dependencies (React, Monaco, xterm)
βββ vite.config.ts # Vite build configuration
βββ tsconfig.json # TypeScript configuration
βββ src-tauri/Cargo.toml # Rust dependencies (tauri, git2, tokio, etc.)
Tech Stack
| Layer | Technology |
|---|---|
| Desktop framework | Tauri 2 (Rust) |
| Frontend | React 19, TypeScript, Vite |
| Code editor | Monaco Editor |
| Terminal | xterm.js with PTY |
| State management | Zustand with Immer middleware |
| Icons | Lucide React |
| Git operations | git2 (libgit2 bindings) |
| File watching | notify crate |
| File search | walkdir + regex crates |
| LSP | LanguageServer.jl via JSON-RPC over stdio |
| Git provider API | reqwest (HTTP client for GitHub/GitLab/Gitea) |
| Token storage | keyring crate (OS keychain) |
| Container runtime | Docker / Podman CLI (auto-detected) |
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
Cmd/Ctrl+Shift+P |
Command Palette |
Cmd/Ctrl+P |
Quick Open (file finder) |
Cmd/Ctrl+F |
Find in file |
Cmd/Ctrl+H |
Find and replace |
Cmd/Ctrl+Shift+F |
Search across files |
Cmd/Ctrl+S |
Save file |
Ctrl+` |
Toggle terminal |
Cmd/Ctrl+G |
Go to Line |
Ctrl/Cmd+Enter |
Run code cell |
Cmd/Ctrl+, |
Open settings |
Configuration
Settings are stored in ~/.config/julide/settings.json (Linux), ~/Library/Application Support/julide/settings.json (macOS), or %APPDATA%/julide/settings.json (Windows).
Available settings:
| Setting | Default | Description |
|---|---|---|
fontSize |
14 |
Editor font size |
fontFamily |
JetBrains Mono, ... |
Editor font family |
tabSize |
4 |
Indentation width |
minimapEnabled |
true |
Show minimap |
wordWrap |
off |
Word wrap mode |
autoSave |
true |
Auto-save on change |
theme |
julide-dark |
Color theme (julide-dark or julide-light) |
terminalFontSize |
13 |
Terminal font size |
containerRuntime |
auto |
Container runtime (auto, docker, or podman) |
containerRemoteHost |
"" |
Remote Docker/Podman host URL |
containerAutoDetect |
true |
Auto-detect devcontainer.json on workspace open |
displayForwarding |
true |
Forward X11/Wayland display into containers |
gpuPassthrough |
false |
Pass GPU devices into containers |
selinuxLabel |
true |
Apply SELinux labels to bind mounts |
persistJuliaPackages |
true |
Persist Julia packages across container rebuilds |
plutoPort |
3000 |
Port for the Pluto.jl notebook server |
juliaPath |
"" |
Custom Julia binary path (overrides auto-detection) |
startMaximized |
true |
Start the window maximized |
Julia Path Detection
julIDE automatically finds Julia using these strategies (in order):
juliaPathsetting (if set via Settings or the command palette "Set Julia Executable Path")$JULIA_PATHenvironment variable- Login shell
which julialookup ~/.juliaup/bin/julia(juliaup default)- Common paths:
/opt/homebrew/bin/julia,/usr/local/bin/julia,/usr/bin/julia - macOS
/Applications/Julia*.appbundles
If Julia is not found, use the command palette (Cmd/Ctrl+Shift+P β "Set Julia Executable Path") to pick a custom binary, or set the JULIA_PATH environment variable.
License
MIT -- Copyright 2026 Ofek Bickel