How to Use lighty-core

Basic Usage

Step 1: Initialize AppState

use lighty_core::AppState;

const QUALIFIER: &str = "com";
const ORGANIZATION: &str = "MyLauncher";
const APPLICATION: &str = "";

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let _app = AppState::new(
        QUALIFIER.to_string(),
        ORGANIZATION.to_string(),
        APPLICATION.to_string(),
    )?;

    let launcher_dir = AppState::get_project_dirs();

    // launcher_dir contains:
    // - data_dir()  -> game files, instances, versions
    // - cache_dir() -> java runtimes, temporary files
    // - config_dir() -> configuration files

    println!("Data: {}", launcher_dir.data_dir().display());
    println!("Cache: {}", launcher_dir.cache_dir().display());
    println!("Config: {}", launcher_dir.config_dir().display());

    Ok(())
}

Step 2: Use System Detection

Download System

Basic File Download

Download Without Tracking

Hash Verification

Async SHA1 Verification

Sync SHA1 Verification

Archive Extraction

Extract ZIP Archive

Security Features:

  • Path traversal protection

  • Symlink/hardlink rejection

  • Absolute path rejection

  • File size limits (2GB max)

  • Path sanitization

Extract TAR Archives

Macros

Logging Macros

Note: Logging macros require the tracing feature. Without it, they compile to no-ops.

Directory Creation Macros

HTTP Client

The HTTP client is shared across all operations:

Benefits:

  • Connection pooling

  • Shared across entire application

  • Thread-safe

  • Configured for optimal performance

With Events

Error Handling

Feature Flags

Available features:

  • events - Enables CoreEvent emission (requires lighty-event)

  • tracing - Enables logging macros

Exports

In lighty_core:

In lighty_launcher (re-exports):

Last updated