Hopify — SSIS to Apache Hop Converter
Convert Microsoft SSIS .dtsx packages to Apache Hop pipelines and workflows directly inside VS Code, powered by GitHub Copilot.
Requirements
- VS Code 1.95 or later
- GitHub Copilot extension (signed in)
Installation
Install from the Marketplace or from a .vsix file via Extensions: Install from VSIX…
After installing or updating: run Developer: Reload Window (Ctrl+Shift+P → Reload Window) to activate the new version. This applies whether you install from the Marketplace or update by installing a new .vsix over an existing one.
Usage
Convert an SSIS package
- Open a
.dtsx file in VS Code or have one ready to pick from disk.
- Open the Copilot Chat panel (
Ctrl+Alt+I).
- Run:
@hopify /convert
Hopify will:
- Clean — strips designer noise and layout data to reduce token usage.
- Mask — replaces sensitive values (hostnames, passwords, file paths, emails) with
{{TOKEN}} placeholders. Nothing sensitive is ever sent to the model.
- Route skills — loads only the conversion rules relevant to the components found in the package.
- Convert — sends the masked XML to Copilot and receives complete Apache Hop files.
- Restore — replaces every
{{TOKEN}} placeholder back with the original value in the generated output.
Ask a question about Apache Hop
@hopify /ask How does the Merge Join transform work?
@hopify /ask What is the plugin ID for Table Output?
Answers using the bundled Hop skills as reference. To ask about a specific file, attach it to the message first via #file: and then ask your question.
Review and fix a generated file
Open a .hpl or .hwf file in the editor, then run:
@hopify /fix
Optionally add an instruction:
@hopify /fix Fix the missing hop between the sort and the output transform
@hopify /fix The connection name is wrong here, use {{HOSTNAME}}
Hopify reads the active file, loads all Hop skills as context, and applies the corrected XML directly into the editor. A ## Summary of every change appears in the chat panel. Use Ctrl+Z to undo if needed.
Create Apache Hop files from a description
No SSIS package? Describe your process in plain language and Hopify will generate a complete, working skeleton:
@hopify /create Extract changed records from a source table each night, enrich them with a reference lookup, apply business rules, and load the result into a target table with error logging
Hopify infers everything from your description — connections, transforms, actions, control flow — and generates the full project structure:
- Workflows (
.hwf) for the control flow
- Pipelines (
.hpl) for each data flow
- Connection metadata (
.json in metadata/rdbms/) for each database
Any value not mentioned in your description (server names, table names, credentials, file paths, etc.) is replaced with a {{PLACEHOLDER}} token. A PLACEHOLDER_GUIDE.txt is produced as the last file, listing every placeholder with its exact location and instructions on what value to provide:
{{DB_SERVER_SOURCE}}
File : metadata/rdbms/source_db.json
Component : hostname
Provide : Hostname or IP of the source database server
{{TABLE_CHANGED_RECORDS}}
File : pipelines/extract_changes.hpl
Component : TableInput - Extract Changes
Provide : Name of the source table to extract from (e.g. dbo.SalesOrders)
Once you've filled in the placeholders, use /fix on any file to iterate.
Output Structure
/convert output
Files are written to the open workspace folder, or to a folder you pick, or to ~/Documents/hopify-output as a fallback.
<output-root>/
├── masked_<name>.dtsx ← masked input (for review)
├── token-map-<project-name>.json ← token → original value (sensitive — do not commit)
└── <project-name>/
├── workflows/ ← .hwf files
├── pipelines/ ← .hpl files
├── metadata/rdbms/ ← .json connection metadata
└── CONVERSION_NOTES.txt ← warnings, unmapped components, effort estimate
Security: token-map-<project-name>.json contains original sensitive values. Add it to your .gitignore / .tfignore. Multiple conversions each get their own token-map file — no overwrites.
/create output
Same root, no masked file or token map — placeholders stay in the files for you to fill in.
<output-root>/
└── <project-name>/
├── workflows/ ← .hwf files
├── pipelines/ ← .hpl files
├── metadata/rdbms/ ← .json connection metadata
└── PLACEHOLDER_GUIDE.txt ← one entry per {{PLACEHOLDER}} with location and instructions
Supported Components
- Control Flow: Execute SQL Task, Execute Package Task, Data Flow Task, Script Task (C#), Sequence Container, For/ForEach Loop Container, Send Mail Task, FTP Task, File System Task, Web Service Task
- Data Flow: OLE DB Source/Destination, Flat File Source/Destination, Excel Source/Destination, Lookup, Derived Column, Conditional Split, Sort, Aggregate, Data Conversion, Merge Join, Union All, Multicast, Row Count, Script Component
Privacy
Sensitive values are never sent to the Copilot model. All masking and restoration happens locally inside the extension.
License
MIT