Database modeler for PostgreSQL, MySQL, MariaDB and SQL Server

Database models
stored as JSON in Git.

Schevo imports a schema from a SQL script or a live database, shows it as an editable ER diagram and saves it as a folder with one JSON file per table, ready for version control with Git. Saving also regenerates the creation script.

  • 30-day trial, no sign-up
  • Works offline
  • Windows and Linux
  • English, Spanish, German and French

From SQL script to repository

  1. 1

    Import

    Open a CREATE TABLE script or connect to the database. Tables, columns, keys, indexes and relationships are imported, and the diagram is laid out automatically.

  2. 2

    Model

    Edit tables, columns and relationships on the diagram or in the table editor. Any change can be undone with Ctrl+Z.

  3. 3

    Commit

    Saving writes one JSON file per table and regenerates the linked SQL script. Both go in the same commit.

Features

The videos show the application with its bundled online-shop sample.

Import

Import from a SQL script or a live database

Schevo reads creation scripts and schema dumps, or queries the catalog of a running database. It imports tables, columns, primary and foreign keys, unique and check constraints, indexes and comments. The diagram is laid out automatically: tables grouped by prefix, parent tables to the left of their children and one color per group.

  • Statements the diagram does not represent (views, functions, triggers, sequences, types) are stored in extra.sql and written back to the generated SQL.
  • Statements that cannot be parsed are listed with their line number and kept in the SQL.
  • The database connection only runs read-only catalog queries. Host, port, database and user name are remembered; the password is never stored.

Engines

Engines: PostgreSQL, MySQL, MariaDB and SQL Server

Each model has an engine, stored in project.json. For all of them, Schevo imports scripts and databases, generates creation SQL in the engine's syntax, compares versions and generates migrations. The diagram, the JSON format and the command line are the same.

  • Live databases: PostgreSQL 10 or later, MySQL 8.0 or later, MariaDB 10.6 or later, SQL Server 2017 or later and Azure SQL Database.
  • MySQL and MariaDB, including schema dumps: AUTO_INCREMENT, UNSIGNED, ENUM/SET, generated columns, ON UPDATE, FULLTEXT and SPATIAL indexes and table options.
  • The table editor shows the attributes of the model's engine; for MySQL and MariaDB, storage engine, character set, collation, ON UPDATE, generated columns and index type.
  • Long ENUM and SET types are abbreviated on the diagram; the full type is shown in the tooltip and in the editor.
  • MySQL and MariaDB migrations use MODIFY COLUMN with the full definition, and their header notes that DDL on these engines is not transactional.
  • SQL Server: T-SQL scripts with GO batches and bracketed identifiers, IDENTITY, PERSISTED computed columns, clustered and nonclustered indexes with INCLUDE and filters, named DEFAULT constraints, collations and comments as extended properties (MS_Description).
  • SQL Server migrations run as a single transaction with SET XACT_ABORT ON: if one statement fails, none is applied. Renames use sp_rename.
MySQL / MariaDB script
CREATE TABLE ord_cart (
                cart_id BIGINT UNSIGNED NOT NULL,
                customer_id BIGINT UNSIGNED,
                session_id CHAR(36) NOT NULL COMMENT 'Browser session, for guest carts.',
                coupon_id BIGINT UNSIGNED,
                created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
                updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
                PRIMARY KEY (cart_id),
                UNIQUE KEY ord_cart_session_idx (session_id)
) COMMENT='Open carts, from registered customers or guests.';
SQL Server script
CREATE TABLE dbo.ord_order_line (
                order_id BIGINT NOT NULL,
                line_no SMALLINT NOT NULL,
                variant_id BIGINT NOT NULL,
                description NVARCHAR(200) NOT NULL,
                quantity SMALLINT NOT NULL,
                unit_price DECIMAL(12,2) NOT NULL,
                discount DECIMAL(12,2) NOT NULL CONSTRAINT ord_order_line_discount_df DEFAULT 0,
                tax_code VARCHAR(10) NOT NULL,
                amount AS (quantity * unit_price - discount) PERSISTED NOT NULL,
                CONSTRAINT ord_order_line_pk PRIMARY KEY (order_id, line_no),
                CONSTRAINT ord_order_line_quantity_check CHECK (quantity > 0)
);
GO

Edit

Keyboard editing on the diagram

