| Crates.io | parsql-cli |
| lib.rs | parsql-cli |
| version | 0.5.0 |
| created_at | 2025-09-29 15:51:56.92453+00 |
| updated_at | 2025-09-29 15:51:56.92453+00 |
| description | Command-line interface for parsql database toolkit |
| homepage | |
| repository | https://github.com/yazdostum-nettr/parsql |
| max_upload_size | |
| id | 1859802 |
| size | 262,606 |
Command-line interface for the parsql database toolkit and migration system with interactive TUI mode.
cargo install parsql-cli
Or build from source:
git clone https://github.com/yazdostum-nettr/parsql
cd parsql/parsql-cli
cargo install --path .
# Install from crates.io (when available)
cargo install parsql-cli
# Or install from source
git clone https://github.com/yazdostum-nettr/parsql
cd parsql
cargo install --path parsql-cli
# Initialize in current directory
parsql init .
# This creates:
# - parsql.toml (configuration file)
# - migrations/ (directory for migration files)
# - .gitignore (ignores database files)
# - README.md (project documentation)
parsql migrate create create_users_table
# Edit the generated SQL files:
# - migrations/{timestamp}_create_users_table.up.sql
# - migrations/{timestamp}_create_users_table.down.sql
# Set database URL
export DATABASE_URL="sqlite:database.db"
# or
export DATABASE_URL="postgresql://user:password@localhost/dbname"
# Run all pending migrations
parsql migrate run
# Check status
parsql migrate status --detailed
# Rollback if needed
parsql migrate rollback --to 0
# Launch interactive mode
parsql --interactive
# or just
parsql
In TUI mode:
Enter to select items/ for command mode? for helpCtrl+Q to quitCreate a parsql.toml file in your project root:
[database]
url = "postgresql://user:pass@localhost/dbname"
# Or for SQLite:
# url = "sqlite:app.db"
[migrations]
directory = "migrations"
table_name = "schema_migrations"
verify_checksums = true
allow_out_of_order = false
transaction_per_migration = true
You can override configuration with environment variables:
DATABASE_URL - Database connection stringPARSQL_MIGRATIONS_DIR - Migrations directoryPARSQL_CONFIG - Path to config fileThe interactive mode provides a rich terminal interface inspired by Claude Code:
/ key)When you press /, a command input appears at the bottom with auto-completion:
Available commands:
/help or /h - Show help/quit or /q - Exit application/connect <url> - Connect to database/create <name> - Create new migration/run - Run pending migrations/rollback <version> - Rollback to version/status - Show migration status/validate - Validate migrations/list - List migrations/logs - Show application logs/config - Show configuration/refresh - Refresh datar to refresh, a to apply allr to run, b to rollbackparsql initInitialize a new parsql project in the current directory.
Options:
--database-url <URL> - Set initial database URL--migrations-dir <DIR> - Set migrations directory (default: "migrations")parsql migrate createCreate a new migration file.
parsql migrate create "add users table" --migration-type sql
Options:
--migration-type <TYPE> - Migration type: sql or rust (default: sql)Creates:
{timestamp}_{name}.up.sql - Forward migration{timestamp}_{name}.down.sql - Rollback migrationparsql migrate runRun all pending migrations.
parsql migrate run
parsql migrate run --database-url sqlite:test.db
parsql migrate run --target 20240101120000 # Run up to specific version
parsql migrate run --dry-run # Show what would be run
Options:
--database-url <URL> - Override database URL--target <VERSION> - Run migrations up to this version--dry-run - Show migrations without running themparsql migrate rollbackRollback migrations to a specific version.
parsql migrate rollback --to 20240101000000
parsql migrate rollback --to 0 # Rollback all
Options:
--to <VERSION> - Target version (required)--database-url <URL> - Override database URL--dry-run - Show what would be rolled backparsql migrate statusShow migration status.
parsql migrate status
parsql migrate status --detailed # Show checksums and timestamps
Options:
--database-url <URL> - Override database URL--detailed - Show detailed informationExample output:
Migration Status:
10 Total migrations
7 Applied migrations
3 Pending migrations
Detailed Status:
Version Name Status Applied At Checksum
-------------- ------------------ -------- ------------------- ----------
20240101120000 create_users_table Applied 20.5.01-01 12:00:00 ✓
20240102130000 add_posts_table Applied 20.5.01-02 13:00:00 ✓
20240103140000 add_comments Pending - -
parsql migrate validateValidate migration files.
parsql migrate validate
parsql migrate validate --check-gaps
parsql migrate validate --verify-checksums
Options:
--check-gaps - Check for version gaps--verify-checksums - Verify migration checksumsparsql migrate listList available migrations.
parsql migrate list
parsql migrate list --pending # Only pending
parsql migrate list --applied # Only applied
Options:
--pending - Show only pending migrations--applied - Show only applied migrationsUp migration ({version}_{timestamp}_{name}.up.sql):
-- Migration: create_users_table
-- Version: 20240101120000
-- Created: 20.5.01-01 12:00:00
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Down migration ({version}_{timestamp}_{name}.down.sql):
-- Migration: create_users_table (rollback)
-- Version: 20240101120000
-- Created: 20.5.01-01 12:00:00
DROP TABLE IF EXISTS users;
For complex migrations, you can use Rust:
//! Migration: complex_data_migration
//! Version: 20240101120000
//! Created: 20.5.01-01 12:00:00
use parsql_migrations::prelude::*;
pub struct Migration20240101120000;
impl Migration for Migration20240101120000 {
fn version(&self) -> i64 {
20240101120000
}
fn name(&self) -> &str {
"complex_data_migration"
}
fn up(&self, conn: &mut dyn MigrationConnection) -> Result<(), MigrationError> {
// Complex migration logic
conn.execute("ALTER TABLE users ADD COLUMN status VARCHAR(50)")?;
// Update data...
Ok(())
}
fn down(&self, conn: &mut dyn MigrationConnection) -> Result<(), MigrationError> {
conn.execute("ALTER TABLE users DROP COLUMN status")?;
Ok(())
}
}
Each migration runs in its own transaction by default. If a migration fails, it's automatically rolled back.
Migrations are checksummed to detect modifications after they've been applied. The status command shows checksum mismatches.
The system detects gaps in migration versions to ensure migrations run in order.
Long-running operations show progress with spinner animations and execution times.
# Initialize
parsql init --database-url postgresql://localhost/myapp
# Create migrations
parsql migrate create "create users table"
parsql migrate create "create posts table"
parsql migrate create "add user profiles"
# Run migrations
parsql migrate run
# Check status
parsql migrate status --detailed
# Rollback if needed
parsql migrate rollback --to 20240101000000
# Initialize with SQLite
parsql init --database-url sqlite:app.db
# Create and run migrations
parsql migrate create "initial schema"
parsql migrate run
# Validate migrations
parsql migrate validate --verify-checksums
--dry-run to preview changesvalidate --verify-checksums to find issuesThis project is part of the parsql workspace and shares its license.