A Visual Studio Code extension providing rich language support for bnd (.bnd) and bndrun (.bndrun) files used in OSGi development with the bnd/bndtools toolchain.

The screenshots in this document were taken from the bnd source workspace and from a workspace generated by the built-in wizards. They can be regenerated with scripts/screenshots.mjs; see DEV.md.
Getting Started
- Install the extension (see Installation) and make a Java 17+ runtime available. The bundled Java language server starts automatically; Node fallback mode provides editing support only.
- Open an existing bnd workspace (a folder containing
cnf/build.bnd), or open an empty folder and use the Workspace Wizards to create one.
- Open the bnd Activity Bar container to browse workspace files and repositories, and open any
.bnd or .bndrun file to use completions, hover documentation, diagnostics, and the Run and Debug CodeLens.
Features
Syntax Highlighting
Full TextMate grammar covering:
- Instructions – Lines starting with
-keyword: (e.g., -buildpath:, -runbundles:, -privatepackage:) highlighted as control keywords.
- OSGi Headers – Standard manifest headers (
Bundle-SymbolicName:, Export-Package:, Import-Package:, etc.) highlighted as storage types.
- Properties – Lowercase key-value properties highlighted as variables.
- Macros –
${macroname} expressions, with the macro name highlighted as a function. Nested macros are also handled.
- Version ranges –
[1.0,2.0) and (1.0,2.0] highlighted as numeric constants.
- String literals – Single and double-quoted strings.
- Directives –
key:=value attribute/directive syntax.
- Continuation lines – Trailing backslash
\ line continuations.
- Comments –
# line comments and // inline comments.
IntelliSense Completions
Trigger completions with Ctrl+Space (or automatically on -, $, {, :).
All completion items are pre-filled with real examples from the bnd documentation.
- 153 bnd instructions – e.g.:
-buildpath: osgi;version=4.1
-runbundles: org.apache.felix.framework;version='[7,8)'
-dsannotations: *, -runee: JavaSE-17, -standalone: ...
- 138 bnd macros – triggered when the cursor is inside
${...}:
${bsn}, ${version}, ${range;[==,+);${@}}, ${repo;bsns}
${filter;<list>;<regex>}, ${replace;<list>;<regex>;<replacement>}
${tstamp;yyyy-MM-dd}, ${githead}, ${system;git describe}
- 48 OSGi headers and bnd pseudo-headers – e.g.:
Bundle-SymbolicName: com.example.bundle
Export-Package: com.example.api;version=1.0
Require-Capability: osgi.identity; filter:='...'

Hover Documentation
Hover over any instruction keyword, OSGi header, or macro name to see:
- The full syntax signature (bold).
- A documentation summary from the bnd reference docs.
- An example from the official bnd documentation, shown in a
bnd code block.

Diagnostics and Quick Fixes
In java server mode, the bundled language server reports bnd build, run, and verification problems inline and offers quick fixes (Ctrl+.) for:
- Property conflicts – keys defined more than once in a file, or merged-property keys (such as
-runvm or -runrequires) shadowed by an -included file. Conflicts are validated from the unsaved editor text with exact key ranges. Quick fixes rename a merge-capable key to a unique key.<suffix> or remove the conflicting definition including its continuation lines. Reporting follows bnd's -propertyconflicts policy: set -propertyconflicts: warning (or error) in cnf/build.bnd or the edited file, or enable -pedantic: true; it is off by default.
- Invalid
Bundle-Activator – remove the header when the referenced class is missing, abstract, imported, or otherwise unusable.
- Baseline
Bundle-Version mismatch – change the version to the value suggested by baselining while preserving a macro qualifier such as .${tstamp}.

Effective Properties
Use bnd: Open Effective on a .bnd or .bndrun file, or select Bnd Effective from Reopen Editor With.... bnd: Open Effective to Side keeps the source editor visible beside the read-only table. The standard text editor remains the default.
The table shows Key, Value, Provenance, and evaluation Errors. Filter rows, resize columns, expand long values, and click provenance links to open defining files. Expanded evaluates macros; Merged combines supported instructions and headers using bnd's decorated-property semantics. Turning expansion off also disables merging.
Current-file edits appear without saving, including added and deleted properties. Included files and workspace settings use their saved contents; a warning identifies unsaved dependencies. Saving dependencies or using Refresh recomputes the view. Show Effective Source opens generated read-only bnd text; Open Original Source returns to the editable file. The view re-evaluates only when the edited file or one of its dependency files changes on disk; events from other providers (such as Git quick-diff) are ignored.

This feature requires workspace trust and a Java language server advertising bnd.properties.effective. The bundled server supports it; Node fallback and older custom/socket servers report that it is unavailable. Macro evaluation is not a sandbox: trusted bnd configuration can initialize plugins, create caches, access repositories, or run commands. Effective values can contain secrets; copying or exporting them should be deliberate.
Run and Debug
.bndrun files and bnd projects launch through VS Code's Run and Debug facility. The Java language server prepares the launch with bnd's ProjectLauncher (bnd.launch.prepare), and the Debugger for Java extension starts the JVM, so breakpoints, stepping, and the Debug Console work as usual. When the session ends, the extension calls bnd.launch.dispose to delete temporary launcher files. A run without debugging in a terminal keeps its launcher files until the same target is launched again or the language server shuts down, because the JVM reads them after the session ends.

- Run OSGi / Debug OSGi and Run OSGi tests / Debug OSGi tests CodeLens on
.bndrun and bnd.bnd files (bnd.launch.codeLens), the editor title run menu, the context menu in the Explorer and bnd Explorer, and the Command Palette. From the Command Palette without an active .bndrun or bnd.bnd editor, a list of the workspace's launch files is shown.
- A
bnd debug type for launch.json with target, kind (run or test), tests, vmArgs, args, env, console, buildBeforeLaunch, javaExec, and shortenCommandLine. The Run and Debug view lists every .bndrun file and test project dynamically.
- Launch preparation validates required bundles without building first. If bundle files are missing, VS Code asks whether to build their workspace projects and build dependencies, then retry. Set
buildBeforeLaunch to true or false in launch.json to override this prompt.
- The Java runtime defaults to the bnd
java property, then a runtime matching -runee. -runjdb is ignored because the Java debugger owns the JDWP connection.
Launching requires workspace trust, the Java language server (the Node fallback cannot launch), and Debugger for Java. A .bndrun outside a bnd workspace must declare the exact -standalone instruction; -standalone.extra alone does not make it standalone. See the bnd -standalone documentation and launch walkthrough for details. bnd.bnd projects still require a bnd workspace.
Repositories View
The bnd Activity Bar container shows an independent Explorer above Repositories by default. It offers the built-in Explorer's file actions in the same context-menu groups and with the same default keys: New File/Folder, Open to the Side, Open With, Reveal in File Explorer, Open in Integrated Terminal, Find in Folder, Cut/Copy/Paste (copies get name copy.ext), Copy Path/Relative Path, Rename (F2), Delete (to the Recycle Bin/Trash), and compare. Dragging moves files within the tree; files dropped from outside are copied. bnd actions (Run/Debug, Open Effective, JAR Viewer, Resolution) appear on matching files. Configure bnd.explorer.exclude with exact file/folder names to hide at every level (default .git and node_modules); it does not use the normal Explorer's files.exclude. Context-menu entries that other extensions add to the built-in Explorer are not available here; use Reveal in Explorer View for them. VS Code preserves any view order you customize.
The Repositories view is a port of the bndtools Eclipse view. It lists one root per bnd workspace (a folder with cnf/build.bnd). Each root shows the Workspace repository, with projects and their bundles, followed by the configured repository plugins. Expand repositories to see bundles, versions, and Eclipse features from either P2 or OSGi indexed repositories. Features expose their included features, included bundles, and requirements directly from index metadata without downloading feature JARs. Advanced Search also keeps feature results expandable; member tooltips show requirement filters and optional status.
| Filtered Maven repository |
P2 feature with included bundles |
 |
 |
Deleting a workspace or its cnf/build.bnd clears its repository tree automatically, including offline state and stale nodes. Deleted folders disappear from the bnd Explorer without missing-directory errors.
The Java language server also closes the deleted workspace's remote server, so its cnf/cache/remotews port registrations are not recreated.
Filter matches bundle symbolic names (* and ? wildcards; the text is matched anywhere in the name).
Advanced Search finds providers of a package (with an optional version range), a service, or any namespace and LDAP filter in repositories that implement the OSGi Repository API.

Deleting selected files or their containing folder removes them from Resolution and clears stale analysis. Removing a folder from the VS Code workspace also removes its selected resources; resources in other folders remain selected.
This is capability matching, not a full OSGi resolver: a matched requirement does not prove that a framework can resolve or launch. Analysis reads saved files and accepts at most 100 resources. For bnd.bnd projects with sub-bundles, only the first sub-builder is analyzed; select individual sub-bundle .bnd files or their generated JARs to compare the others. .bndrun files are not accepted; use bnd-cli: Resolve (.bndrun) for runbundle resolution.
Filter both lists with space-separated terms and * / ? wildcards. Hide optional requirements or show unresolved requirements only. Select a row to copy its attributes, directives, and source. The analysis requires a trusted workspace and an updated Java bnd Language Server; the Node fallback does not provide resource analysis.
JAR Viewer
.jar files open in the bnd JAR Viewer, a port of the bndtools Eclipse JAR editor. Use Open with bnd JAR Viewer in the Explorer or bnd Explorer context menu, or Reopen Editor With... to switch between it and other editors.
- Tree lists the archive entries and initially selects
feature.xml or META-INF/MANIFEST.MF. The selected entry shows its size and last-modified time. Show As chooses Auto (hex when the content contains a zero byte, otherwise text), Text with a selectable encoding, or Binary (hex). Limit reads at most 1,000,000 bytes. Double-click an entry, or press Enter, to open it read-only in a normal editor.
- Print shows the full
bnd print report (manifest, imports and exports, capabilities, components, metatype, API and uses, and the entry list). It requires the Java language server; Node fallback and older servers report that it is unavailable. Use Ctrl+F to search the report.
| Tree page |
Print page |
 |
 |
Activating a bundle in the Repositories view (shown here for the Workspace repository's biz.aQute.bndlib project) opens its newest JAR in the viewer.
The viewer reflects changes to the JAR file and closes when the file is deleted. It never modifies the JAR.
Workspace Wizards
When a VS Code folder is open but no bnd workspace is found, the bnd Explorer replaces its filesystem tree with Create New Workspace From Template, Add Fragment to (New) Workspace, and Import Existing Workspace. The same welcome actions appear with no folder open. All three are also available in the Command Palette and bnd Explorer menu.

Walkthrough: from an empty folder to an Eclipse RCP application
Open an empty folder (here com.example.rcp) and select the bnd Activity Bar icon. Choose Create New Workspace From Template. The template list is loaded from bnd.wizard.workspaceTemplateIndexes; the default is the minimal bndtools workspace.

Review the confirmation. It names the destination, the template sources, and the trust and overwrite consequences. Open Template shows a source in the browser without creating anything. Confirm with Create Workspace.

The bnd Explorer now shows the generated cnf/ configuration and Gradle build files; the Repositories view lists the workspace and its configured repositories.

Run Add Fragment to (New) Workspace. The fragment catalog defaults to the upstream bndtools/workspace-templates index. Type to filter, select one or more fragments with the checkboxes — here Eclipse RCP E4 Application and Eclipse RCP SWTBot Tests — and press Enter. Required fragments such as Eclipse Platform 4.41 are added automatically.

The confirmation lists all fragments including dependencies. Confirm with Add Fragments.

The fragments add the example.rcp.app.ui and example.rcp.app.ui.swtbot.tests projects, cnf/ext/*.bnd repository definitions for the Eclipse Platform and SWTBot P2 sites, and .bndrun files with Run OSGi / Debug OSGi CodeLens. The Repositories view indexes the P2 sites on first access; Eclipse features are listed with their included bundles (see Repositories View).

Note: the .bndrun created by the RCP fragments shows a problem marker until the P2 repositories are indexed and the projects are built; the Repositories view and bnd-cli: Build Project populate them. Large Eclipse P2 indexes can exceed the XML entity limits of Java 24 and later; add -Djdk.xml.maxGeneralEntitySizeLimit=0 and -Djdk.xml.totalEntitySizeLimit=0 to bnd.server.jvmArgs if the language server reports JAXP00010003.
The workspace produced by these steps is stored in the repository as examples/com.example.rcp and can be copied to a scratch folder and opened with npm run example -- prepare --open; npm run example -- test runs its SWTBot tests with the bnd CLI. See DEV.md.
Details
Creation and fragment addition use the current VS Code folder directly. For multi-root workspaces, select the target workspace folder. If no folder is open, select the destination directory; it opens automatically after applying changes. There is no separate parent/name prompt or nested workspace directory: the workspace name is the destination directory name.
Create New Workspace From Template selects one current template. Add Fragment to (New) Workspace selects one or more current fragments. Required dependencies are included automatically. Entries appear directly without catalog-selection or archive-mode prompts; archived entries are hidden.
Configure bnd.wizard.workspaceTemplateIndexes and bnd.wizard.fragmentTemplateIndexes independently. Workspace creation defaults to the complete bndtools/bndtools.workspace.min template, matching the Eclipse workspace wizard; it does not list fragments. bnd: Add Workspace Template URL... accepts a GitHub workspace-template repository, a ZIP archive, or a .bnd catalog containing full workspace templates. GitHub repository URLs use master unless a /tree/ref/path URL or #ref specifies another ref.
Fragment addition defaults to the upstream fragment catalog. bnd: Add Fragment Template URL... accepts an HTTP(S)/file fragment index.bnd URL. Both commands append locations to the corresponding User setting without duplicating them. Deprecated bnd.wizard.templateIndexes is a fallback only for the fragment catalog; an explicitly saved old default fragment index in the workspace setting is migrated to the minimal workspace repository.
After template selection, one warning lists the destination, selected templates and required dependencies, trust risks, and possible overwrites. Confirm Create Workspace or Add Fragments to create directly. There is no generated-file preview or staged workspace directory. Template evaluation can run bnd macros; only continue with trusted sources. Multiple fragments supplying the same file are composed in dependency order, not automatically merged. No build is started; canceling the warning makes no changes.
Use Open Template in the warning to inspect a source in your browser (or the default application for a local file URL). If multiple sources are listed, choose which to open. The warning reappears afterward; opening a source does not approve creation or change files.
Workspace creation preserves unrelated files already in the selected directory and rejects an existing cnf/build.bnd; use the fragment wizard for existing bnd workspaces. Fragment addition preserves untouched files and existing configuration not supplied by the fragments. Template append actions retain existing content; other supplied files replace their existing contents, as stated in the warning. Generation uses memory; per-file temporary writes provide atomic replacement without staging an entire workspace. Application rejects unsaved target editors and files changed while generating, blocks symbolic-link destinations, and rolls back files written if application fails.
Creation requires a trusted window and an updated Java bnd language server supporting workspace wizards. Node fallback and older custom servers report unsupported operations. Template output is limited to 5000 files and 32 MiB. Delete actions and Eclipse project-template creation are not supported.
Use bnd: Import Existing Workspace... from the Command Palette, the bnd Explorer menu, or its empty-window welcome link. Select a root containing cnf/build.bnd, then open it in the current/new window or add it to the current multi-root workspace. Adding a root already present does not duplicate it, including when selected through a symbolic link. Import only checks the folder structure: it does not evaluate bnd configuration, copy files, delete Eclipse metadata, or start a build. It also works without the Java bnd language server.
Native Java Project Import
The extension contributes a headless bnd adapter to Language Support for Java (redhat.java). It requires JDT LS 1.61 or later (Red Hat Java 1.56 or later), running on Java 21 or later. In a bnd workspace, it imports Java projects ahead of Gradle: source/test roots, separate output directories, -buildpath, -testpath, compiler settings and JRE containers. Changes to .bnd and .mvn configuration refresh the classpath.
The adapter owns imported bnd Java project metadata; do not have Gradle/Buildship manage the same projects in the same Java language-server workspace. After upgrading, run Java: Clean Java Language Server Workspace and allow reimport to remove stale unmanaged source roots. Use valid names in java.configuration.runtimes, such as JavaSE-21 and JavaSE-25, not folder names such as JAVA21. Source and output directories must currently be inside their project directory.
To request a classpath refresh without clearing the Java workspace, run Java: Reload Projects (java.projectConfiguration.update in Red Hat Java 1.56). Automatic updates also depend on java.configuration.updateBuildConfiguration; use automatic for unattended refreshes or approve updates when it is interactive.
Language Server Protocol (LSP)
This extension implements the Language Server Protocol.
The language server can be started in three modes:
java mode: launches biz.aQute.bnd.lsp.jar (bundled, downloaded, or local; see below) with the configured Java executable. The server's standard output is reserved for the protocol; output that bnd workspace plugins print to System.out is logged to the bnd Language Server output channel instead of breaking the connection.
node mode: runs the TypeScript LSP directly inside the extension host
socket mode: connects to an already running TCP-based language server on 127.0.0.1:<port>
This means:
- the server can run in the mode that best matches your environment
- the extension falls back cleanly if the bundled LSP JAR is missing
- the LSP remains available for editors that can speak the protocol
bnd: Resolve Runbundles (LSP) resolves the active or selected .bndrun file through a Java language server and reports resolution errors. For Node mode, use bnd-cli: Resolve (.bndrun) instead.
The bundled Java server and JDT-LS adapter use bnd 7.6.0 development sources rebased onto upstream master. See server/bundled-jars.json for the exact source commit, bundle versions, and checksums.
bnd: Build Project (LSP), bnd: Clean Project (LSP) and bnd: Baseline Project (LSP) act on the project of the active or selected bnd file without the bnd CLI. Clean on a workspace file (for example cnf/build.bnd) cleans every project. Baseline compares each bundle of the project with its -baseline repository and prints the per-package report to the bnd Language Server output channel.
Architecture:
VS Code (Extension Host) Language Server (runtime-selected)
───────────────────────── ────────────────────────────────
src/extension.ts ←── IPC ───► Java JAR / Node / Socket server
(starts and restarts the server, (completion, hover,
registers LSP commands) diagnostics and command handlers)
Integrated bnd CLI Commands
CLI commands use the bnd-cli: prefix in the Command Palette (Ctrl+Shift+P). Language-server and other extension actions use bnd:.
CLI palette entries are hidden by default. Run bnd-cli: Toggle CLI Commands in Command Palette to show or hide them. This command always remains visible. The preference is saved in the extension's global storage, applies across workspaces in the current VS Code profile, and survives restarts. No User settings file is modified, so settings errors do not block the toggle. Before the first toggle, User setting bnd.cli.showCommands supplies the initial value (default false); afterward, the stored toggle choice takes precedence. Existing saved choices are preserved. This affects only palette visibility, not command execution or context menus.
| Command |
Description |
bnd-cli: Build Project |
bnd build — build with mode selection (normal / test / watch) |
bnd-cli: Run |
bnd run — pick a .bndrun file or use the current project |
bnd-cli: Test Project |
bnd test |
bnd-cli: Run OSGi Tests |
bnd runtests |
bnd-cli: Resolve (.bndrun) |
bnd resolve resolve -W — multi-select .bndrun files |
bnd-cli: Clean Project |
bnd clean |
bnd-cli: Baseline Check |
bnd baseline |
bnd-cli: Verify JARs |
bnd verify — pick generated JARs |
bnd-cli: Print Bundle Info |
bnd print — choose view mode and JAR |
bnd-cli: Diff Bundles |
bnd diff — prompts for newer + older JAR |
bnd-cli: Wrap JAR as OSGi Bundle |
bnd wrap |
bnd-cli: Export (.bndrun) |
bnd export |
bnd-cli: Release Project |
bnd release (with confirmation) |
bnd-cli: Show Project Properties |
bnd properties |
bnd-cli: Show Project Info |
bnd info |
bnd-cli: Show bnd Version |
bnd version |
bnd-cli: Evaluate Macro Expression |
bnd macro — enter a macro expression interactively |
bnd-cli: Repository Commands |
bnd repo sub-command picker |
bnd-cli: Configure bnd Library... |
Selects a release, snapshot, or custom https JAR and configures bnd.cli.executable |
bnd-cli: Select Java Runtime for bnd CLI |
Selects one of the runtimes from java.configuration.runtimes and uses its bin/java for bnd JAR execution |
bnd-cli: Discover Java Runtimes from Folder... |
Recursively scans a root folder for Java runtimes and adds found runtimes to java.configuration.runtimes |
bnd-cli: Show CLI Reference |
Opens a searchable webview panel with all 77 bnd CLI commands |
CLI executions run in VS Code's integrated terminal named "bnd". Configuration, reference, and palette visibility commands run inside the extension.
Configuration
Set the bnd.cli.executable workspace or user setting to point to your bnd installation:
// settings.json
{
// If bnd is on your PATH (e.g. brew install bnd):
"bnd.cli.executable": "bnd",
// Or run it as an executable JAR:
"bnd.cli.executable": "java -jar /path/to/biz.aQute.bnd.jar"
}
For the embedded language server, configure the startup mode in bnd.server.mode:
{
"bnd.server.mode": "java",
"bnd.server.jar": "",
"bnd.server.javaExecutable": "",
"bnd.server.jvmArgs": [],
"bnd.server.socketPort": 5007
}
java starts biz.aQute.bnd.lsp.jar with the configured Java runtime.
node starts the TypeScript language server directly.
socket connects to an already running LSP on 127.0.0.1:5007.
- If no JAR is present, the extension automatically warns and falls back to
node mode.
Language server JAR selection
Run bnd: Select Language Server JAR... to choose the JAR used in java mode:
| Choice |
Settings written (User) |
Source |
| Bundled |
bnd.server.jarSource: bundled |
server/biz.aQute.bnd.lsp.jar shipped with the extension |
| Release |
jarSource: release, jarVersion |
biz.aQute.bnd:biz.aQute.bnd.lsp from bnd.cli.mavenRepository (Maven Central), verified against .sha1 |
| Snapshot |
jarSource: snapshot, jarVersion |
bnd.cli.snapshotRepository (bndtools Artifactory), verified against .sha1 |
| Custom URL |
jarSource: url, jarUrl, optional jarSha256 |
Any https URL |
| Local file |
bnd.server.jar |
A local JAR, e.g. a build output |
bnd.server.jar always wins; a configured but missing path produces a warning.
jarVersion: latest checks for the newest release or snapshot on each language server start.
- Downloads are cached in the extension's global storage (
library/lsp, newest three JARs kept). Startup never waits for the network: until a download is cached, the bundled JAR is used, and a notification offers a restart once a different JAR is ready.
jarSource, jarVersion, jarUrl, and jarSha256 are machine-scoped, so a workspace cannot redirect the server to a different JAR.
biz.aQute.bnd.lsp is not yet published to Maven Central or the bndtools snapshot repository; until then, use Bundled, Custom URL, or Local file.
Run bnd-cli: Configure bnd Library... to select a release, snapshot, or custom https JAR. Downloaded JARs are stored in the extension's library/tool storage folder, and bnd.cli.executable is updated to java -jar ... automatically.
To choose a specific Java runtime for java -jar, run bnd-cli: Select Java Runtime for bnd CLI. This reads from VS Code's java.configuration.runtimes and updates bnd.cli.javaExecutable.
If your Java runtime is not yet listed, run bnd-cli: Discover Java Runtimes from Folder.... The selected root folder is searched recursively, and discovered runtimes are appended to java.configuration.runtimes.
If you need to use a Central-compatible mirror instead of Maven Central, set bnd.cli.mavenRepository first, for example:
{
"bnd.cli.mavenRepository": "https://repo1.maven.org/maven2",
"bnd.cli.javaExecutable": "java"
}
CLI Reference Panel
Run bnd-cli: Show CLI Reference (Ctrl+Shift+P → bnd-cli: Show CLI Reference) to open a searchable panel
showing all 77 bnd CLI sub-commands with their full option lists and examples from the official docs.

Installation
From VSIX
- Download
bnd-<version>.vsix from GitHub Releases, or build it.
- In VS Code open the Extensions view (
Ctrl+Shift+X).
- Click the
... menu → Install from VSIX… and select the file.
See INSTALL.md for full instructions including command-line install.
Build from Source
cd vscode-bnd-plugin
npm ci # install locked client dependencies
npm ci --prefix server # install locked server dependencies
npm run compile:all # compile client + server TypeScript
npm run compile:tests # compile VS Code extension tests
# Set BND_SOURCE_REPO and BND_CLI_JAR as described in DEV.md first.
npm test # run the complete VS Code extension test suite
npm run package # build the VSIX using the installed vsce dependency
# Produces bnd-<version>.vsix
See DEV.md for local development and testing, and the PR-to-Marketplace workflow for signed-off commits, PR CI artifact testing, merge-to-main validation, tagging, and publishing klibio.bnd. Use CHECKLIST.md for release signoff. Every successful CI build of main publishes a Marketplace pre-release (major.(minor+1).<build>); pushing an annotated vX.Y.Z tag on main runs the validated Release workflow, which tests, packages, and publishes that exact build when VSCE_PAT is configured. The bundled language server JARs are tracked by server/bundled-jars.json (see Bundled language server JARs).
Upstream Java Repo Parity Tests
Some tests validate CLI command parity against bnd Java source in biz.aQute.bnd/src/aQute/bnd/main/bnd.java.
Set one of these environment variables before running npm test:
BND_SOURCE_REPO=<path-to-bnd-repo>
BND_JAVA_REPO=<path-to-bnd-repo>
If neither is set, tests also try sibling folder ../bnd. If no source repo is found, parity checks are skipped.
Usage
The extension activates automatically for any file with the .bnd or .bndrun extension.
Example bnd.bnd
Bundle-SymbolicName: com.example.mybundle
Bundle-Version: 1.0.0
-buildpath: \
osgi.core;version='[7,8)', \
osgi.annotation;version='[8,9)'
Export-Package: com.example.api;version='${Bundle-Version}'
Private-Package: com.example.internal.*
-dsannotations: *
Example launch.bndrun
-standalone: \
https://repo.maven.apache.org/maven2/,index;name=central
-runfw: org.apache.felix.framework;version='[7,8)'
-runee: JavaSE-17
-runrequires: \
osgi.identity;filter:='(osgi.identity=com.example.mybundle)'
-runbundles: \
com.example.mybundle;version='[1.0.0,1.0.1)'
About
This extension is part of the bnd/bndtools project.
License
This project is licensed under the Eclipse Public License 2.0 (EPL-2.0).
See LICENSE for the full text.