{"id":48119,"library":"gulp-jsforce-deploy","title":"gulp-jsforce-deploy","description":"A Gulp plugin for deploying Salesforce metadata packages using JSforce's Metadata API, eliminating the need for the Force.com Migration Tool (Ant/Java). Version 1.1.2 is the latest stable release. It handles zip packaging and deployment with configurable login URL, poll timeout, and API version. Differentiators include pure Node.js implementation, seamless integration with Gulp build pipelines, and no external Java dependencies.","status":"maintenance","version":"1.1.2","language":"javascript","source_language":"en","source_url":null,"tags":["javascript","salesforce","salesforce.com","sfdc","force.com","database.com","gulpplugin","deploy"],"install":[{"cmd":"npm install gulp-jsforce-deploy","lang":"bash","label":"npm"},{"cmd":"yarn add gulp-jsforce-deploy","lang":"bash","label":"yarn"},{"cmd":"pnpm add gulp-jsforce-deploy","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency; plugin is designed for Gulp task runner","package":"gulp","optional":false},{"reason":"Required to zip the deployment package before deploying","package":"gulp-zip","optional":false},{"reason":"Underlying Salesforce API client library","package":"jsforce","optional":false}],"imports":[{"note":"ESM named default export; CommonJS require works but not recommended for new projects","wrong":"const forceDeploy = require('gulp-jsforce-deploy')","symbol":"forceDeploy","correct":"import forceDeploy from 'gulp-jsforce-deploy'"},{"note":"Plugin exports a single function as default export; destructured import will be undefined","wrong":"const { forceDeploy } = require('gulp-jsforce-deploy')","symbol":"default","correct":"const forceDeploy = require('gulp-jsforce-deploy')"}],"quickstart":{"code":"const gulp = require('gulp');\nconst zip = require('gulp-zip');\nconst forceDeploy = require('gulp-jsforce-deploy');\n\ngulp.task('deploy', function() {\n  return gulp.src('./pkg/**', { base: '.' })\n    .pipe(zip('pkg.zip'))\n    .pipe(forceDeploy({\n      username: process.env.SF_USERNAME ?? '',\n      password: process.env.SF_PASSWORD ?? '',\n      loginUrl: process.env.SF_LOGIN_URL ?? 'https://login.salesforce.com',\n      pollTimeout: 120 * 1000,\n      pollInterval: 10 * 1000,\n      version: '55.0'\n    }));\n});","lang":"javascript","description":"Shows complete Gulp task that zips a Salesforce metadata directory and deploys it using credentials from environment variables."},"warnings":[{"fix":"Always pipe .pipe(zip('pkg.zip')) before forceDeploy.","message":"The plugin requires gulp-zip to be piped before forceDeploy; missing zip step will cause deployment failure.","severity":"gotcha","affected_versions":"all"},{"fix":"Use return gulp.src(...).pipe(...).pipe(forceDeploy(...)) or use async/await with promise.","message":"The plugin returns a stream; you must return the stream from the gulp task or call done() to avoid premature exit.","severity":"gotcha","affected_versions":"all"},{"fix":"Explicitly set version to your Salesforce API version (e.g., '55.0').","message":"The plugin uses an older metadata API version (33.0 default); newer API versions may have different metadata types.","severity":"deprecated","affected_versions":"all"},{"fix":"Always check that SF_USERNAME and SF_PASSWORD are set before running.","message":"If username/password are missing or environment variables are not set, the plugin will fail without clear error.","severity":"gotcha","affected_versions":"all"},{"fix":"Use JSforce directly for advanced operations like destructive deployments.","message":"The plugin uses JSforce's Metadata API deploy; it does not support destructive changes or retrieve.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"search_vec":"'1.1.2':28 'ant/java':26 'api':17,47 'build':58 'configur':41 'database.com':70 'depend':64 'deploy':4,9,39,72 'differenti':49 'elimin':18 'extern':62 'force.com':23,69 'gulp':2,6,57 'gulp-jsforce-deploy':1 'gulpplugin':71 'handl':35 'implement':53 'includ':50 'integr':55 'java':63 'javascript':65 'jsforc':3,14 'latest':31 'login':42 'metadata':11,16 'migrat':24 'need':20 'node.js':52 'packag':12,37 'pipelin':59 'plugin':7 'poll':44 'pure':51 'releas':33 'salesforc':10,66 'salesforce.com':67 'seamless':54 'sfdc':68 'stabl':32 'timeout':45 'tool':25 'url':43 'use':13 'version':27,48 'zip':36","created_at":"2026-06-07T16:55:00.846747+00:00","updated_at":"2026-06-07T16:55:00.846747+00:00","problems":[{"fix":"Add .pipe(zip('pkg.zip')) before forceDeploy.","cause":"Missing gulp-zip step before forceDeploy; the plugin expects a zipped stream.","error":"Error: ENOENT: no such file or directory, open 'pkg.zip'"},{"fix":"Provide valid username and password via environment variables or options.","cause":"Incorrect or missing Salesforce credentials.","error":"Error: Invalid login attempt. Make sure you are using a valid username and password."},{"fix":"Set version option to match your Salesforce API version.","cause":"Metadata version mismatch between plugin default (33.0) and Salesforce org.","error":"Error: The requested metadata type is not supported in this organization"},{"fix":"Check package.xml and ensure zip structure is correct (base folder as root).","cause":"Deployment failed; zip might be malformed or package.xml invalid.","error":"Error: Cannot read property 'asyncResultId' of null"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":null,"github":null,"docs":null,"changelog":null,"pypi":null,"npm":"gulp-jsforce-deploy","openapi_spec":null,"status_page":null,"smithery":null,"categories":["devops"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-07","next_check":"2026-09-05","install_tag":null}}