{"record":{"id":"143154513f857a1b","repo":"serverless/serverless","slug":"reference-mode-bucket-not-versioned","errorCode":"REFERENCE_MODE_BUCKET_NOT_VERSIONED","errorMessage":"Deployment bucket \"${this.bucketName}\" must have versioning enabled to use \"codeStorageMode: reference\". Enable versioning on the bucket, or remove the codeStorageMode setting.","messagePattern":"Deployment bucket \"(.+?)\" must have versioning enabled to use \"codeStorageMode: reference\"\\. Enable versioning on the bucket, or remove the codeStorageMode setting\\.","errorType":"exception","errorClass":"ServerlessError","httpStatus":null,"severity":"error","filePath":"packages/serverless/lib/plugins/aws/deploy/lib/ensure-reference-code-storage.js","lineNumber":77,"sourceCode":"      this.buildReferencePolicyStatement(await this.provider.getAccountId()),\n    )\n    await this.provider.request('S3', 'putBucketPolicy', {\n      Bucket: this.bucketName,\n      Policy: JSON.stringify(policy),\n    })\n    log.info(\n      `Granted the Lambda service read access to deployment bucket \"${this.bucketName}\" (self-managed code storage)`,\n    )\n  },\n\n  async validateCustomBucketForReferenceMode() {\n    const versioning = await this.provider.request(\n      'S3',\n      'getBucketVersioning',\n      { Bucket: this.bucketName },\n    )\n    if (versioning.Status !== 'Enabled') {\n      throw new ServerlessError(\n        `Deployment bucket \"${this.bucketName}\" must have versioning enabled to use \"codeStorageMode: reference\". ` +\n          'Enable versioning on the bucket, or remove the codeStorageMode setting.',\n        'REFERENCE_MODE_BUCKET_NOT_VERSIONED',\n      )\n    }\n\n    // Best-effort policy check — the framework never mutates user-owned buckets\n    let result\n    try {\n      result = await this.provider.request('S3', 'getBucketPolicy', {\n        Bucket: this.bucketName,\n      })\n    } catch (error) {\n      const isNoSuchBucketPolicy =\n        error.providerError?.code === 'NoSuchBucketPolicy' ||\n        error.code === 'AWS_S3_GET_BUCKET_POLICY_NO_SUCH_BUCKET_POLICY'\n      if (!isNoSuchBucketPolicy) {\n        // Cannot read the policy for some other reason (e.g. AccessDenied) —","sourceCodeStart":59,"sourceCodeEnd":95,"githubUrl":"https://github.com/serverless/serverless/blob/b9d7ea51c8cce57cff1207964b9b71123673081f/packages/serverless/lib/plugins/aws/deploy/lib/ensure-reference-code-storage.js#L59-L95","documentation":"Error \"Deployment bucket \"${this.bucketName}\" must have versioning enabled to use \"codeStorageMode: reference\". Enable versioning on the bucket, or remove the codeStorageMode setting.\" thrown in serverless/serverless.","triggerScenarios":"Thrown at packages/serverless/lib/plugins/aws/deploy/lib/ensure-reference-code-storage.js:77 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Enable versioning on the deployment bucket (aws s3api put-bucket-versioning) or remove 'codeStorageMode: reference' from the configuration."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"b9d7ea51c8cce57cff1207964b9b71123673081f","analyzedAt":"2026-08-13T04:14:40.386Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}