{"id":13453343,"url":"https://github.com/microfeed/microfeed","last_synced_at":"2025-05-14T21:07:35.269Z","repository":{"id":65237755,"uuid":"266677657","full_name":"microfeed/microfeed","owner":"microfeed","description":"a lightweight cms self-hosted on cloudflare, for podcasts, blogs, photos, videos, documents, and curated urls.","archived":false,"fork":false,"pushed_at":"2025-03-17T18:34:36.000Z","size":1418,"stargazers_count":3588,"open_issues_count":31,"forks_count":1196,"subscribers_count":25,"default_branch":"main","last_synced_at":"2025-04-13T17:46:55.785Z","etag":null,"topics":["cloudflare","cloudflare-d1","cloudflare-pages","cloudflare-r2","cloudflare-zero-trust","cms","podcast-host","serverless"],"latest_commit_sha":null,"homepage":"https://www.microfeed.org/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/microfeed.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-05-25T03:50:26.000Z","updated_at":"2025-04-11T22:21:31.000Z","dependencies_parsed_at":"2023-12-22T18:37:45.118Z","dependency_job_id":"6abdcd8a-d8be-4918-b63b-744313842395","html_url":"https://github.com/microfeed/microfeed","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microfeed%2Fmicrofeed","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microfeed%2Fmicrofeed/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microfeed%2Fmicrofeed/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microfeed%2Fmicrofeed/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/microfeed","download_url":"https://codeload.github.com/microfeed/microfeed/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254227613,"owners_count":22035670,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloudflare","cloudflare-d1","cloudflare-pages","cloudflare-r2","cloudflare-zero-trust","cms","podcast-host","serverless"],"created_at":"2024-07-31T08:00:38.402Z","updated_at":"2025-05-14T21:07:30.245Z","avatar_url":"https://github.com/microfeed.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","serverless","📝 博客, CMS \u0026 建站","Blog"],"sub_categories":[],"readme":"\u003c/br\u003e\n\u003c/br\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://www.microfeed.org/\" target=\"_blank\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/1719237/210119945-50e1d444-2d12-43d2-a96d-65bdbccecb70.png\"\u003e\n    \u003cimg src=\"https://user-images.githubusercontent.com/1719237/207514210-99ddbd03-f8f0-410a-96c8-80da1afb804d.png\" width=\"280\" alt=\"Logo\"/\u003e\n  \u003c/picture\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\u003ch1 align=\"center\"\u003emicrofeed: a lightweight cms self-hosted on cloudflare\u003c/h1\u003e\n\n  \u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/microfeed/microfeed/issues/new?assignees=\u0026labels=bug\"\u003e\u003cb\u003eReport Bug\u003c/b\u003e\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/microfeed/microfeed/discussions/new?category=ideas\"\u003e\u003cb\u003eRequest Feature\u003c/b\u003e\u003c/a\u003e\n    ·\n    \u003ca href=\"mailto:support@microfeed.org\"\u003e\u003cb\u003eEmail Us Privately\u003c/b\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\nWelcome to microfeed, a lightweight content management system (CMS) self-hosted on Cloudflare.\nWith microfeed, you can easily publish a variety of content such as audios, videos, photos, documents, blog posts,\nand external URLs to a feed in the form of web, RSS, and JSON. It's the perfect solution for tech-savvy individuals who\nwant to self-host their own CMS without having to run their own servers.\n\nmicrofeed is built by [Listen Notes](https://www.listennotes.com/) and is hosted on Cloudflare's [Pages](https://pages.cloudflare.com/),\n[R2](https://www.cloudflare.com/products/r2/), [D1](https://developers.cloudflare.com/d1/), and [Zero Trust](https://www.cloudflare.com/products/zero-trust/).\n\nIf you have any questions or feedback, please don't hesitate to reach out to us at support@microfeed.org. We'd love to hear from you!\n\n## 📚 Table of contents\n[![Deploy to Cloudflare Pages](https://github.com/microfeed/microfeed/actions/workflows/deploy.yml/badge.svg?event=workflow_dispatch)](https://github.com/microfeed/microfeed/actions/workflows/deploy.yml)\n[![CI](https://github.com/microfeed/microfeed/actions/workflows/ci.yml/badge.svg)](https://github.com/microfeed/microfeed/actions/workflows/ci.yml)\n[![Email us](https://img.shields.io/badge/Email-support%40microfeed.org-blue)](mailto:support@microfeed.org)\n[![stability-alpha](https://img.shields.io/badge/stability-alpha-f4d03f.svg)](https://www.microfeed.org/i/introducing-microfeed-self-hosted-cms-on-cloudflare-opensource-serverless-free-uhbQEmArlC2/)\n\n* [⭐️ How it works](#%EF%B8%8F-how-it-works)\n* [🚀 Installation](#-installation)\n  * [Prerequisites](#prerequisites)\n  * [Step 1. Fork the microfeed repo to your GitHub](#step-1-fork-the-microfeed-repo-to-your-github)\n  * [Step 2. Put some secrets on your forked repo](#step-2-put-some-secrets-on-your-forked-repo)\n  * [Step 3. Run GitHub Action to deploy code](#step-3-run-github-action-to-deploy-code)\n  * [Step 4. Make a few clicks on Cloudflare dashboard](#step-4-make-a-few-clicks-on-cloudflare-dashboard)\n  * [Step 5. Done. Start publishing](#step-5-done-start-publishing)\n  * [Bonus. Update to the latest version of microfeed](#bonus-update-to-the-latest-version-of-microfeed)\n* [💻 FAQs](#-faqs)\n* [💪 Contributions](#-contributions)\n  * [Run microfeed on local](#run-microfeed-on-local)\n* [🛡️ License](#%EF%B8%8F-license)\n\n## ⭐️ How it works\n\nSince the 1990s, a significant portion of the web has been powered by feeds.\nPeople (and bots) publish items to a feed, and others can subscribe to that feed to receive new content.\n\nmicrofeed makes it easy for individuals to self-host their own feed on Cloudflare, including but not limited to\n* a podcast feed of audios\n* a blog feed of posts\n* an Instagram-like feed of images (e.g., [llamacorn.listennotes.com](https://llamacorn.listennotes.com/), [brand-assets.listennotes.com](https://brand-assets.listennotes.com/))\n* a YouTube-like feed of videos\n* a personal website with custom links (e.g., [wenbin.org](https://www.wenbin.org/))\n* a content curation feed of external news article urls\n* a marketing site with updates and press coverage (e.g., [microfeed.org](https://www.microfeed.org/))\n* a headless cms with a GUI dashboard and a public json feed (e.g., [microfeed.org/json](https://www.microfeed.org/json/) with OpenAPI spec in [YAML](https://www.microfeed.org/json/openapi.yaml) and [HTML](https://www.microfeed.org/json/openapi.html))\n* a list of domain names for sale (e.g., [ListenHost.com](https://www.listenhost.com/)...)\n* a website for an entire book (e.g., [The Art of War](https://the-art-of-war.microfeed.org/))\n* a changelog website (e.g., [changelog.listennotes.com](https://changelog.listennotes.com/))\n* ...\n\nmicrofeed uses Cloudflare [Pages](https://pages.cloudflare.com/) to host and run the code,\n[R2](https://www.cloudflare.com/products/r2/) to host and serve media files,\n[D1](https://developers.cloudflare.com/d1/) to store metadata,\nand [Zero Trust](https://www.cloudflare.com/products/zero-trust/) to provide logins to the admin dashboard.\nCloudflare provides very generous free usage quotas, making it an affordable solution for personal or small business use.\nWhile you will still need to pay for a domain name, hosting microfeed on Cloudflare is essentially free.\n\nWith microfeed, you can publish a variety of content such as audios, videos, photos, documents, blog posts,\nand external URLs to a customizable website, an RSS feed, and a [JSON feed](https://www.jsonfeed.org/).\nCheck out some examples of microfeed in action:\n* Web feed: [https://llamacorn.listennotes.com/](https://llamacorn.listennotes.com/)\n* Rss feed: [https://llamacorn.listennotes.com/rss/](https://llamacorn.listennotes.com/rss/)\n* Json feed: [https://llamacorn.listennotes.com/json/](https://llamacorn.listennotes.com/json/)\n\nmicrofeed provides a simple yet powerful admin dashboard that makes it easy to add items to the feed,\nupload media files, and customize web page styles. If you've used WordPress before, you'll find it familiar.\n\n![image-6d056193c81c0b8f5de0503f5af18116](https://user-images.githubusercontent.com/1719237/209486588-00acefe0-dd51-4bfc-aed7-1f63850aa720.png)\n\n[Back to 📚TOC](#-table-of-contents)\n\n## 🚀 Installation\n\nRoughly you'll follow these steps to install a microfeed instance to Cloudflare:\n\n1. Fork the [microfeed repo](https://github.com/microfeed/microfeed) to your personal (or organizational) GitHub account.\n2. Obtain Cloudflare API tokens and save them as secrets on your forked GitHub repository.\n3. Use the predefined GitHub Action in your forked repository to deploy the code to Cloudflare Pages, using the secrets from step 2.\n4. Make a few clicks on Cloudflare's dashboard to set up custom domains and configure some security settings.\n5. Done. Start publishing!\n\n\u003e We understand that not everyone is comfortable with reading documentation, so we've made it as easy as possible\n\u003e to get started with microfeed. However, we'd love to see Cloudflare implement a \"Login with Cloudflare\" OAuth feature,\n\u003e which would allow for almost one-click deployment of microfeed. In the meantime, we've tried to make the setup process\n\u003e as straightforward as possible for tech-savvy users.\n\n### Prerequisites\n\n* Have a Cloudflare account. If you don't have one already, you can [sign up for free at Cloudflare.com](https://dash.cloudflare.com/sign-up).\n* Have a GitHub account. If you don't have one, you can [sign up for free at GitHub.com](https://github.com/signup).\n\n[Back to TOC](#-table-of-contents)\n\n### Step 1. Fork the microfeed repo to your GitHub\n\nSimply click on [https://github.com/microfeed/microfeed/fork](https://github.com/microfeed/microfeed/fork) to fork the repository.\n\nYou may choose to modify the code in your forked repository in the future, but it's likely that you won't need to\ntouch the code at all. Simply fork the repository and keep it synced for future use.\n\n[Back to 📚TOC](#-table-of-contents)\n\n### Step 2. Put some secrets on your forked repo\n\nGo to your forked repo's [Settings -\u003e Secrets -\u003e Actions](../../settings/secrets/actions), and create 5 secrets (click for more details).\nWith these secrets in place, you'll be able to use GitHub Actions to deploy your microfeed instance to Cloudflare Pages.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eCLOUDFLARE_ACCOUNT_ID\u003c/b\u003e\u003c/summary\u003e\n\nYou can get your cloudflare account id from your dashboard's url:\n\nAfter you [login your Cloudflare account](https://dash.cloudflare.com/login?lang=en-US), you'll be redirected to a url like this\n```\nhttps://dash.cloudflare.com/[your-cloudflare-account-id-here]\n```\nThe last part of the url is your cloudflare account id.\n\nFor example, if you see a url like this:\n```\nhttps://dash.cloudflare.com/fff88980eeeeedcc3ffffd4f555f4999\n```\n\nThen you'll set **CLOUDFLARE_ACCOUNT_ID** to **fff88980eeeeedcc3ffffd4f555f4999**:\n\n\u003cimg width=\"846\" alt=\"Screenshot 2022-12-17 at 10 31 10 AM\" src=\"https://user-images.githubusercontent.com/1719237/208216752-56f00f51-29cb-43ea-b720-75244719898d.png\"\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eCLOUDFLARE_API_TOKEN\u003c/b\u003e\u003c/summary\u003e\n\nYou'll need to create an API token here: [https://dash.cloudflare.com/profile/api-tokens](https://dash.cloudflare.com/profile/api-tokens)\n\nCreate a custom token:\n\n\u003cimg width=\"925\" alt=\"Screenshot 2022-12-04 at 4 30 57 PM\" src=\"https://user-images.githubusercontent.com/1719237/205525627-14da54ae-1733-4db5-b65d-94f5ec48f360.png\"\u003e\n\nWe need edit permission for both Cloudflare Pages and D1:\n\n\u003cimg width=\"990\" alt=\"Screenshot 2022-12-04 at 4 31 41 PM\" src=\"https://user-images.githubusercontent.com/1719237/205525675-4c8a6bce-21a8-45e3-bf0c-28981f123da3.png\"\u003e\n\nFinally, copy the API token here:\n\n\u003cimg width=\"682\" alt=\"Screenshot 2022-12-04 at 4 34 01 PM\" src=\"https://user-images.githubusercontent.com/1719237/205525785-6fed8e49-7342-4b36-9d07-348e1c28cbcc.png\"\u003e\n\n\n  \u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eR2_ACCESS_KEY_ID\u003c/b\u003e and \u003cb\u003eR2_SECRET_ACCESS_KEY\u003c/b\u003e\u003c/summary\u003e\n\nGo to your [R2 dashboard page](https://dash.cloudflare.com/sign-up/r2). You may need to put your credit card there first. You won't need to pay, unless your usage exceeds the very generous free quota limit (i.e., 10GB storage + 10 million reads/month + 1 million writes/month).\n\nCreate an R2 API token here:\n\n  \u003cimg width=\"1328\" alt=\"Screenshot 2022-12-04 at 4 43 58 PM\" src=\"https://user-images.githubusercontent.com/1719237/205526381-cc11d4fe-b053-49d0-9072-de54db31b3b7.png\"\u003e\n\nSelect \"Admin Read \u0026 Write\" permission and create an API token:\n\n  \u003cimg width=\"858\" alt=\"Screenshot 2023-08-08 at 4 33 55 PM\" src=\"https://github.com/microfeed/microfeed/assets/1719237/1a90df29-5660-49d4-b66a-24873812492d\"\u003e\n\n\nCopy Access Key ID for R2_ACCESS_KEY_ID, and Secret Access Key for R2_SECRET_ACCESS_KEY\n  \u003cimg width=\"728\" alt=\"Screenshot 2022-12-04 at 4 45 35 PM\" src=\"https://user-images.githubusercontent.com/1719237/205526582-92f440ac-21c4-46d9-a065-cfc1937391c8.png\"\u003e\n\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eCLOUDFLARE_PROJECT_NAME\u003c/b\u003e\u003c/summary\u003e\n\nA legit project name should have these characters: [a-z], [A-Z], [0-9], and -\n\nWe recommend using the custom domain name that you'll use for this project and replace dot (.) with dash (-)\n\nFor example, if you use photos.mycustomdomain.com, then the project name should be photos-mycustomdomain-com\n\nNote: Don't use underscore (_), space ( ), and other characters outside [a-z], [A-Z], [0-9] and -. Or Cloudflare Pages won't let you create a project.\n\u003c/details\u003e\n\nIn total, you'll add 5 secrets for GitHub Actions:\n\n\u003cimg width=\"826\" alt=\"Screenshot 2022-12-04 at 4 10 46 PM\" src=\"https://user-images.githubusercontent.com/1719237/205524410-268abf92-af61-467a-8883-78b8d4de3c56.png\"\u003e\n\n[Back to 📚TOC](#-table-of-contents)\n\n### Step 3. Run GitHub Action to deploy code\n\nGo to [Actions -\u003e Deploy to Cloudflare Pages](../../actions/workflows/deploy.yml) and run Workflow\n\n\u003cimg width=\"1606\" alt=\"Screenshot 2022-12-04 at 4 11 19 PM\" src=\"https://user-images.githubusercontent.com/1719237/205526856-05ea0ff4-703a-4d08-bc7f-4ae2dfc07cfe.png\"\u003e\n\nIf you see the green checkmark, then the deployment is successful. And you can see a Pages project in your [Cloudflare dashboard](https://dash.cloudflare.com/sign-up/pages):\n\n\n\u003cimg width=\"880\" alt=\"Screenshot 2022-12-04 at 4 55 10 PM\" src=\"https://user-images.githubusercontent.com/1719237/205527141-277620dd-586b-42dd-be97-edb7875d0705.png\"\u003e\n\nYou can access the site via ${CLOUDFLARE_PROJECT_NAME}.pages.dev, for example, [https://microfeed-org.pages.dev/](https://microfeed-org.pages.dev/)\n\n[Back to 📚TOC](#-table-of-contents)\n\n### Step 4. Make a few clicks on Cloudflare dashboard\n\nTo manage your microfeed instance, you'll use the admin dashboard at ${CLOUDFLARE_PROJECT_NAME}.pages.dev/admin, for example, [https://microfeed-org.pages.dev/admin/](https://microfeed-org.pages.dev/admin/) (the admin dashboard needs to be protected by Cloudflare Zero Trust).\n\nUpon accessing the admin dashboard for the first time, you'll complete the setup process by following the checklist:\n\n\u003cimg width=\"1182\" alt=\"Screenshot 2022-12-17 at 10 34 05 AM\" src=\"https://user-images.githubusercontent.com/1719237/208216864-38a65086-77ef-4595-bc05-c87be2676e6d.png\"\u003e\n\n[Back to 📚TOC](#-table-of-contents)\n\n### Step 5. Done. Start publishing\n\nOnce you've completed the setup process, your microfeed instance will be ready to use.\nYou can add, update, or delete items from the admin dashboard.\n\nYou can also customize the appearance of the website at Settings / Custom code by editing the raw HTML and CSS:\n\n\u003cimg width=\"1098\" alt=\"Screenshot 2022-12-30 at 7 57 45 PM\" src=\"https://user-images.githubusercontent.com/1719237/210062910-e56135f6-557e-419e-a00d-b25dd391c93d.png\"\u003e\n\nThe HTML code is using [mustache.js](https://github.com/janl/mustache.js) as a templating language, where you can access to variables from Feed Json or Item Json. For example, on our marketing website [microfeed.org](https://www.microfeed.org/)'s home page (Feed Web), we use variables in the html code from [microfeed.org/json/](https://www.microfeed.org/json/), and on [an item's page](https://www.microfeed.org/i/introducing-microfeed-a-self-hosted-open-source-cms-on-cloudflare-open-alpha-uhbQEmArlC2/) (Item Web), we use variables from [${item_url}/json](https://www.microfeed.org/i/introducing-microfeed-a-self-hosted-open-source-cms-on-cloudflare-open-alpha-uhbQEmArlC2/json).\n\nWith the easy access to the json data of a microfeed instance (i.e., [Feed Json](https://www.microfeed.org/json/) and [Item Json](https://www.microfeed.org/i/introducing-microfeed-a-self-hosted-open-source-cms-on-cloudflare-open-alpha-uhbQEmArlC2/json), you can use it as a headless CMS and build your own client apps to display the content.\n\n[Back to 📚TOC](#-table-of-contents)\n\n### Bonus. Update to the latest version of microfeed\n\nWe'll continue to add new features and fix bugs in this microfeed repo.\nYou may want to update your forked repo with the new code.\n\nYou'll first sync up the code in your forked repo:\n\n\u003cimg width=\"488\" alt=\"Screenshot 2022-12-26 at 7 58 32 AM\" src=\"https://user-images.githubusercontent.com/1719237/209483973-c82e7808-0d21-4aad-ac2d-c4e80da691bc.png\"\u003e\n\nThen go to [Actions -\u003e Deploy to Cloudflare Pages](../../actions/workflows/deploy.yml) and run Workflow to deploy the new code.\n\n[Back to 📚TOC](#-table-of-contents)\n\n## 💻 FAQs\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eHow can I track podcast / video / image downloads?\u003c/b\u003e\u003c/summary\u003e\n\nTo track podcast, video, or image downloads with microfeed, you can use the tracking URLs feature.\nThis allows you to set up third-party tracking URLs for your media files, such as those provided by [OP3](https://op3.dev/), [Podtrac](http://analytics.podtrac.com/)...\n\nTo set up tracking URLs, you will need to go to Settings / Tracking URLs:\n![Screenshot 2023-01-05 at 7 57 02 AM](https://user-images.githubusercontent.com/1719237/210665674-39f9b0a9-1f28-4608-b0cd-c67b8a5c87ec.png)\n\n\nFrom there, you can add the third-party tracking URLs that you want to use.\nmicrofeed will automatically add these URLs to the front of the URL for your media files, allowing you to track download statistics.\n\nThis is a [common practice in the podcast industry](https://lowerstreet.co/blog/podcast-tracking) and can be a useful way to monitor the performance of your content and understand how it is being consumed by your audience.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eWhy Cloudflare? Isn't it dangerous to trust a for-profit company?\u003c/b\u003e\u003c/summary\u003e\n\nMany individuals and organizations trust and use Cloudflare's services because it has a reputation for providing reliable and effective services.\nWe ([Listen Notes](https://www.listennotes.com/)) have been using Cloudflare for many years.\n\nIt's convenient to manage all things on a one-stop platform like Cloudflare (e.g., DNS, Cache, firewall, running code, CDN, trustless logins...).\n\nmicrofeed is still in open alpha phase. Cloudflare is the first platform we support.\nWe may consider supporting other serverless platforms, so you can easily migrate away if needed.\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eWhat if Cloudflare de-platforms my microfeed instance?\u003c/b\u003e\u003c/summary\u003e\n\nIt is important to carefully review the terms of service for any service that you use, including Cloudflare.\nIt is possible that if you violate the terms of service, the service may take action, such as de-platforming your instance.\n\nTo protect against the possibility of being de-platformed, it is a good idea to regularly backup your data from Cloudflare.\nThis will allow you to recover your contents and potentially migrate them to a different platform if necessary.\nIt is also a good idea to use your own custom domain, as this will give you more control over your content and make it easier to move your data to a different platform if needed.\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eWhy should I use microfeed?\u003c/b\u003e\u003c/summary\u003e\n\nIf you are already using Cloudflare and are satisfied with its services, then using microfeed may be a good option for you.\n\nIf you don't want to manage your own servers, microfeed can be a convenient alternative that allows you to take advantage of\nCloudflare's infrastructure and security features.\n\nIf you don't want to pay for servers, microfeed can be a cost-effective solution, as Cloudflare provides generous free usage quotas.\n\nIf you are looking for something new and are interested in exploring different options, microfeed could be a good choice to consider.\nIt is always a good idea to carefully evaluate any service before using it to ensure that it meets your needs and is a good fit for your use case.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eHow to download / backup data from microfeed / Cloudflare?\u003c/b\u003e\u003c/summary\u003e\n\nmicrofeed stores data in Cloudflare D1 and R2. Therefore, you'll download two things to backup your microfeed data:\n* a sqlite database from [Cloudflare D1](https://developers.cloudflare.com/d1/), including all metadata.\n* media files from [Cloudflare R2](https://developers.cloudflare.com/r2/), including audio, image, video...\n\n\u003cb\u003eHow to download a sqlite database from D1?\u003c/b\u003e\n\nYou can use the command line tool `wrangler` to find sqlite database files and download backups:\n\n[https://developers.cloudflare.com/workers/wrangler/commands/#d1](https://developers.cloudflare.com/workers/wrangler/commands/#d1)\n\n\u003cb\u003eHow to download media files from R2?\u003c/b\u003e\n\nAs of Feb 16, 2023, Cloudflare has not provided tools to to batch download all files from a R2 bucket.\n\nYou may need to write a script to use [S3-compatible APIs](https://developers.cloudflare.com/r2/data-access/s3-api/api/) to fetch all objects from a specific R2 bucket.\n\n\u003c/details\u003e\n\n[Back to 📚TOC](#-table-of-contents)\n\n## 💪 Contributions\nWe welcome contributions to microfeed!\nIf you have an idea for a new feature or have found a bug, please [open an issue](https://github.com/microfeed/microfeed/issues/new) in the repository.\nIf you'd like to submit a fix or new feature, please create a pull request with a detailed description of your changes.\n\n### Run microfeed on local\n\nPre-requisites: node / npm, yarn, and wrangler\n\nFirst, create a .vars.toml file in microfeed's root directory (same level as this README.md file) and put 5 secrets in the .vars.toml file (Similar to [Step 2. Put some secrets on your forked repo](#step-2-put-some-secrets-on-your-forked-repo)):\n```toml\n# .vars.toml\nCLOUDFLARE_PROJECT_NAME = \"your-project-org\"\nCLOUDFLARE_ACCOUNT_ID = \"account id\"\nCLOUDFLARE_API_TOKEN = 'api token'\nR2_ACCESS_KEY_ID = \"access key\"\nR2_SECRET_ACCESS_KEY = \"secret key\"\n\nR2_PUBLIC_BUCKET = \"your-r2-bucket-name\"\n```\n\nSecond, run local dev server:\n```bash\nyarn dev\n```\n\nYou should be able to access to a local microfeed instance via http://127.0.0.1:8788/.\n\n**How does `yarn dev` work?**\nEssentially, it concurrently runs two processes: `yarn dev:client` and `yarn dev:edge`.\nThe `yarn dev:client` process launches [the webpack DevServer for client-side JavaScript code](https://webpack.js.org/configuration/dev-server/),\nwhile `yarn dev:edge` starts [Wrangler to serve the Pages (edge) code](https://developers.cloudflare.com/pages/functions/local-development/).\n\n[Back to 📚TOC](#-table-of-contents)\n\n## 🛡️ License\nmicrofeed is licensed under the [AGPL-3.0](https://github.com/microfeed/microfeed/blob/main/LICENSE) license. Please see [the LICENSE file](https://github.com/microfeed/microfeed/blob/main/LICENSE) for more information.\n\n[Back to 📚TOC](#-table-of-contents)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrofeed%2Fmicrofeed","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmicrofeed%2Fmicrofeed","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrofeed%2Fmicrofeed/lists"}