Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
167 changes: 130 additions & 37 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,67 +1,160 @@
![pgmodeler_mainwindow](https://user-images.githubusercontent.com/2205476/213446508-9bd549b3-ee7f-476d-9249-f537c31fce04.png)
<p align="center">
<img src="https://img.shields.io/github/v/release/pgmodeler/pgmodeler" alt="Latest Release" />
<img src="https://img.shields.io/badge/Downloads-500K%2B_Total-brightgreen" alt="Total Downloads" />
Copy link

Copilot AI Sep 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The downloads badge appears to be a custom/hardcoded value ('500K+ Total') rather than a dynamic badge from an official source. Consider using an actual metric source or removing this badge to avoid maintaining outdated numbers.

Suggested change
<img src="https://img.shields.io/badge/Downloads-500K%2B_Total-brightgreen" alt="Total Downloads" />

Copilot uses AI. Check for mistakes.
<img src="https://img.shields.io/github/stars/pgmodeler/pgmodeler" alt="GitHub Stars" />
<img src="https://img.shields.io/github/license/pgmodeler/pgmodeler" alt="License" />
<img src="https://img.shields.io/badge/PostgreSQL-17%20Ready-blue?logo=postgresql" alt="PostgreSQL Support" />
</p>

<h1 align="center">🐘 pgModeler</h1>
<p align="center"><strong>The Premier Open-Source PostgreSQL Database Modeler</strong></p>
<p align="center">Since 2006 • Professional-grade • Cross-platform excellence</p>

<p align="center">
<img src="https://user-images.githubusercontent.com/2205476/213446508-9bd549b3-ee7f-476d-9249-f537c31fce04.png" alt="pgModeler Main Window" />
</p>

## 🎯 Why Choose pgModeler?

✅ **Visual Database Design** - Design PostgreSQL databases visually with drag-and-drop interface
✅ **Reverse Engineering** - Import existing databases and visualize their complete structure
✅ **Smart Diff & Sync** - Compare models with databases and generate precise migration scripts
✅ **Code Generation** - Export clean, optimized SQL for any PostgreSQL version (9.x to 17+)
✅ **Professional Features** - Advanced relationships, triggers, functions, procedures, and more
✅ **Active Development** - 19 years of continuous development and community support

## 🚀 Quick Start

1. **📥 Download** - Get pre-compiled packages from [pgmodeler.io](https://pgmodeler.io/purchase)
2. **🎨 Design** - Create tables, relationships, and constraints visually
3. **🔄 Sync** - Generate SQL or sync directly with your PostgreSQL server
4. **🚀 Deploy** - Export optimized DDL scripts for production

> **💡 New User?** Check our [Video Tutorials](https://pgmodeler.io/support/tutorials) and [Documentation](https://pgmodeler.io/support/docs)

## ⭐ Key Features

- **🎨 Visual Modeling** - Intuitive drag-and-drop interface for database design
- **🔄 Reverse Engineering** - Import and visualize existing PostgreSQL databases
- **⚡ Smart Diff** - Compare models with databases and generate migration scripts
- **🛠️ Code Generation** - Export clean SQL for any PostgreSQL version
- **🔍 Database Administration** - Built-in SQL editor and database browser
- **🔌 Plugin System** - Extend functionality with [official plugins](https://github.com/pgmodeler/plugins)
- **🌍 Multi-Platform Support** - Linux, Windows, and macOS compatibility
- **� Internationalization** - Multiple language support

## 🏗️ Build Status

[![Linux build](https://github.com/pgmodeler/pgmodeler/workflows/Linux%20build/badge.svg)](https://github.com/pgmodeler/pgmodeler/actions?query=workflow%3A%22Linux+build%22)
[![Windows build](https://github.com/pgmodeler/pgmodeler/workflows/Windows%20build/badge.svg)](https://github.com/pgmodeler/pgmodeler/actions?query=workflow%3A%22Windows+build%22)
[![macOs build](https://github.com/pgmodeler/pgmodeler/workflows/macOs%20build/badge.svg)](https://github.com/pgmodeler/pgmodeler/actions?query=workflow%3A%22macOs+build%22)

:rocket: What's pgModeler?
------------
## 🌟 Community & Support

An **open-source, multiplatform database modeler for PostgreSQL**. This project aims to be a reference database design tool when it comes to FOSS in the PostgreSQL ecosystem.
Its feature-rich interface allows quick data modeling and fast code deployment on a server. It also supports reverse engineering by creating a visual representation of existing databases. Besides, pgModeler can also generate SQL scripts to sync a model and a database through the process called diff.
This tool is not about modeling only, it also counts with a minimalist but functional database server administration module that allows the execution of any sort of SQL commands, and provides database browsing and data handling in a simple and intuitive UI.
- 🐘 **PostgreSQL Ecosystem** - Official PostgreSQL community member
- 🌍 **Global Usage** - Used in enterprises, startups, and academia worldwide
- 📚 **Rich Documentation** - Comprehensive guides and tutorials
- 🔗 **Stay Connected** - Follow us on [X](https://x.com/pgmodeler), [Bluesky](https://bsky.app/profile/pgmodeler.io), [Mastodon](https://mastodon.social/@pgmodeler)

For more details about additional features, screenshots, and other useful information, please, visit the [project's official website](https://pgmodeler.io). For any feedback about the software visit the [Issues](https://github.com/pgmodeler/pgmodeler/issues) page. Additionally, follow pgModeler on [X](https://x.com/pgmodeler), [Bluesky](https://bsky.app/profile/pgmodeler.io) or [Mastodon](https://mastodon.social/@pgmodeler) and be up-to-date with new features, fixes, and releases.
**Need Help?** Visit our [Issues](https://github.com/pgmodeler/pgmodeler/issues) page or check the [official website](https://pgmodeler.io) for documentation and support.

:hammer_and_wrench: Building & Installing
----------------------
## 🔧 Building & Installation

Being a multiplatform software, the building process differs slightly on each supported OS. This way, the installation procedures are fully described in the [Installation](https://www.pgmodeler.io/support/installation) section on the project's website.
Being a multiplatform software, the building process differs slightly on each supported OS.

You may want to check the [official plugin repository](https://github.com/pgmodeler/plugins) as well for information regarding extending pgModeler's features.
### 📦 Pre-compiled Packages (Recommended)
- Download from [pgmodeler.io](https://pgmodeler.io/purchase) for instant setup
- Supports all major platforms with optimized builds

:spiral_notepad: Licensing
---------
### 🛠️ Build from Source
- Complete build instructions: [Installation Guide](https://www.pgmodeler.io/support/installation)
- Requirements: Qt 6.4+ (dropped 6.2/6.3 support), C++17 compiler, PostgreSQL client libraries
- Check the [official plugin repository](https://github.com/pgmodeler/plugins) for extending features

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 3.
## 💖 Support pgModeler's Development

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
pgModeler is **100% independent** with **19 years** of continuous development. Your support keeps this project alive!
Copy link

Copilot AI Sep 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The '19 years' claim is repeated multiple times throughout the document (lines 24, 76, 159). Consider using a consistent reference or variable to avoid maintenance issues when this number needs to be updated.

Copilot uses AI. Check for mistakes.

### 🎯 How You Can Help

See [LICENSE](https://github.com/pgmodeler/pgmodeler/blob/main/LICENSE) for details.
* 💰 **Financial Support** - pgModeler lives exclusively from [donations](https://pgmodeler.io/#donationForm) and [package purchases](https://www.pgmodeler.io/purchase). Your contribution directly supports development!
Copy link

Copilot AI Sep 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The '19 years' claim is repeated multiple times throughout the document (lines 24, 76, 159). Consider using a consistent reference or variable to avoid maintenance issues when this number needs to be updated.

Copilot uses AI. Check for mistakes.

:heart: pgModeler needs your support!
-------------------
* 👨‍💻 **Developers Welcome** - Know C++ and Qt? We need your help! The project has grown beyond what a solo developer can handle. Contact us to contribute to this **high-quality C++ codebase**!

* 📢 **Spread the Word** - Share pgModeler in your networks, workplaces, and communities. The bigger our community, the stronger the project becomes!

[![Sponsor](https://img.shields.io/badge/💖_Sponsor-pgModeler-red?style=for-the-badge)](https://github.com/sponsors/pgmodeler)
[![Donate](https://img.shields.io/badge/💝_Donate-pgmodeler.io-blue?style=for-the-badge)](https://pgmodeler.io/#donationForm)

## 🏆 Technical Excellence

### 💎 **Crafted with Pride: Modern C++17 & Qt**
- **96.5% C++** codebase with **professional-grade architecture**
Copy link

Copilot AI Sep 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The '96.5% C++' statistic is hardcoded and repeated in multiple places. This percentage may change over time as the codebase evolves, creating maintenance burden to keep it accurate across all references.

Suggested change
- **96.5% C++** codebase with **professional-grade architecture**
- **Predominantly C++** codebase with **professional-grade architecture**

Copilot uses AI. Check for mistakes.
- **Advanced C++17 features**: Smart pointers, RAII, move semantics, and modern STL
- **Custom Qt macros** for exception-safe signal/slot connections
- **Template metaprogramming** for type-safe object management
- **Memory-efficient** design with optimized data structures

### 🚀 **Performance Achievements**
- **~80% performance improvement** in model loading, validation, and object searching (v1.1.0)
- **Optimized rendering engine** with Qt's raster graphics system
- **Efficient SQL generation** with template-based code generation
- **Smart caching** for database object metadata

### 🛠️ **Engineering Highlights**
- **Modular architecture**: 6 specialized libraries (`libcore`, `libgui`, `libconnector`, etc.)
- **Plugin system** with extensible API for custom features
- **Schema microlanguage**: Custom templating system for SQL generation
- **Exception-safe design** with comprehensive error handling
- **Cross-platform compatibility** (Linux, Windows, macOS)

## 📋 License

This program is free software: you can redistribute it and/or modify it under the terms of the **GNU General Public License v3**.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

* :moneybag: **Financial support:** a lot of knowledge and effort is being put into this project during the last **17 years** so that a reliable and constantly improved product can be delivered to the community. pgModeler is an independent project and has no sponsorship, living exclusively from [donations](https://pgmodeler.io/#donationForm) and [pre-compiled packages purchases](https://www.pgmodeler.io/purchase). If you like pgModeler and think it deserves a financial contribution, go ahead and help it!
See [LICENSE](https://github.com/pgmodeler/pgmodeler/blob/main/LICENSE) for complete details.

* :man_technologist: **Developers:** pgModeler has reached a state where its solo developer can't handle all the modifications and new feature requests by himself anymore in a reasonable time. So if you know how to code in C++ using the Qt framework, and want to contribute to the development, let me know! I'll be grateful for any help with the project maintenance!
## 📚 Resources & Legacy

* :speaking_head: **Other contributors:** developer or not you can always help this project by spreading the word about it. Share this repository in your social networks, workplaces, family & friends. The more the people know about pgModeler the bigger will be the support for the project, thus creating a virtuous cycle.
### 📖 **Documentation & Learning**
- 📖 **Official Documentation** - [Complete Guides](https://pgmodeler.io/support/docs)
- 🎥 **Video Tutorials** - [Learning Resources](https://pgmodeler.io/support/tutorials)
- 📝 **Detailed Changelog** - [CHANGELOG.md](https://github.com/pgmodeler/pgmodeler/blob/main/CHANGELOG.md)
- 🔌 **Plugin Development** - [Official Plugin Repository](https://github.com/pgmodeler/plugins)

:bookmark_tabs: Changelog
----------
### 🏛️ **Project Legacy**
- 🎂 **Born in 2006** - Originally named "pgsqlDBM"
- 🔄 **2012 Reborn** - Complete rewrite as "pgModeler"
- 🌟 **Trusted Worldwide** - Half a million downloads and growing
- 🔗 **Historical Releases** - [Sourceforge Archive](http://sourceforge.net/projects/pgmodeler)

The detailed changelog can be seen on [CHANGELOG.md](https://github.com/pgmodeler/pgmodeler/blob/main/CHANGELOG.md) file.
## 🎨 About the Creator

:card_file_box: Older Releases & Code
-------------------
**Raphael Araújo e Silva** - The passionate C++ developer behind pgModeler since 2006. Living in Palmas, Brazil, Raphael combines **computer graphics**, **compilers**, and **database systems** knowledge into this masterpiece. His dedication to **clean C++ code** and **Qt framework expertise** shows in every line of the 96.5% C++ codebase.
Copy link

Copilot AI Sep 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The '96.5% C++' statistic is hardcoded and repeated in multiple places. This percentage may change over time as the codebase evolves, creating maintenance burden to keep it accurate across all references.

Suggested change
**Raphael Araújo e Silva** - The passionate C++ developer behind pgModeler since 2006. Living in Palmas, Brazil, Raphael combines **computer graphics**, **compilers**, and **database systems** knowledge into this masterpiece. His dedication to **clean C++ code** and **Qt framework expertise** shows in every line of the 96.5% C++ codebase.
**Raphael Araújo e Silva** - The passionate C++ developer behind pgModeler since 2006. Living in Palmas, Brazil, Raphael combines **computer graphics**, **compilers**, and **database systems** knowledge into this masterpiece. His dedication to **clean C++ code** and **Qt framework expertise** shows in every line of the predominantly C++ codebase.

Copilot uses AI. Check for mistakes.

Older releases of pgModeler can be found on [Sourceforge.net](http://sourceforge.net/projects/pgmodeler).
> *"This is pgModeler... this is my dream!"* - Raphael Araújo e Silva

:bomb: Known Issues
-----------
---

* Due to the usage of Qt's raster engine to draw objects, the process of handling objects on the canvas tends to get slower as lots of objects are created causing constant CPU usage. Heavy performance degradation can be noticed when dealing with models with ~500+ tables and/or relationships. There're plans to improve the speed of drawing operations, for large models, in future releases. Changing the relationship connection mode and render smoothness options may help in the performance when handling big database models.

* The diff process still presents false-positive results due to its limitations. Sometimes, there is the need to run the process twice and/or tweaking the options to get the full changes.
## ⚠️ Known Issues & Limitations

* pgModeler does not fully support the [quoted identifier notation](http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS). The non-printable characters, some special UTF8 characters, some special characters, and upper case letters in the objects' names will automatically trigger the usage of quoted identifier notation. The following characters are considered special in pgModeler's implementation: '_-.@ $:()/<>+*\=~!#%^&|?{}[]`;
<details>
<summary><strong>Click to view technical limitations</strong></summary>

* pgModeler can't be compiled with Microsoft Visual Studio due to the use of some GCC and clang extensions.
* **Large models (500+ objects)**: Qt's raster engine may cause performance degradation with extensive models
* **Diff process**: May present false-positive results requiring multiple runs or option tweaking
* **Quoted identifiers**: Limited support for PostgreSQL's quoted identifier notation
* **Microsoft Visual Studio**: Cannot be compiled due to GCC/Clang-specific extensions
* **macOS file association**: Bundle particularities prevent proper .dbm file association in Finder
* **Threading edge cases**: Rare crashes during export/import/validation on complex models due to race conditions

* Compiling the source using '-Wconversion' (disabled by Qt in its defaults) generates a lot of warnings. These warnings are 99% harmless and there are no plans to fix them in a near future.
</details>

* pgModeler can sometimes crash during the export, import, validation or diff processes due to some threaded operations that, depending on the size and the arrangement of the model, cause race conditions between threads.
---

* Due to the particularities of executing bundles on macOS, the file association does not work correctly on this system. So it's not possible to open a model file by clicking it on Finder.
<p align="center">
<strong>🐘 Made with ❤️ for the PostgreSQL Community</strong><br>
<em>19 years of continuous innovation • Professional C++17 codebase • Cross-platform excellence</em>
</p>