# Getting Started with RDesk

    # Verify RDesk is installed correctly
    packageVersion("RDesk")
    #> [1] '1.0.4'
    # Check that the example app is bundled (if existing)
    app_path <- system.file("templates/hello", package = "RDesk")
    if (nzchar(app_path)) {
      file.exists(app_path)
    }
    #> [1] TRUE

## The “Last Mile” of R Deployment

Data analysts build powerful tools in R, but sharing them with non-technical users is difficult. Shiny is excellent for web dashboards, but it requires a server and a steady network connection.

RDesk solves this by turning your R code into a native Windows desktop application. It runs as a standalone `.exe` with zero network overhead and no server required.

## 1. Installation

RDesk works out-of-the-box on modern Windows systems. You only need R and Rtools installed.

    # Install from GitHub
    # devtools::install_github("Janakiraman-311/RDesk")
    library(RDesk)

## 2. Your First App (The One-Click Way)

The fastest way to build an RDesk application is using the built-in scaffolding tool. This generates a professional dashboard with a sidebar, KPI cards, and an asynchronous charting engine.

    library(RDesk)

    # Create a professional dashboard in a new directory
    RDesk::rdesk_create_app("MyDashboard")

RDesk Hero Dashboard

Navigate to the `MyDashboard` folder and run `app.R` to see the results.

## 3. Building a Standalone Executable

The core value of RDesk is the ability to turn your R code into a standalone `.exe` that runs on any machine without requiring a pre-installed R version.

> First build note: The initial build takes 3-5 minutes as RDesk downloads and bundles a portable R runtime. Subsequent builds complete in under 30 seconds.

    # Build a portable ZIP bundle
    RDesk::build_app(
      app_dir  = "MyDashboard",
      app_name = "MyProfessionalApp"
    )

The resulting `.zip` file in the `dist/` folder contains exactly what you need to distribute your tool. The end-user simply unzips and runs `MyProfessionalApp.exe`.

### Using renv for reproducibility

If your project uses `renv`, commit your `renv.lock` in the project root. RDesk’s GitHub Actions workflows will automatically restore from that lockfile before building. Additionally, `build_app()` writes a bundle-level `renv.lock` into each distributable when `renv` is active.

## 4. Key Concepts

### Zero-Port IPC

Zero ports, zero firewall issues. Communication happens over standard input/output using a high-speed JSON protocol.

### Async Processing

Use the `async()` wrapper to run heavy R tasks without freezing the UI:

    app$on_message("heavy_task", async(function(msg) {
      Sys.sleep(2) # Simulate work
      list(status = "Done")
    }, app = app))

## Next Steps

- Coming from Shiny — Map your existing Shiny knowledge to the RDesk mental model.
- Cookbook — Common recipes for file dialogs, charts, and native menus.
- Async Guide — Deep dive into background task management.