Immer

npm Build Status Coverage Status code style: prettier OpenCollective OpenCollective Gitpod Ready-to-Code

Create the next immutable state tree by simply modifying the current tree

Winner of the "Breakthrough of the year" React open source award and "Most impactful contribution" JavaScript open source award in 2019

Contribute using one-click online setup

You can use Gitpod (a free online VS Code like IDE) for contributing online. With a single click it will launch a workspace and automatically:

  • clone the immer repo.
  • install the dependencies.
  • run yarn run start.

so that you can start coding straight away.

Open in Gitpod

Documentation

The documentation of this package is hosted at https://immerjs.github.io/immer/

Support

Did Immer make a difference to your project? Join the open collective at https://opencollective.com/immer!

Release notes

https://github.com/immerjs/immer/releases

immerjs/immer

{
"props": {
"initialPayload": {
"allShortcutsEnabled": false,
"path": "/",
"repo": {
"id": 115720575,
"defaultBranch": "main",
"name": "immer",
"ownerLogin": "immerjs",
"currentUserCanPush": false,
"isFork": false,
"isEmpty": false,
"createdAt": "2017-12-29T12:25:47.000Z",
"ownerAvatar": "https://avatars.githubusercontent.com/u/45853199?v=4",
"public": true,
"private": false,
"isOrgOwned": true
},
"currentUser": null,
"refInfo": {
"name": "main",
"listCacheKey": "v0:1696676208.0",
"canEdit": false,
"refType": "branch",
"currentOid": "f6736a4beef727c6e5b41c312ce1b202ad3afb23"
},
"tree": {
"items": [
{
"name": ".codesandbox",
"path": ".codesandbox",
"contentType": "directory"
},
{
"name": ".github",
"path": ".github",
"contentType": "directory"
},
{
"name": ".vscode",
"path": ".vscode",
"contentType": "directory"
},
{
"name": "__performance_tests__",
"path": "__performance_tests__",
"contentType": "directory"
},
{
"name": "__tests__",
"path": "__tests__",
"contentType": "directory"
},
{
"name": "_site",
"path": "_site",
"contentType": "directory"
},
{
"name": "images",
"path": "images",
"contentType": "directory"
},
{
"name": "src",
"path": "src",
"contentType": "directory"
},
{
"name": "website",
"path": "website",
"contentType": "directory"
},
{
"name": ".coveralls.yml",
"path": ".coveralls.yml",
"contentType": "file"
},
{
"name": ".gitignore",
"path": ".gitignore",
"contentType": "file"
},
{
"name": ".prettierrc",
"path": ".prettierrc",
"contentType": "file"
},
{
"name": ".watchmanconfig",
"path": ".watchmanconfig",
"contentType": "file"
},
{
"name": "LICENSE",
"path": "LICENSE",
"contentType": "file"
},
{
"name": "SECURITY.md",
"path": "SECURITY.md",
"contentType": "file"
},
{
"name": "ignoreObseleteSnapshots.js",
"path": "ignoreObseleteSnapshots.js",
"contentType": "file"
},
{
"name": "jest.config.build.js",
"path": "jest.config.build.js",
"contentType": "file"
},
{
"name": "jest.config.build.snapshots.js",
"path": "jest.config.build.snapshots.js",
"contentType": "file"
},
{
"name": "jest.config.js",
"path": "jest.config.js",
"contentType": "file"
},
{
"name": "package.json",
"path": "package.json",
"contentType": "file"
},
{
"name": "readme.md",
"path": "readme.md",
"contentType": "file"
},
{
"name": "tsconfig.json",
"path": "tsconfig.json",
"contentType": "file"
},
{
"name": "tsup.config.ts",
"path": "tsup.config.ts",
"contentType": "file"
},
{
"name": "yarn.lock",
"path": "yarn.lock",
"contentType": "file"
}
],
"templateDirectorySuggestionUrl": null,
"readme": null,
"totalCount": 24,
"showBranchInfobar": false
},
"fileTree": null,
"fileTreeProcessingTime": null,
"foldersToFetch": [],
"treeExpanded": false,
"symbolsExpanded": false,
"isOverview": true,
"overview": {
"banners": {
"shouldRecommendReadme": false,
"isPersonalRepo": false,
"showUseActionBanner": false,
"actionSlug": null,
"actionId": null,
"showProtectBranchBanner": false,
"recentlyTouchedDataChannel": null,
"publishBannersInfo": {
"dismissActionNoticePath": "/settings/dismiss-notice/publish_action_from_repo",
"releasePath": "/immerjs/immer/releases/new?marketplace=true",
"showPublishActionBanner": false
},
"interactionLimitBanner": null,
"showInvitationBanner": false,
"inviterName": null
},
"codeButton": {
"contactPath": "/contact",
"isEnterprise": false,
"local": {
"protocolInfo": {
"httpAvailable": true,
"sshAvailable": null,
"httpUrl": "https://github.com/immerjs/immer.git",
"showCloneWarning": null,
"sshUrl": null,
"sshCertificatesRequired": null,
"sshCertificatesAvailable": null,
"ghCliUrl": "gh repo clone immerjs/immer",
"defaultProtocol": "http",
"newSshKeyUrl": "/settings/ssh/new",
"setProtocolPath": "/users/set_protocol"
},
"platformInfo": {
"cloneUrl": "https://desktop.github.com",
"showVisualStudioCloneButton": false,
"visualStudioCloneUrl": "https://windows.github.com",
"showXcodeCloneButton": false,
"xcodeCloneUrl": "https://developer.apple.com",
"zipballUrl": "/immerjs/immer/archive/refs/heads/main.zip"
}
},
"newCodespacePath": "/codespaces/new?hide_repo_select=true&repo=115720575"
},
"popovers": {
"rename": null,
"renamedParentRepo": null
},
"commitCount": "1,375",
"overviewFiles": [
{
"displayName": "readme.md",
"repoName": "immer",
"refName": "main",
"path": "readme.md",
"preferredFileType": "readme",
"tabName": "README",
"richText": "<article class=\"markdown-body entry-content container-lg\" itemprop=\"text\"><p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"/immerjs/immer/blob/main/images/immer-logo.svg\"><img src=\"/immerjs/immer/raw/main/images/immer-logo.svg\" height=\"200px\" align=\"right\" style=\"max-width: 100%;\"></a></p>\n<h1 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-immer\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#immer\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a>Immer</h1>\n<p dir=\"auto\"><a href=\"https://www.npmjs.com/package/immer\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/ce848adaf400da223478c5468d129c14ac20814bb63d2752c3ef5110564233b8/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f696d6d65722e737667\" alt=\"npm\" data-canonical-src=\"https://img.shields.io/npm/v/immer.svg\" style=\"max-width: 100%;\"></a> <a href=\"https://github.com/immerjs/immer/actions?query=branch%3Amain\"><img src=\"https://github.com/immerjs/immer/actions/workflows/test.yml/badge.svg?branch=main\" alt=\"Build Status\" style=\"max-width: 100%;\"></a> <a href=\"https://coveralls.io/github/immerjs/immer?branch=main\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/93ddf856d895b02176f57e984c4127e0794c9d53c91612119aa8d39c365a53c5/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f696d6d65726a732f696d6d65722f62616467652e7376673f6272616e63683d6d61696e\" alt=\"Coverage Status\" data-canonical-src=\"https://coveralls.io/repos/github/immerjs/immer/badge.svg?branch=main\" style=\"max-width: 100%;\"></a> <a href=\"https://github.com/prettier/prettier\"><img src=\"https://camo.githubusercontent.com/9662b0507f43a0d002dee64a372ee7724ed6bf1e21124511589258eaf6092ff0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f64655f7374796c652d70726574746965722d6666363962342e737667\" alt=\"code style: prettier\" data-canonical-src=\"https://img.shields.io/badge/code_style-prettier-ff69b4.svg\" style=\"max-width: 100%;\"></a> <a href=\"#backers\"><img src=\"https://camo.githubusercontent.com/41177fbbf53e20093c14a3117a7a86e351598cb297f8f4e63efd509615d33b94/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f696d6d65722f6261636b6572732f62616467652e737667\" alt=\"OpenCollective\" data-canonical-src=\"https://opencollective.com/immer/backers/badge.svg\" style=\"max-width: 100%;\"></a> <a href=\"#sponsors\"><img src=\"https://camo.githubusercontent.com/5a1715132bcee024ddc86d7352f893682bccee7a497da839ef9037a83564dd21/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f696d6d65722f73706f6e736f72732f62616467652e737667\" alt=\"OpenCollective\" data-canonical-src=\"https://opencollective.com/immer/sponsors/badge.svg\" style=\"max-width: 100%;\"></a> <a href=\"https://gitpod.io/#https://github.com/immerjs/immer\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/ae79fbb17edaf2aa57ec8688b746de050226ac46d3c6c50a38c9cb3d2c64768c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f476974706f642d52656164792d2d746f2d2d436f64652d626c75653f6c6f676f3d676974706f64\" alt=\"Gitpod Ready-to-Code\" data-canonical-src=\"https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod\" style=\"max-width: 100%;\"></a></p>\n<p dir=\"auto\"><em>Create the next immutable state tree by simply modifying the current tree</em></p>\n<p dir=\"auto\">Winner of the \"Breakthrough of the year\" <a href=\"https://osawards.com/react/\" rel=\"nofollow\">React open source award</a> and \"Most impactful contribution\" <a href=\"https://osawards.com/javascript/\" rel=\"nofollow\">JavaScript open source award</a> in 2019</p>\n<h2 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-contribute-using-one-click-online-setup\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#contribute-using-one-click-online-setup\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a>Contribute using one-click online setup</h2>\n<p dir=\"auto\">You can use Gitpod (a free online VS Code like IDE) for contributing online. With a single click it will launch a workspace and automatically:</p>\n<ul dir=\"auto\">\n<li>clone the immer repo.</li>\n<li>install the dependencies.</li>\n<li>run <code>yarn run start</code>.</li>\n</ul>\n<p dir=\"auto\">so that you can start coding straight away.</p>\n<p dir=\"auto\"><a href=\"https://gitpod.io/from-referrer/\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/95fbab4ac41e62a9f66e6d1d78f8249c418b33f8c7739c4f9c593f953f5362de/68747470733a2f2f676974706f642e696f2f627574746f6e2f6f70656e2d696e2d676974706f642e737667\" alt=\"Open in Gitpod\" data-canonical-src=\"https://gitpod.io/button/open-in-gitpod.svg\" style=\"max-width: 100%;\"></a></p>\n<h2 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-documentation\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#documentation\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a>Documentation</h2>\n<p dir=\"auto\">The documentation of this package is hosted at <a href=\"https://immerjs.github.io/immer/\" rel=\"nofollow\">https://immerjs.github.io/immer/</a></p>\n<h2 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-support\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#support\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a>Support</h2>\n<p dir=\"auto\">Did Immer make a difference to your project? Join the open collective at <a href=\"https://opencollective.com/immer\" rel=\"nofollow\">https://opencollective.com/immer</a>!</p>\n<h2 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-release-notes\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#release-notes\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a>Release notes</h2>\n<p dir=\"auto\"><a href=\"https://github.com/immerjs/immer/releases\">https://github.com/immerjs/immer/releases</a></p>\n</article>",
"loaded": true,
"timedOut": false,
"errorMessage": null,
"headerInfo": {
"toc": [
{
"level": 1,
"text": "Immer",
"anchor": "immer",
"htmlText": "Immer"
},
{
"level": 2,
"text": "Contribute using one-click online setup",
"anchor": "contribute-using-one-click-online-setup",
"htmlText": "Contribute using one-click online setup"
},
{
"level": 2,
"text": "Documentation",
"anchor": "documentation",
"htmlText": "Documentation"
},
{
"level": 2,
"text": "Support",
"anchor": "support",
"htmlText": "Support"
},
{
"level": 2,
"text": "Release notes",
"anchor": "release-notes",
"htmlText": "Release notes"
}
],
"siteNavLoginPath": "/login?return_to=https%3A%2F%2Fgithub.com%2Fimmerjs%2Fimmer"
}
},
{
"displayName": "LICENSE",
"repoName": "immer",
"refName": "main",
"path": "LICENSE",
"preferredFileType": "license",
"tabName": "MIT",
"richText": null,
"loaded": false,
"timedOut": false,
"errorMessage": null,
"headerInfo": {
"toc": null,
"siteNavLoginPath": "/login?return_to=https%3A%2F%2Fgithub.com%2Fimmerjs%2Fimmer"
}
},
{
"displayName": "SECURITY.md",
"repoName": "immer",
"refName": "main",
"path": "SECURITY.md",
"preferredFileType": "security",
"tabName": "Security",
"richText": null,
"loaded": false,
"timedOut": false,
"errorMessage": null,
"headerInfo": {
"toc": null,
"siteNavLoginPath": "/login?return_to=https%3A%2F%2Fgithub.com%2Fimmerjs%2Fimmer"
}
}
],
"overviewFilesProcessingTime": 16.830213999999998
}
},
"appPayload": {
"helpUrl": "https://docs.github.com",
"findFileWorkerPath": "/assets-cdn/worker/find-file-worker-32bb159cc57c.js",
"findInFileWorkerPath": "/assets-cdn/worker/find-in-file-worker-c6704d501c10.js",
"githubDevUrl": null,
"enabled_features": {
"code_nav_ui_events": false,
"copilot_conversational_ux": false,
"copilot_conversational_ux_embedding_update": false,
"copilot_popover_file_editor_header": false,
"copilot_smell_icebreaker_ux": true,
"copilot_workspace": false,
"codeview_firefox_inert": true
}
}
}
}
{
"accept-ranges": "bytes",
"cache-control": "max-age=0, private, must-revalidate",
"content-encoding": "gzip",
"content-security-policy": "default-src 'none'; base-uri 'self'; child-src github.com/assets-cdn/worker/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com api.githubcopilot.com objects-origin.githubusercontent.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.com/assets-cdn/worker/ gist.github.com/assets-cdn/worker/",
"content-type": "text/html; charset=utf-8",
"date": "Mon, 26 Feb 2024 10:57:34 GMT",
"etag": "e9626ad37a8e527d3bb1c763836d29e1",
"referrer-policy": "no-referrer-when-downgrade",
"server": "GitHub.com",
"set-cookie": "logged_in=no; Path=/; Domain=github.com; Expires=Wed, 26 Feb 2025 10:57:34 GMT; HttpOnly; Secure; SameSite=Lax",
"strict-transport-security": "max-age=31536000; includeSubdomains; preload",
"transfer-encoding": "chunked",
"vary": "X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, Accept-Encoding, Accept, X-Requested-With",
"x-content-type-options": "nosniff",
"x-frame-options": "deny",
"x-github-request-id": "D57A:8796F:19B8D47:2484D65:65DC6E9E",
"x-xss-protection": "0"
}