Drop .xp files or folder here
Each .xp file is auto-converted to SWMM5 .inp and downloaded
For engineers in 2040 wondering what an .xp file is:
The .xp file is the native format of XPSWMM — a hydraulic modeling application originally built by
XP Software (Australia, ~1990) as a graphical front-end to the U.S. EPA's SWMM model. It is not binary.
It is a text database of 80-column fixed-width card images — the same punch card format used by
SWMM Version 3 in 1981. Each field sits at a fixed column position defined in
the C source file Swmfield.c (1,491 fields). These models, many created around 2000, represent real
sewer pipes, manholes, and storm drains that are still in the ground carrying water.
This tool reads the text cards, extracts node/link/job control data at the documented column positions, and can export to EPA SWMM 5 .inp format — including junctions, outfalls, storage nodes, conduits, orifices, weirs, pumps, cross-sections, losses, inflows, and coordinates. Load a file above, then see the Docs tab for full format documentation.
What Is a .xp File?
A .xp file is the native database format of XPSWMM (later Innovyze XPSWMM, now Autodesk InfoWorks).
It is plain ASCII text — not binary — organized as a flat database of fixed-width 80-column
“punch card” records. The format directly inherits the SWMM Version 3 Fortran card-image architecture from 1974/1981,
wrapped in the CAiCE database engine’s indexing system.
Every .xp file is simultaneously a card-image database (GROUP + CARD + DATA at fixed column offsets),
a GIS topology store (ZZZN nodes + ZZZE edges with coordinates), and a complete hydraulic model
(nodes, links, job control, rainfall, results).
Physical Record Structure
Every line in a .xp file follows this fixed-column layout (105 characters total):
Columns Width Content [0:4] 4 GROUP — Namespace (EXTR, RUNF, ZZZN, ZZZE, SWMM, ...) [4:8] 4 SUB — Sub-index (right-justified integer, 0-based) [8:12] 4 CARD — Card name (SP1N, D1, C1, B2, NODE, EDGE, ...) [12:16] 4 CI — Card index (usually 0) [16:20] 4 OI — Object Index (KEY: links record to its element) [20:24] 4-5 Padding [24/25:] 80 DATA — 80-column card data (DbFieldDef offsets apply here)
Fields are extracted at exact byte offsets within the 80-column data payload, using positions defined in the
C source file Swmfield.c (1,507 DbFieldDef entries). Column positions are 1-based (Fortran convention):
a field at “column 13, width 8” means data.substring(12, 20).
GROUP Namespaces
| GROUP | Full Name | Purpose |
|---|---|---|
| EXTR | Extran (Transport) | Primary hydraulic data — nodes, links, job control |
| RUNF | Runoff | Rainfall-runoff subcatchments, Horton/Green-Ampt parameters |
| RAIN | Rainfall | Precipitation data, IDF curves, rain gauge config |
| TRAN | Transport Interface | Flow division, junction coupling, DWF patterns |
| GRUN | Groundwater | Groundwater parameters, infiltration |
| SWMM | SWMM Control | Model execution control, mode settings |
| ZZZN | Network Nodes | GIS topology: node names, coordinates, connectivity |
| ZZZE | Network Edges | GIS topology: link names, FROM/TO node OIs |
| ZSYM | Symbols | Named constants, global database values |
| PLOT | Plot Settings | Graph configuration, HGL profiles |
| SRPT | Summary Report | Report configuration, display boxes |
| QAS | Quality Assurance | Model audit trail, QA/QC records |
EXTR Node Cards
| Card | Purpose | Key Fields |
|---|---|---|
| SP1N | Node spatial data & flags | NODX(6,12), NODY(18,12), FLGOUTF(50,1), NODNAM(62,10) |
| D1 | Junction hydraulic data | GRELEV(13,8), QINST(31,8), Y0(40,7) |
| J3 | Outfall configuration | KO(4,1) type code, DELTA(11,8) stage |
| E1 | Storage node data | ZTOP(13,7) top elev, ASTORE(21,7) area |
| J2 | Depth-area table | A1–A7 area values at depth increments |
| I1 | Inflow configuration | Inflow type flags (hydrograph, time series) |
EXTR Link Cards
| Card | Purpose | Key Fields |
|---|---|---|
| SPDN | Link & endpoint names | CNAME1(1,10), CNAME2(11,10) US, CNAME3(21,10) DS |
| SPDV | Type flags bitmap | COND1(1,1), PUMP1(8,1), ORIF1(15,1), WEIR1(22,1) |
| C1 | Conduit data | NKLASS(13,2), DEEP(25,7), WIDE(34,7), LEN(43,8), ROUGH(70,10) |
| C1A | Conduit auxiliary | SLOPE(27,8), ZP1(52,8) & ZP2(61,8) invert offsets |
| F1 | Orifice data | ONKLASS(23,1), AORIF(25,6), CORIF(32,4), ZP(37,7) |
| G1 | Weir data | KWEIR(22,1), YCREST(24,8), WLEN(44,6), COEFF(53,4) |
| H1A | Pump data | IPTYP(1,2), PON(11,8), POFF(19,8), PSEL(51,20) |
Cross-Section Shape Codes (NKLASS)
| Code | Shape | SWMM5 | Code | Shape | SWMM5 | |
|---|---|---|---|---|---|---|
| 1 | Circular | CIRCULAR | 11 | Semi-Elliptical | SEMIELLIPTICAL | |
| 2 | Rectangular | RECT_CLOSED | 12 | Mod Basket-handle | BASKETHANDLE | |
| 3 | Horseshoe | HORSESHOE | 13 | User-Defined | CUSTOM | |
| 4 | Egg | EGG | 14 | Arch Pipe | ARCH | |
| 5 | Basket-handle | BASKETHANDLE | 16 | Parabolic | PARABOLIC | |
| 6 | Trapezoidal | TRAPEZOIDAL | 17 | Rect (alt) | RECT_CLOSED | |
| 7 | Power Function | POWER | 18 | Semi-Circular | SEMICIRCULAR | |
| 8 | Natural Channel | IRREGULAR | 19 | Rect Round-bottom | RECT_ROUND | |
| 9 | Gothic | GOTHIC | 20 | Rect Tri-bottom | RECT_TRIANGULAR | |
| 10 | Catenary | CATENARY |
ZZZN:NODE — GIS Node Topology
Each node gets 3 records (all sharing the same OI as SUB): Record 0 = name + type + edge OI references, Record 1 = extended connectivity, Record 2 = X/Y coordinates.
Two format generations: Standard format (pre-v12) stores the node name at column 0 of the data payload. New format (v12+) prefixes a type code at column 3 and stores the name starting at column 11. Detection: if characters 0–2 are spaces and character 3 is a digit → new format.
ZZZE:EDGE — GIS Link Topology
Each link gets 2 records: Record 0 = link name + FROM/TO node OIs + edge type code, Record 1 = display properties. The edge OI appears in the data and the FROM/TO node OIs are the integers preceding it that match known node OIs from the ZZZN records.
Job Control Cards (OI=0)
| Card | Purpose | Key Fields |
|---|---|---|
| A1 | Title | ALPHA(5,75) title text |
| B1 | Time parameters | DELT(10,6) time step, INTER(30,4) print interval |
| B2 | Units & limits | METRIC(4,1): 0=US Customary, 1=Metric |
| BB2 | Solver parameters | MFAIL(6,8), FUDGE(15,8), KINE(79,1) routing method |
KINE routing codes: 0 = Standard Dynamic Wave, 1 = Always Non-linear, 2 = Never Non-linear, 3 = Kinematic Wave, 4 = Diffusion Wave.
Format Detection
This parser auto-detects three input formats:
1. Native .xp (CAiCE database) — Lines match fixed-column pattern with known GROUP names in columns 0–3.
2. RTF-wrapped .xp — {\rtf1...} header with \par line breaks; auto-stripped before parsing.
3. XPX interchange — Contains [NODE] or [LINK] section headers with FIELD=VALUE pairs.
SWMM5 Conversion Notes
When converting .xp → SWMM5 .inp, this tool generates: [JUNCTIONS], [OUTFALLS], [STORAGE], [CONDUITS], [ORIFICES], [WEIRS], [PUMPS], [XSECTIONS], [LOSSES], [INFLOWS], [COORDINATES], [MAP], [REPORT].
Key mappings: MaxDepth = ZTOP − GRELEV, Invert offsets = ZP1/ZP2 from C1, Outfall type = KO code (1→FREE, 2→FIXED, 3/4→TIDAL, 5/6→TIMESERIES), Shape = NKLASS (see table above), Roughness = Manning’s n from ROUGH field.
Historical Timeline
The .xp format is a living fossil — 80-column punch card images from 1974, wrapped in a 1990s database engine, still in production use in 2026.
Test Coverage
This parser has been validated against 38 files ranging from 8 KB to 27 MB (19,288 nodes, 21,707 links total), including RTF-wrapped files, both ZZZN format generations, CR/LF/CRLF line endings, and models with conduits, orifices, weirs, pumps, storage nodes, and outfalls.