IDE, A native-feeling AI coding workspace that blends chat, planning, agent execution, and project navigation into a unified desktop experience.
An open-source AI IDE Shell — Cursor alternative: Agent, Editor, Git, Terminal, all in one place.
Bring the Cursor workflow to your own machine with a fully open-source tech stack.
The goal is simple: match Cursor in features and experience — the AI-native IDE shell with Agent, Monaco editor, workspace tools, diff review, and terminal all integrated — but delivered as open source: Apache 2.0 license, BYOK model access, and local-first conversations and configuration.
You can think of it as an AI-native desktop workspace: Agent, Monaco editor, Git, diff/review flow, and terminal are all in one place, but the stack underneath is transparent and hackable. The project uses Apache 2.0 license, BYOK for model access, and keeps threads, settings, and plans local-first by default.
| Aspect | undefinedCursorundefined | undefinedAsync IDEundefined |
|---|---|---|
| undefinedLicense / deliveryundefined | Proprietary product | undefinedOpen source codebase you can inspect and fork |
| undefinedModel accessundefined | Product billing / built-in integrations | undefinedBYOK for OpenAI, Anthropic, Gemini, and compatible APIs |
| undefinedStorage modelundefined | Product-managed workflow | undefinedLocal-first threads, settings, and plans |
| undefinedFocusundefined | Full IDE product | Desktop shell centered on agent workflow, editor, Git, and terminal |
Async IDE is an open-source AI-native desktop application designed as your command center for working with coding agents. Rather than being a chat plugin bolted onto the side of an editor, it starts from the Agent Loop and brings multi-model conversations, autonomous tool execution, and review workflows into a single workspace.
Read, Write, Edit, Glob, Grep, Shell, etc.), so every step is visible.
@ file mentions, rich segments, and persistent threads.Ctrl/Cmd+P) and keyboard-first navigation.Async can act as the host for coding agents on external chat surfaces, not only inside the Electron UI.
main-src/bots/platforms/.botRuntime: normal threads use agentLoop, while Team mode uses the same teamOrchestrator path as the desktop Composer, including worker streaming and tool status where applicable.agent / ask / plan / team), workspace root(s), optional allowlists for chats and users, and an extra system prompt on top of project rules.SettingsBotsPanel.tsx).For a deeper module-level walkthrough, see the maintainer-oriented notes under docs/llm-wiki/.
┌─────────────────────────────────────────────────────────┐
│ Renderer Process │
│ React + Vite │ Monaco Editor │ xterm.js Terminal │
│ Composer / Chat / Plan / Agent UI │
└──────────────────────────┬──────────────────────────────┘
│ contextBridge (IPC)
┌──────────────────────────▼──────────────────────────────┐
│ Main Process │
│ agentLoop.ts │ toolExecutor.ts │ LLM Adapters │
│ gitService │ threadStore │ settingsStore │
│ workspace │ LSP session │ PTY terminal │
└─────────────────────────────────────────────────────────┘
| Technology | Version | Purpose |
|---|---|---|
| undefinedReactundefined | ^19.2.4 | UI framework |
| undefinedElectronundefined | 41.1.0 | Desktop app shell |
| undefinedViteundefined | ^6.0.3 | Build tool & dev server |
| undefinedTypeScriptundefined | ^5.9.3 | Type-safe development |
| undefinedMonaco Editorundefined | ^0.52.0 | Code editor component |
| undefinedxterm.jsundefined | ^5.5.0 | Terminal emulator |
| undefinedOpenAI SDKundefined | ^4.96.0 | OpenAI API client |
| undefinedAnthropic SDKundefined | ^0.39.0 | Claude API client |
| undefinedGoogle Generative AIundefined | ^0.21.0 | Gemini API client |
| undefinedMCP SDKundefined | ^1.29.0 | Model Context Protocol |
| undefinednode-ptyundefined | ^1.1.0 | PTY terminal support |
contextBridge and ipcMain.**agentLoop.ts** handles multi-round tool calls, partial JSON streaming, tool repair, and aborts.**gitService** provides the Git layer used by the UI for status, diff, staging, commit, and push.Async/
├── main-src/ # Bundled -> electron/main.bundle.cjs (Node / Electron main)
│ ├── index.ts # App entry: windows, userData, IPC registration
│ ├── agent/ # agentLoop.ts, toolExecutor.ts, agentTools.ts, toolApprovalGate.ts
│ ├── llm/ # OpenAI / Anthropic / Gemini adapters & streaming
│ ├── lsp/ # TypeScript LSP session
│ ├── mcp/ # Model Context Protocol integration
│ ├── memdir/ # Memory directory management
│ ├── bots/ # IM bot controller, runtime, connectivity, platform adapters
│ ├── ipc/register.ts # ipcMain handlers (chat, threads, git, fs, agent, ...)
│ ├── shell/ # Shell command execution
│ ├── threadStore.ts # Persistent threads + messages (JSON)
│ ├── settingsStore.ts # settings.json
│ ├── gitService.ts # Porcelain status, diff previews, commit/push
│ ├── workspace.ts # Open-folder root & safe path resolution
│ ├── workspaceFileIndex.ts # File indexing for workspace
│ ├── workspaceSemanticIndex.ts # Semantic search indexing
│ ├── workspaceSymbolIndex.ts # Symbol indexing
│ └── workspaceUsageStats.ts # Workspace usage statistics
├── src/ # Vite + React renderer
│ ├── App.tsx # Shell layout, chat, composer modes, Git / explorer
│ ├── AgentChatPanel.tsx # Agent chat interface
│ ├── AgentLeftSidebar.tsx # Agent activity sidebar
│ ├── AgentRightSidebar.tsx # Agent tools and results
│ ├── ChatComposer.tsx # Message composer component
│ ├── EditorMainPanel.tsx # Monaco editor panel
│ ├── SettingsPage.tsx # Settings UI
│ ├── SettingsBotsPanel.tsx # IM bot integrations (Telegram / Slack / Discord / Feishu)
│ ├── WorkspaceExplorer.tsx # File explorer
│ ├── hooks/ # Custom React hooks (19 files)
│ ├── i18n/ # Locale messages (en / zh-CN)
│ └── ... # Agent UI, Plan review, Monaco, terminal, ...
├── electron/
│ ├── main.bundle.cjs # esbuild output (do not edit by hand)
│ └── preload.cjs # contextBridge -> window.asyncShell
├── docs/assets/ # Logo, screenshots
├── scripts/
│ └── export-app-icon.mjs # Rasterize SVG -> resources/icons/icon.png
├── esbuild.main.mjs # Builds main process
├── vite.config.ts # Renderer build
└── package.json
Default location under Electron’s userData directory:
async/threads.json: threads and chat messages.async/settings.json: model configuration, API keys, layout, agent options, and bots.integrations (Telegram / Slack / Discord / Feishu tokens, proxy URLs, allowlists, defaults)..async/plans/: Markdown plan documents generated in Plan mode.The renderer may use localStorage for lightweight UI state, but the authoritative data source for conversations is threads.json.
undefinedClone the repository:
git clone https://github.com/ZYKJShadow/Async.git
cd Async
If you prefer Gitee, you can also use:
git clone https://gitee.com/shadowsocks_z/Async.git
cd Async
undefinedInstall dependencies:
npm install
undefinedBuild and launch the desktop app:
npm run desktop
This will build both the main and renderer processes, then open the app with Electron.
npm run dev
To open DevTools during development:
npm run dev:debug
npm run icons
This will rasterize docs/assets/async-logo.svg into resources/icons/icon.png and public/favicon.png.
We genuinely need to thank Claude Code for its “open-source moment” — Async IDE as an open-source alternative is, in a way, an indirect beneficiary of that.
Have questions, ideas, or just want to chat with a community of developers?
This project is open-sourced under the Apache License 2.0.