ERDmaker
A multi-database Entity-Relationship Diagram (ERD) modeling workbench and Eclipse ERMaster companion for Visual Studio Code.
Key Features
- Live Database Connection & Reverse Engineering (Import): Connect to a live PostgreSQL database through an interactive dialog, select schemas, and import tables or tables with views into a visual ERD. Database comments can be automatically converted into logical names. Passwords are saved securely using VS Code SecretStorage.
- Logical and Physical Dual Naming: Switch seamlessly between Physical names, Logical names (business terms), or dual view on the canvas. Edit logical names directly in-place by double-clicking in Logical mode, with full IME support (including Korean) and undo/redo history. Table and column widths automatically adjust to prevent name truncation.
- Database Views Support: View definitions are imported and visualized alongside physical tables as read-only entities displaying columns and data types, and are exported verbatim in DDL output.
- Multi-Target DDL Export: Export production-ready DDL scripts for 5 database targets: PostgreSQL, MySQL, MariaDB, Oracle (12c+ with identity columns), and Oracle (11g and older with sequence and trigger). Automatic data type mapping converts types across vendor dialects, prepending informative warning blocks whenever lossy or ambiguous conversions occur. Foreign-key ON DELETE / ON UPDATE clauses are emitted per dialect: everything on PostgreSQL and SQLite; MySQL/MariaDB omit
SET DEFAULT (InnoDB rejects it); Oracle has no ON UPDATE and no ON DELETE SET DEFAULT, so those are omitted with a warning (NO ACTION/RESTRICT are the default and omitted silently); MSSQL omits RESTRICT silently. Note: .erm files from Eclipse ERMaster are mostly RESTRICT/RESTRICT, so DDL exported from them now carries ON DELETE RESTRICT ON UPDATE RESTRICT.
- Native ERMaster (.erm) Read and Write: Open, visually edit, and save Eclipse ERMaster
.erm XML files directly without intermediate sidecar files. Passthrough preservation ensures ERMaster-specific configurations (such as tablespaces, sequences, triggers, column group definitions, and category display settings) remain intact upon saving — element-level details (constraint names, relationship line bend points, table colors, fonts, sizes, column sequences, index type/description, column group references) are preserved too (see Known Limitations for what is not).
- ERD | Code Preview Tab: Every ERD editor has a small ERD | Code tab row on top. The Code tab shows, read-only, exactly what saving would write to the file — JSON for
.erd.json, ERMaster XML for .erm, unsaved changes included — and refreshes as you edit. Click Open in code editor to switch the same tab to the text editor for real edits.
- Table Specification Document Export: Export data dictionaries and table specifications directly from your diagram to formatted Excel spreadsheets (
.xlsx with table list, table specification, and view specification sheets) or print-ready single-page HTML with a linked table of contents.
- Database Schema Diff and Compare: Compare an active ERD against a live database schema to generate an ALTER migration script (
<name>-diff.sql). Potentially destructive statements (such as DROP TABLE, DROP COLUMN, and DROP CONSTRAINT) are safely commented out by default. Foreign-key ON DELETE / ON UPDATE actions are compared too (NO ACTION, RESTRICT and unset count as equal); a changed action is applied as DROP CONSTRAINT + ADD CONSTRAINT in one statement.
- Direct Database Apply: Apply schema differences directly to a live PostgreSQL database within an atomic transaction (
BEGIN / COMMIT / ROLLBACK). Includes a pre-execution SQL preview (<name>-apply-preview.sql), safety confirmation modals (apply additions/modifications only vs. include drops), and a comprehensive execution report (<name>-apply-result.md).
- On-Demand DB Driver Management: Keep extension package size small and compliant by installing optional database drivers (e.g.,
mysql2 for MySQL/MariaDB or oracledb for Oracle) on-demand, with hash verification and offline local archive installation support.
- Internationalization (i18n): Fully localized UI in English and Korean. Includes a dedicated
erdmaker.output.locale setting that decouples the language of generated output artifacts (DDL warnings, specification documents, ALTER scripts, and apply summaries) from the editor's display language. The editor UI itself follows the VS Code display language — change it via Command Palette → Configure Display Language (see FAQ).
- Interactive Tutorial Walkthrough: Includes a built-in step-by-step walkthrough ("Get Started with ERDmaker") accessible from the VS Code Welcome page that guides users through creating practice diagrams, adding entities and attributes, configuring relationships, and connecting to databases with live completion tracking.
Getting Started
1. Opening or Creating an ERD File
- Open an existing diagram: Double-click any
.erm, .erd, or .erd.json file in the VS Code Explorer to open the interactive ERD visual canvas.
- Create a new empty diagram:
- Open the Command Palette (
Ctrl+Shift+P on Windows/Linux or Cmd+Shift+P on macOS) and run ERDmaker: New Empty ERD….
- Alternatively, right-click any folder in the Explorer or open the File > New File… menu and select New Empty ERD…. A new
.erm diagram file will be created and opened immediately.
2. Importing an Existing Schema from PostgreSQL
- Open the Command Palette (
Ctrl+Shift+P / Cmd+Shift+P) and select ERDmaker: Import ERD from PostgreSQL (or right-click a folder in the Explorer and choose ERDmaker: New ERD from PostgreSQL…).
- Enter your connection details (Host, Port, Database, User, Password) in the connection dialog and click Connect.
- Select your target Schema from the dropdown, choose between Tables only or Tables + Views, and click Import.
- An ERD diagram will be generated and rendered in the canvas immediately. Database comments will be mapped to logical names automatically.
3. Starting the Built-in Tutorial
If you are new to ERDmaker or want a quick guided tour:
- Open the Command Palette and execute ERDmaker: Start Tutorial.
- Alternatively, open Help > Get Started (or run
Welcome: Open Walkthrough… from the Command Palette) and select Get Started with ERDmaker.
- Follow the interactive steps to practice adding entities, editing logical names, and connecting relationships in a risk-free sandbox diagram.
Commands
All commands contributed by the extension under the ERDmaker and vuerd categories:
| Command ID |
Title |
Availability / Notes |
erd-generator.importFromPostgreSQL |
Import ERD from PostgreSQL |
Available in Command Palette |
erd-generator.newErdFromPostgreSQL |
New ERD from PostgreSQL… |
Available in Command Palette, Explorer folder context menu, File > New File |
erd-generator.newErd |
New Empty ERD… |
Available in Command Palette, Explorer folder context menu, File > New File |
erd-generator.exportToErm |
Export to ERMaster (.erm) |
Available in Command Palette (hidden when the active editor is already .erm) |
erd-generator.importErm |
Convert .erm to .erd.json |
Available in Command Palette |
erd-generator.exportTableSpec |
Export Table Specification |
Available in Command Palette |
erd-generator.exportDdl |
Export DDL… |
Available in Command Palette |
erd-generator.compareWithDb |
Compare ERD with Database (diff DDL) |
Available in Command Palette |
erd-generator.manageDrivers |
Manage DB Drivers… |
Available in Command Palette |
erd-generator.applyToDb |
Apply to Database… |
Available in Command Palette |
erd-generator.startTutorial |
Start Tutorial |
Available in Command Palette and Walkthrough step |
erd-generator.tutorial.skipDb |
Skip Database Connection Step (Tutorial) |
Reachable only via the Walkthrough UI step (hidden from Command Palette) |
erd-generator.tutorial.reset |
Reset Tutorial Progress |
Available in Command Palette |
erd-generator.reportIssue |
Report Issue / Send Feedback |
Available in Command Palette |
vuerd.showSource |
View as Code (Text Editor) |
Editor title bar button and Command Palette (shown only while the ERD view of an .erd/.erd.json/.erm file is active); replaces the ERD tab with the text editor |
vuerd.showEditor |
View as ERD |
Editor title bar button and Command Palette (shown only for an .erd/.erd.json/.erm file open as text); re-reads the file from disk |
vuerd.showSourceToSide |
View as Code to the Side |
Editor title bar Alt-click only (hidden from Command Palette) |
vuerd.showEditorToSide |
View as ERD to the Side |
Editor title bar Alt-click only (hidden from Command Palette) |
Settings
Configure ERDmaker settings via VS Code Preferences (Ctrl+, or Cmd+,):
| Setting Key |
Type |
Default |
Allowed Values |
Description |
erdmaker.import.commentAsLogicalName |
boolean |
true |
true, false |
Move the DB comment to the logical name on import. Turn this off to keep the comment in the comment field instead. |
erdmaker.output.locale |
string |
"ko" |
"ko", "en", "follow-ui" |
Language for generated output files (DDL warning comments, specification documents, ALTER/apply reports). Independent of the editor UI language (VS Code display language) — switching the UI language never changes existing output files' language. The UI language has no ERDmaker setting — use Command Palette → Configure Display Language. |
dineug.erd-editor.theme.appearance |
string |
"dark" |
"auto", "light", "dark" |
Theme appearance |
dineug.erd-editor.theme.grayColor |
string |
"slate" |
"gray", "mauve", "slate", "sage", "olive", "sand" |
Gray color |
dineug.erd-editor.theme.accentColor |
string |
"indigo" |
"gray", "gold", "bronze", "brown", "yellow", "amber", "orange", "tomato", "red", "ruby", "crimson", "pink", "plum", "purple", "violet", "iris", "indigo", "blue", "cyan", "teal", "jade", "green", "grass", "lime", "mint", "sky" |
Accent color |
FAQ
Does this work on an air-gapped / closed network?
Yes. ERDmaker is designed to work in offline and air-gapped environments:
- The core extension bundles the PostgreSQL client (
pg), so connecting to, reverse-engineering schemas from, comparing against, and directly applying changes to PostgreSQL databases works completely offline without any internet connection.
- For additional database drivers such as MySQL/MariaDB (
mysql2) or Oracle (oracledb), ERDmaker provides an on-demand driver manager designed for closed networks. Run ERDmaker: Manage DB Drivers… from the Command Palette, select the driver, and choose Install from local files…. Point the file selector to a local directory containing pre-downloaded npm .tgz tarball packages. ERDmaker verifies the package checksums, unpacks them, and loads the drivers into VS Code's global storage without network access.
What does erdmaker.output.locale control, and how is it different from the VS Code UI language?
The VS Code display language controls the user interface of the editor itself (such as menus, command titles, dialog prompts, and walkthrough instructions). ERDmaker has no UI language setting of its own; to change it, press Ctrl+Shift+P → Configure Display Language → pick a language (the Korean Language Pack extension is needed for Korean) → restart VS Code.
In contrast, erdmaker.output.locale controls the language used inside generated output files and project deliverables:
- The warning comment block at the top of exported DDL files (
-- [WARN] ...).
- Sheet names and table headers in exported specification spreadsheets (
<name>-spec.xlsx).
- Section headings and structure titles in exported HTML specification documents (
<name>-spec.html).
- Header comments, section titles, and warning notes in diff migration scripts (
<name>-diff.sql).
- Apply preview scripts and markdown execution summaries (
<name>-apply-result.md).
This separation ensures that project deliverables remain consistent across a development team regardless of each team member's personal VS Code UI display language.
"ko" (default): Always generate output files in Korean.
"en": Always generate output files in English.
"follow-ui": Dynamically follow the active VS Code display language (Korean if VS Code is in Korean, English otherwise).
(Note: Changing this setting does not alter your physical or logical database identifiers, user-written comments, or standard SQL keywords like CREATE TABLE.)
Is this compatible with Eclipse ERMaster .erm files?
Yes. ERDmaker provides native two-way compatibility with Eclipse ERMaster XML files (.erm):
- You can directly open, visually edit, and save
.erm files in VS Code with standard save actions (Ctrl+S / Cmd+S). No sidecar files are generated.
- Passthrough preservation: ERMaster-specific configurations that the visual canvas does not edit—such as global sequences, triggers, tablespaces, column group definitions, notes, and category display settings—are captured when the file is opened and injected back into the XML verbatim when saved. Element-level values (PK/FK constraint names, relationship bend points, table color/font/size, column sequence parameters, index type/description) are bound to the elements they came from and written back on save; elements you copy or create get defaults. A table's reference to a column group is kept in place, but the group's columns are not shown on the canvas or in DDL.
- ERMaster loader compliance: Files are serialized according to ERMaster XML rules (including
-1 table auto-sizing sentinels, 9pt base fonts, two-pass integer IDs, and remapped test data references), preventing NullPointerException errors when reopening diagrams in Eclipse ERMaster.
- Dialect mapping: Database vendor selections (PostgreSQL, MySQL, MariaDB, Oracle 12c+, Oracle 11g) are mapped to and from the ERMaster
<database> tag, preserving dialect choices across tools.
Known Limitations
- Live Database Connection, Diff, and Apply: Live database operations (connecting to reverse-engineer schemas, comparing diagrams against a live database to generate diff DDL, and transactional direct schema apply) are currently supported exclusively for PostgreSQL.
- DDL Export Target Support: While live connections are PostgreSQL-only, multi-target DDL export supports 5 dialects: PostgreSQL, MySQL, MariaDB, Oracle (12c+), and Oracle (11g and older).
- Granular ERMaster Attribute Preservation: Element-level ERMaster attributes (PK/FK constraint names, relationship bend points, table color/font/size,
table_properties, column sequences, index type/description, column group references) are preserved when you open an .erm and save it. Remaining gaps:
- Moving a table drops the absolute-coordinate bend points of the relationships attached to it (other line geometry is kept).
- Changing the database dialect (e.g. PostgreSQL → Oracle) resets per-table
table_properties to defaults; adding or removing a column resets that table's stored size to auto.
- Tables, relationships, columns, and indexes you copy or create are written with default values.
- ERDmaker: Export to ERMaster (.erm) overwriting an existing
.erm from an .erd.json keeps only table-level settings (color, font, size, PK constraint name, table_properties, matched by table name); relationship names, bend points, column sequences, index type/description, and column group references are not carried over.
- Columns that belong to a column group are not shown on the canvas or in DDL (the reference itself is preserved in place).
- Note-to-table connector lines (
<comment_connection>) are not handled: those stored inside a table's connections are dropped on save, and those inside a note may become dangling references when table ids are renumbered.
- Complex unique key definitions and column-level
constraint / unique_key_name / character_set / collation are not preserved.
- Visual display mode toggle (
view_mode in .erm retains the original file value rather than saving transient canvas toggles).
- MySQL / MariaDB Identifier Limits: Both enforce a 64-character limit on constraint and index names. Auto-generated
FK_/UQ_/IDX_ names exceeding 64 characters are deterministically abbreviated with a 6-character hash (the same rule as Oracle). User-defined index names are emitted as-is.
- Oracle 11g (Legacy) Identifier Limits: Oracle 11g enforces a strict 30-byte identifier limit. Auto-generated constraint and sequence names exceeding 30 bytes are deterministically abbreviated with a 6-character hash. User-defined entity and attribute names exceeding 30 bytes are emitted as-is and may require manual adjustment if rejected by Oracle.
License
MIT. This extension is derived from erd-editor (MIT) — see NOTICE.md in the repository for attribution details.
Support & Feedback
Found a bug or have an idea? There are two ways to reach us:
- With a GitHub account: run ERDmaker: Report Issue / Send Feedback from the Command Palette (
Ctrl+Shift+P / Cmd+Shift+P), choose Report a bug or Request a feature, and check the summary that is shown. Your browser then opens the issue form with your ERDmaker version and basic environment details already filled in. You can also open the form yourself at github.com/genishs/erdmaker/issues. VS Code's Help > Report Issue… (select ERDmaker) leads to the same place.
- Without a GitHub account: a GitHub account is required to submit an issue. If you do not have one, leave your question or feedback on the Marketplace Q & A tab instead.
What the command fills in: the ERDmaker version and build number (the last number of the version, e.g. 0.5.1 (build 1)), the VS Code version, your operating system and its release number, the display language, the erdmaker.output.locale setting, and — if an ERD file is active — only its file type (.erm / .erd.json) and target database. Nothing is sent until you confirm, and ERD contents, database connection details, file paths or names, and your user name are never included automatically.
The issue tracker is public. Please do not post connection details, passwords, or schema contents you are not allowed to share; use a reduced, anonymized example to reproduce a problem.
| |