Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>ProtosNew to Visual Studio Code? Get it now.
Protos

Protos

Guillermo Adrián Molina

|
14 installs
| (0) | Free
Language support for the Protos programming language.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Protos VS Code Extension

VS Code extension for the Protos programming language.

This repository is the product and distribution home for the Protos VS Code extension. The canonical Protos language, specification, parser, resolver and runtime remain owned by the guillermomolina/protos repository.

Protos runtime authority

This repository consumes an official published Protos runtime for real Run/Debug acceptance. It does not build Protos from source as part of the extension pipeline.

The exact published runtime identity is recorded in protos-source.lock.json:

repository      = guillermomolina/protos
source revision = b20271369d00f8937890a4a94048bb1754b688b8
release tag     = v0.3.442
release asset   = protos-0.3.442-native-linux-x86_64.zip
asset sha256    = e3aea0bc715a0351cf09d5fe3a52471d444ab17b80924cc7630bf96f2a289380
graalvm release = 25.4.4.1.1

For acceptance, the lock is the authority for both the exact Protos source identity and the immutable published Native artifact that carries it.

scripts/install_locked_protos_runtime.py downloads that asset from the official GitHub Release, verifies its SHA-256, verifies SOURCE.txt and RUNTIME.txt, and exposes its bin/protos launcher to the packaged extension acceptance tests.

The extension must remain a thin editor integration. It must not become a second implementation of the Protos language or runtime.

In particular, this repository does not own:

  • Protos grammar or language semantics;
  • parsing or semantic analysis;
  • name resolution;
  • runtime implementation;
  • Java/GraalVM implementation details;
  • Protos launcher internals.

Those responsibilities remain in the canonical Protos repository.

Extension identity

extension id:    guillermomolina.protos
extension name:  protos
publisher:       guillermomolina
extension ver.:  0.2.4
engines.vscode:  ^1.104.0
language id:     protos
file extension:  .protos
TextMate scope:  source.protos

The extension uses the external Protos launcher configured through:

protos.runtime.executable

The default value is:

protos

The extension does not embed the Protos runtime.

Features

The current extension provides the following integration surfaces:

  • Protos language identification for .protos files;
  • non-normative TextMate syntax highlighting;
  • language configuration for comments and structural delimiters;
  • Protos: Run Current File;
  • Protos debugging through VS Code's Debug Adapter Protocol integration;
  • Protos language-server client integration;
  • whole-document formatting through the standard LSP textDocument/formatting path, with canonical formatting owned by the configured Protos runtime;
  • local and VS Code Remote workspace support where the corresponding Protos launcher is available in the workspace extension host.

The extension intentionally keeps these responsibilities at the editor boundary. Language semantics remain external to the extension.

Local development

Install the exact dependency set recorded in the lockfile:

npm ci

Run the complete repository test authority:

make test

make test runs the historical repository baseline through npm test, then runs the installed-VSIX acceptance through npm run test:acceptance. The acceptance path packages and canonicalizes the VSIX, installs the locked published Protos runtime, installs the actual VSIX into pinned VS Code 1.140.0, and validates clean installation, real Run, real Debug, the existing deterministic formatting-protocol scenario, and real released-runtime Format Document / format-on-save behaviour.

Build the production extension bundle:

npm run build

Generate or validate the committed packaging assets:

npm run package:assets

Run the structural validators:

python3 test/validate_grammar.py
python3 test/validate_extension.py
python3 test/validate_packaging.py
python3 test/validate_vsix.py
python3 test/validate_reproducibility.py

Run the Node.js integration tests:

node test/run_current_file.test.js
node test/debug_integration.test.js
node test/language_server_integration.test.js

The extension can also be loaded directly into an Extension Development Host:

npm ci
npm run build
code --new-window --extensionDevelopmentPath="$PWD"

A real Protos launcher must be available through PATH or through the protos.runtime.executable setting.

Packaging

The production VSIX is built with the pinned @vscode/vsce packaging tool.

The normal packaging flow is:

npm ci
npm run vscode:prepublish
npm run package:vsix -- --out /tmp/protos.vsix
python3 test/validate_vsix.py /tmp/protos.vsix

The production package contains only the approved extension surface.

