---
title: roBrightPackage
slug: develop/robrightpackage
docTags: 
createdAt: 2025-03-11T07:07:17.200Z
---

An *roBrightPackage* object represents a *.zip* file, which can include arbitrary content or be installed on a storage device to provide content and script updates (for example, to distribute updates via USB thumb drives). The JavaScript equivalent is the Node.js Zlib API.

Object Creation: The *roBrightPackage* object is created with a filename parameter that specifies the name of the *.zip* file.

```text
CreateObject("roBrightPackage", filename As String)
```

**Limitations**

The *roBrightPackage* object supports *.zip* files that are smaller than 4GB only.

**Supported Technologies**

- deflate32 (with default options)
- PPMd (with default options)
- WinZip (with "No compression", "Maximum", and "SuperFast" options; other options, including "Enhanced Deflate", are not supported)
- AES encryption

**Unsupported Technologies**

- bzip2
- LZMA
- Deflate64
- zip64 (i.e. the compression software built in to Windows Explorer)

## ifBrightPackage

:::hint{type="info"}
*ifBrightPackage* is a legacy interface. We recommend you use *roAssetPool* instead to achieve better functionality.
:::

### Unpack(path As String) As Void

Extracts the *.zip* file to the specified destination path. Any preexisting files in the target directory will be deleted as part of this operation. Providing a destination path of "SD:/" will wipe all preexisting files from the card and extract the *.zip* contents to the root folder.

### SetPassword(password As String) As Void

Provides the password specified when the *.zip* file was created. This method supports AES 128 and 256 bit encryption, as generated by WinZip. The method returns `false` if the  operation fails.

### GetFailureReason() As String

### UnpackFile(a As String, b As String) As Boolean

This method takes two parameters, `filename` and `path`. The `filename` is the name of the file to unpack and `path` is the location to which the file will be unpacked. The method returns `false` if the unpack operation fails.

**Example**

```text
package = CreateObject("roBrightPackage", "myfile.zip")
setPassOk = package.SetPassword("test")
if not setPassOk then
    print "Failed to set password: "; package.GetFailureReason()
    stop
end if

unpackedDir$ = "SD:/unpacked"
DeleteDirectory(unpackedDir$)

dirOk = CreateDirectory(unpackedDir$)
if not dirOk then
    print "Failed to create directory: "; unpackedDir$
    stop
end if

' Unpack a specific file from the root of myfile.zip
ok = package.UnpackFile("index.html", unpackedDir$)
if not ok then
    print "Failed to unpack file: "; package.GetFailureReason()
    stop
end if

print "File unpacked successfully."
```

## Using roBrightPackage for Content Updates

BrightSign players check storage devices for autorun scripts in the following order:

1. External USB devices 1 through 9
2. SD
3. µSD

In addition to looking for *autorun.brs* scripts, BrightSign players look for *autorun.zip* files that contain the script name *autozip.brs*. If an *autorun.zip* file with an *autozip.brs* file is found, and *autozip.brs* can be decrypted, then the player will execute the *autozip.brs* file.

:::hint{type="danger"}
The *autozip.brs* file cannot reference any external files, as it is the only file to be automatically uncompressed by a BrightSign player prior to execution.
:::

The *autozip.brs* script should unpack the contents of the *autorun.zip* file to an installed storage device and reboot to complete the update:

**Example**

```text
package = CreateObject("roBrightPackage", "SD:/autorun.zip")
package.Unpack("SD:/")
MoveFile("SD:/autorun.zip", "SD:/autorun.zip_invalid")
RebootSystem()
```

### Unpacking Encrypted Archives

If the *autorun.zip* file is encrypted, then the player uses the password stored in the [registry](docId\:YTpSfntswYFMXx8PCqJLf), in the section "security" under the name "autozipkey," to decrypt the file.

**Extended** **Example**

```text
' Content update application


r=CreateObject("roRectangle", 20, 668, 1240, 80)
t=CreateObject("roTextWidget",r,1,2,1)
r=CreateObject("roRectangle", 20, 20, 1200, 40)
t.SetSafeTextRegion(r)
t.SetForegroundColor(&hff303030)
t.SetBackgroundColor(&hffffffff)
t.PushString("Updating content from USB drive, please wait...")


package = CreateObject("roBrightPackage", "autorun.zip")
package.SetPassword("test")
package.Unpack("SD:/")
package = 0


t.Clear()
t.PushString("Update complete - remove USB drive to restart.")


while true
       sleep(1000)


       usb_key = CreateObject("roReadFile", "USB1:/autorun.zip")
       if type(usb_key) <> "roReadFile" then
             a=RebootSystem()
       endif
       usb_key = 0
end while
```

