ERPDesk
Changelog
Full release notes for ERPDesk — the UML designer for Windows with multi-dialect SQL generation and round-trip XMI.
Version 1.3
Latest
15 October 2026
Tables get real constraints: composite foreign keys with ON DELETE /
ON UPDATE actions, multi-column UNIQUE, CHECK and named
indexes — all surviving renames, written correctly for each database, and read back from
SSMS, pg_dump and mysqldump scripts. There is also a new History panel for
jumping to any undo step. A pre-release audit found 11 high- and 16 medium-severity bugs; all
are fixed, along with most of the minor ones.
Before you upgrade
- Projects are saved in a new file format. 1.3 opens files from every earlier version and upgrades them on the next save — but ERPDesk 1.2 cannot read the new format correctly and would silently drop every constraint. If anyone you share projects with is still on 1.2, keep a copy before saving in 1.3. From now on, a file from a newer version is refused with a message instead of being partly loaded.
- Older foreign keys are converted automatically. References stored by name are matched to their table (same diagram first, then the whole project), and columns that together point at a composite key become one key. A reference whose table can’t be found is kept as an unresolved key, flagged in the Constraints dialog and never written to SQL.
New — keys, constraints & indexes
- Foreign keys follow what they point at, not its name. Each table owns its foreign keys (composite, named, with on-delete / on-update actions),
UNIQUE and CHECK constraints and named indexes. Rename a table or column and every key keeps pointing at it; delete a column and it leaves its constraints; delete a table or close its diagram and the keys pointing at it go too — all undone together with the deletion. Copy, paste and duplicate re-point keys between the copied tables.
- New Constraints… dialog (Properties panel, on a SQL table) to rename keys, change their actions, and add, edit or delete
UNIQUE, CHECK and indexes. The whole session is one undo step, and Cancel rolls everything back.
- Richer Create foreign key dialog — composite targets (one row per key column), on-delete / on-update actions and a key name, with a live preview and a warning when column types differ.
- SQL export writes it all, per database — composite keys with their actions (SQL Server’s Restrict becomes
NO ACTION, MySQL drops SET DEFAULT with a warning, SQLite keeps keys inline), UNIQUE / CHECK constraints and CREATE [UNIQUE] INDEX, with names trimmed to each engine’s limit. A foreign-key index is skipped when one of your own indexes already covers it. The live SQL panel follows edits made inside open dialogs.
- SQL import reads it all back — composite keys and their actions, multi-column
UNIQUE, CHECK, CREATE [UNIQUE] INDEX and MySQL KEY lines. The import window now shows what it found, and any notes, before you import.
- Paste dumps as they are. Output from mysqldump, pg_dump and SQL Server Management Studio’s Generate Scripts now imports cleanly — data,
LOCK TABLES, GO, versioned comments and table options are skipped.
- XMI round-trips constraints and still reads files written by 1.2.
New — undo History panel
- History tab beside the Model Explorer (View → History, Ctrl+H): every undo step by name, redo steps dimmed, your current position and the last save marked. Click or arrow to any row to jump straight to that state; Initial state undoes everything.
- Undo follows the diagram — undoing an edit made on another tab switches to that tab first, so you always see what changed.
Changed
- In the Columns editor the FK tick is now read-only and the Ref table / Ref column columns are gone: keys are created by linking two tables and edited in the Constraints dialog.
- The canvas grid takes its tint from the diagram’s own background rather than the app theme.
- The unsaved-changes marker (
*) clears again when you undo back to the last save.
Fixed — SQL & XMI
- SQLite scripts with foreign keys failed to run — they used
ALTER TABLE … ADD CONSTRAINT, which SQLite doesn’t support. Keys are now inline in CREATE TABLE.
- Tables are created in dependency order, and the
DROP prelude is safe on every database (cascade on PostgreSQL, keys dropped first on SQL Server, key checks paused on MySQL).
- References use the target’s real spelling;
UNIQUE on text types that can’t be indexed warns; boolean defaults are translated for SQL Server and PostgreSQL; a DECIMAL scale without a precision is no longer dropped.
- SQL import handles
ENUM(…), VARCHAR(MAX), FULLTEXT / SPATIAL keys, multi-word types, serial columns and dotted quoted names, and reports parser errors instead of crashing.
- XMI inheritance is now written so Enterprise Architect and StarUML can read it; import walks nested packages and resolves associations declared by their ends; nullable columns export as optional; illegal XML characters are stripped.
Fixed — saving, recovery & undo
- Saves are atomic — written to a temporary file and then swapped in, so a full disk or power cut can’t damage the file you had.
- Each window has its own auto-save, so two ERPDesk windows no longer offer or delete each other’s backup. A corrupt backup is set aside rather than deleted.
- An unexpected error no longer closes ERPDesk — the project is backed up immediately and you can carry on and save. Malformed files no longer half-load, and a damaged settings file no longer stops start-up.
- The Columns editor is one undo step, and Cancel always rolls back fully, even after 100+ edits. Undo no longer leaves deleted items selected; multi-selection slider drags merge into one step; renaming a diagram, canvas settings and adding a class member with Enter are all undoable.
Fixed — canvas & interface
- Alt+Tab in the middle of a drag ends it cleanly; Esc cancels a move, resize or rubber-band selection; resizing no longer drifts with snapping, and resize handles stay the same size at any zoom.
- Canvas text is crisp on high-DPI screens; the minimap no longer rescales mid-drag; hand-drawn layers keep following theme changes after reloading.
- Dark mode: themed tooltips, key glyphs and grid check boxes. The Model Explorer keeps its expanded and selected items across edits, and its filter auto-expands again.
- The Columns editor rejects empty or duplicate names; invalid hex colours are rejected; Ctrl+S saves the field you are typing in; pasted tables get unique names; a missing recent file is pruned from the list.
Known issues
- Foreign keys can’t be added from the Constraints dialog — draw a link between two tables instead.
- Index columns keep the table’s column order, not the order they were ticked.
CHECK expressions are copied as written, so one imported from MySQL may need editing for another database.
Version 1.2
1 September 2026
Fixed
- The Model Explorer’s selected row was unreadable. It was the one control without a themed appearance, so it still used the harsh system highlight — a saturated blue box — while the row’s own labels kept their near-black colour. The selection now uses the same soft tone as the rest of the app, stretches across the full row, and stays visible in a quieter shade when focus moves to the canvas. The branch arrows are themed to match.
- The packaging script stamped the installer with the wrong version. It read the version before the build, but the build itself increments the build number — so the package claimed one version while the program inside it reported the next. The version is now read afterwards, and packaging fails outright if the two ever disagree.
Version 1.1
1 September 2026
A full audit of the app found 20 correctness bugs, 3 dark-mode defects and 14
workflow gaps — all fixed here. Alongside them: drawing a link between two
tables now offers to make it a real foreign key, there is a live
SQL panel under the canvas, and the interface has had a proper pass.
New — foreign keys and live SQL
- Draw a link between two tables and ERPDesk offers to make it a real foreign key — pick or create the child column, choose the referenced column, set nullability. One undo step, and it appears in the generated DDL immediately. Drawn relationships previously contributed nothing at all to the schema.
- A live SQL panel docked under the canvas (View → Live SQL panel), regenerating as the model changes, with dialect and option pickers.
DROP TABLE IF EXISTS prelude and CREATE INDEX on foreign-key columns as export options — indexes are skipped for MySQL, which creates them itself.
- Whole-project SQL export when your tables are spread across several diagrams.
Fixed — correctness
- Drag-to-connect never created a connection. The drop target could never actually name the shape under the cursor — and this was the only interactive way to create a connection at all.
- PNG, PDF and clipboard exports contained the selection outline and resize handles. The selection is now cleared for the render and restored afterwards.
- SVG export dropped every table’s columns, falling back to a generic rounded rectangle. Tables now have a real writer, along with the Pool, Lane, Data Object, Data Store, Fragment and Activation shapes that were also missing.
- Nothing in the Properties panel was undoable — Ctrl+Z after a recolour undid an earlier, unrelated action. Every property edit now records history, with slider drags coalesced into one step.
- Closing a diagram tab discarded its contents silently and irreversibly. It now confirms, and it can be undone.
- Auto-save was written every two minutes and never offered back. It is now recovered on the next start, and cleaned up after a clean exit.
- Ctrl+click could not remove a shape from a selection, clicking one shape of a multi-selection did not narrow to it, and Ctrl+C with only a connection selected wiped the clipboard.
- Curved connections were hit-tested as straight lines, so clicking the visible curve missed it, and class and table contents painted outside their own box when the shape was too small — now clipped, with a new Fit to content command.
- Orthogonal routing ran its first segment backwards (and flipped the source arrowhead) when two shapes overlapped, and an XMI round-trip merged two parallel associations into one.
- The DDL parser stripped comments without respecting quoted text, so
DEFAULT 'a--b' lost everything after the dashes. SQL generation also emitted an invalid empty CREATE TABLE for an all-unnamed table, wrote duplicate table names twice, and did not length-limit or de-duplicate constraint names.
- A grid size of zero in a hand-edited file turned every coordinate into a non-number, and event-handler leaks meant views re-subscribed without ever detaching.
Fixed — dark mode
- Every text box and drop-down in the Properties panel rendered white-on-white.
- The menu bar, toolbar, status bar and tab strip were hard-coded white, so dark mode only repainted the background behind them.
- The grid, connection labels, hollow arrowheads and shape text ignored both the theme and the shape’s own fill — a dark-filled shape had unreadable black text on it. Text colour is now derived from the fill by measured brightness, on the canvas and in SVG export.
Added — workflow
- An Edit menu and a canvas right-click menu, both acting on whatever is under the cursor.
- Ctrl+A, Ctrl+D, Ctrl+X, Ctrl+Shift+Z, Ctrl+Shift+S, arrow-key nudging (Shift for a coarser step), and Esc to deselect or cancel a connection.
- Align, distribute and make-same-size for multi-selections — and appearance edits now apply to the whole selection, since the panel no longer disappears when more than one shape is selected.
- Per-diagram zoom and pan, remembered, so switching tabs no longer re-frames the diagram.
- Relationship presets for the Connect tool — association, directed, inheritance, realization, aggregation, composition, dependency, foreign key — with a hover highlight on the drop target and an optional sticky mode.
- Model Explorer search across diagrams, elements, columns and members, with per-kind icons and Zoom to selection; double-clicking an element now reveals it instead of re-fitting the whole diagram.
- Columns editor: OK / Cancel with full rollback, row reordering, a type drop-down, and a foreign-key target drop-down listing the diagram’s other tables.
- File → Open recent, and copy and paste through the system clipboard, so fragments cross windows and restarts.
Changed
- PDF export is lossless. It used to embed a compressed photo-quality image, which put visible ringing on every line and letter.
- Auto-layout minimises crossing lines and gives unconnected shapes their own columns instead of one very tall pile.
- Grid visibility is independent of snapping — one checkbox used to control both.
- A refreshed interface — a proper icon toolbar with real hover and pressed states, vector shape previews in the toolbox, a status-bar zoom control showing the active tool and last action, collapsible property groups with X/Y/W/H fields, a colour picker in place of bare hex entry, and a minimap.
- Startup is quicker — the splash held for a fixed 1.5 seconds regardless of whether the app was ready; it is now 450 milliseconds.
Version 1.0
2026
First public release. A complete UML designer covering ER, class, process, and sequence diagrams — with multi-dialect SQL generation, SQL reverse engineering, multi-diagram projects, XMI 2.1 round-trip, and PNG / SVG / PDF export.
Recent fixes
- Unsaved-template lost on File → New / Open / Close. The save-prompt now fires whenever the project has any content and hasn't been saved to a file yet, so a never-saved diagram can't disappear silently.
Interchange — XMI 2.1 / UML 2.x Export & Import
- XMI export writes the project as OMG-standard XMI 2.1 + UML 2.x so other UML tools (Visual Paradigm, Enterprise Architect, StarUML, Modelio, MagicDraw, ArgoUML) can read it. Each diagram becomes a UML package; nodes become Class / Interface / Enumeration with ER shapes carrying a
«Table» / «Entity» stereotype; connections become Associations or Generalizations. Reachable via File → Export → As XMI (UML 2.x)….
- XMI import reads XMI 2.1 documents from ERPDesk or other tools. Tolerant of small dialect differences (matches element names by local-name).
- Lossless ERPDesk round-trip: an extension block carries layout (x / y / width / height), colours, ER shape kinds, full column metadata (length / scale / PK / FK / nullable / unique / autoinc / default) and connection style. Other tools ignore the extension but still see a valid UML model.
- Auto-layout on foreign imports: when the ERPDesk extension is absent (the file came from another tool), the importer arranges every imported diagram automatically.
Branding — Icons, Splash, About
- App icon, Store assets & splash images produced from a single source — multi-size icon (16–256), all MSIX tile sizes, splash images at scales 100 / 125 / 150 / 200 / 400, an About logo, and a Store banner.
- Splash window: borderless logo splash shown briefly at startup, with the live version number, then hands off to the welcome screen.
- About box: square logo, product name, version + build number, clickable backendside.com hyperlink, Copy-version button. Reachable via Help → About ERPDesk….
- Auto-incrementing build number: every build bumps the Build component of the version stamped into the executable and surfaced in the About box.
Auto-Layout
- Auto-layout: a layered (Sugiyama-style) arrange that places nodes into columns by their distance along connections and stacks them within each column. Guaranteed overlap-free, cycle-safe, and deterministic. Exposed as View → Auto-layout diagram and an ⊞ Arrange toolbar button (one undoable step). Applied automatically to SQL imports.
SQL Reverse Engineering
- DDL import: parses
CREATE TABLE / ALTER TABLE scripts into table nodes with structured columns, primary keys, and foreign keys, then lays them out on a new diagram and draws FK connection lines. Lenient cross-dialect parser — handles quoted / bracketed / back-ticked and schema-qualified names, inline + table-level + ALTER ADD FKs, SERIAL / AUTO_INCREMENT / IDENTITY, DEFAULT, comments; skips what it can't model and reports notes. Round-trips with the generator (verified across all four dialects).
- Import UI: paste a script or load a
.sql file; reachable via File → Import SQL…. Imports onto a new “Imported SQL” diagram as one undoable step.
SQL / DDL Generation
- The namesake feature: design tables visually, generate real SQL.
- Table shape (ER category): a physical database table with structured columns (name, type, length / scale, PK, FK → table.column, nullable, unique, auto-increment, default).
- Columns editor: a grid to add / edit / remove columns, opened from the Properties panel when a Table is selected.
- Multi-dialect DDL generator — PostgreSQL, MySQL, SQL Server, SQLite — correct per-dialect identifier quoting, type mapping, and auto-increment (
SERIAL / AUTO_INCREMENT / IDENTITY(1,1) / INTEGER PRIMARY KEY AUTOINCREMENT). Emits all CREATE TABLEs then ALTER TABLE … ADD FOREIGN KEYs (order-independent), plus -- WARNING: comments for no-PK tables, dangling / blank FKs, and duplicate table names.
- Generate-SQL dialog: live dialect switch, syntax-styled preview, copy-to-clipboard, and save
.sql. Reachable via File → Export → As SQL (DDL).
- “SQL Schema” starter template: two linked tables ready to export.
Multi-Diagram Projects
- One project holds many diagrams — an ER diagram, a class diagram, and a flowchart all in one place.
- Diagram tab strip above the canvas (switch / add / close).
- Model Explorer: a project → diagrams → elements tree; double-click to open a diagram or jump to an element.
- File format v2: legacy single-diagram files auto-migrate into a one-diagram project on load (no data loss).
- Unsaved-changes guard: New / Open / window-close prompt Save / Don't Save / Cancel; the title bar shows a
* marker.
UX Polish
- Welcome screen: New diagram, 5-template gallery, and a recent-files list. Shown at startup before the editor.
- 5 starter templates: Blank, Basic ER, Basic Class Diagram, Basic Flowchart, Basic Sequence.
- Dark / light mode: toggle in View menu, persisted. Chrome follows the theme; the canvas keeps the document's own “paper” background.
- Keyboard cheat sheet (press ?).
- Status bar shows element / selection counts, live cursor coordinates, and a zoom indicator; View menu has Fit-to-screen and Reset-zoom.
File & Export
- File service:
.umlproj save / load, re-resolving connection endpoints on load.
- Auto-save every 2 minutes to a recovery file.
- Export: PNG and PDF (2× raster; single-page PDF embedding a JPEG), and vector SVG generated from the model. Export selection only (PNG) and Copy as image to the clipboard.
- File menu (New / Open / Save / Save As + Export submenu) with Ctrl+N / O / S; recent files tracked in settings.
Toolbox
- Toolbox (left sidebar): tabs per diagram type (ER / Class / Process / Sequence), a search box (flat filtered results), and a “Recently used” section.
- Shape tiles support click-to-add (drops at viewport centre) and drag-and-drop onto the canvas.
- Category filters, search, recents (max 6).
Properties Panel
- Properties (right sidebar): context-sensitive, no modal dialogs.
- Node: name, italic / abstract, stereotype, fill & border colour (swatches + hex), border style, border thickness, font size.
- Connection: label, routing, line colour, line style, start / end arrowheads.
- Canvas: grid size, snap toggle, background colour.
- Connection selection via click hit-testing.
UML Shape Libraries
- Shape model: editable class members, stereotype, abstract flag, attributes and operations collections.
- Shape catalog: all shape kinds, categories (ER / Class / Process / Sequence), per-kind default sizes, and a factory with sensible starting content.
- Vector renderer for ER (entity, weak entity, attribute, multivalued, derived, relationship, weak relationship), Process (start / end events, task, gateway, data object, data-store cylinder), Sequence (lifeline, activation, combined-fragment), plus generic.
- Class node view: Class / Abstract (italic) / Interface (
«interface») / Enum («enum») with inline-editable attribute & operation compartments — double-click to edit, Enter for a new row, + attribute / operation affordances.
Canvas Engine
- Data models: observable nodes, connections, documents; enums for routing, arrowheads, and stroke styles.
- Undo / redo: bounded stack (capacity 100) with add / remove, move, and resize edits; re-entrancy guard so applying an undo never records a new edit.
- Diagram view model: selection, snap-to-grid, clipboard copy / paste with id remapping + cascading paste offset; all mutations routed through history.
- Rendering: infinite grid in screen space (crisp 1px at any zoom), connections with straight / orthogonal / curved routing, 5 arrowheads, dash styles, and midpoint labels.
- Interaction: Ctrl+wheel zoom-to-cursor, middle-drag pan, rubber-band multi-select, move + 8-handle resize, interactive connect-drag, double-click-to-add-node, fit-to-screen and reset-zoom.
- Shell: toolbar (add / connect / undo / redo / copy / paste / delete / snap / fit / zoom), status bar (node / connection / selection counts + live cursor coordinates), zoom indicator, and Ctrl+Z / Y / C / V + Delete shortcuts.
Roadmap
- Shared model elements / views — the same element appears across multiple diagrams and stays in sync.
- Class ↔ ERD transform + EF Core / JPA code generation.
- Live database introspection (read straight from a connected database).
- New diagram types: Use Case → Activity → State Machine → Component / Deployment.
- Editor polish: waypoint routing, doc export.