# Local Provider

> Manage local files, directories, and sensitive files with Pulumi

The Local provider enables you to manage local filesystem resources like files, sensitive files, and command execution using Pulumi. This provider is dynamically bridged from the [Terraform Local Provider](https://registry.terraform.io/providers/hashicorp/local).

## Installation

Install the Local provider package using your preferred package manager:

<Tabs>
  <Tab title="bun">
    ```bash
    bun add pulumi-local
    ```
  </Tab>
  <Tab title="pnpm">
    ```bash
    pnpm add pulumi-local
    ```
  </Tab>
  <Tab title="yarn">
    ```bash
    yarn add pulumi-local
    ```
  </Tab>
  <Tab title="npm">
    ```bash
    npm install pulumi-local
    ```
  </Tab>
</Tabs>

## Configuration

No configuration required - the Local provider works out of the box with your local filesystem.

## Quick Start

```typescript
import * as pulumi from "@pulumi/pulumi";
import * as local from "pulumi-local";

// Create a local file
const config = new local.File("app-config", {
    filename: "/tmp/config.json",
    content: JSON.stringify({
        environment: "production",
        debug: false,
    }),
});

export const configPath = config.filename;
```

## Key Features

### [File Management](/pulumi-any-terraform/providers/local/file)

Create and manage local files with specific content and permissions:

```typescript
const readme = new local.File("readme", {
    filename: "./output/README.md",
    content: "# My Project\n\nGenerated by Pulumi",
});
```

### [Sensitive Files](/pulumi-any-terraform/providers/local/sensitive-file)

Handle files containing sensitive data with restricted permissions:

```typescript
const credentials = new local.SensitiveFile("credentials", {
    filename: "/tmp/credentials.json",
    content: JSON.stringify({
        apiKey: "secret-key-value",
        dbPassword: "secret-password",
    }),
});
```

### Read Existing Files

Read the content of existing files as data sources:

```typescript
const hostname = local.getFile({
    filename: "/etc/hostname",
});
```

### Execute Commands

Run local commands and capture their output:

```typescript
const gitHash = local.getCommand({
    command: "git rev-parse HEAD",
});
```

## Common Use Cases

### Generate Configuration Files

```typescript
import * as pulumi from "@pulumi/pulumi";
import * as local from "pulumi-local";

const stack = pulumi.getStack();

const envFile = new local.File("env-config", {
    filename: `.env.${stack}`,
    content: pulumi.interpolate`NODE_ENV=${stack}
API_URL=https://api.${stack}.example.com
LOG_LEVEL=${stack === "production" ? "warn" : "debug"}`,
});

export const envPath = envFile.filename;
```

### Write Deployment Artifacts

```typescript
import * as pulumi from "@pulumi/pulumi";
import * as local from "pulumi-local";

// Write deployment metadata
const metadata = new local.File("deploy-metadata", {
    filename: "./deploy/metadata.json",
    content: pulumi.interpolate`{
    "stack": "${pulumi.getStack()}",
    "project": "${pulumi.getProject()}",
    "timestamp": "${new Date().toISOString()}"
}`,
});
```

### Store Sensitive Credentials

```typescript
import * as local from "pulumi-local";

const kubeconfig = new local.SensitiveFile("kubeconfig", {
    filename: "~/.kube/config",
    content: kubeconfigContent, // From another provider
});
```

## Resource Types

| Resource | Description |
|----------|-------------|
| [File](/pulumi-any-terraform/providers/local/file) | Create and manage local files |
| [SensitiveFile](/pulumi-any-terraform/providers/local/sensitive-file) | Create files with sensitive content and restricted permissions |

## Data Sources

| Data Source | Description |
|-------------|-------------|
| getFile | Read content of an existing local file |
| getSensitiveFile | Read content of an existing sensitive file |
| getCommand | Execute a local command and capture output |

## Getting Help

- [Terraform Local Provider](https://registry.terraform.io/providers/hashicorp/local/latest/docs)
- [Pulumi Documentation](https://www.pulumi.com/docs/)
- [Configuration Guide](/pulumi-any-terraform/providers/local/configuration)
