Architecture
This guide explains TablePro’s architecture, design patterns, and how different components work together.Overview
TablePro is built with:- SwiftUI for the user interface
- AppKit for low-level macOS integration
- Swift Concurrency (async/await, actors) for concurrent operations
- Native database libraries for database connectivity
Dependencies
TablePro uses Swift Package Manager (SPM) for third-party dependencies:| Package | Version | Purpose |
|---|---|---|
| CodeEditSourceEditor | 0.15.2+ | Tree-sitter-powered code editor component for the SQL editor |
| Sparkle | 2.x | Auto-update framework with EdDSA signing |
CodeEditSourceEditor bundles a SwiftLint plugin that requires
-skipPackagePluginValidation for CLI builds. See the Building guide for details.Directory Structure
TablePro
Models
Views
ViewModels
Core
Extensions
Theme
Resources
Design Patterns
MVVM Architecture
TablePro uses Model-View-ViewModel (MVVM): Models: Pure data structures (structs, enums)Protocol-Oriented Design
Database drivers follow a protocol:Actor Isolation
Concurrent operations use Swift actors:Factory Pattern
Driver creation uses a factory:Key Components
DatabaseManager
Central manager for database operations:- Manages active sessions
- Coordinates connections/disconnections
- Handles SSH tunnel lifecycle
- Publishes state changes to UI
Database Drivers
Each driver encapsulates database-specific logic:| Driver | Library | Protocol |
|---|---|---|
| MySQLDriver | libmariadb | MySQL wire protocol |
| PostgreSQLDriver | libpq | PostgreSQL protocol |
| SQLiteDriver | Built-in SQLite3 | File-based |
Autocomplete Engine
The autocomplete system:- CompletionEngine: Main entry point
- SQLContextAnalyzer: Parses query context
- SQLSchemaProvider: Provides schema information
- SQLKeywords: SQL keyword definitions
SSH Tunnel Manager
Manages SSH tunnels as an actor:- Port forwarding via system
ssh - Password and key authentication
- Health monitoring
- Automatic cleanup
Data Flow
Connection Flow
Query Execution Flow
State Management
Published Properties
UI state is managed with@Published:
App Storage
Settings use@AppStorage for persistence:
Environment
Shared state via SwiftUI environment:Error Handling
Driver Errors
Each driver defines specific errors:Error Propagation
Errors propagate up through async/await:Testing
Unit Tests
Tests are inTableProTests/:
