{
  "about" : "",
  "acceptsDonation" : false,
  "articles" : [
    {
      "articleType" : 0,
      "attachments" : [

      ],
      "cids" : {

      },
      "content" : "After you clone the project, create a `local.xcconfig` file inside the Planet subdirectory, not at the root of the project.\r\n\r\n```\r\ncd Planet\r\ncode local.xcconfig\r\n```\r\n\r\nThe `local.xcconfig` file should be in the same directory as `Planet.xcconfig`, not at the root level of the project.\r\n\r\nFill it with the following, and replace `DEVELOPMENT_TEAM` with your own team ID.\r\n\r\n```\r\nCODE_SIGN_STYLE = Automatic\r\nDEVELOPMENT_TEAM = 66KP7KX9MX\r\nPLANET_APP_ICON_NAME = AppIcon-Debug\r\n\r\nWALLETCONNECTV2_PROJECT_ID = \"\"\r\nETHERSCAN_API_TOKEN = \"\"\r\n\r\nASSETCATALOG_COMPILER_GENERATE_ASSET_SYMBOLS = NO\r\nASSETCATALOG_COMPILER_GENERATE_ASSET_SYMBOL_FRAMEWORKS = \"\"\r\nASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = NO\r\n```\r\n\r\nIf you want to touch the Wallet-related parts, please supply your own WalletConnect project ID and Etherscan API token.",
      "contentRendered" : "<p>After you clone the project, create a <code>local.xcconfig</code> file inside the Planet subdirectory, not at the root of the project.</p>\n<pre><code>cd Planet\ncode local.xcconfig\n</code></pre>\n<p>The <code>local.xcconfig</code> file should be in the same directory as <code>Planet.xcconfig</code>, not at the root level of the project.</p>\n<p>Fill it with the following, and replace <code>DEVELOPMENT_TEAM</code> with your own team ID.</p>\n<pre><code>CODE_SIGN_STYLE = Automatic\nDEVELOPMENT_TEAM = 66KP7KX9MX\nPLANET_APP_ICON_NAME = AppIcon-Debug\n\nWALLETCONNECTV2_PROJECT_ID = &quot;&quot;\nETHERSCAN_API_TOKEN = &quot;&quot;\n\nASSETCATALOG_COMPILER_GENERATE_ASSET_SYMBOLS = NO\nASSETCATALOG_COMPILER_GENERATE_ASSET_SYMBOL_FRAMEWORKS = &quot;&quot;\nASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = NO\n</code></pre>\n<p>If you want to touch the Wallet-related parts, please supply your own WalletConnect project ID and Etherscan API token.</p>\n",
      "created" : 787851938.084845,
      "externalLink" : "",
      "hasAudio" : false,
      "hasVideo" : false,
      "id" : "63B38F91-2690-4D2A-8AFB-54084794E2D4",
      "link" : "/build/",
      "slug" : "build",
      "tags" : {

      },
      "title" : "How to Build"
    },
    {
      "articleType" : 0,
      "attachments" : [
        "follow-df-json.png"
      ],
      "cids" : {
        "follow-df-json.png" : "QmXrv4AuZAdZxmhqLcfEa6zjN5dG9o3159Ht2uANYUMRZ1"
      },
      "content" : "Planet is more than just a website builder. You can also use it to follow updates from various content sources, including:\n\n- Other Planet sites published via **IPNS** addresses, or via **ENS** (.eth) / **SNS** (.sol) addresses\n- **RSS**, **Atom**, or **JSON Feeds** on HTTPS addresses\n\nTo follow a source, click the <kbd>+</kbd> button in the main interface and select **Follow Planet**. Then enter the address to start receiving updates.\n\n<figure>\n<img src=\"follow-df-json.png\" alt=\"Follow Daring Fireball with Planet\" />\n<figcaption>Follow Daring Fireball JSON Feed with Planet</figcaption>\n</figure>",
      "contentRendered" : "<p>Planet is more than just a website builder. You can also use it to follow updates from various content sources, including:</p>\n<ul>\n<li>Other Planet sites published via <strong>IPNS</strong> addresses, or via <strong>ENS</strong> (.eth) / <strong>SNS</strong> (.sol) addresses</li>\n<li><strong>RSS</strong>, <strong>Atom</strong>, or <strong>JSON Feeds</strong> on HTTPS addresses</li>\n</ul>\n<p>To follow a source, click the <kbd>+</kbd> button in the main interface and select <strong>Follow Planet</strong>. Then enter the address to start receiving updates.</p>\n<figure>\n<img src=\"follow-df-json.png\" alt=\"Follow Daring Fireball with Planet\" />\n<figcaption>Follow Daring Fireball JSON Feed with Planet</figcaption>\n</figure>\n",
      "created" : 768426584.529593,
      "externalLink" : "",
      "hasAudio" : false,
      "hasVideo" : false,
      "heroImage" : "https://docs.planetable.eth.sucks/follow/follow-df-json.png",
      "heroImageFilename" : "follow-df-json.png",
      "heroImageHeight" : 1584,
      "heroImageURL" : "https://docs.planetable.eth.sucks/follow/follow-df-json.png",
      "heroImageWidth" : 2608,
      "id" : "60B86B46-98D4-42B8-9CC3-006158D2235A",
      "link" : "/follow/",
      "slug" : "follow",
      "tags" : {

      },
      "title" : "Follow Updates"
    },
    {
      "articleType" : 0,
      "attachments" : [
        "planet-api-server.png",
        "web-client-elementary.webp"
      ],
      "cids" : {
        "planet-api-server.png" : "QmUzjYJK5CFUVkHj2arTvvSfdySqe1qx3BL4Hn6V8vPErT",
        "web-client-elementary.webp" : "Qme7uKSRo5MqpP69YMeQi8Q6mvPPM3azZxjJs1FGaoRSpX"
      },
      "content" : "Planet provides a RESTful API server for automation and remote access. You can enable the API server in the **Settings** menu.\n\n<figure>\n<img src=\"planet-api-server.png\" alt=\"Planet API Server\" />\n<figcaption>Settings ❯ Planet API Server</figcaption>\n</figure>\n\nBy default, the API server runs on port **8086**. Once enabled, it can be accessed at:\n\nhttp://localhost:8086/\n\nOr via your local network IP address.\n\n## API Endpoints\n\nHere is the full list of API endpoints:\n\nhttps://github.com/Planetable/Planet/blob/main/Technotes/API.md\n\n## Web Client\n\nPlanet includes a built-in web client for remote access. Once the API server is running, you can access the web client at:\n\nhttp://localhost:8086/app/\n\n<figure>\n<img src=\"web-client-elementary.webp\" alt=\"Planet Web Client\" />\n<figcaption>Planet Web Client</figcaption>\n</figure>",
      "contentRendered" : "<p>Planet provides a RESTful API server for automation and remote access. You can enable the API server in the <strong>Settings</strong> menu.</p>\n<figure>\n<img src=\"planet-api-server.png\" alt=\"Planet API Server\" />\n<figcaption>Settings ❯ Planet API Server</figcaption>\n</figure>\n<p>By default, the API server runs on port <strong>8086</strong>. Once enabled, it can be accessed at:</p>\n<p><a href=\"http://localhost:8086/\">http://localhost:8086/</a></p>\n<p>Or via your local network IP address.</p>\n<h2>API Endpoints</h2>\n<p>Here is the full list of API endpoints:</p>\n<p><a href=\"https://github.com/Planetable/Planet/blob/main/Technotes/API.md\">https://github.com/Planetable/Planet/blob/main/Technotes/API.md</a></p>\n<h2>Web Client</h2>\n<p>Planet includes a built-in web client for remote access. Once the API server is running, you can access the web client at:</p>\n<p><a href=\"http://localhost:8086/app/\">http://localhost:8086/app/</a></p>\n<figure>\n<img src=\"web-client-elementary.webp\" alt=\"Planet Web Client\" />\n<figcaption>Planet Web Client</figcaption>\n</figure>\n",
      "created" : 768426407.830543,
      "externalLink" : "",
      "hasAudio" : false,
      "hasVideo" : false,
      "heroImage" : "https://docs.planetable.eth.sucks/api/planet-api-server.png",
      "heroImageFilename" : "planet-api-server.png",
      "heroImageHeight" : 788,
      "heroImageURL" : "https://docs.planetable.eth.sucks/api/planet-api-server.png",
      "heroImageWidth" : 1068,
      "id" : "C43558D7-5964-4764-98F6-2A1B343ED41D",
      "link" : "/api/",
      "slug" : "api",
      "tags" : {

      },
      "title" : "API Access"
    },
    {
      "articleType" : 0,
      "attachments" : [
        "ens-edit-records.png"
      ],
      "cids" : {
        "ens-edit-records.png" : "Qmd5Dvdc7cU5UsNnmnzAV1c9NvsYFXcDCAeUK1CVbXGFgE"
      },
      "content" : "ENS (Ethereum Name Service) is a powerful naming system running on the Ethereum network. With Planet, you can set up and keep updating a blog on yourname.eth.\n\n## Register ENS\n\nYou can register an ENS name at [app.ens.domains](https://app.ens.domains/).\n\n## Link Planet Site to ENS\n\nAfter registering your ENS name, go to the **Records** page of your name and click **Edit Records**.\n\nIn the Planet app, right-click on the site you want to link to your ENS and select **Copy IPNS**.\n\nAppend `ipns://` to the IPNS string (it starts with `k51`) you copied, and paste it into the `Other ❯ Content Hash` field like this:\n\n<img src=\"ens-edit-records.png\" width=\"964\" alt=\"ENS Edit Records\" />\n\nThen click **Save**.\n\nIt will take 1–2 minutes for the change to take effect. After that, you can visit your site using these ENS gateways:\n\n- yourname.eth + `.limo`\n- yourname.eth + `.sucks`\n\nFor example, my ENS name is `planetable.eth`, and I can access my site using these addresses:\n\n- [planetable.eth.limo](https://planetable.eth.limo/)\n- [planetable.eth.sucks](https://planetable.eth.sucks/)",
      "contentRendered" : "<p>ENS (Ethereum Name Service) is a powerful naming system running on the Ethereum network. With Planet, you can set up and keep updating a blog on yourname.eth.</p>\n<h2>Register ENS</h2>\n<p>You can register an ENS name at <a href=\"https://app.ens.domains/\">app.ens.domains</a>.</p>\n<h2>Link Planet Site to ENS</h2>\n<p>After registering your ENS name, go to the <strong>Records</strong> page of your name and click <strong>Edit Records</strong>.</p>\n<p>In the Planet app, right-click on the site you want to link to your ENS and select <strong>Copy IPNS</strong>.</p>\n<p>Append <code>ipns://</code> to the IPNS string (it starts with <code>k51</code>) you copied, and paste it into the <code>Other ❯ Content Hash</code> field like this:</p>\n<img src=\"ens-edit-records.png\" width=\"964\" alt=\"ENS Edit Records\" />\n<p>Then click <strong>Save</strong>.</p>\n<p>It will take 1–2 minutes for the change to take effect. After that, you can visit your site using these ENS gateways:</p>\n<ul>\n<li>yourname.eth + <code>.limo</code></li>\n<li>yourname.eth + <code>.sucks</code></li>\n</ul>\n<p>For example, my ENS name is <code>planetable.eth</code>, and I can access my site using these addresses:</p>\n<ul>\n<li><a href=\"https://planetable.eth.limo/\">planetable.eth.limo</a></li>\n<li><a href=\"https://planetable.eth.sucks/\">planetable.eth.sucks</a></li>\n</ul>\n",
      "created" : 768425986.331914,
      "externalLink" : "",
      "hasAudio" : false,
      "hasVideo" : false,
      "heroImage" : "https://docs.planetable.eth.sucks/ens/ens-edit-records.png",
      "heroImageFilename" : "ens-edit-records.png",
      "heroImageHeight" : 1734,
      "heroImageURL" : "https://docs.planetable.eth.sucks/ens/ens-edit-records.png",
      "heroImageWidth" : 1928,
      "id" : "27E257FB-B74D-4394-B642-4257E2AB48B3",
      "link" : "/ens/",
      "slug" : "ens",
      "tags" : {

      },
      "title" : "ENS"
    },
    {
      "articleType" : 0,
      "attachments" : [
        "template-8bit.png",
        "template-browser.png",
        "template-croptop.png",
        "template-grid.png",
        "template-sepia.png",
        "template-plain.png"
      ],
      "cids" : {
        "template-8bit.png" : "QmPRZimTt6izt25szG6XUoQ9x3MmBpTGsfh8x7zuGfQ1UE",
        "template-browser.png" : "QmYvi5zkDrGmTMEcTquyqFZznuBLHpSExKod8HNfeNEFTc",
        "template-croptop.png" : "QmUqVXG2rqFB7ZxDzJZA4ZeTCmnivAMqfsEtEtW3mJNN49",
        "template-grid.png" : "QmNUodc3uc4de9YMSjUHn8piANQnU9KhY5q2fcLpffPRn8",
        "template-plain.png" : "QmT5XFdundJMGhmYJgZHKdsAPkyHR4kCeo8vFKGSeuLPP7",
        "template-sepia.png" : "QmWjUvLU6Wh33wu62hpxCK3btYMRGzJcLzkBWNn2J9YuHk"
      },
      "content" : "When building sites with Planet, you can switch between templates (or themes) for the same content. You can even build your own template with HTML.\n\nPlanet includes several built-in templates; here is an overview of them.\n\n<table cellspacing=\"0\" cellpadding=\"0\" width=\"100%\">\n<tr>\n\t<td width=\"40%\" style=\"padding: 0px\">\n\t\t<a href=\"https://planetable.eth.sucks/\" target=\"_blank\"><img width=\"888\" alt=\"template-plain\" src=\"template-plain.png\" style=\"border: none; display: block;\">\n\t</td>\n\t<td width=\"auto\">\n\t\t<strong>Plain</strong>\n\t\t<p style=\"line-break: auto;\">The default template. Minimal. Supports both light and dark modes.</p>\n\t\t<p>Example Site: <a href=\"https://planetable.eth.sucks/\" target=\"_blank\">planetable.eth</a></p>\n\t</td>\n</tr>\n<tr>\n\t<td width=\"40%\" style=\"padding: 0px\">\n\t\t<a href=\"https://artificial.iweb.eth.sucks/\" target=\"_blank\"><img width=\"888\" alt=\"template-sepia\" src=\"template-sepia.png\" style=\"border: none; display: block;\"></a>\n\t</td>\n\t<td width=\"auto\">\n\t\t<strong>Sepia</strong>\n\t\t<p>Great for microblogging.</p>\n\t\t<p>Example Site: <a href=\"https://artificial.iweb.eth.sucks/\" target=\"_blank\">artificial.iweb.eth</a></p>\n\t</td>\n</tr>\n<tr>\n\t<td width=\"40%\" style=\"padding: 0px\">\n\t\t<a href=\"https://gamedb.eth.sucks/\" target=\"_blank\"><img width=\"888\" alt=\"template-8bit\" src=\"template-8bit.png\" style=\"border: none; display: block\"></a>\n\t</td>\n\t<td width=\"auto\">\n\t\t<strong>8-bit</strong>\n\t\t<p>Pixelated experimental design. 8-bit nostalgia.</p>\n\t\t<p>Example Site: <a href=\"https://gamedb.eth.sucks/\" target=\"_blank\">gamedb.eth</a></p>\n\t</td>\n</tr>\n<tr>\n\t<td width=\"40%\" style=\"padding: 0px\">\n\t\t<a href=\"https://yihanphotos.eth.sucks/\" target=\"_blank\"><img width=\"888\" alt=\"template-grid\" src=\"template-grid.png\" style=\"border: none; display: block\">\n\t</td>\n\t<td width=\"auto\">\n\t\t<strong>Grid</strong>\n\t\t<p style=\"line-break: auto;\">Grid design. Great for photos. Supports both light and dark modes.</p>\n\t\t<p>Example Site: <a href=\"https://yihanphotos.eth.sucks/\" target=\"_blank\">yihanphotos.eth</a></p>\n\t</td>\n</tr>\n</table>\n\n## Template Browser\n\nTool for managing templates. You can find **Template Browser** under the menu **Tools**.\n\n<img width=\"1153\" alt=\"template-browser\" src=\"template-browser.png\">",
      "contentRendered" : "<p>When building sites with Planet, you can switch between templates (or themes) for the same content. You can even build your own template with HTML.</p>\n<p>Planet includes several built-in templates; here is an overview of them.</p>\n<table cellspacing=\"0\" cellpadding=\"0\" width=\"100%\">\n<tr>\n\t<td width=\"40%\" style=\"padding: 0px\">\n\t\t<a href=\"https://planetable.eth.sucks/\" target=\"_blank\"><img width=\"888\" alt=\"template-plain\" src=\"template-plain.png\" style=\"border: none; display: block;\">\n\t</td>\n\t<td width=\"auto\">\n\t\t<strong>Plain</strong>\n\t\t<p style=\"line-break: auto;\">The default template. Minimal. Supports both light and dark modes.</p>\n\t\t<p>Example Site: <a href=\"https://planetable.eth.sucks/\" target=\"_blank\">planetable.eth</a></p>\n\t</td>\n</tr>\n<tr>\n\t<td width=\"40%\" style=\"padding: 0px\">\n\t\t<a href=\"https://artificial.iweb.eth.sucks/\" target=\"_blank\"><img width=\"888\" alt=\"template-sepia\" src=\"template-sepia.png\" style=\"border: none; display: block;\"></a>\n\t</td>\n\t<td width=\"auto\">\n\t\t<strong>Sepia</strong>\n\t\t<p>Great for microblogging.</p>\n\t\t<p>Example Site: <a href=\"https://artificial.iweb.eth.sucks/\" target=\"_blank\">artificial.iweb.eth</a></p>\n\t</td>\n</tr>\n<tr>\n\t<td width=\"40%\" style=\"padding: 0px\">\n\t\t<a href=\"https://gamedb.eth.sucks/\" target=\"_blank\"><img width=\"888\" alt=\"template-8bit\" src=\"template-8bit.png\" style=\"border: none; display: block\"></a>\n\t</td>\n\t<td width=\"auto\">\n\t\t<strong>8-bit</strong>\n\t\t<p>Pixelated experimental design. 8-bit nostalgia.</p>\n\t\t<p>Example Site: <a href=\"https://gamedb.eth.sucks/\" target=\"_blank\">gamedb.eth</a></p>\n\t</td>\n</tr>\n<tr>\n\t<td width=\"40%\" style=\"padding: 0px\">\n\t\t<a href=\"https://yihanphotos.eth.sucks/\" target=\"_blank\"><img width=\"888\" alt=\"template-grid\" src=\"template-grid.png\" style=\"border: none; display: block\">\n\t</td>\n\t<td width=\"auto\">\n\t\t<strong>Grid</strong>\n\t\t<p style=\"line-break: auto;\">Grid design. Great for photos. Supports both light and dark modes.</p>\n\t\t<p>Example Site: <a href=\"https://yihanphotos.eth.sucks/\" target=\"_blank\">yihanphotos.eth</a></p>\n\t</td>\n</tr>\n</table>\n<h2>Template Browser</h2>\n<p>Tool for managing templates. You can find <strong>Template Browser</strong> under the menu <strong>Tools</strong>.</p>\n<img width=\"1153\" alt=\"template-browser\" src=\"template-browser.png\">\n",
      "created" : 768425939.589855,
      "externalLink" : "",
      "hasAudio" : false,
      "hasVideo" : false,
      "heroImage" : "https://docs.planetable.eth.sucks/templates/template-browser.png",
      "heroImageFilename" : "template-browser.png",
      "heroImageHeight" : 1552,
      "heroImageURL" : "https://docs.planetable.eth.sucks/templates/template-browser.png",
      "heroImageWidth" : 2306,
      "id" : "BE61BDB0-0E5F-4A4D-B48C-8A5338C0CABF",
      "link" : "/templates/",
      "slug" : "templates",
      "tags" : {

      },
      "title" : "Templates"
    },
    {
      "articleType" : 0,
      "attachments" : [
        "ipns-docs.ipfs.tech.png",
        "ipns-planetable.eth.png",
        "ipns-vitalik.eth.png",
        "uniswap-cid.png",
        "ipfs-open.webp"
      ],
      "cids" : {
        "ipfs-open.webp" : "QmSgVJtXbXx6UYjJNcDy7ViHTtKiE4e8UcfYSVKNePeP9u",
        "ipns-docs.ipfs.tech.png" : "QmZafptesz8NiY1ReC1w5o1pCmGZAteyhRKtYrd4UYbwo3",
        "ipns-planetable.eth.png" : "QmUvcejZAbBGPdWTNXUJJUWqidfpbVNJXS8xyfohJJD5o7",
        "ipns-vitalik.eth.png" : "QmTRnw2uSFYm7fikYR2j8A1xjXxH3hqhMKyePpbXbn7ies",
        "uniswap-cid.png" : "QmduyA7qYd9pFvyAC1D6Vbu1Y6RvqbnDdP5aBm7944Hzq3"
      },
      "content" : "[IPFS](https://ipfs.io/) is an open-source program implemented in several programming languages. The Go version, named Kubo, is the most popular implementation.\r\n\r\nIPFS calculates hashes of files or folders to generate Content Identifiers (CIDs), which it then announces over a massive peer-to-peer network. Anyone with a CID can retrieve the corresponding files from the network.\r\n\r\nRunning an IPFS node to host files is straightforward. Simply visit [Kubo's releases page](https://github.com/ipfs/kubo) to download and run the single executable binary file, available for all major operating systems.\r\n\r\nNo single IPFS node holds all files—each node only provides the CIDs it possesses. However, with IPFS nodes distributed worldwide, the entire network can host very large datasets. This technology, known as a distributed hash table, enables several interesting applications:\r\n\r\n* Single file CIDs are used by many NFT projects. Each NFT image corresponds to a CID, and as long as computers host those files, the NFT images remain retrievable.\r\n* CIDs can also represent entire folders, allowing IPFS to host complete websites (which are essentially folders containing HTML, CSS, JavaScript, and other assets). Every website built with the Planet app is identified by a folder CID.\r\n\r\nThis is fundamentally different from HTTP. With HTTP, accessing specific content requires a server address. With IPFS, you only need the CID. The content may reside on any number of peers, not just a single server.\r\n\r\nPlanet includes the IPFS node software, allowing you to publish websites you build with Planet as CIDs. Other IPFS or Planet users can then access them through the distributed network.\r\n\r\n## Local Gateway\r\n\nYou can open any IPFS resource using the local gateway. Under **File**, select **Open IPFS Resource**.\n\n<figure>\n<img width=\"1120\" alt=\"ipfs-open\" src=\"ipfs-open.webp\">\n<figcaption>File ❯ Open IPFS Resource</figcaption>\n</figure>\n\r\nThis integrated IPFS node provides several useful local ports.\r\n\r\nWe have made minor adjustments to the port numbers to prevent conflicts with other programs that may utilize these ports, such as a pre-existing IPFS desktop application.\r\n\r\n## Port 18181\r\n\r\nThis port serves as the local gateway. You can use it to access content on the IPFS P2P network. Below are a few examples.\r\n\r\n### Access a specific CID\r\n\r\nFor example, the <a href=\"https://github.com/Uniswap/interface/releases/tag/v4.208.0\" target=\"_blank\">v4.2.08.0 release of Uniswap</a>:\r\n\r\n`CIDv1: bafybeiepywaseoxbaccdblzm6thhqjelkwbamd3guh24wfzba2wwvz6hve`\r\n\r\nAccess via Local Gateway:\r\n\r\n`http://localhost:18181/ipfs/bafybeiepywaseoxbaccdblzm6thhqjelkwbamd3guh24wfzba2wwvz6hve`\r\n\r\n<figure>\r\n  <center><img style=\"max-height: 400px\" src=\"uniswap-cid.png\" alt=\"Uniswap CID\" class=\"screenshot\" /></center>\r\n  <figcaption>Access Uniswap via CID</figcaption>\r\n</figure>\r\n\r\n### Access IPNS\r\n\r\nIPNS is the naming system utilized by IPFS, which can be accessed through the /ipns/ paths as demonstrated below:\r\n\r\n### ENS\r\n\r\nIf an ENS has its content hash pointing to a resource on IPFS, it can be accessed through an IPFS gateway in the following manner:\r\n\r\n`http://localhost:18181/ipns/vitalik.eth`\r\n\r\n<figure>\r\n  <center><img style=\"max-height: 400px;\" src=\"ipns-vitalik.eth.png\" alt=\"IPNS: vitalik.eth\" class=\"screenshot\" /></center>\r\n  <figcaption>IPNS: vitalik.eth</figcaption>\r\n</figure>\r\n\r\n#### DNS\r\n\r\nIf a DNS name has a <a href=\"https://dnslink.dev/\" target=\"_blank\">DNSLink</a> TXT record pointing to a resource on IPFS, it can be accessed through an IPFS gateway:\r\n\r\n`http://localhost:18181/ipns/docs.ipfs.tech/`\r\n\r\n<figure>\r\n  <center><img style=\"max-height: 400px;\" src=\"ipns-docs.ipfs.tech.png\" alt=\"IPNS: docs.ipfs.tech\" class=\"screenshot\" /></center>\r\n  <figcaption>IPNS: docs.ipfs.tech</figcaption>\r\n</figure>\r\n\r\n### IPNS\r\n\r\nBlogs and websites published from Planet are IPNS. Other Planet users can simply use Follow Planet to receive the latest updates, or these can also be accessed through the local gateway. For example, the IPNS powered <a href=\"https://app.ens.domains/name/planetable.eth/details\" target=\"_blank\">planetable.eth</a> is:\r\n\r\n<code>k51qzi5uqu5dgv8kzl1anc0m74n6t9ffdjnypdh846ct5wgpljc7rulynxa74a</code>\r\n\r\nIt can be accessed via the local gateway:\r\n\r\n`http://localhost:18181/ipns/k51qzi5uqu5dgv8kzl1anc0m74n6t9ffdjnypdh846ct5wgpljc7rulynxa74a`\r\n\r\n<figure>\r\n  <center><img style=\"max-height: 400px;\" src=\"ipns-planetable.eth.png\" alt=\"IPNS: planetable.eth\" class=\"screenshot\" /></center>\r\n  <figcaption>IPNS: planetable.eth</figcaption>\r\n</figure>\r\n\r\n## Port 5981\r\n\r\nKubo, the Go implementation of IPFS, exposes an <a href=\"https://docs.ipfs.tech/reference/kubo/rpc/\" target=\"_blank\">HTTP RPC API</a> that allows you to control the node and run the same commands that you can run from the command line.\r\n\r\nYou can access this API on port 5981. For example, the following cURL request would return the Identity of the node:\r\n\r\n`curl -X POST http://localhost:5981/api/v0/id`\r\n\r\n## Origin Isolation\r\n\r\nOrigin isolation is an important security feature for decentralized app front-ends running on IPFS gateways. So, when you try to access a URL like this:\r\n\r\n`http://localhost:18181/ipfs/bafybeiepywaseoxbaccdblzm6thhqjelkwbamd3guh24wfzba2wwvz6hve`\r\n\r\nKubo will return a redirect to transform the URL into this:\r\n\r\n`http://bafybeiepywaseoxbaccdblzm6thhqjelkwbamd3guh24wfzba2wwvz6hve.ipfs.localhost:18181/`\r\n\r\nHowever, Safari does not support this kind of URL as of this writing: `*.localhost`. This is a known issue recorded in the WebKit bug tracking system:\r\n\r\n[https://bugs.webkit.org/show_bug.cgi?id=160504](https://bugs.webkit.org/show_bug.cgi?id=160504)\r\n\r\nTo prevent that redirect on Safari, you need to replace `localhost` with `127.0.0.1` so that the redirect will not occur:\r\n\r\n`http://127.0.0.1:18181/ipfs/bafybeiepywaseoxbaccdblzm6thhqjelkwbamd3guh24wfzba2wwvz6hve`",
      "contentRendered" : "<p><a href=\"https://ipfs.io/\">IPFS</a> is an open-source program implemented in several programming languages. The Go version, named Kubo, is the most popular implementation.</p>\n<p>IPFS calculates hashes of files or folders to generate Content Identifiers (CIDs), which it then announces over a massive peer-to-peer network. Anyone with a CID can retrieve the corresponding files from the network.</p>\n<p>Running an IPFS node to host files is straightforward. Simply visit <a href=\"https://github.com/ipfs/kubo\">Kubo's releases page</a> to download and run the single executable binary file, available for all major operating systems.</p>\n<p>No single IPFS node holds all files—each node only provides the CIDs it possesses. However, with IPFS nodes distributed worldwide, the entire network can host very large datasets. This technology, known as a distributed hash table, enables several interesting applications:</p>\n<ul>\n<li>Single file CIDs are used by many NFT projects. Each NFT image corresponds to a CID, and as long as computers host those files, the NFT images remain retrievable.</li>\n<li>CIDs can also represent entire folders, allowing IPFS to host complete websites (which are essentially folders containing HTML, CSS, JavaScript, and other assets). Every website built with the Planet app is identified by a folder CID.</li>\n</ul>\n<p>This is fundamentally different from HTTP. With HTTP, accessing specific content requires a server address. With IPFS, you only need the CID. The content may reside on any number of peers, not just a single server.</p>\n<p>Planet includes the IPFS node software, allowing you to publish websites you build with Planet as CIDs. Other IPFS or Planet users can then access them through the distributed network.</p>\n<h2>Local Gateway</h2>\n<p>You can open any IPFS resource using the local gateway. Under <strong>File</strong>, select <strong>Open IPFS Resource</strong>.</p>\n<figure>\n<img width=\"1120\" alt=\"ipfs-open\" src=\"ipfs-open.webp\">\n<figcaption>File ❯ Open IPFS Resource</figcaption>\n</figure>\n<p>This integrated IPFS node provides several useful local ports.</p>\n<p>We have made minor adjustments to the port numbers to prevent conflicts with other programs that may utilize these ports, such as a pre-existing IPFS desktop application.</p>\n<h2>Port 18181</h2>\n<p>This port serves as the local gateway. You can use it to access content on the IPFS P2P network. Below are a few examples.</p>\n<h3>Access a specific CID</h3>\n<p>For example, the <a href=\"https://github.com/Uniswap/interface/releases/tag/v4.208.0\" target=\"_blank\">v4.2.08.0 release of Uniswap</a>:</p>\n<p><code>CIDv1: bafybeiepywaseoxbaccdblzm6thhqjelkwbamd3guh24wfzba2wwvz6hve</code></p>\n<p>Access via Local Gateway:</p>\n<p><code>http://localhost:18181/ipfs/bafybeiepywaseoxbaccdblzm6thhqjelkwbamd3guh24wfzba2wwvz6hve</code></p>\n<figure>\n  <center><img style=\"max-height: 400px\" src=\"uniswap-cid.png\" alt=\"Uniswap CID\" class=\"screenshot\" /></center>\n  <figcaption>Access Uniswap via CID</figcaption>\n</figure>\n<h3>Access IPNS</h3>\n<p>IPNS is the naming system utilized by IPFS, which can be accessed through the /ipns/ paths as demonstrated below:</p>\n<h3>ENS</h3>\n<p>If an ENS has its content hash pointing to a resource on IPFS, it can be accessed through an IPFS gateway in the following manner:</p>\n<p><code>http://localhost:18181/ipns/vitalik.eth</code></p>\n<figure>\n  <center><img style=\"max-height: 400px;\" src=\"ipns-vitalik.eth.png\" alt=\"IPNS: vitalik.eth\" class=\"screenshot\" /></center>\n  <figcaption>IPNS: vitalik.eth</figcaption>\n</figure>\n<h4>DNS</h4>\n<p>If a DNS name has a <a href=\"https://dnslink.dev/\" target=\"_blank\">DNSLink</a> TXT record pointing to a resource on IPFS, it can be accessed through an IPFS gateway:</p>\n<p><code>http://localhost:18181/ipns/docs.ipfs.tech/</code></p>\n<figure>\n  <center><img style=\"max-height: 400px;\" src=\"ipns-docs.ipfs.tech.png\" alt=\"IPNS: docs.ipfs.tech\" class=\"screenshot\" /></center>\n  <figcaption>IPNS: docs.ipfs.tech</figcaption>\n</figure>\n<h3>IPNS</h3>\n<p>Blogs and websites published from Planet are IPNS. Other Planet users can simply use Follow Planet to receive the latest updates, or these can also be accessed through the local gateway. For example, the IPNS powered <a href=\"https://app.ens.domains/name/planetable.eth/details\" target=\"_blank\">planetable.eth</a> is:</p>\n<p><code>k51qzi5uqu5dgv8kzl1anc0m74n6t9ffdjnypdh846ct5wgpljc7rulynxa74a</code></p>\n<p>It can be accessed via the local gateway:</p>\n<p><code>http://localhost:18181/ipns/k51qzi5uqu5dgv8kzl1anc0m74n6t9ffdjnypdh846ct5wgpljc7rulynxa74a</code></p>\n<figure>\n  <center><img style=\"max-height: 400px;\" src=\"ipns-planetable.eth.png\" alt=\"IPNS: planetable.eth\" class=\"screenshot\" /></center>\n  <figcaption>IPNS: planetable.eth</figcaption>\n</figure>\n<h2>Port 5981</h2>\n<p>Kubo, the Go implementation of IPFS, exposes an <a href=\"https://docs.ipfs.tech/reference/kubo/rpc/\" target=\"_blank\">HTTP RPC API</a> that allows you to control the node and run the same commands that you can run from the command line.</p>\n<p>You can access this API on port 5981. For example, the following cURL request would return the Identity of the node:</p>\n<p><code>curl -X POST http://localhost:5981/api/v0/id</code></p>\n<h2>Origin Isolation</h2>\n<p>Origin isolation is an important security feature for decentralized app front-ends running on IPFS gateways. So, when you try to access a URL like this:</p>\n<p><code>http://localhost:18181/ipfs/bafybeiepywaseoxbaccdblzm6thhqjelkwbamd3guh24wfzba2wwvz6hve</code></p>\n<p>Kubo will return a redirect to transform the URL into this:</p>\n<p><code>http://bafybeiepywaseoxbaccdblzm6thhqjelkwbamd3guh24wfzba2wwvz6hve.ipfs.localhost:18181/</code></p>\n<p>However, Safari does not support this kind of URL as of this writing: <code>*.localhost</code>. This is a known issue recorded in the WebKit bug tracking system:</p>\n<p><a href=\"https://bugs.webkit.org/show_bug.cgi?id=160504\">https://bugs.webkit.org/show_bug.cgi?id=160504</a></p>\n<p>To prevent that redirect on Safari, you need to replace <code>localhost</code> with <code>127.0.0.1</code> so that the redirect will not occur:</p>\n<p><code>http://127.0.0.1:18181/ipfs/bafybeiepywaseoxbaccdblzm6thhqjelkwbamd3guh24wfzba2wwvz6hve</code></p>\n",
      "created" : 768425786.108851,
      "externalLink" : "",
      "hasAudio" : false,
      "hasVideo" : false,
      "heroImage" : "https://docs.planetable.eth.sucks/ipfs/uniswap-cid.png",
      "heroImageFilename" : "uniswap-cid.png",
      "heroImageHeight" : 1696,
      "heroImageURL" : "https://docs.planetable.eth.sucks/ipfs/uniswap-cid.png",
      "heroImageWidth" : 2234,
      "id" : "8B2A98C5-80EE-40F1-AF44-A008B9DD8F06",
      "link" : "/ipfs/",
      "slug" : "ipfs",
      "tags" : {

      },
      "title" : "IPFS Publishing"
    },
    {
      "articleType" : 0,
      "attachments" : [
        "markdown-editor.png"
      ],
      "cids" : {
        "markdown-editor.png" : "QmY6AsHkLB8m5X5txQhLMjdLhVdPx95DBZrf1ifsznpmXv"
      },
      "content" : "Planet has a two-column Markdown editor for easily writing and previewing content. As you write, the preview area on the right automatically updates, allowing you to see the rendered result.\n\n<figure>\n<center><img style=\"max-height: 400px\" alt=\"markdown-editor\" src=\"markdown-editor.png\"></center>\n<figcaption>Two-Column Markdown Editor</figcaption>\n</figure>\n\n## Attach Media\n\nYou can attach images, audio, or even video to your post. While there is no limit to attaching images, each post can attach up to one audio or video file.\n\nYou can also drag-and-drop media files to the writing area, and they will be attached.\n\n## Todo List Syntax\n\nGFM (GitHub Flavored Markdown) todo list syntax is supported, making Planet a flexible and powerful tool for organizing to-dos.\n\nWhen you enter Markdown like this:\n\n```\n- [ ] To Do Item 1\n- [x] To Do Item 2\n```\n\nThey will be rendered like this:\n\n- [ ] To Do Item 1\n- [x] To Do Item 2\n",
      "contentRendered" : "<p>Planet has a two-column Markdown editor for easily writing and previewing content. As you write, the preview area on the right automatically updates, allowing you to see the rendered result.</p>\n<figure>\n<center><img style=\"max-height: 400px\" alt=\"markdown-editor\" src=\"markdown-editor.png\"></center>\n<figcaption>Two-Column Markdown Editor</figcaption>\n</figure>\n<h2>Attach Media</h2>\n<p>You can attach images, audio, or even video to your post. While there is no limit to attaching images, each post can attach up to one audio or video file.</p>\n<p>You can also drag-and-drop media files to the writing area, and they will be attached.</p>\n<h2>Todo List Syntax</h2>\n<p>GFM (GitHub Flavored Markdown) todo list syntax is supported, making Planet a flexible and powerful tool for organizing to-dos.</p>\n<p>When you enter Markdown like this:</p>\n<pre><code>- [ ] To Do Item 1\n- [x] To Do Item 2\n</code></pre>\n<p>They will be rendered like this:</p>\n<ul>\n<li><input type=\"checkbox\" disabled=\"\" /> To Do Item 1</li>\n<li><input type=\"checkbox\" checked=\"\" disabled=\"\" /> To Do Item 2</li>\n</ul>\n",
      "created" : 768425649.251412,
      "externalLink" : "",
      "hasAudio" : false,
      "hasVideo" : false,
      "heroImage" : "https://docs.planetable.eth.sucks/markdown/markdown-editor.png",
      "heroImageFilename" : "markdown-editor.png",
      "heroImageHeight" : 1530,
      "heroImageURL" : "https://docs.planetable.eth.sucks/markdown/markdown-editor.png",
      "heroImageWidth" : 1738,
      "id" : "86539B97-2733-4A76-AFBA-FDBEC9C651C0",
      "link" : "/markdown/",
      "slug" : "markdown",
      "tags" : {

      },
      "title" : "Markdown Editor"
    }
  ],
  "created" : 768425646.441273,
  "discordLink" : "",
  "farcasterEnabled" : false,
  "githubUsername" : "",
  "id" : "AC13B8CF-4107-4326-B6FB-437B6927952A",
  "ipns" : "k51qzi5uqu5dic766k9txgbb7um9tb5pb5tevnwj68mastmjlfegyzya34xkjp",
  "juiceboxEnabled" : false,
  "mastodonUsername" : "",
  "name" : "Planet Documentation",
  "plausibleAPIServer" : "plausible.io",
  "plausibleDomain" : "docs.planetable.eth.limo",
  "plausibleEnabled" : true,
  "podcastCategories" : {

  },
  "podcastExplicit" : false,
  "podcastLanguage" : "en",
  "tags" : {

  },
  "telegramUsername" : "",
  "twitterUsername" : "",
  "updated" : 787852005.769024
}