You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add an umbrella fbuild ide feature that turns fbuild into a complete, local-first embedded development environment combining:
Zed’s editing experience.
clangd code intelligence.
fbuild’s build, deploy, device, dependency, and serial backends.
The approachable workflow of Arduino IDE.
The goal is not a pixel-for-pixel Arduino IDE copy. The goal is a modern replacement for its core local workflows: open a sketch, select an environment and device, write code with accurate navigation, compile, deploy, and monitor without manually configuring toolchains or dependencies.
fbuild already provides much of the backend:
fbuild build, deploy, monitor, reset, device, and sync.
compile_commands.json generation.
fbuild clangd-config.
Cross-toolchain discovery and framework installation.
LDF-style library selection.
Device discovery, leases, and bootloader port recovery.
Build, deploy, status, log, and serial WebSocket APIs through fbuild-daemon.
The missing layer is a cohesive IDE launch and UI experience.
Zed constraint
The current public Zed extension API supports languages, language servers, debuggers, themes, snippets, and MCP servers, but does not support arbitrary custom toolbars and panels.
This feature should therefore be delivered in phases:
Launch and configure stock Zed using generated settings, tasks, clangd configuration, and fbuild commands.
Build or maintain a Zed/GPUI application or fork that provides the full embedded UI.
Arduino Cloud synchronization is explicitly deferred.
Proposal
Introduce:
fbuild ide [project_dir] [-e <environment>]
The command should prepare the project and launch the supported Zed-based IDE.
Startup lifecycle
On launch:
Locate and parse platformio.ini.
Resolve the requested or default environment.
Resolve and install the selected platform, framework, toolchain, and declared libraries.
Generate required framework and board configuration headers.
Generate or refresh compile_commands.json.
Generate Zed and clangd configuration.
Launch the workspace.
Watch dependency and environment changes.
Refresh the compile database and restart/reload clangd when configuration changes.
Editor and clangd
The editing experience must provide:
Completion and signature help.
Live diagnostics.
Jump to declaration.
Jump to definition and implementation.
Find references.
Rename and symbol search.
Header/source switching.
Formatting.
Board- and environment-aware preprocessor state.
Navigation into framework, core, variant, toolchain, and library sources.
Correct diagnostic mapping from generated C++ back to the original .ino sketch.
clangd configuration must reflect the real embedded build:
Cross-compiler and target.
Board-specific defines.
Architecture and ABI flags.
Framework, variant, core, library, and toolchain include paths.
Generated headers.
Selected libraries only.
Cross-compiler builtin include directories.
Automatic dependency installation
When a project or environment is opened:
Install declared platform, framework, toolchain, and library dependencies.
Reuse fbuild’s managed caches and locks.
Install the complete framework/library source when available so navigation can reach implementations.
Index system and standard-library headers.
Retain generated sources and headers where clangd can inspect them.
Explain when implementation source is unavailable because a dependency is proprietary or precompiled.
For unresolved includes:
Automatically install an unambiguous compatible provider.
Show a picker when multiple libraries provide the same header.
Never silently choose an ambiguous dependency.
Explain architecture incompatibilities.
Persist selections in project configuration and platformio.lock.
Support offline/cache-only operation.
Primary UI
The full Zed/GPUI phase should provide:
Toolbar
Verify/Compile.
Deploy/Upload.
Deploy and Monitor.
Stop/cancel.
Reset board.
Open Serial Monitor.
Open Serial Plotter.
Selectors
Keep these concepts separate:
Environment selector: platform, board, framework, flags, and dependencies.
Board selector: compile identity and board options.
Device/port selector: the physical deployment and monitoring target.
Programmer selector where supported.
The active environment and its persisted project configuration must remain the source of truth. UI state must not silently diverge from platformio.ini and platformio.lock.
Left project pane
Show:
Primary .ino sketch.
Additional .ino files.
Project headers and C/C++ sources.
src/, include/, lib/, and data/.
Framework, core, variant, and dependency sources.
Built-in, platform, and library examples.
Dependency sources should be visibly distinguished from user-editable project files.
Bottom panel
Provide:
Build and deployment logs.
Structured problems and clickable diagnostics.
Serial Monitor.
Serial Plotter.
Flash and RAM usage.
Operation progress and cancellation.
clangd and toolchain health.
Build and deployment
Compile must support:
Incremental and clean builds.
Progress and cancellation.
Clickable compiler diagnostics.
Flash and RAM usage.
Artifact locations.
Optional verbose commands.
Automatic clangd refresh after configuration changes.
Deploy must support:
Automatic device detection.
Explicit port selection and override.
Bootloader re-enumeration and changed-port recovery.
Upload progress and verification.
Automatic monitor reconnection.
Serial, USB, debug-probe, network, and OTA deployment where supported.
Upload Using Programmer.
Burn Bootloader.
Serial Monitor and Plotter
Serial Monitor should support:
Board-aware baud rate and control-line behavior.
Line-ending selection.
Text and raw-byte transmission.
Timestamps.
Autoscroll and pause.
Clear, copy, search, and save.
Automatic reconnect after reset or deployment.
Port ownership/conflict diagnostics.
Multiple readers through the existing daemon serial manager.
Serial Plotter should support:
Multiple numeric channels.
Labels and legends.
Configurable ranges and history.
Pause, clear, and export.
Reconnection with the same device identity.
Managers
Library manager
Search by name, header, category, and architecture.
Install, remove, upgrade, downgrade, and pin.
Show metadata, dependencies, compatibility, examples, and source links.
Install from registry, Git, archive, or local path.
Update project configuration and lock state.
Platform and board manager
Search platforms and boards.
Install, remove, upgrade, downgrade, and pin package versions.
Support additional package registries.
Display installation progress and disk usage.
Configure board-specific menus such as CPU frequency, flash layout, USB mode, and partition scheme.
Project and sketch management
Provide:
New sketch.
Open, save, rename, duplicate, archive, and recent projects.
Sketchbook browsing.
Built-in, framework, platform, and library examples.
Import library or sketch archives.
Crash recovery for unsaved changes.
Multi-environment workspaces.
Formatting preferences and keybindings.
Debugging
Long-term Arduino IDE parity includes:
Supported-probe detection.
Breakpoints.
Continue, pause, and stepping.
Variables and watches.
Call stack.
Registers and disassembly.
Board-specific debug configuration.
J-Link, CMSIS-DAP, Atmel-ICE, and other supported adapters.
Suggested child issues
This meta issue should be decomposed into independently closable child issues:
Define fbuild ide CLI contract and architecture.
Implement stock-Zed discovery, configuration, and launch.
Generate .zed/settings.json, tasks, and environment configuration.
Make compile-database and clangd refresh environment-aware.
Install missing platform, framework, toolchain, and declared dependencies on open.
Add safe include-to-library resolution and ambiguous-provider picker.
Decide and implement the Zed fork/GPUI distribution strategy.
Add embedded build/deploy toolbar and operation progress.
Add environment, board, device, port, and programmer selectors.
Add the sketch/project/dependency source tree.
Add integrated Serial Monitor.
Add Serial Plotter.
Add library manager.
Add platform and board manager.
Add examples and sketchbook workflows.
Add programmer upload and bootloader operations.
Add debugger integration.
Add cross-platform packaging, updates, and first-run onboarding.
Add end-to-end tests for representative AVR, ESP32, ARM, and RP2040 projects.
Child issues should link back to this issue and be added to the checklist as they are created.
Acceptance criteria
This meta issue is complete when:
All required child issues have been created, linked, and completed.
fbuild ide [project_dir] [-e <environment>] works on Windows, macOS, and Linux.
A fresh supported project can be opened without manually installing its toolchain, framework, or declared libraries.
clangd completion, diagnostics, declaration, definition, implementation, and reference navigation work for project, framework, and library code.
Changing environments refreshes dependencies, compile configuration, and clangd.
The IDE exposes compile, deploy, reset, monitor, and cancellation controls.
Environment, board, and physical-device selection remain distinct and are persisted correctly.
Serial Monitor reconnects across deploy/reset and port re-enumeration.
Serial Plotter supports multiple numeric streams.
Library and platform managers can search, install, remove, upgrade, and pin packages.
Ambiguous missing-header providers require an explicit user selection.
Build and deployment errors are clickable and map to project source.
Representative AVR, ESP32, ARM, and RP2040 projects pass end-to-end IDE tests.
First-run setup and troubleshooting are documented.
Non-goals
Pixel-for-pixel replication of Arduino IDE.
Arduino Cloud sketch synchronization in the initial scope.
Guaranteeing implementation navigation for proprietary or binary-only dependencies.
Hiding platformio.ini or creating a second conflicting project configuration model.
Open questions
Child issues should resolve:
How the Zed/GPUI application or fork is built, distributed, updated, and kept synchronized with upstream Zed.
Whether generated Zed configuration is project-owned, fbuild-owned, or layered without modifying user files.
How UI edits to boards, environments, and libraries are persisted atomically.
Which board-specific configuration menus are required for the initial supported platform set.
Which debugger adapters and hardware probes form the first supported debugging milestone.
Context
Add an umbrella
fbuild idefeature that turns fbuild into a complete, local-first embedded development environment combining:The goal is not a pixel-for-pixel Arduino IDE copy. The goal is a modern replacement for its core local workflows: open a sketch, select an environment and device, write code with accurate navigation, compile, deploy, and monitor without manually configuring toolchains or dependencies.
fbuild already provides much of the backend:
fbuild build,deploy,monitor,reset,device, andsync.compile_commands.jsongeneration.fbuild clangd-config.fbuild-daemon.The missing layer is a cohesive IDE launch and UI experience.
Zed constraint
The current public Zed extension API supports languages, language servers, debuggers, themes, snippets, and MCP servers, but does not support arbitrary custom toolbars and panels.
This feature should therefore be delivered in phases:
References:
Arduino Cloud synchronization is explicitly deferred.
Proposal
Introduce:
The command should prepare the project and launch the supported Zed-based IDE.
Startup lifecycle
On launch:
platformio.ini.compile_commands.json.Editor and clangd
The editing experience must provide:
.inosketch.clangd configuration must reflect the real embedded build:
Automatic dependency installation
When a project or environment is opened:
For unresolved includes:
platformio.lock.Primary UI
The full Zed/GPUI phase should provide:
Toolbar
Selectors
Keep these concepts separate:
The active environment and its persisted project configuration must remain the source of truth. UI state must not silently diverge from
platformio.iniandplatformio.lock.Left project pane
Show:
.inosketch..inofiles.src/,include/,lib/, anddata/.Dependency sources should be visibly distinguished from user-editable project files.
Bottom panel
Provide:
Build and deployment
Compile must support:
Deploy must support:
Serial Monitor and Plotter
Serial Monitor should support:
Serial Plotter should support:
Managers
Library manager
Platform and board manager
Project and sketch management
Provide:
Debugging
Long-term Arduino IDE parity includes:
Suggested child issues
This meta issue should be decomposed into independently closable child issues:
fbuild ideCLI contract and architecture..zed/settings.json, tasks, and environment configuration.Child issues should link back to this issue and be added to the checklist as they are created.
Acceptance criteria
This meta issue is complete when:
fbuild ide [project_dir] [-e <environment>]works on Windows, macOS, and Linux.Non-goals
platformio.inior creating a second conflicting project configuration model.Open questions
Child issues should resolve:
Related issues
Existing foundations:
fbuild syncand deterministicplatformio.lock.