A modern, extensible web application for comparing database schemas between local and remote environments. Supports multiple database systems through an adapter architecture.
- π Schema Comparison - Compare database schemas between local and remote databases
- π Pluggable Adapters - Support for multiple database systems (PostgreSQL, MySQL, MSSQL, etc.)
- π Visual Diff - Easy-to-read visual representation of differences
- π― Column Type Detection - Displays column names and their precise data types
- π Synchronized Navigation - Expand a schema on one side, and the same schema opens on the other side
- π Cross-Database Compare - Compare PostgreSQL to MySQL, or any supported combination!
- π Multi-Language Support - Available in English and Turkish (easily extensible to other languages)
- π± Responsive Design - Works on desktop, tablet, and mobile devices
- π¨ Modern UI - Clean interface built with UIKit framework
- β‘ Fast & Lightweight - No heavy dependencies, just vanilla PHP and JavaScript
- π§ Extensible - Easy to add support for new database systems
Schema comparison interface showing synchronized navigation and visual diff indicators
- PHP 7.4 or higher
- A supported database system (PostgreSQL, MySQL, etc.)
- Web server (Apache, Nginx, or PHP built-in server)
- Corresponding PHP database extension:
- PostgreSQL:
php-pgsql - MySQL/MariaDB:
php-mysqliorphp-pdo_mysql - MSSQL:
php-sqlsrvorphp-pdo_sqlsrv
- PostgreSQL:
-
Clone the repository
git clone https://github.com/fatihemre/database-schema-diff.git cd database-schema-diff -
Create configuration file
cp config.example.php config.php
-
Edit configuration Open
config.phpand set your database credentials:return [ 'local' => [ 'adapter' => 'PostgreSQLAdapter', // Choose your database adapter 'host' => '127.0.0.1', 'port' => '5432', 'dbname' => 'your_local_db', 'user' => 'your_user', 'password' => 'your_password' ], 'remote' => [ 'adapter' => 'PostgreSQLAdapter', // Can be different from local! 'host' => 'remote.server.com', 'port' => '5432', 'dbname' => 'your_remote_db', 'user' => 'your_user', 'password' => 'your_password' ] ];
-
Start the application
Option A: PHP Built-in Server
php -S localhost:8000
Option B: Docker Compose (recommended)
docker-compose up
-
Open in browser
http://localhost:8000
- Configure Database Connections - Edit
config.phpwith your database credentials - Open the Application - Access via web browser
- View Comparison - The tool automatically compares schemas and displays differences
- Navigate Schemas - Click on schema headers to expand/collapse
- Identify Differences:
- π΄ Red - Missing in remote (or different)
- π’ Green - Extra in remote (or different)
- π Orange - Column type mismatch
| Database | Status | Adapter | Notes |
|---|---|---|---|
| PostgreSQL | β Fully Supported | PostgreSQLAdapter |
Tested with 9.6+ |
| MySQL | π§ Coming Soon | MySQLAdapter |
Skeleton available |
| MariaDB | π Planned | MariaDBAdapter |
Compatible with MySQLAdapter |
| MSSQL | π Planned | MSSQLAdapter |
Community contributions welcome |
| Oracle | π Planned | OracleAdapter |
Community contributions welcome |
| SQLite | π Planned | SQLiteAdapter |
Community contributions welcome |
You can compare databases of different types! For example:
return [
'local' => [
'adapter' => 'PostgreSQLAdapter',
'host' => 'localhost',
'port' => '5432',
// ...
],
'remote' => [
'adapter' => 'MySQLAdapter', // Different database type!
'host' => 'remote.example.com',
'port' => '3306',
// ...
]
];Want to add support for a new database? It's easy! See Adapter Development Guide for step-by-step instructions.
Quick steps:
- Create a new class extending
DatabaseAdapter - Implement 6 required methods
- Return data in the standard format
- Test and submit a PR!
schema-diff/
βββ adapters/ # π Database adapters
β βββ DatabaseAdapter.php # Abstract base class
β βββ PostgreSQLAdapter.php # PostgreSQL implementation
β βββ MySQLAdapter.php # MySQL skeleton
β βββ ADAPTER_DEVELOPMENT_GUIDE.md # How to create adapters
βββ docker/ # Docker configuration
β βββ init-local.sql
β βββ init-remote.sql
β βββ config.docker.php
β βββ README.md
βββ lang/ # π Language files
β βββ en.php # English translations
β βββ tr.php # Turkish translations
βββ api.php # REST API endpoint
βββ lang.php # Language API endpoint
βββ config.php # Database configuration (gitignored)
βββ config.example.php # Example configuration
βββ index.html # Main HTML file
βββ script.js # Frontend JavaScript
βββ style.css # Custom styles
βββ README.md # This file
βββ LICENSE # GPL v3 License
βββ CONTRIBUTING.md # Contribution guidelines
βββ CHANGELOG.md # Version history
βββ docker-compose.yml # Docker setup
- Backend: PHP (vanilla, no framework)
- Frontend: HTML5, JavaScript (ES6+), UIKit 3
- Database: PostgreSQL, MySQL (coming soon), and more via adapters
- API: RESTful JSON API
- Architecture: Adapter Pattern for database abstraction
Returns comparison data in JSON format.
Response:
{
"success": true,
"data": {
"local": { ... },
"remote": { ... },
"schemaStatuses": { ... },
"config": {
"local": { "host": "...", "port": "..." },
"remote": { "host": "...", "port": "..." }
}
}
}Returns translations for the specified language.
Parameters:
lang- Language code (e.g.,en,tr)
Response:
{
"success": true,
"lang": "en",
"translations": {
"app_title": "Database Schema Comparison",
"local_database": "Local Database",
"remote_database": "Remote Database",
...
}
}# Install dependencies (none required!)
# Just configure and run
php -S localhost:8000- PHP: PSR-12 coding standard
- JavaScript: ES6+ with consistent formatting
- CSS: BEM-like naming convention
We welcome contributions! Please see CONTRIBUTING.md for details.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
If you discover a security vulnerability, please send an email to info@fatihemre.net. All security vulnerabilities will be promptly addressed.
- Never commit
config.phpto version control - Use strong database passwords
- Run the application over HTTPS in production
- Restrict database user permissions to read-only if possible
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
- UIKit - Frontend framework
- PostgreSQL - Database system
- π« Email: info@fatihemre.net
- π Issues: GitHub Issues
- π¬ Discussions: GitHub Discussions
- PostgreSQL adapter (fully implemented)
- MySQL/MariaDB adapter (skeleton available - needs implementation)
- MSSQL adapter
- Oracle adapter
- SQLite adapter
- Multi-language support infrastructure
- English (default)
- Turkish
- Additional languages (community contributions welcome!)
- Table index comparison
- Foreign key comparison
- Trigger comparison
- View comparison
- Stored procedure comparison
- Export comparison report (PDF/HTML)
- Generate migration SQL scripts
- CLI mode for CI/CD integration
- User authentication
- Multiple database pair comparison
- Automated schema migration suggestions
- Historical comparison tracking
- Diff annotations and comments
- Fatih Emre - Initial work - fatihemre
See CHANGELOG.md for a list of changes.
Made with β€οΈ by the community