Development-only material such as source-only JavaScript, tests, fixtures, packaging scripts, the npm lockfile, generated metadata and raw node_modules content must not be shipped inside the VSIX.

The package boundary is enforced by .vscodeignore and the packaging validators.

Deterministic VSIX artifacts

The CI pipeline canonicalizes the VSIX after packaging.

The canonicalization performed by scripts/canonicalize_vsix.js fixes the artifact properties that are otherwise dependent on the local packaging environment, including:

ZIP member ordering      = lexicographic
ZIP compression           = STORE
ZIP member permissions    = fixed
ZIP timestamps            = derived from Git source revision
semantic member bytes    = unchanged

The resulting VSIX is therefore reproducible from the same extension source revision and dependency lock.

The CI pipeline also records the SHA-256 digest of the canonical VSIX.

Package assets and notices

The production bundle includes the JavaScript dependencies required by the extension.

The corresponding third-party licensing information is maintained in:

THIRD_PARTY_NOTICES.txt

The file is generated deterministically from the installed dependency set and the production bundle metadata. It must not be edited manually.

The package also contains:

license.txt

which is the license file required inside the VSIX.

The repository-level license is:

LICENSE.TXT

Both the repository and distributed VSIX must preserve the applicable APL-1.0 licensing terms and required third-party notices.

Continuous integration

GitHub Actions use the same repository test authority as local development. The workflow builds the committed devcontainer and executes exactly:

make test

The workflow does not maintain separate implementations of packaging, clean-install, Run, or Debug acceptance.

The authority is layered as:

make test
    │
    ├── npm test
    │     repository baseline
    │
    └── npm run test:acceptance
          │
          ├── package + validate canonical VSIX
          ├── install exact published Protos Native runtime
          ├── clean installed-extension acceptance
          ├── real Run acceptance
          ├── real Debug acceptance
          ├── deterministic formatting-protocol acceptance
          └── real released-runtime formatting acceptance

The acceptance path consumes the exact published Protos Native runtime from protos-source.lock.json; it does not checkout or compile Protos and does not install a separate Java/GraalVM runtime.

The same acceptance run produces protos-vscode.vsix and protos-vscode.vsix.sha256. After make test succeeds, GitHub Actions uploads those files as the canonical workflow artifact. CI therefore validates and publishes the artifact produced by the same repository authority instead of rebuilding a second VSIX in downstream jobs.

Reproducibility

A successful CI run must establish all of the following:

exact published Protos runtime
        +
exact Protos source identity carried by that runtime
        +
exact npm dependency lock
        +
deterministic package assets
        +
deterministic VSIX canonicalization
        =
reproducible VSIX artifact + reproducible acceptance runtime

Changing the pinned Protos release/runtime identity, extension source, dependency lock, packaging inputs or package assets must therefore produce a corresponding artifact or acceptance change, or an explicit reviewable reason why the semantic result remains unchanged.

Issue tracking

This repository has independent issue tracking from guillermomolina/protos.

Issues concerning the VS Code extension belong here, including:

  • VS Code editor integration;
  • language-server client behavior;
  • debugger and DAP integration;
  • Run Current File;
  • VS Code Remote integration;
  • extension packaging and VSIX reproducibility;
  • Marketplace/release concerns;
  • extension-specific CI and distribution failures.

Issues concerning the Protos language, runtime, compiler, standard library or other core implementation remain in the canonical Protos repository.

Historical work that originally produced the extension may reference project milestones such as LM009, but those historical identifiers do not make the Protos repository the owner of current extension work.

Repository boundary

The repository boundary is intentionally:

guillermomolina/protos
    canonical language/runtime source
                │
                │ published release artifact
                ▼
guillermomolina/protos-vscode-extension
    editor integration
    packaging
    CI
    VSIX artifacts
    distribution

The dependency therefore flows through the official Protos distribution boundary rather than through a second source build in the editor repository.

The extension repository must not copy or fork the Protos runtime merely to make the editor pipeline self-contained.

License

Protos and this extension are distributed under the Adaptive Public License 1.0.

The complete license text is included in LICENSE.TXT and the VSIX-compatible copy is provided as license.txt.

Third-party dependency notices are included in THIRD_PARTY_NOTICES.txt.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft