{
    "componentChunkName": "component---src-templates-markdown-doc-tsx",
    "path": "/0.12.16/updates/2026/update_guide",
    "result": {"data":{"mdx":{"id":"f0ec3420-3014-54ea-ad4a-4cab68374dd2","frontmatter":{"title":"Updating Guide from Salvus 2025.1.x to Salvus 2026.x","images":null},"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"Updating Guide from Salvus 2025.1.x to Salvus 2026.x\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", null, \"Updating Guide from Salvus 2025.1.x to Salvus 2026.x\"), mdx(\"h2\", null, \"Versioning\"), mdx(\"p\", null, \"Starting with 2026.5.0, Salvus uses \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"date-based version numbers\"), \" of the\\nform \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"YYYY.M.P\"), \", where \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"YYYY\"), \" is the year, \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"M\"), \" is the month of the release\\n(not zero-padded), and \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"P\"), \" is the patch level. For example, \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"2026.5.0\"), \" is the\\ninitial May 2026 release, and \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"2026.5.1\"), \" would be a subsequent patch to that\\nrelease.\"), mdx(\"p\", null, \"This replaces the previous \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"YYYY.N.P\"), \" scheme (e.g. \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"2025.1.x\"), \"), where \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"N\"), \" was\\na sequential release counter rather than a calendar month. The new scheme makes\\nit immediately clear when a version was released and simplifies planning around\\nSalvus updates.\"), mdx(\"p\", null, \"Backwards compatibility is ensured between releases unless explicitly stated\\notherwise.\"), mdx(\"h2\", null, \"Users Who Should not Update (yet)\"), mdx(\"p\", null, \"Both, Salvus API and SalvusProject remain fully compatible when transitioning\\nfrom Salvus 2025.1.x to Salvus 2026.x.\"), mdx(\"p\", null, \"However, we have updated the minimum requirements for some of Salvus'\\nfirst-level Python dependencies such as \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"numpy>=2.2.0\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sqlalchemy>2.0\"), \".\\nIn case you cannot update these packages, we recommend continuing with the\\nmaintenance release 2025.1.3.\"), mdx(\"h2\", null, \"Updating Guide\"), mdx(\"p\", null, \"Nothing special needs to be done for the Salvus\", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"Compute\"), \" binaries. Just\\nrunning the Mondaic downloader will update them.\"), mdx(\"p\", null, \"The Python installation requires a bit more work, as, starting with Salvus\\n\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"2026.5\"), \", Salvus now requires \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://numpy.org/\"\n  }, \"Numpy\"), \" version >=2.2 and\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.sqlalchemy.org/\"\n  }, \"SQLAlchemy\"), \" > 2.0.\\n\", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Therefore, we strongly recommend creating a new\\nPython environment\"), \" for Salvus \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"2026.X\"), \" and backing up the old one:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-shell\"\n  }, \"mamba create --name salvus_backup --clone salvus\\nmamba remove --name salvus --all\\n\")), mdx(\"p\", null, \"Once this is done, please follow the \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"../../installation/python_packages\"\n  }, \"usual installation\\ninstructions\"), \" to set\\nup a new environment.\"), mdx(\"h3\", null, \"Required Python Code Changes\"), mdx(\"p\", null, \"Salvus' Python API remains compatible between Salvus 2025.1.x and Salvus 2026.5.0,\\nbut a couple of functions have been flagged for depreciation in a future\\nrelease.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},"site":{"siteMetadata":{"salvusDocVersions":{"current":"2026.5.0"}}}},"pageContext":{"id":"f0ec3420-3014-54ea-ad4a-4cab68374dd2"}},
    "staticQueryHashes": ["1756726491","1865182279","3419370438","3597190305","4112489441","519097329"]}