# External Dependencies ## Overview This document describes all external dependencies used in the orderflow backtest system, their purposes, versions, and justifications for inclusion. ## Production Dependencies ### Core Framework Dependencies #### Dash (^2.18.2) - **Purpose**: Web application framework for interactive visualizations - **Usage**: Real-time chart rendering and user interface - **Justification**: Mature Python-based framework with excellent Plotly integration - **Key Features**: Reactive components, built-in server, callback system #### Dash Bootstrap Components (^1.6.0) - **Purpose**: Bootstrap CSS framework integration for Dash - **Usage**: Responsive layout grid and modern UI styling - **Justification**: Provides professional appearance with minimal custom CSS #### Plotly (^5.24.1) - **Purpose**: Interactive charting and visualization library - **Usage**: OHLC candlesticks, volume bars, depth charts, OBI metrics - **Justification**: Industry standard for financial data visualization - **Key Features**: WebGL acceleration, zooming/panning, dark themes ### Data Processing Dependencies #### Pandas (^2.2.3) - **Purpose**: Data manipulation and analysis library - **Usage**: Minimal usage for data structure conversions in visualization - **Justification**: Standard tool for financial data handling - **Note**: Usage kept minimal to maintain performance #### Typer (^0.13.1) - **Purpose**: Modern CLI framework - **Usage**: Command-line argument parsing and help generation - **Justification**: Type-safe, auto-generated help, better UX than argparse - **Key Features**: Type hints integration, automatic validation ### Data Storage Dependencies #### SQLite3 (Built-in) - **Purpose**: Database connectivity for historical data - **Usage**: Read-only access to orderbook and trade data - **Justification**: Built into Python, no external dependencies, excellent performance - **Configuration**: Optimized with immutable mode and mmap ## Development and Testing Dependencies #### Pytest (^8.3.4) - **Purpose**: Testing framework - **Usage**: Unit tests, integration tests, test discovery - **Justification**: Standard Python testing tool with excellent plugin ecosystem #### Coverage (^7.6.9) - **Purpose**: Code coverage measurement - **Usage**: Test coverage reporting and quality metrics - **Justification**: Essential for maintaining code quality ## Build and Package Management #### UV (Package Manager) - **Purpose**: Fast Python package manager and task runner - **Usage**: Dependency management, virtual environments, script execution - **Justification**: Significantly faster than pip/poetry, better lock file format - **Commands**: `uv sync`, `uv run`, `uv add` ## Python Standard Library Usage ### Core Libraries - **sqlite3**: Database connectivity - **json**: JSON serialization for IPC - **pathlib**: Modern file path handling - **subprocess**: Process management for visualization - **logging**: Structured logging throughout application - **datetime**: Date/time parsing and manipulation - **dataclasses**: Structured data types - **typing**: Type annotations and hints - **tempfile**: Atomic file operations - **ast**: Safe evaluation of Python literals ### Performance Libraries - **itertools**: Efficient iteration patterns - **functools**: Function decoration and caching - **collections**: Specialized data structures ## Dependency Justifications ### Why Dash Over Alternatives? - **vs. Streamlit**: Better real-time updates, more control over layout - **vs. Flask + Custom JS**: Integrated Plotly support, faster development - **vs. Jupyter**: Better for production deployment, process isolation ### Why SQLite Over Alternatives? - **vs. PostgreSQL**: No server setup required, excellent read performance - **vs. Parquet**: Better for time-series queries, built-in indexing - **vs. CSV**: Proper data types, much faster queries, atomic transactions ### Why UV Over Poetry/Pip? - **vs. Poetry**: Significantly faster dependency resolution and installation - **vs. Pip**: Better dependency locking, integrated task runner - **vs. Pipenv**: More active development, better performance ## Version Pinning Strategy ### Patch Version Pinning - Core dependencies (Dash, Plotly) pinned to patch versions - Prevents breaking changes while allowing security updates ### Range Pinning - Development tools use caret (^) ranges for flexibility - Testing tools can update more freely ### Lock File Management - `uv.lock` ensures reproducible builds across environments - Regular updates scheduled monthly for security patches ## Security Considerations ### Dependency Scanning - Regular audit of dependencies for known vulnerabilities - Automated updates for security patches - Minimal dependency tree to reduce attack surface ### Data Isolation - Read-only database access prevents data modification - No external network connections required for core functionality - All file operations contained within project directory ## Performance Impact ### Bundle Size - Core runtime: ~50MB with all dependencies - Dash frontend: Additional ~10MB for JavaScript assets - SQLite: Zero overhead (built-in) ### Startup Time - Cold start: ~2-3 seconds for full application - UV virtual environment activation: ~100ms - Database connection: ~50ms per file ### Memory Usage - Base application: ~100MB - Per 1000 OHLC bars: ~5MB additional - Plotly charts: ~20MB for complex visualizations ## Maintenance Schedule ### Monthly - Security update review and application - Dependency version bump evaluation ### Quarterly - Major version update consideration - Performance impact assessment - Alternative technology evaluation ### Annually - Complete dependency audit - Technology stack review - Migration planning for deprecated packages