{"id":44019812,"url":"https://github.com/crramirez/casvizer","last_synced_at":"2026-02-07T16:09:00.604Z","repository":{"id":331121519,"uuid":"1125362296","full_name":"crramirez/casvizer","owner":"crramirez","description":"TUI DB Manager based on Casciian","archived":false,"fork":false,"pushed_at":"2025-12-30T23:00:52.000Z","size":63,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-03T10:16:32.094Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/crramirez.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-30T15:38:51.000Z","updated_at":"2026-01-03T00:03:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/crramirez/casvizer","commit_stats":null,"previous_names":["crramirez/casvizer"],"tags_count":null,"template":false,"template_full_name":"crramirez/casciian-app-template","purl":"pkg:github/crramirez/casvizer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crramirez%2Fcasvizer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crramirez%2Fcasvizer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crramirez%2Fcasvizer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crramirez%2Fcasvizer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crramirez","download_url":"https://codeload.github.com/crramirez/casvizer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crramirez%2Fcasvizer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29199519,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T14:35:27.868Z","status":"ssl_error","status_checked_at":"2026-02-07T14:25:51.081Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-02-07T16:08:58.451Z","updated_at":"2026-02-07T16:09:00.599Z","avatar_url":"https://github.com/crramirez.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Casvizer\n\nDatabase visualization TUI (Text User Interface) tool based on [Casciian](https://github.com/crramirez/casciian). Think of it as a terminal-based DBVisualizer or DBeaver.\n\n## Description\n\nCasvizer is a powerful database client with a text-based user interface that supports multiple database systems. It provides a rich set of features for database management, querying, and visualization, all within your terminal.\n\n### Features\n\n- **Multi-Database Support**: Connect to PostgreSQL, MySQL, and SQLite databases\n- **Connection Profiles**: Save and manage multiple database connection profiles with encrypted credentials\n- **Database Browser**: Navigate database schemas, tables, and columns\n- **Query Editor**: Execute SQL queries with syntax highlighting and results visualization\n- **Query Pagination**: Built-in support for paginated query results\n- **Export Data**: Export query results to CSV, SQL, or text formats\n- **Query Explanation**: View query execution plans (EXPLAIN)\n- **Secure Storage**: Encrypted password storage for connection profiles\n\n### Architecture\n\nThe application follows a layered architecture:\n\n1. **UI Layer** (Casciian-based TUI)\n   - Main application window with menus\n   - Connection dialog for managing profiles\n   - Database browser for schema exploration\n   - Query editor for SQL execution\n\n2. **Domain/Services Layer**\n   - `ConnectionService`: Manages database connections\n   - `MetadataService`: Database introspection and metadata retrieval\n   - `QueryService`: Query execution with pagination support\n   - `ExportService`: Data export to various formats\n\n3. **Driver/DB Adapters**\n   - `Dialect` interface for database-specific operations\n   - Implementations: `PostgresDialect`, `MySQLDialect`, `SQLiteDialect`\n   - Handles quoting, pagination syntax, EXPLAIN queries, and schema operations\n\n4. **Persistence Layer**\n   - `ProfileStore`: Stores connection profiles in JSON format\n   - `SecretsStore`: Encrypts/decrypts sensitive credentials\n\n## Prerequisites\n\n- Java 21 or later\n- Gradle 9.2.1 or later (included via wrapper)\n- For native image compilation: GraalVM Java 25 with native-image\n- For packaging: fpm (installed via `gem install fpm`)\n\n## Building\n\n### Standard JAR Build\n\n```bash\n./gradlew clean build\n```\n\nThis creates a JAR file in `build/libs/casciianapp-\u003cversion\u003e.jar`\n\n### Running the Application\n\n```bash\n./gradlew installDist\n./build/install/casvizer/bin/casvizer\n```\n\nOr with Java directly:\n\n```bash\nexport JAVA_HOME=/usr/lib/jvm/temurin-21-jdk-amd64\njava -jar build/libs/casvizer-\u003cversion\u003e.jar\n```\n\n### Using Casvizer\n\n1. **Start the application** - You'll see a welcome screen\n2. **Create a connection** - Use `Connection \u003e New Connection` menu\n3. **Browse database** - Use `Tools \u003e Database Browser` to explore schemas and tables\n4. **Execute queries** - Use `Tools \u003e Query Editor` to run SQL queries\n\n### Connection Profiles\n\nConnection profiles are stored in `~/.casvizer/profiles.json` with encrypted passwords. You can set a custom encryption key using the `CASVIZER_MASTER_PASSWORD` environment variable.\n\n### Native Image Compilation (Required for Packaging)\n\nThe DEB and RPM packages require a native binary. You need GraalVM Java 25 with native-image installed.\n\n#### Installing GraalVM\n\nYou can install GraalVM using SDKMAN:\n\n```bash\ncurl -s \"https://get.sdkman.io\" | bash\nsource \"$HOME/.sdkman/bin/sdkman-init.sh\"\nsdk install java 25.0.0.r25-graalce\n```\n\nOr download directly from [GraalVM Downloads](https://www.graalvm.org/downloads/).\n\n#### Building Native Binary\n\n1. Ensure GraalVM Java 25 is installed and configured\n2. Run:\n\n```bash\n./gradlew nativeCompile\n```\n\nThis creates a native executable at `build/native/nativeCompile/casvizer`\n\n### Creating DEB and RPM Packages\n\n**Important:** The packages require a native binary. You must first compile the native binary using GraalVM (see above).\n\n#### Prerequisites for Packaging\n\n```bash\n# Install fpm and dependencies\nsudo apt-get install ruby ruby-dev build-essential rpm\nsudo gem install fpm\n```\n\n#### Building Packages\n\nAfter compiling the native binary, build both DEB and RPM packages:\n\n```bash\n./gradlew buildPackages\n```\n\nOr build individually:\n\n```bash\n./gradlew buildDeb    # Creates DEB package in build/distributions/deb/\n./gradlew buildRpm    # Creates RPM package in build/distributions/rpm/\n```\n\nThe packages will include only:\n- `/usr/bin/casvizer` - Native executable binary\n\n#### Installing the Packages\n\n**Debian/Ubuntu:**\n```bash\nsudo dpkg -i build/distributions/deb/casvizer_0.1.0-1_amd64.deb\nsudo apt-get install -f  # Install dependencies if needed\n```\n\n**RedHat/CentOS/Fedora:**\n```bash\nsudo rpm -ivh build/distributions/rpm/casvizer-0.1.0-1.x86_64.rpm\n```\n\nAfter installation, you can run the application:\n```bash\ncasvizer\n```\n\n## Customizing and Extending\n\nThis database visualization tool is designed to be extended with additional features:\n\n1. **Add new database dialects**: Implement the `Dialect` interface for other databases\n2. **Enhance UI components**: Extend the TUI windows with more advanced features\n3. **Add export formats**: Implement new export formats in `ExportService`\n4. **Customize connection profiles**: Extend `ConnectionProfile` with additional properties\n5. **Add authentication methods**: Support different authentication mechanisms\n\n## Project Structure\n\n```\ncasvizer/\n├── build.gradle              # Gradle build configuration\n├── settings.gradle           # Gradle settings\n├── gradle.properties         # Project version and properties\n├── src/\n│   └── main/\n│       └── java/\n│           └── io/github/crramirez/casvizer/\n│               ├── Casvizer.java          # Main application\n│               ├── model/                 # Domain models\n│               │   ├── ConnectionProfile.java\n│               │   ├── DatabaseConnection.java\n│               │   └── QueryResult.java\n│               ├── dialect/               # Database dialects\n│               │   ├── Dialect.java\n│               │   ├── DialectFactory.java\n│               │   ├── PostgresDialect.java\n│               │   ├── MySQLDialect.java\n│               │   └── SQLiteDialect.java\n│               ├── service/               # Business logic services\n│               │   ├── ConnectionService.java\n│               │   ├── MetadataService.java\n│               │   ├── QueryService.java\n│               │   └── ExportService.java\n│               ├── persistence/           # Data persistence\n│               │   ├── ProfileStore.java\n│               │   └── SecretsStore.java\n│               └── ui/                    # TUI components\n│                   ├── ConnectionDialog.java\n│                   ├── DatabaseBrowserWindow.java\n│                   └── QueryEditorWindow.java\n└── README.md\n```\n\n## License\n\nApache License 2.0 - Copyright 2025 Carlos Rafael Ramirez\n\n## Dependencies\n\n- [Casciian 1.0](https://github.com/crramirez/casciian) - Java Text User Interface library\n- PostgreSQL JDBC Driver 42.7.4\n- MySQL Connector/J 9.1.0\n- SQLite JDBC Driver 3.47.1.0\n- Gson 2.11.0 - JSON parsing\n- Night Config 3.8.1 - TOML parsing\n- Jasypt 1.9.3 - Password encryption\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrramirez%2Fcasvizer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrramirez%2Fcasvizer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrramirez%2Fcasvizer/lists"}