diff --git a/lib/v2/free/maintainer.js b/lib/v2/free/maintainer.js
new file mode 100644
index 0000000000..387d961bfe
--- /dev/null
+++ b/lib/v2/free/maintainer.js
@@ -0,0 +1,3 @@
+module.exports = {
+ '/': ['cnkmmk'],
+};
diff --git a/lib/v2/free/radar.js b/lib/v2/free/radar.js
new file mode 100644
index 0000000000..ab4059623d
--- /dev/null
+++ b/lib/v2/free/radar.js
@@ -0,0 +1,13 @@
+module.exports = {
+ 'free.com.tw': {
+ _name: '免費資源網路社群',
+ '.': [
+ {
+ title: '博客',
+ docs: 'https://docs.rsshub.app/routes/blog#mian-fei-zi-yuan-wang-lu-she-qun',
+ source: ['/'],
+ target: '/free',
+ },
+ ],
+ },
+};
diff --git a/lib/v2/free/router.js b/lib/v2/free/router.js
new file mode 100644
index 0000000000..574929e02f
--- /dev/null
+++ b/lib/v2/free/router.js
@@ -0,0 +1,3 @@
+module.exports = function (router) {
+ router.get('/', require('./rss'));
+};
diff --git a/lib/v2/free/rss.js b/lib/v2/free/rss.js
new file mode 100644
index 0000000000..3818d7a5de
--- /dev/null
+++ b/lib/v2/free/rss.js
@@ -0,0 +1,19 @@
+const { parseDate } = require('@/utils/parse-date');
+const got = require('@/utils/got');
+
+module.exports = async (ctx) => {
+ const url = 'https://free.com.tw/';
+ const response = await got(`${url}/wp-json/wp/v2/posts`);
+ const list = response.data;
+ ctx.state.data = {
+ title: '免費資源網路社群',
+ link: url,
+ description: '免費資源網路社群 - 全部文章',
+ item: list.map((item) => ({
+ title: item.title.rendered,
+ link: item.link,
+ pubDate: parseDate(item.date_gmt),
+ description: item.content.rendered,
+ })),
+ };
+};
diff --git a/website/docs/routes/blog.mdx b/website/docs/routes/blog.mdx
index a0508e8f86..89f06df19a 100644
--- a/website/docs/routes/blog.mdx
+++ b/website/docs/routes/blog.mdx
@@ -396,6 +396,12 @@
+## 免費資源網路社群 {#mian-fei-zi-yuan-wang-lu-she-qun}
+
+### 博客 {#mian-fei-zi-yuan-wang-lu-she-qun-bo-ke}
+
+
+
## 十年之约 {#shi-nian-zhi-yue}
### 专题展示 - 文章 {#shi-nian-zhi-yue-zhuan-ti-zhan-shi-wen-zhang}