Small tool uploading assets to CDN backend (Google Cloud Storage)

Usage no npm install needed!

<script type="module">
  import finnNoCdnUploader from 'https://cdn.skypack.dev/@finn-no/cdn-uploader';



Small tool uploading assets to CDN backend (Google Cloud Storage)

Build Status Greenkeeper badge


You must either specify key-filename or specify credentials which is a base64 encoded JSON.stringify version of the JSON based keyfile containing credentials used when talking to Google Cloud Storage (GCS).

//base 64 encoded keyfile
const credentials = require('keyfile.json');
const credentialString = JSON.stringify(credentials);
return new Buffer(credentialString).toString('base64');



$ npm install @finn-no/cdn-uploader -g

Actual usage:

$ cdn-uploader -a test-app /tmp/cdn-assets
-- Uploaded assets --

Get help:

$ cdn-uploader -h
cdn-uploader [options] <assetsFolder>

  -a, --app-prefix     Application prefix used in the CDN url[string] [required]
  -k, --key-filename   JSON key file used to authenticate with Google Cloud
                       If not set, the credentials option is used.      [string]
  -c, --credentials    Stringified and base64 encoded version of the JSON key
                       file used to authenticate with Google Cloud Platform.
                       Can also be set as CDN_UPLOADER_CREDENTIALS environment
                       variable                                         [string]
  -b, --bucket-name    Google Cloud Storage bucket to use.
                                              [string] [default: "fiaas-assets"]
  -p, --project-id     Google Cloud Storage projectId.
                                                 [string] [default: "fiaas-gke"]
      --cache-control  Override the cache-control header for the assets
                                   [string] [default: "public, max-age=2592000"]
  -f, --flatten        Flatten filestructure          [boolean] [default: false]
  -n, --dry-run        Print a list of which files would be uploaded   [boolean]
  -r, --resumable      Resumable upload                [boolean] [default: true]
  -V, --validation     Validation for upload           [boolean] [default: true]
  -s, --batch-size     How many files to upload in each batch
                                                         [number] [default: 100]
  -h, -?, --help       Show help                                       [boolean]
  -v, --version        Show version number                             [boolean]

All options can also be set as environment variables, using the CDN_UPLOADER_ prefix. E.g.: CDN_UPLOADER_APP_PREFIX, CDN_UPLOADER_CREDENTIALS, etc.

Excluded files

All files or folder beginning with a "." is automatically excluded (e.g. .gitignore) and will not be uploaded.


You may also override other options if you like (handy for testing)

  • --key-filename - JSON key file used to authenticate with GCP. If not set CDN_UPLOADER_CREDENTIALS environment variable is used.
  • --bucket-name - GCS bucket to use.
  • --project-id - GCS projectId.

You can also use environment variables for these options, just use the prefix CDN_UPLOADER_.

Where does my files end up?

The files uploaded to GCS is made available on the public GCS hosting at:


This is again exposed by our CDN at:


Cache time?

All files uploaded to CDN is configured with Cache-Control: public, max-age=2592000, meaning that clients may cache the assets for up to 30 days.