{"id":167951,"date":"2026-05-23T18:41:07","date_gmt":"2026-05-23T15:41:07","guid":{"rendered":"https:\/\/computingforgeeks.com\/?p=167951"},"modified":"2026-05-24T00:43:16","modified_gmt":"2026-05-23T21:43:16","slug":"podman-quadlet-systemd-fedora","status":"publish","type":"post","link":"https:\/\/computingforgeeks.com\/podman-quadlet-systemd-fedora\/","title":{"rendered":"Run Podman Quadlet Systemd Containers on Fedora 44 \/ 43 \/ 42"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">If you have ever run a container long-term with <code>podman run -d<\/code>, you have written a deployment with no lifecycle, no logging integration, and no obvious way to restart on host reboot. Quadlet is Podman&#8217;s answer to that gap: drop a small declarative file in the right systemd directory, run <code>systemctl daemon-reload<\/code>, and Podman generates a proper systemd unit that integrates with the journal, supports <code>restart<\/code> policies, plays nicely with <code>systemctl enable<\/code>, and survives reboots cleanly. Both rootful and rootless flavors work the same way.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide walks through running Podman 5 containers as systemd services on Fedora 44 using Quadlet. You will deploy a real Nginx container as a rootful systemd unit, a Caddy container as a rootless unit under your own user, see the generated systemd unit, and walk through the additional Quadlet file types (.network, .volume, .build, .pod) that compose into multi-container deployments. The same syntax works on Fedora 43 and Fedora 42 because Podman 5 has shipped as the default on every release since F40. Container basics like image pulls and image listing come from the <a href=\"https:\/\/computingforgeeks.com\/dnf5-cheatsheet-fedora\/\">DNF5 cheatsheet<\/a> install path that gives you Podman.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verify Podman 5 ships Quadlet<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quadlet has been part of the Podman package since Podman 4.4 and became the recommended deployment style starting with Podman 5. Fedora 44 ships Podman 5.8.x as the default; no extra install required:<\/p>\n\n\n\n<pre class=\"wp-block-code code\"><code>podman --version\nrpm -q podman containers-common\nls \/usr\/libexec\/podman\/quadlet<\/code><\/pre>\n\n\n<p>The third command is the proof that Quadlet is actually present on disk; it is the binary the systemd generator invokes when it sees a <code>.container<\/code> file. Expected output on F44 is:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>podman version 5.8.2\npodman-5.8.2-1.fc44.x86_64\ncontainers-common-0.67.0-1.fc44.noarch\n\/usr\/libexec\/podman\/quadlet<\/code><\/pre>\n\n\n<p>Quadlet uses two well-known directory paths. Rootful units live in <code>\/etc\/containers\/systemd\/<\/code>; rootless units under the current user live in <code>~\/.config\/containers\/systemd\/<\/code>. The first one already exists on a default install (owned by the <code>podman<\/code> package); the second you create on demand:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>ls -ld \/etc\/containers\/systemd\/\nmkdir -p ~\/.config\/containers\/systemd\/<\/code><\/pre>\n\n\n<p>The rootful directory is the one most setups start with; the rootless directory becomes important when you want containers tied to a user account rather than the host machine.<\/p>\n<h2>Deploy a rootful container with a .container file<\/h2>\n<p>The minimal Quadlet unit type is <code>.container<\/code>. It declares one container with its image, ports, and lifecycle. Create a unit file for an Nginx demo:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo vi \/etc\/containers\/systemd\/web.container<\/code><\/pre>\n\n\n<p>Paste the following. Three sections matter: <code>[Container]<\/code> is Quadlet-specific (image, ports, name, environment), <code>[Service]<\/code> is standard systemd (restart policy, resource limits), and <code>[Install]<\/code> determines what <code>systemctl enable<\/code> hooks into:<\/p>\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"920\" height=\"800\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/wm-quadlet-container-file-fedora-44.png\" alt=\"Quadlet web.container unit file content with Image and PublishPort on Fedora 44\" class=\"wp-image-167948\" title=\"\" srcset=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/wm-quadlet-container-file-fedora-44.png 920w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/wm-quadlet-container-file-fedora-44-300x261.png 300w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/wm-quadlet-container-file-fedora-44-768x668.png 768w\" sizes=\"auto, (max-width: 920px) 100vw, 920px\" \/><\/figure>\n\n\n<p>The plain-text version, same content:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>&#91;Unit]\nDescription=Nginx demo container via Quadlet\nAfter=local-fs.target\n\n&#91;Container]\nContainerName=web\nImage=docker.io\/library\/nginx:1.27-alpine\nPublishPort=8080:80\nAutoUpdate=registry\nEnvironment=NGINX_HOST=example.com\n\n&#91;Service]\nRestart=always\n\n&#91;Install]\nWantedBy=multi-user.target default.target<\/code><\/pre>\n\n\n<p>Reload systemd to trigger the Quadlet generator. It scans the well-known directory, sees the new file, and writes a translated <code>.service<\/code> unit to <code>\/run\/systemd\/generator\/<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo systemctl daemon-reload<\/code><\/pre>\n\n\n<p>Inspect what was generated. The output is annotated with the source file path so you can tell at a glance that this unit came from a Quadlet, not from a hand-written systemd file:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo systemctl cat web.service | head -25<\/code><\/pre>\n\n\n<p>You will see something like the following. The <code>SourcePath<\/code> directive points back at the original <code>.container<\/code> file; the <code>ExecStop<\/code> commands handle clean shutdown via <code>podman rm<\/code>:<\/p>\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"920\" height=\"800\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/wm-quadlet-generated-unit-fedora-44.png\" alt=\"systemctl cat showing generated unit from Quadlet on Fedora 44\" class=\"wp-image-167949\" title=\"\" srcset=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/wm-quadlet-generated-unit-fedora-44.png 920w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/wm-quadlet-generated-unit-fedora-44-300x261.png 300w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/wm-quadlet-generated-unit-fedora-44-768x668.png 768w\" sizes=\"auto, (max-width: 920px) 100vw, 920px\" \/><\/figure>\n\n\n<p>Start the unit. Pulling the Nginx image (about 20 MB) takes a few seconds the first time; subsequent starts use the cached image:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo systemctl start web.service\nsudo systemctl status web.service --no-pager | head -10<\/code><\/pre>\n\n\n<p>The status line should read <code>Active: active (running)<\/code>. Confirm the container is up via the Podman CLI and curl the published port to validate the network plumbing:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo podman ps\ncurl -sI http:\/\/localhost:8080\/<\/code><\/pre>\n\n\n<p>Nginx responds <code>HTTP\/1.1 200 OK<\/code>. The before-and-after sequence on a live F44 box:<\/p>\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"920\" height=\"800\" src=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/wm-quadlet-running-fedora-44.png\" alt=\"systemctl status active running, podman ps and curl 200 for Quadlet nginx on Fedora 44\" class=\"wp-image-167950\" title=\"\" srcset=\"https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/wm-quadlet-running-fedora-44.png 920w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/wm-quadlet-running-fedora-44-300x261.png 300w, https:\/\/computingforgeeks.com\/wp-content\/uploads\/2026\/05\/wm-quadlet-running-fedora-44-768x668.png 768w\" sizes=\"auto, (max-width: 920px) 100vw, 920px\" \/><\/figure>\n\n\n<p>The container is now a real systemd citizen: <code>journalctl -u web.service<\/code> shows the container logs, <code>systemctl enable web.service<\/code> would normally hook it into a target for boot, but Quadlet auto-handles this when <code>WantedBy<\/code> is in the <code>[Install]<\/code> section.<\/p>\n<h2>Deploy a rootless container under your user<\/h2>\n<p>The rootless flow is the same, with three differences: the unit file lives in <code>~\/.config\/containers\/systemd\/<\/code>, you talk to systemd with <code>systemctl --user<\/code>, and you need lingering enabled if you want the unit to survive logout:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>mkdir -p ~\/.config\/containers\/systemd ~\/caddy-data\nloginctl enable-linger $USER\nvi ~\/.config\/containers\/systemd\/api.container<\/code><\/pre>\n\n\n<p>The <code>%h<\/code> token expands to the user&#8217;s home directory inside the Volume mapping (a Quadlet-specific convenience), and the <code>:Z<\/code> suffix tells Podman to relabel the mount so SELinux lets the container write to it:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>&#91;Unit]\nDescription=Caddy demo (rootless) via Quadlet\n\n&#91;Container]\nContainerName=api\nImage=docker.io\/library\/caddy:2.10-alpine\nPublishPort=8081:80\nVolume=%h\/caddy-data:\/data:Z\n\n&#91;Service]\nRestart=on-failure\n\n&#91;Install]\nWantedBy=default.target<\/code><\/pre>\n\n\n<p>Reload the user systemd, start the unit, verify:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>systemctl --user daemon-reload\nsystemctl --user start api.service\nsystemctl --user status api.service --no-pager | head -10\npodman ps\ncurl -sI http:\/\/localhost:8081\/<\/code><\/pre>\n\n\n<p>Same drill: status reads active, <code>podman ps<\/code> lists the container, and <code>curl<\/code> returns 200. The crucial difference is the user namespace: the container&#8217;s UID 0 is your user&#8217;s UID on the host, so files the container writes to <code>~\/caddy-data<\/code> are owned by you, not root. The <a href=\"https:\/\/computingforgeeks.com\/selinux-survival-fedora\/\">SELinux survival guide<\/a> covers what the <code>:Z<\/code> mount option actually does at the policy layer.<\/p>\n<h2>Compose containers with .network, .volume, and .pod<\/h2>\n<p>Real deployments need more than one container plus a shared volume and network. Quadlet supports four file types beyond <code>.container<\/code>:<\/p>\n<table>\n<thead>\n<tr>\n<th>File type<\/th>\n<th>Defines<\/th>\n<th>Refer to it in .container as<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>.network<\/code><\/td>\n<td>A user-defined Podman network<\/td>\n<td><code>Network=mynet.network<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>.volume<\/code><\/td>\n<td>A named Podman volume<\/td>\n<td><code>Volume=mydata.volume:\/data<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>.pod<\/code><\/td>\n<td>A Podman pod (multiple containers, shared netns)<\/td>\n<td><code>Pod=mypod.pod<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>.build<\/code><\/td>\n<td>An image to build from a Containerfile\/Dockerfile<\/td>\n<td><code>Image=myimage.build<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>A two-tier app (Postgres + a Node API) usually maps to one <code>.network<\/code>, one <code>.volume<\/code> (the database files), and two <code>.container<\/code> files referencing them. Example database side:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo vi \/etc\/containers\/systemd\/app-net.network<\/code><\/pre>\n\n\n<p>Network unit content:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>&#91;Network]\nNetworkName=app-net\nDisableDNS=false\nDNS=1.1.1.1<\/code><\/pre>\n\n\n<p>Volume unit at <code>\/etc\/containers\/systemd\/app-db-data.volume<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>&#91;Volume]\nVolumeName=app-db-data<\/code><\/pre>\n\n\n<p>Container unit at <code>\/etc\/containers\/systemd\/app-db.container<\/code>, referencing the above by their unit names:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>&#91;Container]\nContainerName=app-db\nImage=docker.io\/library\/postgres:17-alpine\nNetwork=app-net.network\nVolume=app-db-data.volume:\/var\/lib\/postgresql\/data:Z\nEnvironment=POSTGRES_PASSWORD=changeme\nEnvironment=POSTGRES_DB=app\n\n&#91;Service]\nRestart=always\n\n&#91;Install]\nWantedBy=multi-user.target<\/code><\/pre>\n\n\n<p>Reload and start; the generator brings the network and volume up first, then the container that depends on them:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo systemctl daemon-reload\nsudo systemctl start app-db.service\nsudo podman ps\nsudo podman network ls\nsudo podman volume ls<\/code><\/pre>\n\n\n<p>The output of <code>podman network ls<\/code> shows <code>app-net<\/code> in the list, <code>podman volume ls<\/code> shows <code>app-db-data<\/code>, and the Postgres container reports listening on its standard port inside the network.<\/p>\n<h2>Auto-update images with AutoUpdate=registry<\/h2>\n<p>One of Quadlet&#8217;s biggest selling points over hand-written systemd units is image auto-update. Add a single line to the <code>[Container]<\/code> section, plus a system-wide systemd timer, and Podman pulls the new image on every check and restarts the container if a newer tag of the same digest exists:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>AutoUpdate=registry<\/code><\/pre>\n\n\n<p>Enable the auto-update timer for the host. It runs once per day by default; check current state with:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo systemctl enable --now podman-auto-update.timer\nsudo systemctl list-timers podman-auto-update --no-pager<\/code><\/pre>\n\n\n<p>Force an immediate check (useful when validating the workflow) with <code>sudo podman auto-update<\/code>. The command reports which containers were checked, whether a new image was pulled, and whether the unit was restarted. Containers without <code>AutoUpdate=registry<\/code> in their Quadlet definition are silently skipped, which is exactly the opt-in behavior you want.<\/p>\n<h2>Convert existing docker-compose files<\/h2>\n<p>For teams migrating from Docker Compose or Kubernetes manifests, the cleanest path is one <code>.container<\/code> file per service. There is no auto-conversion tool that handles the full Compose feature set; the manual mapping is straightforward enough:<\/p>\n<table>\n<thead>\n<tr>\n<th>Compose key<\/th>\n<th>Quadlet equivalent<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>image<\/code><\/td>\n<td><code>Image=<\/code> in <code>[Container]<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>ports<\/code><\/td>\n<td><code>PublishPort=8080:80<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>volumes<\/code><\/td>\n<td><code>Volume=path-or-volume.volume:\/in\/container:Z<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>environment<\/code><\/td>\n<td><code>Environment=KEY=value<\/code> (one per line)<\/td>\n<\/tr>\n<tr>\n<td><code>env_file<\/code><\/td>\n<td><code>EnvironmentFile=\/path\/to\/file<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>depends_on<\/code><\/td>\n<td><code>[Unit] After=other.service<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>restart: always<\/code><\/td>\n<td><code>[Service] Restart=always<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>networks<\/code><\/td>\n<td><code>Network=mynet.network<\/code> + matching <code>.network<\/code> file<\/td>\n<\/tr>\n<tr>\n<td><code>healthcheck<\/code><\/td>\n<td><code>HealthCmd=<\/code>, <code>HealthInterval=<\/code>, <code>HealthRetries=<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>For the few Compose features without a clean mapping (build dependencies across services, profiles, the <code>extends<\/code> keyword), use <code>podman-compose<\/code> as a stop-gap and migrate one service at a time as you touch it.<\/p>\n<h2>Troubleshoot common Quadlet errors<\/h2>\n<h3>Error: &#8220;Unit web.service not found&#8221; after daemon-reload<\/h3>\n<p>The Quadlet generator did not pick up your file. Most common causes: the file is not under one of the watched directories (<code>\/etc\/containers\/systemd\/<\/code>, <code>\/usr\/share\/containers\/systemd\/<\/code>, or <code>~\/.config\/containers\/systemd\/<\/code> for rootless), or the filename is missing the <code>.container<\/code> extension. Verify with:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo \/usr\/libexec\/podman\/quadlet -dryrun \/etc\/containers\/systemd\/ 2&gt;&amp;1 | head -20<\/code><\/pre>\n\n\n<p>Dry-run mode prints what would be generated for each file, plus any parse errors. Fix the warnings before re-running <code>daemon-reload<\/code>.<\/p>\n<h3>Error: &#8220;ContainerName &#8216;web&#8217; is already in use&#8221;<\/h3>\n<p>A previous run of the same container left a dangling container with the same name. The Quadlet-generated <code>ExecStopPost<\/code> tries to clean this up, but a SIGKILL or sudden host reboot can leave one behind. Remove it manually:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo podman rm -f web\nsudo systemctl start web.service<\/code><\/pre>\n\n\n<p>Once the dangling container is gone, the unit starts cleanly and Podman recreates the container with the desired name.<\/p>\n<h3>Error: rootless container fails to write to a host-mounted volume<\/h3>\n<p>SELinux is blocking the write because the volume is not labelled <code>container_file_t<\/code>. Add the <code>:Z<\/code> mount option (or <code>:z<\/code> for shared, when multiple containers need access). If you cannot edit the volume line, label the path manually:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>sudo semanage fcontext -a -t container_file_t \"\/path\/to\/data(\/.*)?\"\nsudo restorecon -Rv \/path\/to\/data<\/code><\/pre>\n\n\n<p>Restart the container after relabelling and the writes succeed; the label change is persistent across reboots.<\/p>\n<h3>Error: rootless unit stops when you log out<\/h3>\n<p>Lingering is not enabled for your user, so systemd kills the user manager when you log out. Enable lingering (once, persistent) with <code>loginctl enable-linger $USER<\/code>; check the status with <code>loginctl show-user $USER | grep Linger<\/code>.<\/p>\n<h3>Error: image pull fails with &#8220;no such host&#8221; or DNS errors<\/h3>\n<p>The container is starting before the network is up. The Quadlet generator adds <code>Wants=network-online.target<\/code> automatically, but very fast-booting hosts can still race. Add an explicit retry in the <code>[Service]<\/code> section:<\/p>\n\n\n<pre class=\"wp-block-code code\"><code>&#91;Service]\nRestart=on-failure\nRestartSec=10s<\/code><\/pre>\n\n\n<p>The image pull happens once on first start, then the cached image is used; transient DNS failures recover on the next restart attempt.<\/p>\n<p>With Quadlet, the line between &#8220;a container running&#8221; and &#8220;a service running&#8221; disappears. The integration with systemd is real, the rootless path actually works, and the auto-update behavior makes long-running deployments much less of a babysit. Pair this with the <a href=\"https:\/\/computingforgeeks.com\/install-distrobox-toolbox-fedora\/\">Distrobox and Toolbox guide<\/a> for interactive container dev environments, the <a href=\"https:\/\/computingforgeeks.com\/podman-compose-fedora\/\">Podman Compose setup<\/a> for the migration path from <code>docker-compose.yml<\/code>, and the <a href=\"https:\/\/computingforgeeks.com\/configure-firewalld-fedora\/\">firewalld walkthrough<\/a> for the host-side network policy that should sit in front of the published ports.<\/p>","protected":false},"excerpt":{"rendered":"<p>If you have ever run a container long-term with podman run -d, you have written a deployment with no lifecycle, no logging integration, and no obvious way to restart on host reboot. Quadlet is Podman&#8217;s answer to that gap: drop a small declarative file in the right systemd directory, run systemctl daemon-reload, and Podman generates &#8230; <a title=\"Run Podman Quadlet Systemd Containers on Fedora 44 \/ 43 \/ 42\" class=\"read-more\" href=\"https:\/\/computingforgeeks.com\/podman-quadlet-systemd-fedora\/\" aria-label=\"Read more about Run Podman Quadlet Systemd Containers on Fedora 44 \/ 43 \/ 42\">Read more<\/a><\/p>\n","protected":false},"author":28,"featured_media":167947,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[316,29,299,47,50],"tags":[681,282],"cfg_series":[39847],"class_list":["post-167951","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-containers","category-fedora","category-how-to","category-linux","category-linux-tutorials","tag-fedora","tag-linux","cfg_series-fedora-44-workstation"],"_links":{"self":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/167951","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/comments?post=167951"}],"version-history":[{"count":2,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/167951\/revisions"}],"predecessor-version":[{"id":167974,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/167951\/revisions\/167974"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media\/167947"}],"wp:attachment":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media?parent=167951"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/categories?post=167951"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/tags?post=167951"},{"taxonomy":"cfg_series","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/cfg_series?post=167951"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}