{"id":47669289,"url":"https://github.com/imagekit-developer/imagekit-uppy-plugin","last_synced_at":"2026-04-02T12:24:39.581Z","repository":{"id":54232530,"uuid":"280611979","full_name":"imagekit-developer/imagekit-uppy-plugin","owner":"imagekit-developer","description":"Uppy plugin for ImageKit destination","archived":false,"fork":false,"pushed_at":"2026-01-23T10:21:08.000Z","size":3719,"stargazers_count":4,"open_issues_count":3,"forks_count":8,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-01-24T03:04:34.074Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/imagekit-developer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-07-18T08:09:10.000Z","updated_at":"2026-01-23T10:21:12.000Z","dependencies_parsed_at":"2023-11-16T09:27:18.753Z","dependency_job_id":"260f980a-65fd-492a-8af5-fce075fdae9e","html_url":"https://github.com/imagekit-developer/imagekit-uppy-plugin","commit_stats":{"total_commits":25,"total_committers":6,"mean_commits":4.166666666666667,"dds":0.56,"last_synced_commit":"76b937229d0578057d402f9c490192bc64ec20c0"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/imagekit-developer/imagekit-uppy-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imagekit-developer%2Fimagekit-uppy-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imagekit-developer%2Fimagekit-uppy-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imagekit-developer%2Fimagekit-uppy-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imagekit-developer%2Fimagekit-uppy-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imagekit-developer","download_url":"https://codeload.github.com/imagekit-developer/imagekit-uppy-plugin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imagekit-developer%2Fimagekit-uppy-plugin/sbom","scorecard":{"id":484776,"data":{"date":"2025-08-11","repo":{"name":"github.com/imagekit-developer/imagekit-uppy-plugin","commit":"3027e6ecdfb854d2492be1b3afcedc2ff570566f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.4,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":5,"reason":"Found 6/11 approved changesets -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 26 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"17 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-w8qv-6jwh-64r5","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-4wf5-vphf-c2xc"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T17:30:29.881Z","repository_id":54232530,"created_at":"2025-08-19T17:30:29.881Z","updated_at":"2025-08-19T17:30:29.881Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31306024,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T09:48:21.550Z","status":"ssl_error","status_checked_at":"2026-04-02T09:48:19.196Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-02T12:24:39.049Z","updated_at":"2026-04-02T12:24:39.570Z","avatar_url":"https://github.com/imagekit-developer.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ImageKit.io plugin for Uppy upload widget\n[![npm version](https://img.shields.io/npm/v/imagekit-uppy-plugin)](https://www.npmjs.com/package/imagekit-uppy-plugin)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Twitter Follow](https://img.shields.io/twitter/follow/imagekitio?label=Follow\u0026style=social)](https://twitter.com/ImagekitIo)\n\nImageKit plugin for [Uppy](https://github.com/transloadit/uppy) allows you to upload files directly to the ImageKit.io media library.\n\n\u003cimg src=\"/assets/imagekit-uppy-demo.gif\"\u003e\n\n## Changelog - SDK Version 2.0.0\n### Breaking changes\n**1. Authentication Process Update:**\n* In version 2.0.0, we have deprecated using the `authenticationEndpoint` parameter. Instead, the SDK now introduces a new parameter named `authenticator`. This parameter expects an asynchronous function that resolves with an object containing the necessary security parameters i.e `signature`, `token`, and `expire`. For implementation guidance, please [see](#using-npm).\n\n# Getting started\nYou can see a hosted demo of using this plugin in a real project [here](https://066dn.sse.codesandbox.io) or [fork sample project codesandbox.io](https://codesandbox.io/s/github/imagekit-samples/uppy-uploader).\n\n* [Sample project](https://github.com/imagekit-samples/uppy-uploader) using this plugin with Dropbox, Drive, and Facebook upload options.\n* ImageKit.io [Upload API](https://docs.imagekit.io/api-reference/upload-file-api/client-side-file-upload) documentation.\n\n# Minimal setup\nThe plugin is published on npm. First, you need to install it using npm or yarn.\n\n### Using yarn\n```\nyarn add imagekit-uppy-plugin\n```\n\n### Using npm\n```\nnpm install imagekit-uppy-plugin --save\n```\n\nThen include it in your application with mandatory parameters, i.e., `id`, `authenticator`, and `publicKey`.\n\n``` javascript\nimport Uppy from '@uppy/core'\nimport '@uppy/core/dist/style.css'\nimport '@uppy/dashboard/dist/style.css'\nimport Dashboard from '@uppy/dashboard'\nimport ImageKitUppyPlugin from \"imagekit-uppy-plugin\"\n\nconst authenticator = async () =\u003e {\n    try {\n        // Code to fetch security parameters for authentication asynchronously\n        // Complete implementation is shown below\n        const securityParameters = await fetchSecurityParameters();\n        return securityParameters; // Return the fetched parameters { signature, token, expire }\n    } catch (error) {\n        throw new Error(\"Authentication request failed: \" + error.message); // Throw an error if authentication fails\n    }\n};\n\nconst uppy = Uppy({ debug: true, autoProceed: false })\n    .use(Dashboard, {\n        inline: true,\n        trigger: '#uppyDashboard', // your element\n    })\n    .use(ImageKitUppyPlugin, {\n        id: 'ImageKit',\n        authenticator,\n        publicKey: \"your_public_key\"\n    })\n```\n\nThe plugin utilises an asynchronous function named `authenticator`, which is intended to be used for retrieving security parameters from your backend. This function is expected to resolve an object containing three fields:`signature`, `token`, and `expire`.\n\n#### Example implementation for `authenticator` using `Fetch API`\n``` javascript\nconst authenticator = async () =\u003e {\n    try {\n\n        // You can pass headers as well and later validate the request source in the backend, or you can use headers for any other use case.\n        const headers = {\n          'Authorization': 'Bearer your-access-token',\n          'CustomHeader': 'CustomValue'\n        };\n\n        const response = await fetch('server_endpoint', {\n            headers\n        });\n        \n        if (!response.ok) {\n            const errorText = await response.text();\n            throw new Error(`Request failed with status ${response.status}: ${errorText}`);\n        }\n\n        const data = await response.json();\n        const { signature, expire, token } = data;\n        return { signature, expire, token };\n    } catch (error) {\n        throw new Error(`Authentication request failed: ${error.message}`);\n    }\n};\n```\n\n*Note*: Avoid generating security parameters on the client side. Always send a request to your backend to retrieve security parameters, as the generation of these parameters necessitates the use of your Imagekit `privateKey`, which must not be included in client-side code. \n\nLearn [how to generate security parameters](https://docs.imagekit.io/api-reference/upload-file-api/client-side-file-upload#how-to-implement-authenticationendpoint-endpoint) on your server using ImageKit.io server-side SDKs.\n\n# Modify file name, destination path or add tags during upload\nBy default, this plugin will send all properties of file meta object as string values with the upload requests. You can control which properties to send as part of the upload request using metaFields field while initializing the ImageKit Uppy plugin. Ideally, you should only allow the supported [upload request parameters](https://docs.imagekit.io/api-reference/upload-file-api/client-side-file-upload#request-structure-multipart-form-data) to avoid any surprises.\n\n```javascript\nconst uppy = Uppy({ debug: true, autoProceed: false })\n    .use(Dashboard, {\n        inline: true,\n        trigger: '#uppyDashboard', // your element\n        metaFields : [\n            {\n                id: 'name', name: 'File name', placeholder: 'Enter the file name'\n            },\n            {\n                id: 'folder', name: 'Folder path', placeholder: 'The destination path e.g. /website-assets'\n            }\n        ]\n    })\n    .use(ImageKitUppyPlugin, {\n        id: 'ImageKit',\n        authenticator,\n        publicKey: \"your_public_key\"\n        metaFields: [\n            \"useUniqueFileName\",\n            \"tags\",\n            \"folder\",\n            \"isPrivateFile\",\n            \"customCoordinates\",\n            \"responseFields\"\n        ]\n    })\n```\n# Enable batch upload\n\nYou can use the `limit` parameter to enable batch processing and set the batch size for upload. By default, all upload requests are sent simultaneously. \n\nIn the following example, the selected files would be uploaded in batches, with each batch having a maximum of 10 files.\n\n``` javascript\nimport Uppy from '@uppy/core'\nimport '@uppy/core/dist/style.css'\nimport '@uppy/dashboard/dist/style.css'\nimport Dashboard from '@uppy/dashboard'\nimport ImageKitUppyPlugin from \"imagekit-uppy-plugin\"\n\nconst uppy = Uppy({ debug: true, autoProceed: false })\n    .use(Dashboard, {\n        inline: true,\n        trigger: '#uppyDashboard', // your element\n    })\n    .use(ImageKitUppyPlugin, {\n        id: 'ImageKit',\n        authenticator,\n        publicKey: \"your_public_key\",\n        limit: 10\n    })\n```\n\n# Support\nIf something doesn't work as expected, please reach out to us at support@imagekit.io or create an issue in this repo. Please try to include a reproducible code sample.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimagekit-developer%2Fimagekit-uppy-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimagekit-developer%2Fimagekit-uppy-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimagekit-developer%2Fimagekit-uppy-plugin/lists"}