Skip to main content

C2PA Node.js library (deprecated)

[!WARNING] This repository and the c2pa-node package are deprecated. Use c2pa-node-v2 instead.

The c2pa-node repository implements a Node.js API that can:

  • Read and validate C2PA data from media files in supported formats.
  • Add signed manifests to media files in supported formats.

For more information on using the library in an application, see Using the CAI Node library.

Additional documentation:

Prerequisites

To use the C2PA Node library, you must install:

If you need to manage multiple versions of Node on your machine, use a tool such as nvm.

Installation

Installing for use in a client app

Using npm:

$ npm install c2pa-node

Using Yarn:

$ yarn add c2pa-node

Using pnpm:

$ pnpm add c2pa-node

This command will download precompiled binaries for the following systems:

  • Linux x86_64
  • Linux aarch64 (ARM)
  • macOS aarch64 (Apple Silicon)
  • macOS x86_64 (Intel Mac)
  • Windows x86
  • Windows ARM

All other platforms require building a custom binary as described below, since the postinstall step builds the Rust library into a native Node.js module on your machine.

Building custom binaries

For a platform or architecture that does not have a precompiled binary, you must pre-build a custom binary by following these steps:

  1. Install the Rust toolchain.
  2. Run the following commands on the target system or VM:
    cd c2pa-node
    pnpm install
    pnpm build:rust
  3. Copy the binary to a place that is accessible by your application (in this example, it is /path/to/my/application/resources):
    cd /path/to/my/application
    mkdir resources
    cp /path/to/c2pa-node/generated/c2pa.node resources/c2pa.node
  4. Set the the C2PA_LIBRARY_PATH environment variable to the path to the c2pa.node module by entering these commands:
    export C2PA_LIBRARY_PATH=resources/c2pa.node
    npm install c2pa-node
    npm start

Important: C2PA_LIBRARY_PATH must be set while both installing or adding c2pa-node to your app to avoid building the Rust code. It must also be set while running your app so that it loads the bindings from the correct location.