# Importing and exporting transforms

Share and back up Custom Local JavaScript transforms with .nibit-transform bundles.

Custom Local JavaScript transforms can be exported as `.nibit-transform` files. A bundle can contain one transform or many transforms.

## Who can import and export?

- **Local Pro** can import/export transform bundles in the Android app.
- **Cloud Pro** can import/export transform bundles in Android and the web dashboard, and sync Local JavaScript transforms across devices.
- **Free** users can use built-in local transforms, but cannot import, export, create, or run custom Local JavaScript transforms.

## What is included

Transform bundles include:

- name
- description
- execution kind (`LOCAL_JS`)
- JavaScript source
- optional `forked_from` metadata

Transform bundles do **not** include:

- execution logs
- raw transform input or output
- bytecode caches
- execution count or last-run timestamps
- AI provider credentials or settings

## File format

Nibit uses one bundle-capable schema, even for a single transform:

```json
{
  "schema_version": 1,
  "kind": "nibit_transform_bundle",
  "transforms": [
    {
      "name": "Normalize whitespace",
      "description": "Trim and collapse spaces",
      "execution_kind": "LOCAL_JS",
      "source": "async function transform(input, nibit) {\n  return input.replace(/\\s+/g, ' ').trim()\n}\n",
      "forked_from": null
    }
  ]
}
```

Nibit only treats a JSON file as a transform bundle when `kind` is exactly `"nibit_transform_bundle"`.

## Export from Android

Open the Nibit app, go to **Settings**, and choose **Export transforms**. Save the generated `.nibit-transform` file somewhere safe.

## Import on Android

Use the normal import picker and select a `.nibit-transform` file. Nibit validates the file, imports valid Local JavaScript transforms, and reports any skipped transforms.

## Export from the web dashboard

Cloud Pro users can open **Settings → Export Transforms** in the web dashboard and download `nibit-transforms.nibit-transform`.

## Import in the web dashboard

Cloud Pro users can use the dashboard import card and select a `.nibit-transform` file. The preview shows how many local transforms will be imported and warns about duplicate names.

## Duplicate names and backup identity

`.nibit-transform` imports create new transform rows. If a transform with the same name already exists, Nibit allows the duplicate instead of overwriting your existing transform.

Full Nibit backup restore is different: backups preserve cloud identity when present so a restored cloud transform continues syncing as the same transform instead of creating a duplicate on the next sync.

## Validation rules

A transform is skipped if:

- it is not `LOCAL_JS`
- its name is blank
- its JavaScript source is blank
- its source is larger than **128 KB**

If a bundle itself has an unsupported schema version, unsupported kind, or invalid JSON, Nibit rejects the file before import. An empty bundle is valid and imports as a no-op.
