Download index.html from getreadystack/arangodb-migration-check: direct link, hf CLI and curl.
- Browser
- Download file 56.8 kB
-
https://huggingface.co/spaces/getreadystack/arangodb-migration-check/resolve/main/index.html
- Command line
-
hf download hf://spaces/getreadystack/arangodb-migration-check/index.html
-
curl -L -o index.html https://huggingface.co/spaces/getreadystack/arangodb-migration-check/resolve/main/index.html
56.8 kB
| <html lang="en"> | |
| <head> | |
| <meta charset="utf-8"> | |
| <meta name="viewport" content="width=device-width,initial-scale=1"> | |
| <title>Neo4j End of Life — map dependencies and end of life</title> | |
| <meta name="description" content="This tool finds Neo4j images, licence lines, drivers, and Bolt URIs in project files and dates them against Neo4j end of life."> | |
| <style> | |
| :root{color-scheme:light}body{margin:0;font:15px/1.55 system-ui,-apple-system,"Segoe UI",sans-serif;background:#faf9f5;color:#1a1512} | |
| .wrap{max-width:960px;margin:0 auto;padding:28px 18px 60px}h1{font-size:26px;margin:0 0 6px}.lede{color:#4a403a;margin:0 0 16px} | |
| textarea{width:100%;min-height:260px;font:13px/1.45 ui-monospace,Menlo,Consolas,monospace;padding:12px;border:1px solid #d9d0c4;border-radius:8px;box-sizing:border-box} | |
| .bar{display:flex;gap:10px;align-items:center;margin:12px 0}button{font:600 15px system-ui;padding:10px 18px;border:0;border-radius:8px;background:#1a1512;color:#fff;cursor:pointer} | |
| input[type=date]{font:14px system-ui;padding:8px;border:1px solid #d9d0c4;border-radius:6px} | |
| table{border-collapse:collapse;width:100%;font-size:14px;margin-top:10px}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid #eee;vertical-align:top}th{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#7a6e65} | |
| .sev.error{color:#a8551f;font-weight:700}.sev.warn,.sev.warning{color:#96691f}.ok{color:#2a6446;font-weight:600}.sum{font-weight:600} | |
| .note{font-size:13px;color:#7a6e65;margin-top:18px}#paid{margin-top:22px;padding:14px 16px;border:1px solid #e2d8cb;border-radius:10px;background:#fffdfa} | |
| </style> | |
| <script data-grow-initializer="">!(function(){window.growMe||((window.growMe=function(e){window.growMe._.push(e);}),(window.growMe._=[]));var e=document.createElement("script");(e.type="text/javascript"),(e.src="https://faves.grow.me/main.js"),(e.defer=!0),e.setAttribute("data-grow-faves-site-id","U2l0ZTphZjljMzgyMC0yMmU5LTRhYjgtYTIxNS03OTRhMGY1N2ExYzM=");var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t);})();</script> | |
| <style data-yj-mfit="1">#out{max-width:100%}#out td,#out th{overflow-wrap:break-word}#out th{white-space:nowrap}#out pre{white-space:pre-wrap;overflow-wrap:anywhere}#out code{white-space:pre-wrap;overflow-wrap:break-word}@media (max-width:640px){#out td,#out th{overflow-wrap:anywhere}#out th{white-space:normal}table{display:block;max-width:100%;overflow-x:auto}pre{max-width:100%;overflow-x:auto}code,a{overflow-wrap:anywhere}img,svg,video,canvas,iframe{max-width:100%}textarea,input,select{max-width:100%;box-sizing:border-box}.yj-lgbar{position:static;justify-content:flex-end;margin:0 0 10px}h1,h2,h3,h4,p,li,dd,dt,blockquote,figcaption,summary,label,.res,.lead{overflow-wrap:anywhere}label{max-width:100%;box-sizing:border-box}#out table:not(:has(tr>:nth-child(4))){display:table;table-layout:fixed;width:100%}#out table:has(tr>:nth-child(4)),#out table:has(tr>:nth-child(4)) tbody,#out table:has(tr>:nth-child(4)) tr,#out table:has(tr>:nth-child(4)) td{display:block;width:auto;overflow:visible}#out table:has(tr>:nth-child(4)) thead{display:none}#out table:has(tr>:nth-child(4)) tr{padding:10px 0;border-bottom:1px solid rgba(128,128,128,.28)}#out table:has(tr>:nth-child(4)) td{border:0;padding:1px 0}#out table:has(tr>:nth-child(4)) td:nth-child(-n+3){display:inline-block;margin-right:10px;font-size:12px;opacity:.78}}</style> | |
| <!--yj-canon-s101--><link rel="canonical" href="https://getreadystack.com/tools/arangodb-migration-check"><!--yj-trust-org-s191--><script type="application/ld+json" data-yj="yj-trust-org">{"@context": "https://schema.org", "@type": "Organization", "name": "ReadyStack", "url": "https://getreadystack.com/", "logo": "https://getreadystack.com/branding/readystack_profile.png", "email": "support@getreadystack.com", "contactPoint": {"@type": "ContactPoint", "contactType": "customer support", "email": "support@getreadystack.com", "availableLanguage": ["English", "German", "Japanese", "Spanish", "Portuguese"]}}</script><!--/yj-trust-org-s191--></head> | |
| <body> | |
| <div class="wrap"> | |
| <h1>Neo4j End of Life — map dependencies and end of life</h1> | |
| <p class="lede">Moving off Neo4j? Finds every Neo4j image, enterprise licence line, driver and Bolt URI in compose, Dockerfile, Helm, package and .env files, dates each against Neo4j end of life, and gives the ArangoDB, Memgraph or FalkorDB line. Runs entirely in your browser — nothing is uploaded.</p> | |
| <textarea id="src" spellcheck="false"># docker-compose.yml — product graph stack (sample) | |
| services: | |
| graph: | |
| image: neo4j:2026.06 | |
| ports: | |
| - "7474:7474" | |
| - "7687:7687" | |
| environment: | |
| NEO4J_AUTH: neo4j/change-me | |
| graph-legacy: | |
| image: neo4j:4.4.48-enterprise | |
| environment: | |
| NEO4J_ACCEPT_LICENSE_AGREEMENT: "yes" | |
| graph-test: | |
| image: neo4j:latest | |
| graph-reports: | |
| image: neo4j:5.26.12 | |
| api: | |
| build: ./api | |
| environment: | |
| GRAPH_URI: neo4j://graph:7687 | |
| depends_on: | |
| - graph</textarea> | |
| <div class="bar"><button id="go">Check</button><label>as of <input type="date" id="today"></label></div> | |
| <div id="out" aria-live="polite"></div> | |
| <div id="paid"><strong>Free here:</strong> Scan the open file: every Neo4j image, licence line, driver and Bolt URI with its line, its end-of-life date and the ArangoDB, Memgraph or FalkorDB replacement line.. <strong>In the editor:</strong> Whole-workspace migration plan with each Neo4j item mapped to its replacement, a dated end-of-life exposure report and a CI gate that fails builds adding new Neo4j use. — that part asks for a licence key.</div> | |
| <p id="buy"><a href="https://getreadystack.com/api/buy/cl/polar_cl_guhn96Rdd7HDTzyonR6ZA79xMHJBGWifxWzWg39JiFP">Workspace migration plan, dated exposure report and CI gate — $29 once</a> · one licence key per person or team seat. Staying on managed Neo4j: AuraDB Business Critical from $0.20/GB/hour (neo4j.com/pricing).</p> | |
| <p class="note">Same engine as the VS Code extension, byte for byte.</p> | |
| </div> | |
| <script>var AQ_RULES = [ | |
| { | |
| "id": "NJ01", | |
| "check": "neo4j-image-end-of-life", | |
| "sev": "error", | |
| "kind": "image-eol", | |
| "eol_table": { | |
| "2026.09": null, | |
| "2026.08": "2026-09-21", | |
| "2026.07": "2026-09-10", | |
| "2026.06": "2026-07-30", | |
| "2026.05": "2026-07-08", | |
| "2026.04": "2026-05-28", | |
| "2026.03": "2026-04-23", | |
| "2026.02": "2026-04-02", | |
| "2026.01": "2026-03-06", | |
| "2025.12": "2026-02-03", | |
| "2025.11": "2026-01-16", | |
| "2025.10": "2025-12-19", | |
| "2025.09": "2025-10-30", | |
| "2025.08": "2025-09-29", | |
| "2025.07": "2025-08-15", | |
| "2025.06": "2025-07-31", | |
| "2025.05": "2025-07-02", | |
| "2025.04": "2025-06-03", | |
| "2025.03": "2025-04-30", | |
| "2025.02": "2025-03-27", | |
| "2025.01": "2025-02-27", | |
| "5.26": "2028-06-06", | |
| "5.25": "2024-12-06", | |
| "5.24": "2024-10-31", | |
| "5.23": "2024-09-27", | |
| "5.22": "2024-08-22", | |
| "5.21": "2024-07-24", | |
| "5.20": "2024-06-28", | |
| "5.19": "2024-05-23", | |
| "5.18": "2024-04-12", | |
| "5.17": "2024-03-13", | |
| "5.16": "2024-02-23", | |
| "5.15": "2024-01-22", | |
| "5.14": "2023-12-15", | |
| "5.13": "2023-11-24", | |
| "5.12": "2023-10-23", | |
| "5.11": "2023-09-14", | |
| "5.10": "2023-08-15", | |
| "5.9": "2023-07-19", | |
| "5.8": "2023-06-15", | |
| "5.7": "2023-05-16", | |
| "5.6": "2023-04-20", | |
| "5.5": "2023-03-24", | |
| "5.4": "2023-02-16", | |
| "5.3": "2023-01-26", | |
| "5.2": "2022-12-15", | |
| "5.1": "2022-11-21", | |
| "4.4": "2025-11-30", | |
| "4.3": "2022-12-16", | |
| "4.2": "2022-05-16", | |
| "4.1": "2021-12-22", | |
| "4.0": "2021-07-14", | |
| "3.5": "2022-05-27", | |
| "3.4": "2020-03-31", | |
| "3.3": "2019-04-28", | |
| "3.2": "2018-11-30", | |
| "3.1": "2018-06-13", | |
| "3.0": "2017-10-31", | |
| "2.3": "2017-04-21", | |
| "2.2": "2016-09-25", | |
| "2.1": "2015-11-29", | |
| "2.0": "2015-06-11", | |
| "1.9": "2014-11-21", | |
| "1.8": "2014-03-28", | |
| "1.7": "2013-10-18", | |
| "1.6": "2013-07-22", | |
| "1.5": "2013-03-09", | |
| "1.4": "2013-01-08", | |
| "1.3": "2012-09-12", | |
| "1.2": "2012-06-29", | |
| "1.1": "2012-01-30", | |
| "1.0": "2011-08-23" | |
| }, | |
| "as_of_source": "2026-10-11", | |
| "msg": "Neo4j {cycle} image: that release line reached end of life on {eol}, so it gets no more fixes. Only the newest monthly line and the 5.26 LTS line are supported.", | |
| "fix": "image: arangodb:3.12 (or memgraph/memgraph:3.13.2 · falkordb/falkordb:6.0.2)", | |
| "source": "https://endoflife.date/neo4j" | |
| }, | |
| { | |
| "id": "NJ02", | |
| "check": "neo4j-image-lts-526", | |
| "sev": "info", | |
| "kind": "image-lts", | |
| "lts_eol": "2028-06-06", | |
| "warn_days": 365, | |
| "msg": "Neo4j {cycle} image: the 5.26 LTS line is supported until {eol} ({days} days from {today}). It is the only Neo4j LTS line endoflife.date still lists as supported.", | |
| "fix": "image: arangodb:3.12 (or memgraph/memgraph:3.13.2 · falkordb/falkordb:6.0.2)", | |
| "source": "https://endoflife.date/neo4j" | |
| }, | |
| { | |
| "id": "NJ03", | |
| "check": "neo4j-image-floating-tag", | |
| "sev": "warn", | |
| "kind": "image-floating", | |
| "msg": "Neo4j image with tag \"{tag}\": it moves to a new monthly release line, and each line lost support when the next one shipped (2026.08 ended {prev_eol}). Pin a version or move off it.", | |
| "fix": "image: arangodb:3.12 (or memgraph/memgraph:3.13.2 · falkordb/falkordb:6.0.2)", | |
| "source": "https://endoflife.date/neo4j" | |
| }, | |
| { | |
| "id": "NJ04", | |
| "check": "neo4j-image-monthly-line", | |
| "sev": "info", | |
| "kind": "image-current", | |
| "msg": "Neo4j {cycle} image: supported today, but each monthly line loses support when the next one ships (2026.08 ended {prev_eol}). Pin 5.26 LTS or plan the move.", | |
| "fix": "image: arangodb:3.12 (or memgraph/memgraph:3.13.2 · falkordb/falkordb:6.0.2)", | |
| "source": "https://endoflife.date/neo4j" | |
| }, | |
| { | |
| "id": "NJ05", | |
| "check": "neo4j-enterprise-licence-line", | |
| "sev": "warn", | |
| "kind": "licence", | |
| "msg": "NEO4J_ACCEPT_LICENSE_AGREEMENT={val}: this container runs Neo4j Enterprise Edition under the Neo4j commercial licence agreement (\"eval\" = evaluation only). Production use needs a licence bought from Neo4j.", | |
| "fix": "remove the line and run arangodb:3.12 (or memgraph/memgraph:3.13.2 · falkordb/falkordb:6.0.2)", | |
| "source": "https://github.com/neo4j/docker-neo4j" | |
| }, | |
| { | |
| "id": "NJ06", | |
| "check": "neo4j-bolt-uri", | |
| "sev": "info", | |
| "kind": "uri", | |
| "msg": "Neo4j connection URI {uri}: ArangoDB does not speak Bolt; it serves HTTP on port 8529. Memgraph accepts Bolt on port 7687, so this URI only needs a new host there.", | |
| "fix": "http://arangodb:8529 (or bolt://memgraph:7687)", | |
| "source": "https://hub.docker.com/_/arangodb" | |
| }, | |
| { | |
| "id": "NJ07", | |
| "check": "neo4j-plugins-apoc", | |
| "sev": "warn", | |
| "kind": "apoc", | |
| "msg": "Neo4j plugin list with APOC: apoc.* procedures are a Neo4j plugin. ArangoDB runs AQL, not Cypher, so every apoc.* call and Cypher query behind this line needs a rewrite.", | |
| "fix": "list each apoc.* call site, rewrite as AQL (ArangoDB) before switching images", | |
| "source": "https://github.com/neo4j/docker-neo4j" | |
| }, | |
| { | |
| "id": "NJ08", | |
| "check": "neo4j-driver-js", | |
| "sev": "info", | |
| "kind": "dep", | |
| "rx": "\"neo4j-driver(?:-lite)?\"\\s*:", | |
| "msg": "JavaScript Neo4j driver (neo4j-driver): ArangoDB needs its own client; Memgraph keeps this Bolt driver.", | |
| "fix": "\"arangojs\": \"^10\"", | |
| "source": "https://github.com/arangodb/arangojs" | |
| }, | |
| { | |
| "id": "NJ09", | |
| "check": "neo4j-driver-python", | |
| "sev": "info", | |
| "kind": "dep", | |
| "rx": "^\\s*[\"']?(?:neo4j|neo4j-driver|py2neo)(?:\\[[^\\]]*\\])?\\s*(?:[=\u003c\u003e~!]=?\\s*[\\w.*]+[^\"']*)?[\"']?\\s*,?\\s*(?:#.*)?$", | |
| "msg": "Python Neo4j driver: ArangoDB needs its own client; Memgraph keeps the neo4j Bolt driver.", | |
| "fix": "python-arango", | |
| "source": "https://github.com/arangodb/python-arango" | |
| }, | |
| { | |
| "id": "NJ10", | |
| "check": "neo4j-driver-java", | |
| "sev": "info", | |
| "kind": "dep", | |
| "rx": "org\\.neo4j(?:\\.driver)?\\b|neo4j-java-driver|spring-boot-starter-data-neo4j", | |
| "msg": "Java Neo4j driver or Spring Data Neo4j: ArangoDB needs its own driver; Memgraph keeps the Bolt Java driver.", | |
| "fix": "com.arangodb:arangodb-java-driver", | |
| "source": "https://github.com/arangodb/arangodb-java-driver" | |
| }, | |
| { | |
| "id": "NJ11", | |
| "check": "neo4j-driver-go", | |
| "sev": "info", | |
| "kind": "dep", | |
| "rx": "github\\.com/neo4j/neo4j-go-driver", | |
| "msg": "Go Neo4j driver: ArangoDB needs its own client; Memgraph keeps this Bolt driver.", | |
| "fix": "github.com/arangodb/go-driver/v2", | |
| "source": "https://github.com/arangodb/go-driver" | |
| }, | |
| { | |
| "id": "NJ12", | |
| "check": "neo4j-driver-dotnet", | |
| "sev": "info", | |
| "kind": "dep", | |
| "rx": "Include=\"Neo4j\\.Driver", | |
| "msg": ".NET Neo4j driver (Neo4j.Driver): ArangoDB needs its own client; Memgraph keeps this Bolt driver.", | |
| "fix": "\u003cPackageReference Include=\"ArangoDBNetStandard\" /\u003e", | |
| "source": "https://github.com/arangodb/arangodb-net-standard" | |
| }, | |
| { | |
| "id": "NJ13", | |
| "check": "neo4j-helm-chart", | |
| "sev": "info", | |
| "kind": "dep", | |
| "rx": "helm\\.neo4j\\.com", | |
| "msg": "Neo4j Helm chart repository: the chart deploys the Neo4j image lines checked above.", | |
| "fix": "ArangoDB Kubernetes operator (kube-arangodb)", | |
| "source": "https://github.com/arangodb/kube-arangodb" | |
| } | |
| ];</script> | |
| <script>// ArangoDB Migration Check engine: finds Neo4j images, licence lines, Bolt URIs and drivers, dates each against Neo4j end of life. | |
| // Same file runs in Node (VS Code extension, verify) and in the browser (free web page). | |
| (function (root) { | |
| const RULES = (typeof module !== 'undefined') ? require('./rules.json') : root.AQ_RULES; | |
| const byKind = k => RULES.filter(r => r.kind === k); | |
| const one = k => byKind(k)[0]; | |
| const IMAGE = /(?:^\s*(?:-\s*)?image\s*[:=]\s*|^\s*FROM\s+(?:--platform=\S+\s+)?|"image"\s*:\s*)["']?(?:docker\.io\/)?(?:library\/)?neo4j(?::([\w.-]+))?["']?(?:\s|$|#|,)/i; | |
| const LICENCE = /NEO4J_ACCEPT_LICENSE_AGREEMENT\s*[:=]\s*["']?(\w+)/; | |
| const URI = /\b((?:bolt|neo4j)(?:\+s|\+ssc)?:\/\/[\w.\-:@]+)/i; | |
| const APOC = /NEO4J_PLUGINS\s*[:=].*apoc|NEO4JLABS_PLUGINS\s*[:=].*apoc/i; | |
| function fill(s, vars) { return s.replace(/\{(\w+)\}/g, (_, k) => vars[k] != null ? vars[k] : ''); } | |
| function days(a, b) { return Math.round((Date.parse(b) - Date.parse(a)) / 86400000); } | |
| function push(out, r, i, lines, vars, sev) { | |
| out.push({ check: r.check, id: r.id, sev: sev || r.sev, msg: fill(r.msg, vars), fix: r.fix, source: r.source, line: i + 1, text: lines[i].trim() }); | |
| } | |
| // tag -> release cycle: "2026.06.0-enterprise" -> 2026.06 · "5.26.12" -> 5.26 · "5" -> 5.26 (newest 5.x) · "4.4-enterprise" -> 4.4 | |
| function cycleOf(tag) { | |
| if (!tag || /^(latest|enterprise|community|ubi\d*|bullseye|trixie)$/i.test(tag)) return null; | |
| const m = tag.match(/^(\d{4})\.(\d{2})/) || tag.match(/^(\d)\.(\d+)/); | |
| if (m) return m[1] + '.' + m[2]; | |
| if (/^5(?:-|$)/.test(tag)) return '5.26'; | |
| if (/^4(?:-|$)/.test(tag)) return '4.4'; | |
| return null; | |
| } | |
| function image(out, i, lines, tag, today) { | |
| const eolR = one('image-eol'), table = eolR.eol_table, prev_eol = table['2026.08']; | |
| const cycle = cycleOf(tag); | |
| if (!cycle) return push(out, one('image-floating'), i, lines, { tag: tag || 'latest', prev_eol }); | |
| if (cycle === '5.26') { | |
| const r = one('image-lts'), left = days(today, r.lts_eol); | |
| const sev = left <= 0 ? 'error' : left <= r.warn_days ? 'warn' : r.sev; | |
| return push(out, r, i, lines, { cycle, eol: r.lts_eol, days: Math.max(left, 0), today }, sev); | |
| } | |
| const eol = table[cycle]; | |
| if (eol && eol <= today) return push(out, eolR, i, lines, { cycle, eol }); | |
| return push(out, one('image-current'), i, lines, { cycle, prev_eol }, eol && days(today, eol) <= 30 ? 'warn' : null); | |
| } | |
| function check(text, opts) { | |
| const today = ((opts && opts.today) || new Date().toISOString()).slice(0, 10); | |
| const lines = String(text || '').split(/\r?\n/); | |
| const deps = byKind('dep').map(r => [r, new RegExp(r.rx, 'i')]); | |
| const out = []; | |
| lines.forEach((l, i) => { | |
| if (/^\s*(#|\/\/|<!--)/.test(l)) return; | |
| let m; | |
| if ((m = l.match(IMAGE))) return image(out, i, lines, m[1], today); | |
| if ((m = l.match(LICENCE))) return push(out, one('licence'), i, lines, { val: m[1] }); | |
| if (APOC.test(l)) return push(out, one('apoc'), i, lines, {}); | |
| if ((m = l.match(URI))) return push(out, one('uri'), i, lines, { uri: m[1] }); | |
| const d = deps.find(([, rx]) => rx.test(l)); | |
| if (d) push(out, d[0], i, lines, {}); | |
| }); | |
| return { findings: out, today, rules: RULES.length }; | |
| } | |
| const api = { engine: { check }, RULES, RULE_COUNT: RULES.length, cycleOf }; | |
| if (typeof module !== 'undefined') module.exports = api; | |
| root.AQENGINE = api; | |
| })(typeof window !== 'undefined' ? window : globalThis); | |
| </script> | |
| <script>// ⛔뼈대 — kit/scaffold.py 가 찍는다 (s143). findings [{check,sev,msg,line?}] → 글/HTML. 같은 파일이 Node 와 브라우저에서 산다. | |
| ; | |
| function escapeHtml(s) { return String(s == null ? '' : s).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"'); } | |
| function summaryLine(res) { | |
| const f = (res && res.findings) || []; const e = f.filter(function (x) { return String(x.sev || 'error').toLowerCase().startsWith('err'); }).length; | |
| return f.length ? (f.length + ' finding' + (f.length === 1 ? '' : 's') + ' (' + e + ' error' + (e === 1 ? '' : 's') + ')') : 'Clean — no findings.'; | |
| } | |
| function toText(res, label) { | |
| const f = (res && res.findings) || []; | |
| const lines = ['== ' + (label || '') + ' — ' + summaryLine(res)]; | |
| f.forEach(function (x) { lines.push(' ' + String(x.sev || 'error').toUpperCase().slice(0, 4) + ' ' + (x.line ? 'L' + x.line + ' ' : '') + (x.check || x.id || '') + ' ' + (x.msg || x.message || '')); }); | |
| return lines.join('\n'); | |
| } | |
| function toHtml(res) { | |
| const f = (res && res.findings) || []; | |
| if (!f.length) return '<p class="ok">' + escapeHtml(summaryLine(res)) + '</p>'; | |
| const rows = f.map(function (x) { return '<tr><td class="sev ' + escapeHtml(String(x.sev || 'error')) + '">' + escapeHtml(String(x.sev || 'error')) + '</td><td>' + (x.line ? 'L' + escapeHtml(x.line) : '') + '</td><td><code>' + escapeHtml(x.check || x.id || '') + '</code></td><td>' + escapeHtml(x.msg || x.message || '') + '</td></tr>'; }).join(''); | |
| return '<p class="sum">' + escapeHtml(summaryLine(res)) + '</p><table><thead><tr><th>Level</th><th>Line</th><th>Check</th><th>What</th></tr></thead><tbody>' + rows + '</tbody></table>'; | |
| } | |
| var AQREPORT = { escapeHtml: escapeHtml, summaryLine: summaryLine, toText: toText, toHtml: toHtml }; | |
| if (typeof module !== 'undefined' && module.exports) module.exports = AQREPORT; | |
| else window.AQREPORT = AQREPORT; | |
| </script> | |
| <script> | |
| (function(){ | |
| var src=document.getElementById('src'), out=document.getElementById('out'), go=document.getElementById('go'), today=document.getElementById('today'); | |
| today.value=new Date().toISOString().slice(0,10); | |
| function run(){ try { var res=window.AQENGINE.engine.check(src.value,{today:today.value}); out.innerHTML=window.AQREPORT.toHtml(res); } catch(e){ out.innerHTML='<p class="sev error">Could not run: '+String(e.message||e)+'</p>'; } } | |
| go.onclick=run; if (src.value.trim()) run(); | |
| })(); | |
| </script> | |
| <section data-yj-install="free" style="margin:2rem auto 1rem;max-width:46rem;padding:1.25rem 1.25rem;border:1px solid #cfe3d6;border-radius:12px;background:#f6fbf8;font:16px/1.6 system-ui,-apple-system,Segoe UI,sans-serif"><h2 style="margin:0 0 .4rem;font-size:1.2rem">Install free</h2><p style="margin:0 0 .8rem;color:#41505f">Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.</p><a href="https://marketplace.visualstudio.com/items?itemName=ReadyStack.arangodb-migration-check" rel="noopener" data-yj-install-door="mp" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'arangodb-migration-check',src:'mp',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">VS Code Marketplace</a><a href="https://open-vsx.org/extension/readystack/arangodb-migration-check" rel="noopener" data-yj-install-door="ovsx" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'arangodb-migration-check',src:'ovsx',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">Open VSX (Cursor, VSCodium)</a><pre style="margin:.5rem 0 0;padding:.6rem .8rem;background:#f3f5f8;border-radius:8px;font-size:.9rem;overflow:auto">ext install ReadyStack.arangodb-migration-check</pre><p style="margin:.6rem 0 0;font-size:.92rem;color:#41505f"><a href="https://getreadystack.com/api/buy/team" rel="nofollow" style="color:#0f7b3f;text-decoration:underline">Team? One key for every ReadyStack linter, 5 seats, $149 once</a></p></section> | |
| <section data-yj-alert="rule" style="margin:1rem auto 1.5rem;max-width:46rem;padding:1.1rem 1.25rem;border:1px solid #d9dee6;border-radius:12px;background:#fbfcfd;font:15px/1.55 system-ui,-apple-system,Segoe UI,sans-serif"><b style="font-size:1.05rem">Get one email when this rule changes</b><div style="opacity:.78;margin:.35rem 0 .8rem">We watch the regulation and vendor sources behind ArangoDB Migration Check: Neo4j End-of-Life Map every day. When a rule changes, you get a single email with what changed and the updated check. No newsletter.</div><div style="display:flex;gap:8px;flex-wrap:wrap"><input id="yjae" type="email" placeholder="you@example.com" style="flex:1;min-width:210px;padding:11px 13px;border:1px solid rgba(140,150,165,.34);border-radius:8px;background:#fff;color:inherit"><button id="yjab" style="padding:11px 18px;border-radius:8px;border:0;cursor:pointer;background:#0f7b3f;color:#fff;font:600 15px system-ui,sans-serif">Notify me</button></div><div id="yjao" hidden style="margin-top:.6rem;color:#0f7b3f">You're on the list. One email when it changes.</div><script>(function(){var b=document.getElementById("yjab"),e=document.getElementById("yjae");if(!b||!e)return;b.addEventListener("click",function(){var v=e.value.trim();if(!/.+@.+\..+/.test(v))return;try{localStorage.setItem("yj_em","1");}catch(_){}fetch(location.origin+"/api/subscribe",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:v,slug:"arangodb-migration-check",lang:"en",source:"rule_alert"+((b.closest&&b.closest("section")&&b.closest("section").getAttribute("data-yj-moved"))?"_at_result":"")})}).then(function(r){var o=document.getElementById("yjao");o.hidden=false;if(!r.ok){o.textContent="Could not save - please try again.";}}).catch(function(){var o=document.getElementById("yjao");o.hidden=false;o.textContent="Could not save - please try again.";});});})();</script><script>(function(){var e=document.getElementById("yjae"),s=e&&e.closest?e.closest("section"):null,o=document.getElementById("out");if(!s||!o)return;var d=false;function mv(ev){if(d)return;if(ev&&ev.target&&s.contains(ev.target))return;d=true;var b=o;while(b.parentNode&&b.parentNode!==document.body&&b.parentNode.tagName!=="MAIN"&&b.parentNode.tagName!=="ARTICLE")b=b.parentNode;if(!b.parentNode||b===s||b.contains(s))return;try{b.parentNode.insertBefore(s,b.nextSibling);s.setAttribute("data-yj-moved","1");}catch(_){}}document.addEventListener("input",mv,true);document.addEventListener("change",mv,true);document.addEventListener("click",function(ev){var b=ev.target&&ev.target.closest?ev.target.closest("button,input[type=submit]"):null;if(b&&!b.closest("[data-yj],[data-yj-cta],[data-yj-install],[data-yj-alert],.yj-find,.yj-related,#yj-ask,.yjp"))mv(ev);},true);})();</script></section> | |
| <section data-yj-cta="paid" style="margin:3rem auto;max-width:46rem;padding:1.5rem 1.25rem;border:1px solid #d8dee9;border-radius:12px;background:#fbfcfe;font:16px/1.6 system-ui,-apple-system,Segoe UI,sans-serif"><h2 style="margin:0 0 .5rem;font-size:1.25rem">Get the full version <span class="yj-price">$29</span></h2><p class="yj-cta-paid" style="margin:.25rem 0 .6rem;color:#1f2a37">Whole-workspace migration plan with each Neo4j item mapped to its replacement, a dated end-of-life exposure report and a CI gate that fails builds adding new Neo4j use.</p><p class="yj-cta-pay" style="margin:.25rem 0 1rem;color:#5b6b7c;font-size:.94rem">One payment, one licence key for this tool. The key is shown right after payment.</p><p class="yj-cta-anchor" style="margin:0 0 1rem;color:#5b6b7c;font-size:.94rem">Staying on managed Neo4j costs from $0.20/GB/hour on AuraDB Business Critical and from $0.09/GB/hour on AuraDB Professional (neo4j.com/pricing, checked 2026-10-11).</p><a href="https://getreadystack.com/api/buy/cl/polar_cl_guhn96Rdd7HDTzyonR6ZA79xMHJBGWifxWzWg39JiFP" rel="nofollow" style="display:inline-block;padding:.7rem 1.3rem;border-radius:8px;background:#1b64f2;color:#fff;text-decoration:none;font-weight:600">Buy the full version — $29</a></section><!--yj-trust-strip-s191--><aside data-yj="yj-trust-strip" style="max-width:46rem;margin:-1.8rem auto 2.4rem;padding:.9rem 1.2rem;border:1px solid #d8dee9;border-radius:12px;background:#f6f8fb;font:14.5px/1.55 system-ui,-apple-system,Segoe UI,sans-serif;color:#2b3640"><p style="margin:0 0 .3rem;font-weight:600">Buying here, plainly</p><ul style="margin:0;padding-left:1.2rem"><li style="margin:.25rem 0">Payment runs on Whop’s checkout: your card details go to Whop, not to us, and Whop emails you the receipt.</li><li style="margin:.25rem 0">Your licence key shows on the next page right after payment and stays in your Whop account (Your purchases).</li><li style="margin:.25rem 0">Chose a subscription? Cancel any time in your Whop account (Orders → Cancel membership); access lasts until the end of the period you paid.</li><li style="margin:.25rem 0">Your inputs are calculated in your browser and are not sent to us (unless you ask for the result by email).</li><li style="margin:.25rem 0">Questions before buying? support@getreadystack.com — we answer within 2 business days.</li></ul></aside><!--/yj-trust-strip-s191--> | |
| <!--yj-embed-s178--><details id="embed" data-yj="yj-embed" style="max-width:46rem;margin:1.6rem auto;padding:.85rem 1.1rem;border:1px solid #8884;border-radius:10px"><summary style="cursor:pointer;font-weight:600">Embed this tool on your site (free)</summary><p style="margin:.6rem 0;opacity:.85">Paste this code into your page. It runs in your visitor’s browser and stays up to date. Nothing your visitors type is stored.</p><textarea readonly rows="6" style="width:100%;font:12px/1.4 ui-monospace,Menlo,Consolas,monospace;border:1px solid #8886;border-radius:7px;padding:.5rem"><iframe src="https://getreadystack.com/embed/arangodb-migration-check/" title="ArangoDB Migration Check: Neo4j End-of-Life Map — free online check" loading="lazy" data-rs-embed="en-arangodb-migration-check" style="width:100%;max-width:760px;height:640px;border:1px solid #e3e3e3;border-radius:10px"></iframe> | |
| <p style="font-size:13px;margin:6px 0 0"><a href="https://getreadystack.com/tools/arangodb-migration-check">ArangoDB Migration Check: Neo4j End-of-Life Map — free online check</a> by <a href="https://getreadystack.com/">ReadyStack</a></p> | |
| <script>window.addEventListener("message",function(e){if(e.origin!=="https://getreadystack.com"||!e.data||e.data.type!=="readystack-embed")return;var f=document.querySelectorAll("iframe[data-rs-embed]");for(var i=0;i<f.length;i++){if(f[i].contentWindow===e.source)f[i].style.height=Math.min(e.data.h+6,8000)+"px";}});</script></textarea><p style="margin:.5rem 0 0"><button type="button" data-yj="yj-embed-copy" style="font:inherit;padding:8px 14px;border:1px solid #8884;border-radius:9px;background:transparent;cursor:pointer">Copy code</button> <a href="/embed/">All embeddable tools</a></p><p style="margin:.7rem 0 0;font-size:.92em;opacity:.9">For businesses: your name and logo instead of ours, and each visitor’s result + e-mail in your inbox (only when they tick consent) — Pro from $19/month. <a href="/embed/pro/?ref=embed_box">See Pro →</a></p></details><script data-yj="yj-embed">(function(){var b=document.querySelector("[data-yj=yj-embed-copy]");if(!b)return;var t=b.textContent;b.addEventListener("click",function(){var a=b.closest("details").querySelector("textarea");var v=a.value;function d(){b.textContent="Copied";setTimeout(function(){b.textContent=t;},1800);}if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(v).then(d,function(){a.select();});}else{a.select();}});})();</script><!--yj-share-s101--><div style="margin:28px 0 8px;text-align:center"><button id="yjcp" type="button" style="font:inherit;padding:10px 18px;border:1px solid #8884;border-radius:10px;background:transparent;cursor:pointer">Copy link</button><button id="yjimg" type="button" style="font:inherit;padding:10px 18px;margin-left:8px;border:1px solid #8884;border-radius:10px;background:transparent;cursor:pointer">Save result as image</button></div><script>(function(){var b=document.getElementById("yjimg");if(!b)return;b.addEventListener("click",function(){var o=document.getElementById("out");var txt=(o&&(o.innerText||o.textContent)||"").trim();if(!txt){b.textContent="(no result yet)";setTimeout(function(){b.textContent="Save result as image";},1500);return;}var lines=txt.split(String.fromCharCode(10)).filter(function(x){return x.trim();}).slice(0,10);var W=1200,P=56,c=document.createElement("canvas");c.width=W;var lh=38,H=P*2+70+lines.length*lh+60;c.height=H;var x=c.getContext("2d");x.fillStyle="#1a1512";x.fillRect(0,0,W,H);x.fillStyle="#f3e9d2";x.font="600 34px system-ui,Segoe UI,Arial";var t=(document.title||"").split("|")[0].trim();x.fillText(t.slice(0,54),P,P+34);x.font="22px ui-monospace,Menlo,Consolas,monospace";x.fillStyle="#e8dcc4";for(var i=0;i<lines.length;i++){x.fillText(lines[i].slice(0,88),P,P+70+i*lh+22);}x.font="600 22px system-ui,Segoe UI,Arial";x.fillStyle="#c9a227";var d=location.hostname.replace("www.","");x.fillText(d,W-P-x.measureText(d).width,H-P+6);c.toBlob(function(bl){var u=URL.createObjectURL(bl),a=document.createElement("a");a.href=u;a.download=(t||"result").replace(/[^a-z0-9]+/gi,"-").toLowerCase()+"-"+d+".png";document.body.appendChild(a);a.click();setTimeout(function(){URL.revokeObjectURL(u);a.remove();},2000);},"image/png");});})();</script><script>(function(){var b=document.getElementById("yjcp");if(!b)return;var t=b.textContent;b.addEventListener("click",function(){var u=location.href.split("#")[0];function d(){b.textContent="Link copied";setTimeout(function(){b.textContent=t;},1800);}if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(u).then(d,function(){prompt("",u);});}else{prompt("",u);}});})();</script> | |
| <script data-yj="yj-view-beacon">(function(){try{var p=location.pathname;var k='yjv:'+p;if(sessionStorage.getItem(k))return;sessionStorage.setItem(k,'1');fetch('/api/ev',{method:'POST',keepalive:true,headers:{'Content-Type':'application/json'},body:JSON.stringify({path:p,lang:"en",ref:(document.referrer||''),src:(function(){try{return (new URLSearchParams(location.search).get('ref')||'').replace(/[^a-z_]/g,'').slice(0,12)}catch(e){return ''}})()})}).catch(function(){});}catch(e){}})();</script> | |
| <script data-yj="yj-use-beacon">(function(){try{var o=document.getElementById('out');if(!o)return;var p=location.pathname,k='yju:'+p,sent=false;function fire(){if(sent||sessionStorage.getItem(k))return;if(!(o.textContent||'').replace(/\s+/g,'').length)return;sent=true;sessionStorage.setItem(k,'1');fetch('/api/ev',{method:'POST',keepalive:true,headers:{'Content-Type':'application/json'},body:JSON.stringify({path:p,lang:"en",t:'use',src:(function(){try{return (new URLSearchParams(location.search).get('ref')||'').replace(/[^a-z_]/g,'').slice(0,12)}catch(e){return ''}})()})}).catch(function(){});}var mo=new MutationObserver(function(){fire();if(sent)mo.disconnect();});mo.observe(o,{childList:true,characterData:true,subtree:true});}catch(e){}})();</script> | |
| <script data-yj="yj-prefill-s181 v1">(function(){try{var q=new URLSearchParams(location.search);if(!q.toString())return;var P={"R": {"employee": ["employee|w-?2\\b|arbeitnehmer|angestellt|会社員|従業員|給与所得|trabajador|asalariad|empregad|clt\\b|salari", "Employee"], "self": ["self-?employ|freelanc|sole (trader|prop)|selbst(ä|ae)ndig|freiberuf|個人事業|フリーランス|aut(ó|o)nom|\\bmei\\b", "Freelancer / self-employed"], "landlord": ["landlord|rental|vermiet|大家|不動産|arrendador|alquiler|locador|aluguel", "Landlord"], "investor": ["invest|trader|anleger|投資|inversor|investidor", "Investor / trader"], "employer": ["employer|arbeitgeber|雇用主|事業主|empleador|empregador", "Employer"], "seller": ["seller|online shop|h(ä|ae)ndler|販売|vendedor|e-?commerce", "Online seller"]}, "C": {"US": "^(us|usa)$|united states|estados unidos|vereinigte staaten|アメリカ|米国", "UK": "^(uk|gb)$|united kingdom|great britain|reino unido|vereinigtes k|イギリス|英国", "DE": "^de$|germany|deutschland|alemania|alemanha|ドイツ", "JP": "^jp$|japan|jap(ó|ã|o)n?|日本", "ES": "^es$|spain|españa|espana|espanha|spanien|スペイン", "BR": "^br$|brazil|brasil|ブラジル"}, "B": "your 2027 dates", "L": "en"};function ours(el){return !!(el&&el.closest&&el.closest("[data-yj],[data-yj-cta],[data-yj-cal],.yj-email-gate,.yj-find,.yj-related,#yj-ask,#yjgo,#yjr,header,footer,nav"));}function fields(){var r=document.querySelector("main")||document.body;return [].filter.call(r.querySelectorAll("input,select,textarea"),function(el){var t=(el.type||"").toLowerCase();return !ours(el)&&!el.disabled&&["email","hidden","search","password","file","submit","button","reset","image"].indexOf(t)<0;});}function key(el){return el.getAttribute("data-k")||el.id||el.name||"";}function fire(el){["input","change"].forEach(function(n){try{el.dispatchEvent(new Event(n,{bubbles:true}))}catch(e){}});}function setv(el,v){v=String(v).slice(0,80);var t=(el.type||"").toLowerCase(),tg=el.tagName;if(tg=="SELECT"){var o=[].filter.call(el.options,function(o){return o.value==v||o.text.trim()==v})[0];if(!o)return false;el.value=o.value;}else if(t=="checkbox"||t=="radio"){if(!/^(1|0|true|false|on|off|yes|no)$/i.test(v))return false;el.checked=/^(1|true|on|yes)$/i.test(v);}else if(t=="number"||t=="range"){var n=parseFloat(v.replace(/\s/g,"").replace(",","."));if(!isFinite(n))return false;el.value=String(n);}else if(t=="date"){if(!/^\d{4}-\d{2}-\d{2}$/.test(v))return false;el.value=v;}else{if(/[<>]/.test(v))return false;el.value=v;}fire(el);return true;}function pick(el,rx){if(el.tagName!="SELECT")return false;var re=new RegExp(rx,"i");var o=[].filter.call(el.options,function(o){return re.test(o.value)||re.test(o.text)})[0];if(!o||el.value==o.value)return false;el.value=o.value;fire(el);return true;}function run(){var F=fields(),done={},n=0;q.forEach(function(v,k){if(n>=20||/^(ref|role|cc|utm_.*|fbclid|gclid)$/.test(k)||!/^[A-Za-z0-9_-]{1,40}$/.test(k))return;F.forEach(function(el){if(key(el)===k&&!done[k]&&setv(el,v)){done[k]=1;n++;}});});var cc=(q.get("cc")||"").toUpperCase().replace(/[^A-Z]/g,"");if(P.C[cc])F.forEach(function(el){var k=key(el);if(!done[k]&&/country|land|pa(i|í)s|pays|国/i.test(k+" "+(el.id||""))&&pick(el,P.C[cc])){done[k]=1;n++;}});var ro=(q.get("role")||"").replace(/[^a-z]/g,""),R=P.R[ro];if(R)F.forEach(function(el){var k=key(el);if(!done[k]&&el.tagName=="SELECT"&&[].some.call(el.options,function(o){return [].some.call(Object.keys(P.R),function(x){return new RegExp(P.R[x][0],"i").test(o.text)})})&&pick(el,R[0])){done[k]=1;n++;}});if(q.get("ref")=="calendar"){var h=document.querySelector("main h1")||document.querySelector("h1");var d=document.createElement("div");d.setAttribute("data-yj","yj-prefill-back");d.style.cssText="margin:.4rem 0 .8rem;font:15px/1.5 system-ui,sans-serif;opacity:.9";var a=document.createElement("a");a.href="/"+P.L+"/calendar/?ref=tool"+(R?"&role="+ro:"")+(P.C[cc]?"&cc="+cc:"");a.textContent=(R?R[1]+" \u00b7 ":"")+P.B+" \u2192";d.appendChild(a);if(h&&h.parentNode)h.parentNode.insertBefore(d,h.nextSibling);}document.documentElement.setAttribute("data-yj-prefilled",String(n));}if(document.readyState=="loading")document.addEventListener("DOMContentLoaded",run);else run();}catch(e){}})();</script><div class="yj-home-find"><div class="yj-lgbar"><a href="/" class="yj-lg on">EN</a><a href="/de/" class="yj-lg">DE</a><a href="/ja/" class="yj-lg">JA</a><a href="/es/" class="yj-lg">ES</a><a href="/pt/" class="yj-lg">PT</a></div><section class="yj-find"><h2>Find a tool</h2><input id="yjq" type="search" autocomplete="off" placeholder="Type a product name, format or task"><div id="yjr"></div></section><style>.yj-lgbar{position:absolute;top:14px;right:18px;display:flex;gap:6px;z-index:60}.yj-lg{font:600 12px/1 system-ui,sans-serif;padding:6px 9px;border-radius:4px;text-decoration:none;color:#8b96a3;border:1px solid rgba(140,150,165,.28)}.yj-lg:hover{color:#e8eaed;border-color:rgba(160,175,195,.6)}.yj-lg.on{color:#0e1116;background:#cfd6de;border-color:#cfd6de}.yj-find{max-width:760px;margin:34px auto 8px;padding:0 20px}.yj-find h2{font:600 20px/1.3 system-ui,sans-serif;margin:0 0 10px}#yjq{width:100%;box-sizing:border-box;padding:13px 15px;font:400 15.5px system-ui,sans-serif;border:1px solid rgba(140,150,165,.34);border-radius:8px;background:rgba(255,255,255,.04);color:inherit}#yjq:focus{outline:none;border-color:#7FD1C4}#yjr{margin-top:10px;display:flex;flex-direction:column;gap:6px}#yjr a{display:flex;justify-content:space-between;gap:12px;padding:11px 14px;border:1px solid rgba(140,150,165,.22);border-radius:6px;text-decoration:none;font:400 14.5px/1.4 system-ui,sans-serif;color:inherit}#yjr a:hover{border-color:#7FD1C4}#yjr .pr{font:600 13px system-ui,sans-serif;color:#5fbf9a;white-space:nowrap}</style><script>(function(){var q=document.getElementById("yjq"),r=document.getElementById("yjr"),D=null;function load(){if(D)return Promise.resolve(D);return fetch("/search-index.json").then(function(x){return x.json();}).then(function(j){D=j;return j;}).catch(function(){D=[];return D;});}function esc(t){return String(t).replace(/[&<>"]/g,function(c){return {"&":"&","<":"<",">":">",'"':"""}[c];});}function run(){var v=q.value.trim().toLowerCase();if(v.length<2){r.innerHTML="";return;}load().then(function(j){var w=v.split(/\s+/),o=[];for(var i=0;i<j.length&&o.length<12;i++){var t=j[i].t.toLowerCase();var ok=true;for(var k=0;k<w.length;k++){if(t.indexOf(w[k])<0){ok=false;break;}}if(ok)o.push(j[i]);}r.innerHTML=o.length?o.map(function(x){return "<a href=\""+esc(x.u)+"\">"+"<span>"+esc(x.t)+"</span>"+(x.p?"<span class=\"pr\">$"+x.p+"</span>":"")+"</a>";}).join(""):"";});}q.addEventListener("input",run);q.addEventListener("focus",load);})();</script></div><section data-yj="yj-facts-v1" style="max-width:920px;margin:48px auto 0;padding:0 20px;font-family:system-ui,sans-serif"><style>.yj-article p{font:400 15.5px/1.7 system-ui,sans-serif;color:#26313b;margin:0 0 12px;max-width:72ch}.yj-article h2,.yj-article h3,.yj-article h4{font:600 17px/1.35 system-ui,sans-serif;color:#1b1f24;margin:22px 0 8px}.yj-article table{border-collapse:collapse;margin:10px 0 16px;font:14px/1.45 system-ui,sans-serif}.yj-article th,.yj-article td{border:1px solid #e2e6ea;padding:6px 10px;text-align:left}.yj-article th{background:#f4f6f8}.yj-article pre{background:#0f1720;color:#e6edf3;padding:12px 14px;border-radius:8px;overflow:auto;font:13px/1.5 ui-monospace,Menlo,monospace}.yj-article code{font:13px ui-monospace,Menlo,monospace;background:#f1f3f5;padding:1px 4px;border-radius:3px}.yj-article pre code{background:none;padding:0}.yj-article ul,.yj-article ol{font:15px/1.6 system-ui,sans-serif;color:#26313b}</style><p style="font:400 13px/1.5 system-ui,sans-serif;color:#6b7680;margin:0 0 14px"><time datetime="2026-10-11">Updated 2026-10-11</time> · ReadyStack</p><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","dateModified":"2026-10-11","author":{"@type":"Organization","name":"ReadyStack"}}</script><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:0 0 6px;color:#1b1f24">Worked example</h2><p style="font:400 14.5px/1.5 system-ui,sans-serif;margin:0 0 16px;color:#5b6570">Real numbers from this tool, line by line.</p><div class="yj-article"><p><img src="https://getreadystack.com/img/promo/sku605945_result_card.jpg" alt="Migrate from Neo4j to ArangoDB: six Neo4j ties in one docker-compose.yml" loading="lazy" style="max-width:100%;border-radius:6px"></p> | |
| <p>Six Neo4j ties found before ArangoDB: that is what a platform engineer in the United States or Europe gets back from one 23-line docker-compose.yml checked on 2026-10-11. Two images are past end of life, one line accepts the Neo4j commercial licence, one tag floats, one image sits on the 5.26 LTS line and one service connects over Bolt.</p> | |
| <table><thead><tr><th>Line in the file</th><th>Status on 2026-10-11</th><th>Replacement line</th></tr></thead><tbody><tr><td>image: neo4j:2026.06</td><td>error: ended 2026-07-30</td><td>image: arangodb:3.12</td></tr><tr><td>image: neo4j:4.4.48-enterprise</td><td>error: ended 2025-11-30</td><td>image: arangodb:3.12</td></tr><tr><td>NEO4J_ACCEPT_LICENSE_AGREEMENT: "yes"</td><td>warning: Enterprise Edition, commercial licence</td><td>remove the line</td></tr><tr><td>image: neo4j:latest</td><td>warning: floating tag</td><td>image: memgraph/memgraph:3.13.2</td></tr><tr><td>image: neo4j:5.26.12</td><td>note: LTS until 2028-06-06 (604 days)</td><td>image: falkordb/falkordb:6.0.2</td></tr><tr><td>GRAPH_URI: neo4j://graph:7687</td><td>note: Bolt URI</td><td>GRAPH_URL: http://graph:8529</td></tr></tbody></table> | |
| <h3>Why the dates move under you</h3> | |
| <p>Neo4j now ships calendar-versioned release lines, one a month. According to endoflife.date, each line loses support as soon as the next one ships: 2026.06 was released on 2026-07-08 and reached end of life on 2026-07-30; 2026.08 ended on 2026-09-21. The old 4.4 LTS line ended on 2025-11-30. On 2026-10-11 only two lines are supported: the newest monthly line, 2026.09, and 5.26 LTS, which runs until 2028-06-06.</p> | |
| <p>So a compose file pinned in June to the newest release is out of support by August, and nobody's code changed. A tag of latest is no better: it jumps to a new line every month, so two machines pulling a week apart can run different Neo4j lines.</p> | |
| <h3>Why a chatbot or a web page is not enough</h3> | |
| <p>A chatbot answers from what it was trained on, and with a new Neo4j line every month, its list of supported tags is wrong within weeks. endoflife.date has the right dates but does not read your files. The gap is the join: which line of which file pulls which Neo4j line, and what that line should become.</p> | |
| <h3>What the check does</h3> | |
| <p>ArangoDB Migration Check reads docker-compose files, Dockerfiles, Helm values, package.json, requirements.txt, pyproject.toml, pom.xml, build.gradle, go.mod, .csproj and .env files. It has 13 rules: end-of-life images, 5.26 LTS images (a warning 365 days before 2028-06-06, an error after), floating tags, the current monthly line, the Enterprise licence line, APOC plugin lists, Bolt URIs, five driver families and the Neo4j Helm repository.</p> | |
| <p>Each finding names the line and gives the replacement. ArangoDB serves HTTP on port 8529 and needs its own drivers: arangojs, python-arango, arangodb-java-driver, go-driver and ArangoDBNetStandard. Memgraph speaks Bolt on port 7687, so moving there keeps your Neo4j drivers and only changes the host. APOC calls need a rewrite on ArangoDB, which runs AQL rather than Cypher.</p> | |
| <h3>Try it on your own file</h3> | |
| <p>The free scan works on the open file in VS Code, or in the browser on the web version, with no key. Change the as-of date to see what turns red later: the same compose file checked on 2027-06-10 turns the 5.26 image into a warning, because 2028-06-06 is then under a year away.</p> | |
| <p>With a licence key you get the whole workspace in one migration plan, a dated end-of-life report for the company and a CI gate that fails a build adding new Neo4j use. For comparison, staying on managed Neo4j costs from $0.20/GB/hour on AuraDB Business Critical and from $0.09/GB/hour on AuraDB Professional, per Neo4j's pricing page on 2026-10-11.</p></div><h2 style="font:600 19px/1.3 system-ui,sans-serif;margin:30px 0 10px;color:#1b1f24">15 seconds — what it actually does</h2><video controls muted playsinline preload="none" poster="/img/promo/sku605945_result_card.jpg" style="width:100%;max-width:360px;border-radius:10px;display:block;margin:0 auto"><source src="/media/sku605945_short.mp4" type="video/mp4"></video><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:34px 0 6px;color:#1b1f24">Questions people ask</h2><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What does ArangoDB Migration Check do?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">It reads a docker-compose.yml, Dockerfile, Helm values, package.json, requirements.txt, pom.xml, go.mod, .csproj or .env file and names every Neo4j tie with its line: images, Enterprise licence lines, Bolt URIs, APOC plugins and drivers. Each image is dated against endoflife.date (Neo4j 2026.06 ended 2026-07-30, 4.4 ended 2025-11-30) and paired with the ArangoDB, Memgraph or FalkorDB line that replaces it.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">Who is ArangoDB Migration Check for?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">Platform engineers, backend developers and DevOps teams who run Neo4j in Docker or Kubernetes and are moving to ArangoDB, Memgraph or FalkorDB, or who need to know which of their Neo4j images are already past end of life. It also suits a tech lead who must tell the company how many projects still pull Neo4j and since when.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">Why not just ask a chatbot or read endoflife.date?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">Neo4j ships a new release line every month and each one loses support when the next ships, so a chatbot's answer about which tag is still supported is often months stale. endoflife.date lists the dates but does not read your files. This tool reads each image tag, licence line, URI and driver in your file and dates it on the day you run it.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What is free and what needs a licence key?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">Free: scan the open file and get every Neo4j tie with its line, its end-of-life date and the replacement line, with no key and no limit. With a key: the whole workspace in one migration plan with each item mapped to its replacement, a dated end-of-life exposure report for the company, and a CI gate that fails builds adding new Neo4j use.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What does staying on managed Neo4j cost?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">Neo4j's own pricing page lists AuraDB Professional from $0.09 per GB per hour (minimum 1 GB instance) and AuraDB Business Critical from $0.20 per GB per hour (minimum 2 GB instance), checked on 2026-10-11. Self-managed Enterprise Edition is sold by quote. The check is $29 once, one key per person or team seat.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">When does the next Neo4j support date change?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">The 5.26 LTS line reaches end of life on 2028-06-06 according to endoflife.date. The tool turns 5.26 images into warnings 365 days before that date and into errors after it. The monthly lines change sooner: each one loses support as soon as the next monthly release ships, as 2026.08 did on 2026-09-21.</p></details><script type="application/ld+json" data-yj="yj-faq-ld">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "What does ArangoDB Migration Check do?", "acceptedAnswer": {"@type": "Answer", "text": "It reads a docker-compose.yml, Dockerfile, Helm values, package.json, requirements.txt, pom.xml, go.mod, .csproj or .env file and names every Neo4j tie with its line: images, Enterprise licence lines, Bolt URIs, APOC plugins and drivers. Each image is dated against endoflife.date (Neo4j 2026.06 ended 2026-07-30, 4.4 ended 2025-11-30) and paired with the ArangoDB, Memgraph or FalkorDB line that replaces it."}}, {"@type": "Question", "name": "Who is ArangoDB Migration Check for?", "acceptedAnswer": {"@type": "Answer", "text": "Platform engineers, backend developers and DevOps teams who run Neo4j in Docker or Kubernetes and are moving to ArangoDB, Memgraph or FalkorDB, or who need to know which of their Neo4j images are already past end of life. It also suits a tech lead who must tell the company how many projects still pull Neo4j and since when."}}, {"@type": "Question", "name": "Why not just ask a chatbot or read endoflife.date?", "acceptedAnswer": {"@type": "Answer", "text": "Neo4j ships a new release line every month and each one loses support when the next ships, so a chatbot's answer about which tag is still supported is often months stale. endoflife.date lists the dates but does not read your files. This tool reads each image tag, licence line, URI and driver in your file and dates it on the day you run it."}}, {"@type": "Question", "name": "What is free and what needs a licence key?", "acceptedAnswer": {"@type": "Answer", "text": "Free: scan the open file and get every Neo4j tie with its line, its end-of-life date and the replacement line, with no key and no limit. With a key: the whole workspace in one migration plan with each item mapped to its replacement, a dated end-of-life exposure report for the company, and a CI gate that fails builds adding new Neo4j use."}}, {"@type": "Question", "name": "What does staying on managed Neo4j cost?", "acceptedAnswer": {"@type": "Answer", "text": "Neo4j's own pricing page lists AuraDB Professional from $0.09 per GB per hour (minimum 1 GB instance) and AuraDB Business Critical from $0.20 per GB per hour (minimum 2 GB instance), checked on 2026-10-11. Self-managed Enterprise Edition is sold by quote. The check is $29 once, one key per person or team seat."}}, {"@type": "Question", "name": "When does the next Neo4j support date change?", "acceptedAnswer": {"@type": "Answer", "text": "The 5.26 LTS line reaches end of life on 2028-06-06 according to endoflife.date. The tool turns 5.26 images into warnings 365 days before that date and into errors after it. The monthly lines change sooner: each one loses support as soon as the next monthly release ships, as 2026.08 did on 2026-09-21."}}]}</script><div id="yj-ask" style="margin:36px 0 0;padding:18px 18px 16px;border:1px solid #e2e6ea;border-radius:10px;background:#fbfbfc"><h2 style="font:600 19px/1.3 system-ui,sans-serif;margin:0 0 4px;color:#1b1f24">Ask about this tool</h2><p style="font:400 13.5px/1.5 system-ui,sans-serif;margin:0 0 12px;color:#5b6570">One question, answered by the person who built it. Your email only if you want the answer sent.</p><form onsubmit="return yjAsk(event)" style="display:grid;gap:8px"><textarea name="question" required minlength="10" maxlength="2000" rows="3" placeholder="Your question" style="font:14px/1.5 system-ui,sans-serif;padding:10px;border:1px solid #cfd6dd;border-radius:6px"></textarea><div style="display:flex;gap:8px;flex-wrap:wrap"><input type="email" name="email" placeholder="Email (optional)" style="flex:1;min-width:200px;font:14px system-ui,sans-serif;padding:9px 10px;border:1px solid #cfd6dd;border-radius:6px"><button type="submit" style="font:600 14px system-ui,sans-serif;padding:9px 18px;border:0;border-radius:6px;background:#1b1f24;color:#fff;cursor:pointer">Send</button></div><p id="yj-ask-msg" style="font:13px system-ui,sans-serif;margin:2px 0 0;color:#0a6238;min-height:1em"></p></form><script>function yjAsk(e){e.preventDefault();var f=e.target,m=document.getElementById("yj-ask-msg");m.style.color="#0a6238";fetch(location.origin+"/api/ask",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sku:605945,slug:"arangodb-migration-check",lang:"en",question:f.question.value,email:f.email.value,page:location.pathname})}).then(function(r){if(!r.ok)throw 0;m.textContent="Thanks \u2014 noted. Answers land on this page and, if you left an email, in your inbox.";f.question.value="";}).catch(function(){m.style.color="#a8551f";m.textContent="Could not send. Please try again in a minute.";});return false;}</script></div></section><section class="yj-related" style="max-width:920px;margin:56px auto 40px;padding:0 20px"><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:0 0 6px;color:#1b1f24">Same job, next tool</h2><p style="font:400 14.5px/1.5 system-ui,sans-serif;margin:0 0 20px;color:#5b6570">Free in the browser. The full version is a one-time licence.</p><div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px"><a class="yj-rel-c" href="https://getreadystack.com/tools/apache-echarts-migration-check?ref=related"><span class="yj-rel-t">Apache ECharts Migration: Highcharts Licence Map</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/base-image-eol-lint?ref=related"><span class="yj-rel-t">Base Image EOL Lint - Dockerfile and CI end-of-life check</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/docker-image-for-data-science?ref=related"><span class="yj-rel-t">Docker Image for Data Science — Reproducible JupyterLab + MLflow Stack (Python</span><span class="yj-rel-p">$19.99</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/bitnami-image-catalog-gate?ref=related"><span class="yj-rel-t">Bitnami Image Gate: Compose, Helm, Dockerfile</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/cinc-migration-check?ref=related"><span class="yj-rel-t">Cinc Migration Check: Chef Infra licence gate lint</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/skills/dockerfile-base-image-eol-check/?ref=related"><span class="yj-rel-t">Dockerfile EOL skill for Claude Code — end-of-life base images and FROM fixes</span><span class="yj-rel-p">$12</span></a></div><style>.yj-rel-c{display:flex;flex-direction:column;gap:8px;padding:15px 16px;border:1px solid #e2e6ea;border-radius:6px;text-decoration:none;background:#fff}.yj-rel-c:hover{border-color:#b9c2cb;background:#fafbfc}.yj-rel-t{font:500 14.5px/1.42 system-ui,sans-serif;color:#1b1f24}.yj-rel-p{font:600 13px system-ui,sans-serif;color:#0a6238}</style></section><!--yj-trust-foot-s191--><footer data-yj="yj-trust-foot" style="margin:3rem auto 0;padding:1.2rem 1rem 2rem;border-top:1px solid rgba(128,128,128,.28);max-width:60rem;font:14px/1.6 system-ui,-apple-system,Segoe UI,sans-serif;color:#5b6570;text-align:center"><nav aria-label="ReadyStack" style="display:flex;gap:.4rem 1.1rem;justify-content:center;flex-wrap:wrap"><a href="/about" style="color:inherit">About</a><a href="/verify/" style="color:inherit">How we verify</a><a href="/privacy" style="color:inherit">Privacy</a><a href="/terms" style="color:inherit">Terms</a><a href="/contact.html" style="color:inherit">Contact</a><a href="mailto:support@getreadystack.com" style="color:inherit">support@getreadystack.com</a></nav><p style="margin:.6rem 0 0">🔒 Secure checkout by Whop · © 2026 ReadyStack</p></footer><!--/yj-trust-foot-s191--></body> | |
| </html> | |