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)
Usage
- Open a
.dtsx file in VS Code or have one ready to pick from disk.
- Open the Copilot Chat panel (
Ctrl+Alt+I).
- Type
@hopify /convert and press Enter.
Hopify will:
- Clean the DTSX XML — strips designer noise, layout data, and metadata to reduce token usage.
- Mask sensitive values — connection strings, passwords, hostnames, file paths, and email addresses are replaced with
{{TOKEN_N}} placeholders before anything is sent to the model.
- Route skills — automatically selects the relevant conversion rules based on what components are present in the package.
- Convert — sends the masked, cleaned XML to Copilot and receives complete Apache Hop XML files.
- Restore — replaces every
{{TOKEN_N}} placeholder back with its original value in the generated output.
Output Structure
All files are written to output/<project-name>/apache-hop-project/ inside your workspace:
output/
└── <project-name>/
├── apache-hop-project/
│ ├── workflows/ ← .hwf files (one per SSIS package)
│ ├── pipelines/ ← .hpl files (one per Data Flow Task)
│ ├── metadata/rdbms/ ← .json connection metadata files
│ └── CONVERSION_NOTES.txt
└── masked-ssis/
├── masked_<name>.dtsx ← masked input (for review)
└── token-map.json ← token → original value (sensitive — do not commit)
Security: token-map.json contains original sensitive values. Add output/ to your .gitignore or .tfignore.
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 before and after the API call.
License
MIT
| |