{"id":34559904,"url":"https://github.com/steven-ld/powerwiki","last_synced_at":"2026-04-18T03:01:50.692Z","repository":{"id":329689783,"uuid":"1120400588","full_name":"steven-ld/PowerWiki","owner":"steven-ld","description":"PowerWiki – A modern Git-based Markdown wiki with auto-sync","archived":false,"fork":false,"pushed_at":"2026-03-05T06:32:44.000Z","size":338,"stargazers_count":6,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-05T11:33:32.303Z","etag":null,"topics":["expressjs","feishu-style","git-based-wiki","knowledge-base","lightweight-wiki","markdown","markdown-wiki","nodejs","notion-alternative","obsidian-alternative","open-source-wiki","personal-wiki","self-hosted","self-hosted-wiki","wiki-software"],"latest_commit_sha":null,"homepage":"https://ga666666.cn","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/steven-ld.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-21T06:05:37.000Z","updated_at":"2026-03-05T06:32:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/steven-ld/PowerWiki","commit_stats":null,"previous_names":["steven-ld/powerwiki"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/steven-ld/PowerWiki","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steven-ld%2FPowerWiki","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steven-ld%2FPowerWiki/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steven-ld%2FPowerWiki/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steven-ld%2FPowerWiki/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/steven-ld","download_url":"https://codeload.github.com/steven-ld/PowerWiki/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steven-ld%2FPowerWiki/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31954736,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["expressjs","feishu-style","git-based-wiki","knowledge-base","lightweight-wiki","markdown","markdown-wiki","nodejs","notion-alternative","obsidian-alternative","open-source-wiki","personal-wiki","self-hosted","self-hosted-wiki","wiki-software"],"created_at":"2025-12-24T08:52:47.623Z","updated_at":"2026-04-18T03:01:50.686Z","avatar_url":"https://github.com/steven-ld.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PowerWiki\n\n\u003cdiv align=\"center\"\u003e\n\n![PowerWiki](https://img.shields.io/badge/PowerWiki-Git--Based%20Wiki-3370ff?style=for-the-badge)\n![License](https://img.shields.io/badge/License-MIT-green?style=for-the-badge)\n![Node](https://img.shields.io/badge/Node.js-\u003e=14-339933?style=for-the-badge\u0026logo=node.js\u0026logoColor=white)\n\nA modern Git-based Markdown wiki system with auto-sync, syntax highlighting, and Feishu-style UI.\n\n**🔗 Live Demo: [https://powerwiki.ga666666.cn](https://powerwiki.ga666666.cn)**\n\n[English](README.md) • [中文](README_ZH.md) • [日本語](docs/README_JA.md) • [한국어](docs/README_KO.md) • [Español](docs/README_ES.md) • [Français](docs/README_FR.md) • [Deutsch](docs/README_DE.md) • [Русский](docs/README_RU.md)\n\n\u003c/div\u003e\n\n---\n\n## 💡 Design Philosophy\n\nPowerWiki was born from deep reflection on \"knowledge management\" and \"technical writing\". We believe in:\n\n### 1. Simplicity is Power\n\nNo over-engineering, no complex wheels. Markdown + Git is the simplest knowledge management solution proven over a decade. No database, back to file systems, keeping knowledge pure.\n\n### 2. Geeks First\n\nTailor-made for developers. Syntax highlighting, local image support, Git workflow — every feature comes from real development scenarios.\n\n### 3. Out of the Box\n\nZero learning cost to get started. Clone and use, push and update. No complex configuration, no dedicated CMS required.\n\n### 4. Persistence \u0026 Portability\n\nYour data always belongs to you. Plain text storage, version control built-in, migrate to any platform anytime.\n\n### 5. Privacy \u0026 Security\n\nNo registration, no cloud. All data stored in an environment you control.\n\n---\n\n## ✨ Features\n\n- **Auto Sync** - Automatically sync from Git repositories\n- **Syntax Highlighting** - Code highlighting powered by highlight.js\n- **Responsive Design** - Works on all devices\n- **Auto TOC** - Automatic table of contents generation\n- **Modern UI** - Clean and intuitive interface\n- **PDF Support** - Render PDF files as images\n- **View Statistics** - Track article views\n- **Lightweight** - No database required\n- **SEO Optimized** - Full SEO optimization\n- **Frontmatter Support** - Parse YAML metadata\n- **Local Images** - Support for local images in Markdown\n- **Multi-language** - Chinese and English support\n- **Docker Ready** - Full Docker support\n\n## 🚀 Quick Start\n\n### Prerequisites\n\n- Node.js \u003e= 14.0.0\n- Git\n\n### Option 1: Docker (Recommended)\n\n```bash\n# Clone the repository\ngit clone https://github.com/steven-ld/PowerWiki.git\ncd PowerWiki\n\n# Create config file\ncp config.example.json config.json\n# Edit config.json with your Git repository URL\n\n# Start with Docker Compose\ndocker-compose up -d\n```\n\n### Option 2: Node.js\n\n```bash\n# Clone the repository\ngit clone https://github.com/steven-ld/PowerWiki.git\ncd PowerWiki\n\n# Install dependencies\nnpm install\n\n# Create config file\ncp config.example.json config.json\n# Edit config.json with your Git repository URL\n\n# Start the server\nnpm start\n```\n\nVisit `http://localhost:3150` in your browser.\n\n## ⚙️ Configuration\n\nEdit `config.json`:\n\n```json\n{\n  \"gitRepo\": \"https://github.com/your-username/your-wiki-repo.git\",\n  \"repoBranch\": \"main\",\n  \"port\": 3150,\n  \"siteTitle\": \"My Wiki\",\n  \"siteDescription\": \"Knowledge Base\",\n  \"autoSyncInterval\": 180000,\n  \"pages\": {\n    \"home\": \"README.md\",\n    \"about\": \"ABOUT.md\"\n  }\n}\n```\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `gitRepo` | Git repository URL | - |\n| `repoBranch` | Branch name | `main` |\n| `mdPath` | Markdown files subdirectory | `\"\"` |\n| `port` | Server port | `3150` |\n| `siteTitle` | Site title | `PowerWiki` |\n| `siteDescription` | Site description | `Wiki` |\n| `autoSyncInterval` | Auto sync interval (ms) | `180000` |\n| `sortOrder` | Sort order (`modified` or `name`) | `modified` |\n| `pages.home` | Home page file | `\"\"` |\n| `pages.about` | About page file | `\"\"` |\n\n## 🌍 Environment Variables\n\nPowerWiki supports environment variables for flexible deployment:\n\n```bash\n# Configuration file path\nCONFIG_PATH=/path/to/your/config.json\n\n# Data storage directory (for stats and logs)\nDATA_DIR=/path/to/data/directory\n\n# Git repository cache directory\nGIT_CACHE_DIR=/path/to/git/cache\n\n# Language setting (zh-CN or en)\nLANG=zh-CN\n```\n\nCopy `.env.example` to `.env` and customize as needed.\n\n## 🐳 Docker Deployment\n\n### Docker Image\n\n**[@sayunchuan](https://github.com/sayunchuan)** provides a Docker image for PowerWiki.\n\n- **Image**: `sayunchuan/powerwiki`\n- **Docker Hub**: [sayunchuan/powerwiki](https://hub.docker.com/r/sayunchuan/powerwiki)\n- **Tags**: `latest`, `1.4.5`, `20260207`\n\n### Quick Start\n\n```bash\n# Simplest way\ndocker run -d -p 3150:3150 sayunchuan/powerwiki\n\n# With custom config\ndocker run -d \\\n  --name powerwiki \\\n  -p 3150:3150 \\\n  -v $(pwd)/config.json:/app/config.json:ro \\\n  -v powerwiki_data:/app/data \\\n  -v powerwiki_cache:/app/cache \\\n  sayunchuan/powerwiki\n```\n\n### Docker Compose\n\n```yaml\nversion: '3.8'\nservices:\n  powerwiki:\n    image: sayunchuan/powerwiki:latest\n    ports:\n      - \"3150:3150\"\n    environment:\n      - NODE_ENV=production\n      - LANG=zh-CN\n    volumes:\n      - ./config.json:/app/config.json:ro\n      - powerwiki_data:/app/data\n      - powerwiki_cache:/app/cache\n    restart: unless-stopped\n\nvolumes:\n  powerwiki_data:\n  powerwiki_cache:\n```\n\n```bash\n# Start services\ndocker-compose up -d\n\n# View logs\ndocker-compose logs -f\n\n# Stop services\ndocker-compose down\n```\n\n**Acknowledgment**: Thanks to [@sayunchuan](https://github.com/sayunchuan) for providing the Docker image, making PowerWiki deployment more convenient.\n\n## 📂 Article Organization\n\nPowerWiki supports hierarchical folder structure for organizing articles:\n\n```\nyour-wiki-repo/\n├── README.md              # Home page\n├── ABOUT.md               # About page\n├── images/                # Global images (optional)\n├── Architecture/          # Category folder\n│   ├── images/            # Category images\n│   ├── IoT-Device-Standards.md\n│   ├── TLS-Encryption.md\n│   └── README.md          # Category index\n├── Projects/              # Another category\n│   ├── images/\n│   ├── URL-Shortener.md\n│   └── README.md\n└── Media/\n    ├── images/\n    ├── WebRTC-Signaling.md\n    └── README.md\n```\n\n### Article Frontmatter\n\nEach article can include YAML frontmatter for metadata:\n\n```yaml\n---\ntitle: Article Title\ndescription: Article description for SEO\nauthor: Author Name\ndate: 2026-01-10\nupdated: 2026-01-10\nkeywords: keyword1, keyword2, keyword3\ntags: [tag1, tag2]\n---\n```\n\n### Image References\n\nPowerWiki supports referencing local images using relative paths in Markdown. The system automatically converts image paths to accessible API URLs:\n\n```markdown\n# Method 1: Using images folder in current directory (recommended)\n![Image Description](./images/pic.png)\n\n# Method 2: Using parent directory's images folder\n![Image Description](../images/pic.png)\n\n# Method 3: Using absolute path (relative to repo root)\n![Image Description](/images/pic.png)\n\n# Method 4: Direct reference (without ./ or ../ prefix)\n![Image Description](images/pic.png)\n```\n\nSupported image formats: `PNG`, `JPG/JPEG`, `GIF`, `WEBP`, `SVG`, `ICO`\n\n## 🌐 Multi-language Support\n\nPowerWiki supports multiple languages for console output and allows users to customize language packs.\n\n### Supported Languages\n- **Chinese Simplified** (`zh-CN`) - Default\n- **English** (`en`)\n\n### Usage\n\n```bash\n# Start with English\nLANG=en npm start\n\n# Start with Chinese\nLANG=zh-CN npm start\n\n# Or use npm scripts\nnpm run start:en\nnpm run start:zh\n```\n\n### Custom Language Packs\n\nPowerWiki uses JSON files for translations and supports adding custom languages.\n\n#### 1. Create Language File\n\nCreate a new language file in the `locales/` directory with the format `\u003clanguage-code\u003e.json`:\n\n```bash\n# Example: Create Japanese language file\ncp locales/en.json locales/ja.json\n```\n\n#### 2. Edit Language File\n\nModify `locales/ja.json` and replace English translations with Japanese:\n\n```json\n{\n  \"siteTitle\": \"PowerWiki\",\n  \"siteDescription\": \"Wiki システム\",\n  \"nav\": {\n    \"home\": \"ホーム\",\n    \"about\": \"概要\"\n  },\n  \"content\": {\n    \"readingTime\": \"読み取り時間\",\n    \"words\": \"語\",\n    \"toc\": \"目次\"\n  },\n  \"actions\": {\n    \"copy\": \"コピー\",\n    \"copied\": \"コピー完了\"\n  },\n  \"stats\": {\n    \"views\": \"閲覧数\"\n  },\n  \"footer\": {\n    \"poweredBy\": \"Powered by\"\n  }\n}\n```\n\n#### 3. Update Console Language Options\n\nModify `src/config/i18n.js` and add your new language to the `SUPPORTED_LANGUAGES` array:\n\n```javascript\nconst SUPPORTED_LANGUAGES = [\n  { code: 'zh-CN', name: '中文', file: 'zh-CN.json' },\n  { code: 'en', name: 'English', file: 'en.json' },\n  { code: 'ja', name: '日本語', file: 'ja.json' },  // Add Japanese\n];\n```\n\n#### 4. Use Custom Language\n\n```bash\n# Start with Japanese\nLANG=ja npm start\n```\n\n#### Language File Structure Reference\n\nLanguage files support the following keys (all are optional, missing keys will fall back to English):\n\n| Category | Key | Description |\n|----------|-----|-------------|\n| Site | `siteTitle` | Website title |\n| Site | `siteDescription` | Website description |\n| Nav | `nav.home` | Home link text |\n| Nav | `nav.about` | About page link text |\n| Content | `content.readingTime` | Reading time label |\n| Content | `content.words` | Words unit |\n| Content | `content.toc` | Table of contents title |\n| Actions | `actions.copy` | Copy button |\n| Actions | `actions.copied` | Copied success message |\n| Stats | `stats.views` | View count label |\n| Footer | `footer.poweredBy` | Powered by text |\n\n## 🛠️ Development\n\n### Available Scripts\n\n```bash\n# Development\nnpm run dev              # Start with nodemon\nnpm run test:env         # Test environment variables\n\n# Docker\nnpm run docker:build     # Build Docker image\nnpm run docker:run       # Run Docker container\nnpm run docker:stop      # Stop and remove container\nnpm run docker:logs      # View container logs\n\n# Language variants\nnpm run start:en         # Start with English\nnpm run start:zh         # Start with Chinese\n```\n\n### Project Structure\n\n```\nPowerWiki/\n├── src/                     # Source code\n│   ├── index.js             # Express server entry\n│   ├── routes/              # Route modules\n│   │   ├── api.js           # API routes\n│   │   ├── feeds.js         # RSS/Sitemap routes\n│   │   └── static.js        # Static file routes\n│   ├── config/              # Configuration\n│   │   ├── env.js           # Environment variables\n│   │   └── i18n.js          # Internationalization\n│   └── utils/               # Utility modules\n│       ├── cacheManager.js  # Cache management\n│       ├── gitManager.js    # Git operations\n│       └── markdownParser.js# Markdown parser\n├── locales/                 # Translation files\n│   ├── zh-CN.json           # Chinese translations\n│   └── en.json              # English translations\n├── templates/               # HTML templates\n│   ├── header.html          # Header template\n│   ├── footer.html          # Footer template\n│   └── home.html            # Home template\n├── public/                  # Static assets\n│   ├── index.html           # Frontend HTML\n│   ├── app.js               # Main entry (modular)\n│   ├── js/                  # JavaScript modules\n│   │   ├── theme.js         # Theme management\n│   │   ├── i18n.js         # Internationalization\n│   │   ├── cache.js         # Client caching\n│   │   ├── utils.js         # Utilities\n│   │   ├── posts.js         # Post list \u0026 tree\n│   │   ├── article.js       # Article rendering\n│   │   ├── toc.js           # Table of contents\n│   │   └── media.js         # Code copy, images, PDF\n│   └── css/                 # CSS modules\n│       ├── base.css         # Base styles \u0026 variables\n│       ├── layout.css       # Layout (sidebar, header)\n│       ├── sidebar.css      # Navigation menu\n│       ├── article.css      # Article \u0026 Markdown\n│       ├── toc.css          # Table of contents\n│       ├── media.css        # Responsive design\n│       └── components.css   # UI components\n├── config.example.json      # Config template\n├── package.json             # Dependencies\n├── Dockerfile               # Docker configuration\n└── docker-compose.yml       # Docker Compose\n```\n\n## 🛠️ Tech Stack\n\n- **Backend**: Express.js\n- **Frontend**: Vanilla JavaScript\n- **Git**: simple-git\n- **Markdown**: marked + highlight.js\n- **PDF**: pdfjs-dist\n- **Containerization**: Docker\n\n## 📄 License\n\nMIT License - see [LICENSE](LICENSE) for details.\n\n## 👥 Contributors\n\n- [@sayunchuan](https://github.com/sayunchuan) - Add multi-language, Mermaid support, fix various issues\n\n## 🙏 Credits\n\n- [Express.js](https://expressjs.com/)\n- [marked](https://marked.js.org/)\n- [highlight.js](https://highlightjs.org/)\n- [simple-git](https://github.com/steveukx/git-js)\n- [PDF.js](https://mozilla.github.io/pdf.js/)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**If this project helps you, please give it a ⭐ Star!**\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteven-ld%2Fpowerwiki","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsteven-ld%2Fpowerwiki","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteven-ld%2Fpowerwiki/lists"}