{"id":3576,"date":"2025-11-03T07:19:54","date_gmt":"2025-11-03T06:19:54","guid":{"rendered":"https:\/\/blog.tomayac.com\/2025\/11\/03\/running-nodejs-in-a-hugging-face-space\/"},"modified":"2025-11-03T07:19:54","modified_gmt":"2025-11-03T06:19:54","slug":"running-node-js-in-a-hugging-face-space","status":"publish","type":"post","link":"https:\/\/tomayac.com\/wordpress\/2025\/11\/03\/running-node-js-in-a-hugging-face-space\/","title":{"rendered":"Running Node.js in a Hugging Face Space"},"content":{"rendered":"\n\t\t\t<p>Like many developers, I was bummed when I learned about the\n<a href=\"https:\/\/blog.glitch.com\/post\/changes-are-coming-to-glitch\">shutdown of Glitch<\/a>.\nWhile <a href=\"https:\/\/pages.github.com\/\">GitHub Pages<\/a> works great for web apps that\ndon't need a server, I struggled with finding a drop-in replacement for hosting\nserver-based apps, and specifically apps using Node.js. Until I found out about\n<a href=\"https:\/\/huggingface.co\/docs\/hub\/spaces\">Hugging Face Spaces<\/a> and that it\nsupports Docker, which allowed me to create an <strong>evergreen template for running\nNode.js in a Hugging Face Space<\/strong>.<\/p>\n<div style=\"text-align: center\">\n  <img src=\"https:\/\/blog.tomayac.com\/images\/huggingface-logo.svg\" width=\"95\" height=\"88\" alt=\"Hugging Face\" \/>\n  <span style=\"font-size: 4rem; transform: translateY(-10px); display: inline-block;\">\u2665\ufe0f<\/span>\n  <img src=\"https:\/\/blog.tomayac.com\/images\/nodejs-mascot.svg\" width=\"680\" height=\"800\" style=\"height: 88px; width: auto;\" alt=\"Node.js\" \/>\n<\/div>\n<ul>\n<li>If all you want is a quick way to fire up your own Space-hosted Node.js\nserver, click\n<a href=\"https:\/\/huggingface.co\/spaces\/tomayac\/nodejs-template?duplicate=true\">Duplicate this Space<\/a>.<\/li>\n<li>If you want to know how the sausage is made or create your own template, read\non.<\/li>\n<\/ul>\n<h2 id=\"create-a-hugging-face-space\" tabindex=\"-1\">Create a Hugging Face Space <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2025\/11\/03\/running-nodejs-in-a-hugging-face-space\/#create-a-hugging-face-space\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h2>\n<p>This assumes that you have a (free or paid)\n<a href=\"https:\/\/huggingface.co\/join\">account on Hugging Face<\/a>. Go to your profile and\n<a href=\"https:\/\/huggingface.co\/new-space\">create a new Hugging Face Space<\/a> using\n<strong>Docker<\/strong> as the Space SDK. Go for the <strong>Blank<\/strong> Docker template. Leave all the\nother settings unchanged, so you end up on the free tier. Choose if your Space\nshould be private or public.<\/p>\n<h2 id=\"an-evergreen-template\" tabindex=\"-1\">An evergreen template <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2025\/11\/03\/running-nodejs-in-a-hugging-face-space\/#an-evergreen-template\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h2>\n<p>The objective is to make this template evergreen, so no concrete version numbers\nare hardwired. Instead, the idea is to hardwire the version numbers when you\nduplicate the template to create a permanent Space.<\/p>\n<h3 id=\"create-a-package-json-file\" tabindex=\"-1\">Create a <code>package.json<\/code> file <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2025\/11\/03\/running-nodejs-in-a-hugging-face-space\/#create-a-package-json-file\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h3>\n<p>Next, create the <code>package.json<\/code> file that your template should use. Note that\nthis uses <code>&quot;latest&quot;<\/code> as the Express.js version, as the template is meant to stay\nevergreen.<\/p>\n<pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">\"name\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"nodejs-template\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token property\">\"version\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"0.0.1\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token property\">\"description\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"A template for running Node.js in a Hugging Face Space.\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token property\">\"keywords\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">\"Node\"<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">\"Node.js\"<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">\"Hugging Face Space\"<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token property\">\"repository\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token property\">\"type\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"git\"<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token property\">\"url\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"git@hf.co:spaces\/tomayac\/nodejs-template\"<\/span>\n  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token property\">\"license\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"Apache-2.0\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token property\">\"author\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"Thomas Steiner (tomac@google.com)\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token property\">\"type\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"module\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token property\">\"main\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"index.js\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token property\">\"scripts\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token property\">\"start\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"node index.js\"<\/span>\n  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token property\">\"dependencies\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token property\">\"express\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"latest\"<\/span>\n  <span class=\"token punctuation\">}<\/span>\n<span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<h3 id=\"create-a-dockerfile\" tabindex=\"-1\">Create a <code>Dockerfile<\/code> <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2025\/11\/03\/running-nodejs-in-a-hugging-face-space\/#create-a-dockerfile\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h3>\n<p>As the next step, create a <code>Dockerfile<\/code> for your template. Again I'm using an\nevergreen approach here with a Node.js Docker tag of <code>lts-alpine<\/code>, which means I\nalways get the LTS release of Node.js running on the lightweight Alpine Linux.<\/p>\n<pre class=\"language-docker\"><code class=\"language-docker\"><span class=\"token comment\"># Node base image<\/span>\n<span class=\"token instruction\"><span class=\"token keyword\">FROM<\/span> node:lts-alpine<\/span>\n\n<span class=\"token comment\"># Switch to the \"node\" user<\/span>\n<span class=\"token instruction\"><span class=\"token keyword\">USER<\/span> node<\/span>\n\n<span class=\"token comment\"># Set home to the user's home directory<\/span>\n<span class=\"token instruction\"><span class=\"token keyword\">ENV<\/span> HOME=\/home\/node PATH=\/home\/node\/.local\/bin:<span class=\"token variable\">$PATH<\/span><\/span>\n\n<span class=\"token comment\"># Set the working directory to the user's home directory<\/span>\n<span class=\"token instruction\"><span class=\"token keyword\">WORKDIR<\/span> <span class=\"token variable\">$HOME<\/span>\/app<\/span>\n\n<span class=\"token comment\"># Moving file to user's home directory<\/span>\n<span class=\"token instruction\"><span class=\"token keyword\">ADD<\/span> . <span class=\"token variable\">$HOME<\/span>\/app<\/span>\n\n<span class=\"token comment\"># Copy the current directory contents into the container at $HOME\/app setting the owner to the user<\/span>\n<span class=\"token instruction\"><span class=\"token keyword\">COPY<\/span> <span class=\"token options\"><span class=\"token property\">--chown<\/span><span class=\"token punctuation\">=<\/span><span class=\"token string\">node<\/span><\/span> . <span class=\"token variable\">$HOME<\/span>\/app<\/span>\n\n<span class=\"token comment\"># Loading Dependencies<\/span>\n<span class=\"token instruction\"><span class=\"token keyword\">RUN<\/span> npm install<\/span>\n\n<span class=\"token comment\"># Expose application's default port<\/span>\n<span class=\"token instruction\"><span class=\"token keyword\">EXPOSE<\/span> 7860<\/span>\n\n<span class=\"token comment\"># Entry Point<\/span>\n<span class=\"token instruction\"><span class=\"token keyword\">ENTRYPOINT<\/span> [<span class=\"token string\">\"nodejs\"<\/span>, <span class=\"token string\">\".\/index.js\"<\/span>]<\/span><\/code><\/pre>\n<h3 id=\"create-an-index-js-file\" tabindex=\"-1\">Create an <code>index.js<\/code> file <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2025\/11\/03\/running-nodejs-in-a-hugging-face-space\/#create-an-index-js-file\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h3>\n<p>Up next, create your default <code>index.js<\/code> file that your template should use when\nthe Node.js server starts. I went with the battle-proven Express.js server\nframework. Note that the port needs to be <code>7860<\/code>.<\/p>\n<p>Now for the smart part: The code dynamically reads out the used Express.js and\nNode.js version, so when you duplicate the template, you can hard-wire these\nversions. After duplicating the template, in your code, update the highlighted\nparts:<\/p>\n<ul>\n<li>In your <code>Dockerfile<\/code>, replace <code>node:<strong>lts<\/strong>-alpine<\/code>\nwith, for example, <code>node:<strong>24<\/strong>-alpine<\/code>.<\/li>\n<li>In your <code>package.json<\/code> file, replace <code>&quot;express&quot;:\n&quot;<strong>latest<\/strong>&quot;<\/code> with, for example, <code>&quot;express&quot;:\n&quot;^<strong>5.1.0<\/strong>&quot;<\/code>.<\/li>\n<\/ul>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">import<\/span> express <span class=\"token keyword\">from<\/span> <span class=\"token string\">'express'<\/span><span class=\"token punctuation\">;<\/span>\n\n<span class=\"token keyword\">const<\/span> app <span class=\"token operator\">=<\/span> <span class=\"token function\">express<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n<span class=\"token keyword\">const<\/span> port <span class=\"token operator\">=<\/span> <span class=\"token number\">7860<\/span><span class=\"token punctuation\">;<\/span>\n\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'\/'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">async<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">req<span class=\"token punctuation\">,<\/span> res<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=><\/span> <span class=\"token punctuation\">{<\/span>\n  res<span class=\"token punctuation\">.<\/span><span class=\"token function\">send<\/span><span class=\"token punctuation\">(<\/span>\n    <span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">Running Express.js <\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>\n      <span class=\"token punctuation\">(<\/span>\n        <span class=\"token keyword\">await<\/span> <span class=\"token keyword\">import<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'express\/package.json'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span>\n          <span class=\"token keyword\">with<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token literal-property property\">type<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">'json'<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span>\n      <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>default<span class=\"token punctuation\">.<\/span>version\n    <span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token string\"> on Node.js <\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>process<span class=\"token punctuation\">.<\/span>version<span class=\"token punctuation\">.<\/span><span class=\"token function\">split<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'.'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">replace<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'v'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">''<\/span><span class=\"token punctuation\">)<\/span><span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token template-punctuation string\">`<\/span><\/span>\n  <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">listen<\/span><span class=\"token punctuation\">(<\/span>port<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=><\/span> <span class=\"token punctuation\">{<\/span>\n  console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`<\/span><span class=\"token string\">Example app listening on port <\/span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${<\/span>port<span class=\"token interpolation-punctuation punctuation\">}<\/span><\/span><span class=\"token template-punctuation string\">`<\/span><\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<h3 id=\"create-a-reamde-md-file\" tabindex=\"-1\">Create a <code>REAMDE.md<\/code> file <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2025\/11\/03\/running-nodejs-in-a-hugging-face-space\/#create-a-reamde-md-file\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h3>\n<p>To set some metadata for your template, create a <code>README.md<\/code> file with YAML\nfront matter at the beginning. Hugging Face makes this easy via its Web\ninterface for the standard parameters, but you can modify\n<a href=\"https:\/\/huggingface.co\/docs\/hub\/spaces-config-reference\">many more parameters<\/a>\nas per the documentation.<\/p>\n<pre class=\"language-md\"><code class=\"language-md\"><span class=\"token front-matter-block\"><span class=\"token punctuation\">---<\/span>\n<span class=\"token front-matter yaml language-yaml\">license: apache-2.0\ntitle: Node.js template\nsdk: docker\nemoji: \ud83d\udc22\ncolorFrom: green\ncolorTo: green\nshort_description: A template for running Node.js in a Hugging Face Space<\/span>\n<span class=\"token punctuation\">---<\/span><\/span><\/code><\/pre>\n<h2 id=\"whats-missing\" tabindex=\"-1\">What's missing? <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2025\/11\/03\/running-nodejs-in-a-hugging-face-space\/#whats-missing\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h2>\n<p>While you can edit files individually on Hugging Face's Space\n<a href=\"https:\/\/huggingface.co\/spaces\/tomayac\/nodejs-template\/tree\/main\">Files<\/a> view\nwith syntax highlighting and editing support, it's not a full-blown IDE, but you\ncan clone your Space with <code>git<\/code> and work on it locally (or with an online IDE\nlike <a href=\"https:\/\/vscode.dev\/\">VS Code<\/a>).<\/p>\n<pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">git<\/span> clone git@hf.co:spaces\/tomayac\/nodejs-template<\/code><\/pre>\n<h2 id=\"see-it-live-and-bonus\" tabindex=\"-1\">See it live and bonus <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2025\/11\/03\/running-nodejs-in-a-hugging-face-space\/#see-it-live-and-bonus\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h2>\n<p>And this is it really. Now you have a running Node.js app that you can\n<a href=\"https:\/\/huggingface.co\/spaces\/tomayac\/nodejs-template?duplicate=true\">duplicate<\/a>\nwhenever you need to spin up a Node.js server. The best is that this Space runs\nin its own main browser context,\n<a href=\"https:\/\/tomayac-nodejs-template.hf.space\/\"><code>https:\/\/tomayac-nodejs-template.hf.space\/<\/code><\/a>\nin the concrete case, not somewhere in an iframe, which means you can set\nheaders like\n<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Headers\/Cross-Origin-Opener-Policy\"><code>COOP<\/code><\/a>\nor\n<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Headers\/Cross-Origin-Embedder-Policy\"><code>COEP<\/code><\/a>\nto get access to powerful features like\n<a href=\"https:\/\/web.dev\/articles\/why-coop-coep\"><code>SharedArrayBuffer<\/code> and friends<\/a>. In\nfact, Hugging Face even allows you to set these\n<a href=\"https:\/\/huggingface.co\/docs\/hub\/spaces-config-reference#:~:text=)%20is%20acceptable.-,custom_headers,-%3A%20Dict%5Bstring\"><code>custom_headers<\/code><\/a>\nby default in the YAML front matter config at the beginning of the <code>README.md<\/code>.\nNote, though, that adding these headers means your app will only run in\nstandalone mode, but no longer in the default Space iframed view.<\/p>\n<pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">custom_headers<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">cross-origin-embedder-policy<\/span><span class=\"token punctuation\">:<\/span> require<span class=\"token punctuation\">-<\/span>corp\n  <span class=\"token key atrule\">cross-origin-opener-policy<\/span><span class=\"token punctuation\">:<\/span> same<span class=\"token punctuation\">-<\/span>origin\n  <span class=\"token key atrule\">cross-origin-resource-policy<\/span><span class=\"token punctuation\">:<\/span> cross<span class=\"token punctuation\">-<\/span>origin<\/code><\/pre>\n<p>Happy hacking!<\/p>\n\n\t\t\t<p>\n\t\t\t\t<img alt=\"Thomas Steiner\" width=\"32\" height=\"32\" src=\"https:\/\/blog.tomayac.com\/feed.php?dl=https%3A%2F%2Fblog.tomayac.com%2F2025%2F11%2F03%2Frunning-nodejs-in-a-hugging-face-space%2F&dp=%2F2025%2F11%2F03%2Frunning-nodejs-in-a-hugging-face-space%2F&dt=Running%20Node.js%20in%20a%20Hugging%20Face%20Space\" alt=\"\">\n\t\t\t\t<br\/>This post appeared first on <a href=\"https:\/\/blog.tomayac.com\/2025\/11\/03\/running-nodejs-in-a-hugging-face-space\/\">https:\/\/blog.tomayac.com\/2025\/11\/03\/running-nodejs-in-a-hugging-face-space\/<\/a>.\n\t\t\t<\/p>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\t\t\tLike many developers, I was bummed when I learned about the<br \/>\nshutdown of Glitch.<br \/>\nWhile GitHub Pages works great for web apps that<br \/>\ndon&#8217;t need a server, I struggled with finding a drop-in replacement for hosting<br \/>\nserver-based apps, and specifically app&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"intlwemo_wallet_address":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-3576","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/posts\/3576","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/comments?post=3576"}],"version-history":[{"count":1,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/posts\/3576\/revisions"}],"predecessor-version":[{"id":3577,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/posts\/3576\/revisions\/3577"}],"wp:attachment":[{"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/media?parent=3576"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/categories?post=3576"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/tags?post=3576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}