Built-in extensions that ship with every Hone IDE installation. This repository contains 11 extensions covering the most popular programming languages and developer tools — all implemented in TypeScript, compiled to native binaries by Perry, and loaded at runtime by Hone's extension host.
| Extension | Languages / Scope | LSP Server |
|---|---|---|
| typescript | TypeScript, JavaScript, TSX, JSX | typescript-language-server |
| python | Python | pyright-langserver |
| rust | Rust | rust-analyzer |
| go | Go, Go modules | gopls |
| cpp | C, C++, Objective-C | clangd |
| html-css | HTML, CSS, SCSS, Less | vscode-html-language-server, vscode-css-language-server |
| json | JSON, JSONC | vscode-json-language-server |
| markdown | Markdown | (built-in, no external server) |
| git | Git SCM integration | (uses Hone's built-in Git API) |
| docker | Dockerfile, docker-compose | dockerfile-language-server-nodejs |
| toml-yaml | TOML, YAML | taplo, yaml-language-server |
- IntelliSense — completions, hover documentation, go-to-definition, find references
- Diagnostics — real-time errors and warnings from the language server
- Formatting — document and range formatting via LSP
- Code actions — quick fixes, refactors, and organize imports
- Commands — language-specific commands in the command palette
- Snippets — curated snippet libraries for fast coding
- Syntax highlighting — language configuration for bracket matching, folding, and comments
- Schema validation — JSON/TOML/YAML files validated against known schemas (SchemaStore)
Each extension is a small, self-contained TypeScript package:
extensions/<name>/
├── hone-extension.json # Manifest: identity, activation events, contributions
├── src/
│ └── index.ts # activate() / deactivate() entry point
├── snippets/ # Snippet JSON files
├── language-configuration.json # Bracket pairs, comments, folding
└── tsconfig.json
Single import. Every extension imports only @honeide/api — no Node.js built-ins, no third-party npm packages, no cross-extension imports.
AOT compilation. Perry compiles each src/index.ts directly to a native dynamic library (.dylib / .so / .dll). No JavaScript runtime is bundled with Hone.
Independence. Extensions have no runtime dependencies on each other. Disabling any extension has zero effect on the others.
Lazy activation. Extensions activate only when needed — typically when a matching file is opened (onLanguage:) or a matching workspace file is detected (workspaceContains:).
shared/lsp-helpers.ts provides three utilities used by most extensions:
findExecutable(name)— searches PATH and common tool installation locations (~/.cargo/bin,~/go/bin,~/.local/bin, etc.)registerLspServer(context, options)— registers an LSP server with automatic executable detection and a user-facing warning if the server is not installedsendLspRequest<T>(client, method, params)— sends a typed custom LSP request
This file is compiled into each extension that uses it — it is not a shared library at runtime.
Powered by typescript-language-server, which wraps the official tsserver. Provides completions, diagnostics, hover, go-to-definition, rename, code actions, and formatting across TypeScript, JavaScript, TSX, and JSX.
Commands: Organize Imports · Add Missing Imports · Rename File and Update Imports · Go to Source Definition · Restart Language Server
Configuration: typescript.format.semicolons, typescript.suggest.includeCompletionsForModuleExports, typescript.inlayHints.*, typescript.preferences.importModuleSpecifier
Uses Pyright (pyright-langserver) for type-checked IntelliSense, diagnostics, and auto-import. Includes interpreter selection, virtual environment creation, and run-file/run-selection commands.
Commands: Run Python File · Run Selection in Terminal · Select Python Interpreter · Create Virtual Environment · Restart Language Server
Configuration: python.pythonPath, python.analysis.typeCheckingMode (off/basic/standard/strict), python.analysis.autoImportCompletions, python.formatting.provider
Backed by rust-analyzer. Exposes macro expansion, HIR inspection, docs.rs integration, parent module navigation, and matching brace navigation alongside standard LSP features.
Commands: Run · Check · Test · Expand Macro · View HIR · Open docs.rs · Locate Parent Module · Go to Matching Brace · Restart Server
Configuration: rust.checkOnSave.command (check/clippy), rust.cargo.features, rust.procMacro.enable, rust.inlayHints.*
Uses gopls with full workspace support. Detects test functions at the cursor for go test -run <TestName>, handles file toggling between foo.go and foo_test.go, and forwards gopls code actions for generate tests, add struct tags, and fill struct.
Commands: Run Test · Run Test at Cursor · Go Mod Tidy · Generate Tests · Add Struct Tags · Fill Struct · Toggle Test File · Restart Server
Configuration: go.formatTool (gofmt/goimports/golines), go.lintTool, go.buildFlags, go.testFlags
Configured for clangd with background indexing and clang-tidy integration. Automatically detects compile_commands.json in the workspace and passes --compile-commands-dir to clangd. Implements header/source switching via clangd's custom textDocument/switchSourceHeader LSP request.
Commands: Switch Header/Source (Alt+O) · Restart Server
Configuration: cpp.clangdPath, cpp.clangdArgs, cpp.compileCommands, cpp.fallbackFlags
Registers both vscode-html-language-server and vscode-css-language-server (from vscode-langservers-extracted). Includes a lightweight Emmet engine supporting tag expansion, class/ID shortcuts, child (>), sibling (+), and multiplication (*N) operators.
Commands: Emmet: Expand Abbreviation (Tab) · Emmet: Wrap with Abbreviation · Remove Tag · Update Tag · Pick Color
Configuration: html.autoClosingTags, html.autoRenameTag, html.format.wrapLineLength, css.validate, emmet.triggerExpansionOnTab
Uses vscode-json-language-server with a built-in schema catalog that covers package.json, tsconfig.json, .eslintrc.json, .prettierrc, hone-extension.json, perry.config.json, and *.schema.json out of the box. Custom schema associations can be added via json.schemas.
Commands: Sort JSON Keys · Format JSON · Minify JSON
Configuration: json.schemas (custom associations), json.format.enable, json.validate.enable, json.schemaDownload.enable
No external LSP server — all features are implemented directly in TypeScript. Renders a live preview in a webview panel (debounced at 300ms) with GitHub Flavored Markdown support. The preview respects the editor's light/dark theme.
Commands: Open Preview · Open Preview to Side (Cmd+Shift+V) · Toggle Bold/Italic/Code/Strikethrough · Insert Link/Image/Table · Generate/Update Table of Contents
Configuration: markdown.preview.fontSize, markdown.preview.lineHeight, markdown.preview.scrollSync, markdown.preview.typographer
The most complex built-in extension, split across four source files. Uses Hone's built-in hone.git.* API rather than an external LSP server.
src/blame.ts— inline blame annotations rendered as after-text decorations with configurable format stringsrc/statusbar.ts— status bar showing branch name, dirty indicator, and ahead/behind sync counts (auto-refreshes every 30s)src/graph.ts— webview-based commit graph with branch labels, SVG lane drawing, and click-to-checkoutsrc/index.ts— all 18 SCM commands plus optional auto-fetch
Commands: Stage/Unstage File · Stage All · Commit · Commit All · Push · Pull · Fetch · Create/Switch/Delete Branch · View Log · View Graph · Toggle Blame · View File History · Diff with Previous · Stash · Pop Stash
Configuration: git.enabled, git.autofetch, git.blame.enabled, git.blame.format, git.confirmSync, git.enableSmartCommit
Registers dockerfile-language-server-nodejs for Dockerfile IntelliSense. Provides terminal-based commands for building images and managing containers, with configurable Docker executable path and compose command.
Commands: Build Image · Run Container · Compose Up · Compose Down · Restart Server
Configuration: docker.dockerPath, docker.composeCommand, docker.defaultBuildArgs
Registers taplo for TOML and yaml-language-server for YAML. Both servers provide schema-based validation. Built-in schema associations include Cargo.toml, pyproject.toml, docker-compose.yml, GitHub Actions workflows, GitLab CI, and more.
Commands: Restart TOML Server · Restart YAML Server
Configuration: toml.formatter.*, toml.schemas, yaml.schemas, yaml.format.*, yaml.validate, yaml.completion
- Perry compiler (for building extensions)
- Node.js 20+ and npm (for tests and scripts)
- LSP server binaries installed on your system (for integration tests)
git clone https://github.com/HoneIDE/extensions
cd extensions
npm installnpm test # Run all tests once
npm run test:watch # Watch mode
npm run validate # Validate all extension manifests
npm run typecheck # TypeScript type-check (no emit)Tests use Vitest with a mock @honeide/api — no IDE or LSP servers required to run the unit test suite.
npm run build # Compile all extensions via Perry → dist/
npm run bundle # Bundle compiled extensions into IDE binaryIndividual extension:
perry compile extensions/typescript/src/index.ts \
--output-type dylib \
--output dist/typescript/extension.dylib \
--target current- Create
extensions/<name>/with the standard structure - Write
hone-extension.jsonfollowing the manifest schema - Implement
activate(context)anddeactivate()insrc/index.ts - Use
registerLspServerfrom../../shared/lsp-helpersfor LSP setup - Add snippet JSON files and
language-configuration.jsonas needed - Write
tsconfig.jsonextending../../tsconfig.base.json - Run
npm run validateandnpm test
Extensions configure and launch LSP servers but do not bundle them. Install the servers you need:
| Extension | Server | Install |
|---|---|---|
| TypeScript | typescript-language-server |
npm i -g typescript-language-server typescript |
| Python | pyright-langserver |
pip install pyright or npm i -g pyright |
| Rust | rust-analyzer |
rustup component add rust-analyzer |
| Go | gopls |
go install golang.org/x/tools/gopls@latest |
| C/C++ | clangd |
OS package manager (e.g., brew install llvm) |
| HTML/CSS | vscode-langservers-extracted |
npm i -g vscode-langservers-extracted |
| JSON | vscode-langservers-extracted |
npm i -g vscode-langservers-extracted |
| Docker | dockerfile-language-server-nodejs |
npm i -g dockerfile-language-server-nodejs |
| TOML | taplo |
cargo install taplo-cli |
| YAML | yaml-language-server |
npm i -g yaml-language-server |
MIT — see LICENSE.
Part of the Hone IDE project.