WP Manifestindependent plugin directory
manifest / content / ajc-bridge

AJC Bridge WP Registry grade D+. High-severity findings · 2 findingsWP RegistryHigh-severity findings · 2 findingsOpen the reportD+

WordPress to Hugo plugin

★ 4stars
19release downloads
≈10active sites
v1.4.0latest · 6mo ago

Install

Download ajc-bridge.zip From the v1.4.0 release on GitHub, Apr 7, 2026

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/pcescato/ajc-bridge/releases/download/v1.4.0/ajc-bridge.zip
Updates itself. It ships its own updater (Plugin Update Checker), so new versions appear under Dashboard → Updates.

Write once, publish everywhere. WordPress as your headless CMS for static sites (Hugo, Astro, Jekyll) via GitHub.

Edit in WordPress (familiar Gutenberg interface), one-click sync to GitHub, automatic deployment to static hosting. Zero server runtime, optimized images (AVIF/WebP), full control.


Why AJC Bridge?

🎯 Multi-platform publishing — WordPress, GitHub, dev.to, static sites
🔒 Production-ready — Encrypted credentials, atomic commits, error handling
⚡ Performance — Async processing, WebP/AVIF optimization, responsive images
🎨 Customizable — Front Matter templates, per-post sync control
🛡️ SEO-friendly — Smart canonical URLs, automatic redirects
📊 Monitoring — Real-time sync status, detailed logs, one-click retry


Who is this for?

  • Developers building JAMstack sites needing a user-friendly CMS
  • Content teams familiar with WordPress publishing to static hosting
  • Tech writers managing docs with WordPress → GitHub workflow
  • Solo creators wanting WordPress editing + static site performance

Table of Contents


Quick Start

1. Install

# Download latest release
wget https://github.com/pcescato/ajc-bridge/releases/latest/download/ajc-bridge.zip

# WordPress → Plugins → Upload → Activate

2. Configure

Settings → AJC Bridge
├─ GitHub Token (from GitHub Settings)
├─ Repository URL (your-username/your-repo)
└─ SSG Type (Hugo/Astro/Jekyll)

3. Publish

Write post → Click "Publish"
→ Syncs to GitHub
→ Deploys to static site (~2 min)

Detailed Installation Guide →


Features

Publishing Modes

  • ✅ WordPress only — Traditional WP site
  • ✅ WordPress + dev.to — Cross-posting syndication
  • ✅ WordPress + Static — Headless CMS workflow
  • ✅ Static only — WordPress as editor interface
  • ✅ Multi-platform — All of the above simultaneously

Static Site Generators

  • ✅ Hugo — YAML/TOML front matter, date-prefixed files
  • ✅ Astro — Content collections, .mdx support, ISO 8601 dates
  • ✅ Jekyll — YAML front matter, Ruby-style conventions
  • 🔄 Eleventy — Coming soon

Content Processing

  • ✅ Gutenberg → Markdown — Full block conversion
  • ✅ Image optimization — AVIF/WebP, responsive sizes (320/640/1280px)
  • ✅ Front Matter — Customizable per SSG
  • ✅ Code blocks — Syntax highlighting preserved
  • ✅ Tables — Markdown table conversion

Developer Experience

  • ✅ Auto-updates — GitHub releases integration
  • ✅ Async processing — Action Scheduler (no blocking)
  • ✅ Logging — Detailed sync logs, debug mode
  • ✅ Error handling — Retry mechanism, status tracking
  • ✅ Atomic commits — Markdown + images in single commit

Documentation


Examples

Production sites using AJC Bridge:


Installation

From GitHub Release:

  1. Download ajc-bridge-x.x.x.zip from Releases
  2. WordPress → Plugins → Upload Plugin
  3. Activate

Updates:
Automatic via GitHub releases (notification in WordPress admin).

Full installation guide →


Contributing

We welcome contributions! See CONTRIBUTING.md for:

  • Development setup
  • Code standards
  • Pull request process
  • Testing guidelines

License

GPL-2.0+ — See LICENSE


Built with GitHub Copilot CLI | Read the build story →

Releases

4 releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
v1.4.0 latest
Apr 7, 2026 6mo ago
ajc-bridge.zip
4
Feb 25, 2026 8mo ago
ajc-bridge.zip
9
Feb 25, 2026 8mo ago
ajc-bridge.zip
1
Feb 14, 2026 8mo ago
ajc-bridge.zip
5

Active-site estimate ≈10 comes from the median of recent superseded releases. Method.

D+ grade

Security

AJC Bridge 1.4.0 · audited by WP Registry

High-severity findings.

1 high 1 medium
Audited release
1.4.0
Findings
2
Worst severity
high
Content hash
251da12b998b4aec2150b9f1…

Findings

  • high Author+ SSRF via GitHub image sync (prefix-only local URL check + wp_remote_get)

    ssrf

    When a published post is synced to GitHub (automatic on publish/update, or wp_ajax_jamstack_sync_now which only requires edit_post), Media_Processor::get_post_images_data extracts every <img src> from raw post_content. is_local_image() allows the URL if strpos($url, site_url()) === 0 — a prefix match, not a host parse. An Author can insert (kses allows img src) https://{site_host}@{internal}/path, https://{site_host}.attacker.tld/..., or similar. download_image() then calls wp_remote_get() with stream-to-file and no reject_unsafe_urls (wp_safe_remote_get is never used anywhere in the plugin). WordPress HTTP will treat userinfo@host as the real destination, including 169.254.169.254 and RFC1918. If Intervention cannot encode the body as WebP/AVIF, get_single_image_data copies the raw downloaded bytes into the atomic-commit payload and Git_API::create_atomic_commit pushes them with the administrator-stored PAT. Subscriber/customer cannot publish or hit the AJAX. Requires a GitHub publishing strategy (github_only or dual_github_devto).

    core/class-media-processor.php:692-806

    Recommendation

    Parse the URL and compare scheme+host (and optional port) to home_url()/site_url(); reject userinfo, non-http(s), and hosts that fail wp_http_validate_url(). Fetch with wp_safe_remote_get(), do not follow redirects off-site, cap size, and require a real image MIME/type before any GitHub upload. Do not fall back to committing the original bytes when encoding fails.

  • medium Debug logs in uploads with predictable names and Apache-only protection

    information_disclosure

    When ajc_bridge_settings[debug_mode] is enabled, Logger::write_to_file() appends to wp-content/uploads/ajc-bridge-logs/ajc-bridge-{Y-m-d}.log. Directory protection is an Apache 2.2 'Deny from all' .htaccess plus index.php; there is no nginx/LiteSpeed rule and no random component in the filename. Git_API logs full GitHub JSON bodies and response headers; DevTo_Adapter/DevTo_API log front matter and the markdown payload. On hosts that ignore .htaccess, an unauthenticated client can GET the guessable log URL and read private-repo metadata and post content. Debug is admin-opt-in (off by default) but is a first-class settings checkbox, not a hidden WP_DEBUG dependency.

    core/class-logger.php:90-129

    Recommendation

    Do not store logs under a web-reachable uploads path. If files are required, place them outside the docroot or behind a unique unguessable directory, send application/octet-stream + deny headers, and add an nginx-compatible deny. Never log full API response bodies; redact tokens, headers, and markdown. Prefer the existing ajc_bridge_logs option (admin-only) over world-readable files.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.