English | 한국어
The clean open-source CMS for builders and agents. Enterprise-grade foundation. Minimal tokens.
The demo UI language follows your browser (Korean/English); you can switch it in the UI.
About · Key Features · Tech Stack · Architecture · Quick Start · Bundled Extensions · Business Models · Migrating from Gnuboard 5 · Documentation · Contributing · Team · Community · Changelog · License
Gnuboard7 is an open-source CMS designed so that anyone can build their own web platform quickly, together with AI agents.
Declarative layouts, an extension system that never touches the core, and agent development rules built into the repository let agents read and write only what matters — so you can build community or storefront services with minimal tokens, on an enterprise-grade foundation where access control, i18n, identity verification, and payments are built in from day one. It is the next generation of Gnuboard, Korea's most widely used open-source CMS for 23 years, built anew on Laravel and React.
.g7.html) alone, no React knowledge required — the server compiles it into a runtime JSON contract at install time. Modules and plugins inject or extend UI dynamically without a frontend build. When you need something more advanced, you can develop and register custom React componentsEverything a modern web platform needs, built in.
| Area | Description |
|---|---|
| Modular architecture | Modules + plugins + templates, a three-layer extension structure. Independent modules (boards, commerce, and more) can be developed without modifying the core. Hook-based injection preserves the clear layering of the Service-Repository pattern |
| Language pack system | Install a new language from a ZIP file or GitHub URL without touching the core. Official bundled language packs (Japanese and others) are ready to use immediately, and labels an operator has edited are preserved per sub-key so a language pack never overwrites them. Packs apply independently to modules, plugins, and templates |
| Localization | A consistent multilingual development experience from backend to frontend. Active language packs automatically enrich notification channel labels, provider/registry payloads, and settings catalogs (payment methods, currencies, shippable countries). Activity log and message surfaces are separated so modules and plugins describe their own domain labels in their own territory |
| Payment gateways | A foundation for growing beyond a local business into global commerce. Payment integrations attach through the same extension-point pattern, and international gateways ship as separate plugins |
| Access control | Control menus, features, and even data scope per role. Role + Permission + Scope three-tier access control provides flexible management that mirrors your organization |
| Identity verification (IDV) | Every verification point — signup, password reset, sensitive operations — is managed centrally through declarative route/hook-level policies. The core ships a mail provider built in, and external providers (Korean identity-verification services such as KG Inicis and NHN KCP, as well as SMS, PortOne, and Stripe Identity-style services) attach through the same provider contract. When the server returns HTTP 428, the frontend interceptor opens a verification modal automatically and replays the original request on success |
| Security | Automatic input validation and token-based authentication. Layered defense designed in from the start (CSRF/XSS/SQL injection), a real implementation of login throttling and account lockout (HTTP 423), and automatic blocking of installer endpoints once setup completes (HTTP 410) |
| Flexible screen composition | Define a screen structure and see it applied immediately. Web-app-grade dynamic screens are achievable with markup authoring (.g7.html) alone, no frontend infrastructure required |
| Layout editor | A WYSIWYG layout editor lets you place screen blocks directly and see the result right away |
| Proven foundation | Built on Laravel + React — a stack adopted by companies worldwide, offering high extensibility and flexible UI implementation |
| Shared cache system | CacheInterface plus three drivers (core/module/plugin) isolate key prefixes automatically (g7:core:, g7:module.{id}:, g7:plugin.{id}:). Tag-based automatic invalidation and central TTL management via g7_core_settings('cache.*_ttl') keep operations free of hardcoded values |
| Notification system | A three-tier model — Definition × Template × Recipients — supports independent multi-channel delivery over mail, database, and real-time broadcast (Reverb). Targeting by author, role, specific users, or permission holders, plus hook-based dispatch, lets modules register their own notifications freely |
| SEO | Powered by jaybizzle/crawler-detect, roughly 1,000 bot types (search engines, social unfurlers, AI search) are detected automatically: bots receive static HTML while regular users get the SPA. OG/Twitter card metadata, domain schemas declared by modules (Article/Product/Offer/AggregateRating), automatic and manual sitemap generation, and generator meta tags are all provided by the core |
| Activity log | Administrator and user activity is recorded and searchable automatically. The Monolog-based structure is easy to extend, and action labels resolve from a module's or plugin's own translation files first, so each domain describes itself |
| Search | Full-text search powered by Laravel Scout, covering key content such as products and posts |
| Layer | Technology |
|---|---|
| Backend | PHP 8.2+, Laravel 12.x, MySQL 8.0+ / MariaDB 10.3+, Redis 6.0+ |
| Frontend | React 19, Vite, Tailwind CSS 4 (dark mode supported) |
| Authentication | Laravel Sanctum (Bearer tokens) |
| Testing | PHPUnit 11.x, Vitest |
| Code quality | Laravel Pint (PSR-12) |
Gnuboard7
├── Core (Laravel 12)
│ ├── Controller → FormRequest → Service → Repository → Model
│ ├── Hook System (Action / Filter)
│ ├── Permission (Role → Permission → Scope)
│ ├── Identity Verification (Policy × Purpose × Provider × Message)
│ ├── Language Pack (virtual protected rows + ZIP/GitHub install + sub-key preservation)
│ ├── Notification (Definition × Template × Recipients)
│ └── SEO (Bot Detection → Static HTML → Cache → Sitemap)
│
├── Extensions
│ ├── Modules — board, commerce, page ...
│ ├── Plugins — payment, verification, marketing ...
│ ├── Templates — admin UI, user UI
│ └── LanguagePacks — official and third-party packs (Japanese and more)
│
└── Template Engine
├── JSON Layout → React Components
└── Dynamic Rendering + Data Binding
In Gnuboard7 you declare the UI structure in .g7.html markup; the server compiles it into JSON (the runtime contract) at install time, and the engine interprets that JSON and renders React components.
.g7.html) alone — screen development without React expertise```mermaid
flowchart TB
subgraph Backend ["🔧 Backend — Laravel"]
A["📄 Layout source .g7.html
compiled to JSON at install"] --> B["⚙️ LayoutService"]
B --> |"inheritance
extends / partial"| B
M["📦 Module layout"] -.-> |"layout_extensions
extension_point injection"| B
P["🔌 Plugin layout"] -.-> |"layout_extensions
extension_point injection"| B
B --> C["🔒 Permission filtering
drop components per user"]
C --> D["📨 Merged JSON response
cached · 1 hour TTL"]
end
subgraph Frontend ["⚛️ Frontend — React"]
D --> E["📥 LayoutLoader<br/>receive layout JSON"]
E --> F["💾 State init<br/>_global · _local · _computed"]
E --> G["🌐 Data source loading<br/>parallel API calls"]
F & G --> H["🎨 DynamicRenderer"]
H --> I{"❓ Condition eval<br/>if expression"}
I --> |"✅ true"| J["🗂️ ComponentRegistry<br/>name → React component"]
I --> |"❌ false"| K["⏭️ Skip rendering"]
J --> L["🔗 Data binding<br/>expression → value"]
L --> N["🖱️ Event binding<br/>onClick → ActionDispatcher"]
N --> O["✨ React render"]
end
subgraph Actions ["👆 User interaction"]
O --> |"click · input"| Q["🎯 ActionDispatcher"]
Q --> R["🧭 navigate — page transition"]
Q --> S["📡 apiCall — API request"]
Q --> T["🔄 setState — state change"]
Q --> U["📋 openModal — open a modal"]
S --> |"onSuccess · onError"| Q
T --> |"state change → re-render"| H
end
style Backend
| 日期 | 榜单 | 排名 | 周期新增 | 总 STAR |
|---|