Documentation
¶
Overview ¶
Package relspecgo provides bidirectional conversion between database schema formats.
RelSpec is a comprehensive database schema tool that reads, writes, and transforms database schemas across multiple formats including live databases, ORM models, schema definition languages, and data interchange formats.
Features ¶
- Read from 15+ formats: PostgreSQL, SQLite, DBML, GORM, Prisma, Drizzle, and more
- Write to 15+ formats: SQL, ORM models, schema definitions, JSON/YAML
- Interactive TUI editor for visual schema management
- Schema diff and merge capabilities
- Format-agnostic intermediate representation
Architecture ¶
RelSpec uses a hub-and-spoke architecture with models.Database as the central type:
Input Format → Reader → models.Database → Writer → Output Format
This allows any supported input format to be converted to any supported output format without requiring N² conversion implementations.
Key Packages ¶
- pkg/models: Core data structures (Database, Schema, Table, Column, etc.)
- pkg/readers: Input format readers (dbml, pgsql, gorm, etc.)
- pkg/writers: Output format writers (dbml, pgsql, gorm, etc.)
- pkg/ui: Interactive terminal UI for schema editing
- pkg/diff: Schema comparison and difference detection
- pkg/merge: Schema merging utilities
- pkg/transform: Validation and normalization
Installation ¶
go install git.warky.dev/wdevs/relspecgo/cmd/relspec@latest
Usage ¶
Command-line conversion:
relspec convert --from dbml --from-path schema.dbml \
--to gorm --to-path ./models
Interactive editor:
relspec edit --from pgsql --from-conn "postgres://..." \
--to dbml --to-path schema.dbml
Schema comparison:
relspec diff --source-type pgsql --source-conn "postgres://..." \
--target-type dbml --target-path schema.dbml
Merge schemas:
relspec merge --target schema1.dbml --sources schema2.dbml,schema3.dbml
Supported Formats ¶
Input/Output Formats:
- dbml: Database Markup Language
- dctx: DCTX schema files
- drawdb: DrawDB JSON format
- graphql: GraphQL schema definition
- json: JSON schema representation
- yaml: YAML schema representation
- gorm: Go GORM models
- bun: Go Bun models
- drizzle: TypeScript Drizzle ORM
- prisma: Prisma schema language
- typeorm: TypeScript TypeORM entities
- pgsql: PostgreSQL (live DB or SQL)
- sqlite: SQLite (database file or SQL)
Library Usage ¶
RelSpec can be used as a Go library:
import (
"git.warky.dev/wdevs/relspecgo/pkg/models"
"git.warky.dev/wdevs/relspecgo/pkg/readers/dbml"
"git.warky.dev/wdevs/relspecgo/pkg/writers/gorm"
)
// Read DBML
reader := dbml.NewReader(&readers.ReaderOptions{
FilePath: "schema.dbml",
})
db, err := reader.ReadDatabase()
// Write GORM models
writer := gorm.NewWriter(&writers.WriterOptions{
OutputPath: "./models",
PackageName: "models",
})
err = writer.WriteDatabase(db)
Documentation ¶
Full documentation available at: https://git.warky.dev/wdevs/relspecgo
API documentation: go doc git.warky.dev/wdevs/relspecgo/...
License ¶
See LICENSE file in the repository root.
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
relspec
command
|
|
|
pkg
|
|
|
commontypes
Package commontypes provides shared type definitions used across multiple packages.
|
Package commontypes provides shared type definitions used across multiple packages. |
|
diff
Package diff provides utilities for comparing database schemas and identifying differences.
|
Package diff provides utilities for comparing database schemas and identifying differences. |
|
inspector
Package inspector provides database introspection capabilities for live databases.
|
Package inspector provides database introspection capabilities for live databases. |
|
merge
Package merge provides utilities for merging database schemas.
|
Package merge provides utilities for merging database schemas. |
|
models
Package models provides the core data structures for representing database schemas.
|
Package models provides the core data structures for representing database schemas. |
|
pgsql
Package pgsql provides PostgreSQL-specific utilities and helpers.
|
Package pgsql provides PostgreSQL-specific utilities and helpers. |
|
readers
Package readers provides interfaces and implementations for reading database schemas from various input formats and data sources.
|
Package readers provides interfaces and implementations for reading database schemas from various input formats and data sources. |
|
reflectutil
Package reflectutil provides reflection utilities for analyzing Go code structures.
|
Package reflectutil provides reflection utilities for analyzing Go code structures. |
|
transform
Package transform provides validation and transformation utilities for database models.
|
Package transform provides validation and transformation utilities for database models. |
|
ui
Package ui provides an interactive terminal user interface (TUI) for editing database schemas.
|
Package ui provides an interactive terminal user interface (TUI) for editing database schemas. |
|
writers
Package writers provides interfaces and implementations for writing database schemas to various output formats and destinations.
|
Package writers provides interfaces and implementations for writing database schemas to various output formats and destinations. |
|
tests
|
|
