Snippets, real-time validation, and one-click deploy for HelixFlo projects, right in VS Code.
What this gives you
- Snippets for every flow step type (
log,var,transform,http-call,db-query,file,respond,class,script,if,switch,for,try,goto,async,sequence, plus every publish connector:redis-publish,redis-list-publish,redis-stream-publish), and skeletons for whole files (apis/*.yaml,inbound/*.yamlper type,sequences/*.yaml,project.yaml,datasources.yaml,globals.yaml). Type anhf-prefix in any.yamlfile and pick from the suggestions. There's also anhf-connectorsnippet forconnectors/*.javafiles - aMediatorclass skeleton (class name pre-filled from the file's own name, since the server requires them to match) ready to compile server-side on deploy. - Validation - red squiggles for a misspelled step name, a missing required field (e.g. a
redisstep withoutop), or a wrong type - as you type, via JSON Schema, not a custom language server. Autocomplete and hover docs for field names come along for free from the same schemas. On top of that, HelixFlo also flags duplicateapi/sequencenames within a project - if two files underapis/(or two undersequences/) declare the samename:, the server can't tell them apart (it addresses both by that name, not the filename), so both files get an error in the Problems panel until you rename one. - HelixFlo: New Project (Command Palette) - scaffolds a new project:
project.yaml, emptydatasources.yaml/globals.yaml, emptyinbound//sequences//scripts//connectors/directories, and one workingapis/hello-world.yamlso there's something to deploy right away. - HelixFlo: New Connector Class - right-click a project's
connectors/folder in the Explorer, name the class, and get a{ClassName}.javafile with theMediatorskeleton already filled in (the same shape as thehf-connectorsnippet), cursor placed insidemediate()ready to edit. - Deploy straight from VS Code, no need to switch to a terminal or the admin UI:
-
Right-click a project folder (the one with
project.yaml) in the Explorer → HelixFlo: Deploy Project - zips it and does a full redeploy viaPOST /mgmt/projects, same as uploading a.zipthrough the admin UI. -
Right-click that same folder → HelixFlo: Build Project (.flo) to produce a standalone
.flopackage (a plain zip -project.yamlat its root, same as above) on disk instead of deploying immediately, for archiving or handing off. Right-click any.flofile later → HelixFlo: Deploy .flo File to deploy it exactly the way Deploy Project would. -
Right-click a single file - either in the Explorer or from inside the editor itself (right-click in the text, or the deploy icon in the editor's tab toolbar) → HelixFlo: Deploy This File. The extension finds the project by walking up from the file to the nearest
project.yamland reading itsproject.name, then picks the right update based on the file:- A file inside
apis/,inbound/, orsequences/- replaces just that one resource on an already-deployed project, without redeploying everything else. - A
.jsfile insidescripts/- uploads/replaces that script by filename. - A
.javaor.jarfile insideconnectors/- uploads that connector; a.javafile is compiled server-side, a.jaris used as-is. Anyapi/inbound/sequencethat was already deployed keeps using the old compiled class until its own project is redeployed (ordinary Java classloading - a fresh class isn't picked up by code that already resolved the old one), so a connector-only deploy also offers a Redeploy Project follow-up to make the change actually take effect. datasources.yamlorglobals.yamlat the project's root - replaces that whole file (these are singleton files server-side, so the update is always a full-file replace).project.yaml- there's no single-file update for the manifest itself, so this instead triggers the same full project redeploy as HelixFlo: Deploy Project, with a message explaining why.
If the file is open in an editor, whatever's currently in the buffer is what gets deployed - including unsaved edits or a brand-new file you just typed into, not whatever's (or isn't) on disk yet.
Every one of these single-file routes needs the project to already exist on the server - for a brand-new project (e.g. right after HelixFlo: New Project), deploying its first file this way fails with "hasn't been deployed yet". HelixFlo catches that specific case and offers a Deploy Project button right there instead of making you switch commands.
- A file inside
-
HelixFlo: List Deployed Projects (Command Palette) - a quick reachability check plus a look at what's currently deployed on the configured admin API.
-
- Browse, download, and diff what's actually deployed - a "HelixFlo: Deployed Projects" view
in the Explorer sidebar (similar to the Salesforce extension's org browser), populated straight
from the admin API, independent of whatever's open locally:
- Lists every deployed project on load. Expand one to see its
apis/inbound/sequences/scripts/connectorsand itsproject.yaml/datasources.yaml/globals.yaml. Use the refresh icon in the view's title bar to re-sync after deploying from elsewhere. - Right-click a project → HelixFlo: Download Project - downloads it as a zip (the same
GET /mgmt/projects/{project}the admin UI uses) and extracts it into a folder you pick. - Right-click a file → HelixFlo: Download File - downloads just that one file. If the
project's already open in your workspace (matched by
project.yaml'sproject.name), it's written straight into the right spot, overwriting whatever's already there - so this doubles as "refresh this file from the server" for a file you already have locally. Otherwise you're prompted for where to save it. - Right-click a local file - in the Explorer or the editor - and choose HelixFlo:
Compare with Server to open a diff between what's on disk and what's currently deployed.
Works for
apis/,inbound/,sequences/,scripts/*.js,project.yaml,datasources.yaml, andglobals.yaml(notconnectors/*.jar- there's nothing meaningful to diff in a binary jar). - Click any API in this view (it's the only file kind with the beaker icon) to open it straight in the API Tester - see below.
- Lists every deployed project on load. Expand one to see its
API Tester
A Postman-style panel for calling a deployed API without leaving VS Code - a method/URL bar with color-coded verbs (GET green, POST blue, PUT orange, PATCH purple, DELETE red), Params/Headers/Body tabs for the request, and a response panel with a color-coded status badge, timing, size, and a syntax-highlighted body.
- Click an API in the "HelixFlo: Deployed Projects" view (or right-click it → HelixFlo:
Test API) - fetches its YAML from the server, and if it defines more than one resource, asks
which one (e.g.
GET /orders/{id}vsPOST /orders) before opening the tester prefilled with the right method and URL. - Right-click a local
apis/*.yamlfile - in the Explorer, the editor, or the beaker icon in the editor's tab toolbar - to do the same thing against a file you have open, without it needing to already be in the remote tree. - HelixFlo: Test API from the Command Palette opens a blank request if there's no API file in context.
Request history - a sidebar lists your last 25 requests (method, path, status, relative time),
persisted across VS Code restarts. Click one to reload its method/URL/headers/body back into the
request bar - nothing re-sends automatically, you still control when a request actually goes out.
Params are kept in sync with the URL's query string in both directions - edit a param row and
the URL updates, or paste/type a URL with ?a=1&b=2 and it's parsed into rows automatically.
Copy the response body with one click, or read its size and timing at a glance next to the status
badge.
The tester reuses a single panel across invocations - testing another API reveals the existing panel and updates its prefill rather than opening a new tab each time. Every response is shown exactly as the server sent it, including 4xx/5xx status codes - this is a test client, not something that treats a non-2xx response as a failure to report instead of data to show you.
Configuration
| Setting | Default | Description |
|---|---|---|
helixflo.adminUrl |
http://localhost:8253 |
Base URL of the HelixFlo admin API (the adminPort in conf/mi.yaml) that the Deploy/List commands talk to. Set this in Workspace settings if your project points at a non-default instance. |
helixflo.dataPlaneUrl |
http://localhost:8290 |
Base URL of the HelixFlo data plane (the httpPort in conf/mi.yaml) - where deployed APIs actually run, used by the API Tester. |
There's no authentication here because the admin API itself doesn't have any today - if you're
pointing this at anything other than localhost, make sure that's a network you actually trust.
How it works
This extension ships JSON Schemas for each HelixFlo file type and registers them with the
YAML extension (a
dependency, installed automatically) via its yamlValidation contribution point. There's no
custom language server here - schema-based validation catches structural mistakes (wrong types,
missing required fields, unknown step names) but not cross-file semantics (e.g. a sequence step
naming a sequence file that doesn't actually exist, or a class step naming a connector that was
never uploaded).
Installing (unpublished / local use)
cd vscode-extension
npm install -g @vscode/vsce # if you don't already have it
vsce package
code --install-extension helixflo-vscode-0.0.1.vsix
File types covered
| File | Schema |
|---|---|
apis/*.yaml |
schemas/api-definition.schema.json |
inbound/*.yaml |
schemas/inbound-definition.schema.json |
sequences/*.yaml |
schemas/sequence-definition.schema.json |
project.yaml |
schemas/project-manifest.schema.json |
datasources.yaml |
schemas/datasources.schema.json |
globals.yaml |
schemas/globals.schema.json |
api-definition.schema.json, inbound-definition.schema.json, and
sequence-definition.schema.json all reference the shared step-type definitions in
schemas/step.schema.json, since a mediator step (log, var, transform, ...) can appear
inside any of the three (an API resource's flow, an inbound listener's flow, or a sequence's
flow).