T creates a table at the cursor. C adds columns to the selected table from a line such as amount numeric(10,2) not null. Alt + drag from the child table to the parent creates the relationship. Clicking a column highlights the relationships that use it, and any change can be undone with Ctrl+Z.

  • Renaming a table updates the foreign keys that reference it and the PK and FK names that follow the naming convention.
  • A type change on a referenced column propagates to the FK columns of the child tables, down the chain.
  • Zones, notes, minimap, compact mode (PK and FK columns only) and a dark theme.

On-disk format

A model built for version control: one JSON file per table

A model is a folder: project.json, a tables/ folder with one file per table and, when they have content, extra.sql and diagram.json. The output is deterministic: fixed property order, LF line endings and one property per line. Only the files that change are rewritten.

  • Plain text files you can read and edit without Schevo.
  • No binary files, no locks and no local database.
Model folder
db-model/
  project.json
  extra.sql
  tables/
    public.cat_attribute.json
    public.cat_brand.json
    public.cat_category.json
    public.cat_image.json
    public.cat_price_history.json
    … (62 files)
tables/public.ord_cart.json
{
  "name" : "ord_cart",
  "schema" : "public",
  "comment" : "Open carts, from registered customers or guests.",
  "columns" : [
    {
      "name" : "cart_id",
      "type" : "BIGINT",
      "nullable" : false
    },
    {
      "name" : "customer_id",
      "type" : "BIGINT",
      "nullable" : true
    },
    {
      "name" : "session_id",
      "type" : "UUID",
      "nullable" : false,
      "comment" : "Browser session, for guest carts."
    },
    {
      "name" : "coupon_id",
      "type" : "BIGINT",
      "nullable" : true
    },
  …

Git

Version control with Git: readable diffs and per-table merges

Each table lives in its own file and the format does not change between saves, so a diff shows only the lines that were modified. Two people editing different tables change different files, so merging schema changes is an ordinary Git merge. Moving a table only changes its x and y values.

  • After a git pull or a branch switch, the open model reloads if there are no unsaved changes; otherwise you are offered a reload.
  • When the model is opened, unresolved conflict markers are reported with file and line.
  • schevo-cli check in CI fails if the SQL is out of sync with the model.
Adding a column and moving a table
$ git diff
--- a/db-model/tables/public.cus_customer.json
+++ b/db-model/tables/public.cus_customer.json
@@ -10,2 +10,8 @@
     },
+    {
+      "name" : "loyalty_points",
+      "type" : "INTEGER",
+      "nullable" : false,
+      "default" : "0"
+    },
     {
@@ -140,3 +146,3 @@
   "layout" : {
-    "x" : 1671,
+    "x" : 1911,
     "y" : 40,

SQL

Creation SQL with a diff preview

The creation script has a fixed format: tables in alphabetical order, primary key, unique and check constraints inside each table, indexes right after it and foreign keys at the end as ALTER TABLE. Ctrl+G opens a preview with the lines added and removed compared with the file on disk.

  • Copy it, save it to the linked file or save it to another file.
  • Saving the model regenerates the linked script, with LF or CRLF line endings as set in the project.
Generated SQL
CREATE TABLE public.ord_cart (
                cart_id BIGINT NOT NULL,
                customer_id BIGINT,
                session_id UUID NOT NULL,
                coupon_id BIGINT,
                created_at TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
                updated_at TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
                CONSTRAINT ord_cart_pk PRIMARY KEY (cart_id)
);

ALTER TABLE public.ord_cart ADD CONSTRAINT cus_customer_ord_cart_fk
FOREIGN KEY (customer_id)
REFERENCES public.cus_customer (customer_id)
ON DELETE CASCADE
ON UPDATE NO ACTION
NOT DEFERRABLE;

Migrations

Migrations from Git, another model or a live database

Pick the starting version (a Git revision, the last saved version, another model, a SQL script or a live database) and Schevo generates the ALTER script that takes it to the current model. Affected foreign keys are dropped before the changes and recreated at the end. On PostgreSQL and SQL Server, the script runs inside a transaction.

  • Possible table and column renames are offered as checkboxes and written as RENAME (sp_rename on SQL Server) instead of drop and create.
  • A foreign key is recreated only when its columns or the parent table's key change.
  • From the command line: schevo-cli migrate with --git, --from or --from-db, plus --rename or --detect-renames.

Compare

Version comparison on the diagram

Compare the open model with a Git revision, the last saved version, another model, a SQL script or a live database. New tables are marked in green; modified ones in amber, with the changed columns highlighted; removed tables are drawn as ghosts at their previous position. The change list takes you to each table. Models of different engines can be compared too.

Validation

Validation as you edit

The validation panel updates on every change and separates errors from warnings. Errors: foreign keys to missing columns, nullable primary keys, duplicate names, SET NULL on NOT NULL columns. Warnings: mismatched types across a relationship, CASCADE cycles, reserved words and names that break the project's naming rules. Each engine adds its own rules: maximum identifier length, AUTO_INCREMENT columns, character set and collation across MySQL foreign keys, clustered indexes and cascade paths on SQL Server. schevo-cli validate applies the same rules.

Validation as you edit

Export

PNG, SVG and PDF export, and a data dictionary

The diagram exports to PNG, SVG or PDF, always in the light theme. The data dictionary is a self-contained HTML file with the diagram, a searchable index and a section per table with its columns, keys, indexes and comments.

Open the sample data dictionary

PNG, SVG and PDF export, and a data dictionary

Command line

Command line for CI

schevo-cli is installed with the application. validate exits with 0 when there are no errors, 1 when there are and 2 when the model cannot be read; check also verifies that the SQL is in sync. Both are free, with or without a license. import, generate, migrate and doc require a license and exit with 3 without one.

CI job
# CI job — fail the merge request if the model
# has errors or the SQL was not regenerated
schema-check:
  image: eclipse-temurin:17-jre
  script:
    - java -jar tools/schevo.jar check db-model

$ java -jar tools/schevo.jar check db-model
OK: valid model and SQL in sync

More features

Search

Ctrl+F searches tables, columns, relationships, indexes, constraints and comments.

Zones and notes

Colored zones that move with their tables, and text notes on the diagram.

Multiple windows

One model per window. Tables can be copied and pasted between windows.

Recovery copies

Every 2 minutes while there are unsaved changes. After an unexpected exit, you are offered the copy.

Naming rules

Templates for PK, FK, unique constraint and index names. Used when proposing names and when validating.

Light and dark themes

Ctrl+Shift+D switches themes. Exports always use the light one.

Four languages

Interface, manual and command-line help in English, Spanish, German and French.

Works offline

No account and no cloud services. Your models stay on your computer.

Large models

The diagram is optimized and benchmarked with models of 500 to 1,000 tables.

Fit to window

Opening, importing or comparing fits the whole diagram to the window. Ctrl+9 fits it again.

Update notices

A daily check for new versions, which can be turned off, with “Skip this version”.

Windows and Linux

An installer for Windows; .deb, .rpm and .tar.gz for Linux x64. All include Java.

Free trial

Schevo is currently available as a free trial: download it and use every feature for 30 days. Paid licenses will be available later.

When the trial ends, Schevo keeps opening models in read-only mode: you can browse and search them, compare versions and export to PNG, SVG and PDF. schevo-cli validate and check always work.

Interested? Write to us at contact@schevo-db.com and we will let you know when licenses are available.

Request the beta

Frequently asked questions

Which databases are supported?

PostgreSQL, MySQL, MariaDB and SQL Server. For all of them: import from a script or a live database, SQL generation, comparison and migrations. Live databases: PostgreSQL 10 or later, MySQL 8.0 or later, MariaDB 10.6 or later, SQL Server 2017 or later and Azure SQL Database, the last two with SQL Server authentication (user name and password).

Do I need an internet connection or an account?

No. Schevo works offline, has no accounts and checks the license key on your computer. The only network request is the update check: it downloads a public file at most once a day and sends no data. You can turn it off in the Help menu.

Can I try the beta?

Yes. The Windows beta is free and open to anyone: request it with the beta form and we will email you the download link. You get 30 days with every feature; after that, Schevo stays in read-only mode at no cost. No card needed.

What happens when the trial ends?

Schevo switches to read-only mode: you can open, browse, search, compare and export images, but not edit, save or generate SQL, migrations or the data dictionary. Paid licenses, which will let you keep editing, will be available later.

Does it work with my Git hosting?

Yes. Schevo reads and writes files in the repository folder and uses the git installed on your computer to compare with revisions. It works with any Git server.

Which operating systems?

Windows 10 and 11 (64-bit) and Linux x64 (.deb, .rpm or a portable .tar.gz). The packages bundle their own Java; you do not need to install it.

Try Schevo with your own schema

Download the installer, import your script with File › Import SQL and save the model in your repository. 30 days with all features.

Download the trial