|
3 | 3 | </p> |
4 | 4 |
|
5 | 5 | <p align="center"> |
6 | | - An open-source serverless enterprise CMS built for AWS. |
| 6 | + AI-programmable CMS for enterprises hosting on AWS |
7 | 7 | </p> |
8 | 8 |
|
9 | 9 | <p align="center"> |
|
13 | 13 | <a href="https://github.com/webiny/webiny-js/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License"></a> |
14 | 14 | </p> |
15 | 15 |
|
| 16 | + |
| 17 | +# About Webiny |
| 18 | + |
| 19 | +Open-source content platform. Self-hosted on AWS serverless. Built as a TypeScript framework you extend with code, not a closed product you configure through a UI. |
| 20 | + |
| 21 | +Runs on Lambda, DynamoDB, S3, and CloudFront inside your own AWS account. Scales automatically. No servers to manage. Infrastructure provisioned via IaC (Pulumi) in a single `deploy` command. |
| 22 | + |
| 23 | +Used in production by teams managing hundreds of millions of content records, petabytes of assets, and thousands of editors — including Amazon, Emirates, Fortune 500 companies, government agencies, and SaaS platforms that white-label Webiny inside their own products. |
| 24 | + |
| 25 | +[Documentation](https://www.webiny.com/docs) · [Learn Webiny Course](https://www.webiny.com/learn) · [Community Slack](https://www.webiny.com/slack) |
| 26 | + |
| 27 | +--- |
| 28 | + |
| 29 | +## What's Inside |
| 30 | + |
| 31 | +**Headless CMS** — Custom content models, GraphQL API, field-level permissions, localization, versioning. Models can be defined through the admin UI or in code via the framework. |
| 32 | + |
| 33 | +**Website Builder** — Visual drag-and-drop page editor with a Next.js SDK. Render pages through your own frontend (Vercel, CloudFront, wherever). Create custom page elements with React components. |
| 34 | + |
| 35 | +**File Manager** — Digital asset management with CDN delivery, folder structure, tagging, search. Integrated into CMS and Website Builder. |
| 36 | + |
| 37 | +**Publishing Workflows** — Multi-step content approval with draft states, reviewer assignments, scheduled publishing, and audit trails. |
| 38 | + |
| 39 | +**Multi-Tenancy** — Native tenant isolation (data, users, assets, permissions) from a single deployment. One instance can host thousands of tenants. Tenants are created and managed programmatically via GraphQL API. Supports hierarchical tenant structures (Root → Brand → Market, Root → Client → Site, etc.). |
| 40 | + |
| 41 | +**Webiny Framework** — TypeScript framework with lifecycle hooks, dependency injection, GraphQL schema extensions, admin UI extension points, and infrastructure extensions. This is the core — it's what makes Webiny programmable rather than just configurable. |
| 42 | + |
| 43 | +--- |
| 44 | + |
| 45 | +## Architecture |
| 46 | + |
| 47 | +``` |
| 48 | +┌─────────────────────────────────────────────────────┐ |
| 49 | +│ Your AWS Account │ |
| 50 | +│ │ |
| 51 | +│ ┌──────────┐ ┌──────────┐ ┌─────┐ ┌──────────┐ │ |
| 52 | +│ │ Lambda │ │ DynamoDB │ │ S3 │ │CloudFront│ │ |
| 53 | +│ │ (API + │ │ (Content │ │(Assets)│ │ (CDN) │ │ |
| 54 | +│ │ business │ │ storage) │ │ │ │ │ │ |
| 55 | +│ │ logic) │ │ │ │ │ │ │ │ |
| 56 | +│ └──────────┘ └──────────┘ └─────┘ └──────────┘ │ |
| 57 | +│ │ |
| 58 | +│ Optional: OpenSearch (full-text search at scale) │ |
| 59 | +│ Optional: VPC deployment, multi-AZ, custom config │ |
| 60 | +│ │ |
| 61 | +│ All provisioned automatically via Pulumi IaC │ |
| 62 | +└─────────────────────────────────────────────────────┘ |
| 63 | +``` |
| 64 | + |
| 65 | +**Stack:** TypeScript, React, GraphQL, Node.js, Pulumi, AWS serverless services. |
| 66 | + |
| 67 | +**What you control:** Everything. The IaC templates are open-source. Modify Lambda memory, add CloudWatch alarms, change VPC configuration, add custom AWS resources — it's your infrastructure. |
| 68 | + |
| 69 | +**What you don't manage:** Servers. Patching. Scaling. Capacity planning. That's the point of serverless. |
| 70 | + |
16 | 71 | --- |
17 | 72 |
|
18 | | -## Documentation |
| 73 | +## Quick Start |
| 74 | + |
| 75 | +**Prerequisites:** Node.js 22+, Yarn, AWS account with programmatic access. |
| 76 | + |
| 77 | +```bash |
| 78 | +npx create-webiny-project my-project |
| 79 | +cd my-project |
| 80 | +yarn webiny deploy |
| 81 | +``` |
19 | 82 |
|
20 | | -For full documentation, visit [webiny.com/docs](https://www.webiny.com/docs). |
| 83 | +First deploy takes 5–15 minutes (AWS provisioning). After that, you get an admin panel URL. Create your first admin account, and you're in. |
21 | 84 |
|
22 | | -## Extensions |
| 85 | +**Local development:** |
| 86 | + |
| 87 | +```bash |
| 88 | +yarn webiny watch admin # React dev server on localhost:3001 |
| 89 | +yarn webiny watch api # Local Lambda execution environment |
| 90 | +``` |
| 91 | + |
| 92 | +**New team member onboarding:** |
| 93 | + |
| 94 | +```bash |
| 95 | +git clone <your-repo> |
| 96 | +yarn |
| 97 | +# Ready to develop |
| 98 | +``` |
| 99 | + |
| 100 | +--- |
23 | 101 |
|
24 | | -Explore community extensions at [github.com/webiny/extensions](https://github.com/webiny/extensions). |
| 102 | +## AI-Assisted Development |
| 103 | + |
| 104 | +Webiny ships with an **MCP server** and **AI skills** that give AI coding agents (Claude Code, Cursor, Kiro, etc.) deep context about the platform's architecture, extension points, and patterns. |
| 105 | + |
| 106 | +This means you can ask an AI agent to: |
| 107 | +- Create content models with specific field types and validation |
| 108 | +- Build lifecycle hooks that trigger on content events |
| 109 | +- Extend the GraphQL API with custom queries and business logic |
| 110 | +- Scaffold admin UI extensions with React components |
| 111 | +- Wire integrations with external systems via lifecycle events |
| 112 | +- Set up multi-tenant configurations programmatically |
| 113 | + |
| 114 | +The AI produces code that follows Webiny's actual patterns because the MCP server gives it real knowledge of the framework — not generic guesses. |
| 115 | + |
| 116 | +**Why this works better on Webiny than most platforms:** The framework is strongly typed with explicit extension points. AI-generated code either fits the type system or it doesn't compile. There's no ambiguous plugin API where the AI has to guess. Types enforce correctness. |
| 117 | + |
| 118 | +**Getting started with the MCP server:** |
| 119 | + |
| 120 | +```bash |
| 121 | +# The MCP server runs locally inside your Webiny project |
| 122 | +# Connect it to your AI coding tool of choice |
| 123 | +# See docs for tool-specific setup instructions |
| 124 | +``` |
| 125 | + |
| 126 | +→ [AI-Assisted Development Guide](https://www.webiny.com/docs/build-with-ai/ai-assisted-development) |
| 127 | + |
| 128 | +--- |
25 | 129 |
|
26 | | -## Community |
| 130 | +## Extending Webiny |
27 | 131 |
|
28 | | -For help, discussion about best practices, or feature ideas: |
| 132 | +All customization happens in the `extensions/` folder and is registered in `webiny.config.tsx`. Four extension types: |
29 | 133 |
|
30 | | -[Join our Slack community](https://www.webiny.com/slack) |
| 134 | +**API Extensions** — Custom GraphQL schemas, resolvers, lifecycle hooks, business logic. |
| 135 | + |
| 136 | +```typescript |
| 137 | +// extensions/NotifyOnPublish.ts — Example: send Slack notification when content is published |
| 138 | +class NotifyOnPublish implements CmsLifecycleHook.Interface { |
| 139 | + constructor(private slackService: SlackService.Interface) {} |
| 140 | + |
| 141 | + async afterPublish(params: AfterPublishParams): Promise<void> { |
| 142 | + await this.slackService.notify(`Content published: ${params.entry.title}`); |
| 143 | + } |
| 144 | +} |
| 145 | +``` |
| 146 | + |
| 147 | +**Admin Extensions** — Custom UI components, white-label branding, new views, tenant-specific themes. Standard React — use any patterns and libraries you already know. |
| 148 | + |
| 149 | +**Infrastructure Extensions** — Modify AWS resources via Pulumi. Add Lambda functions, S3 buckets, CloudWatch alarms, or change existing resource configuration. |
| 150 | + |
| 151 | +**CLI Extensions** — Custom commands for deployment workflows, data migrations, code generators. |
| 152 | + |
| 153 | +→ [Extensions Guide](https://www.webiny.com/docs/core-concepts/extensions) |
| 154 | + |
| 155 | +--- |
| 156 | + |
| 157 | +## When to Use Webiny |
| 158 | + |
| 159 | +- You need a self-hosted CMS and don't want to run servers |
| 160 | +- You need multi-tenancy as a first-class primitive, not a workaround |
| 161 | +- You want to extend the CMS with real code (TypeScript), not just configuration |
| 162 | +- You need to embed a CMS inside your own product (white-label) |
| 163 | +- Data ownership and compliance requirements rule out SaaS CMS |
| 164 | +- You want AI agents to be able to build on your content platform effectively |
| 165 | +- You're on AWS (or planning to be) |
| 166 | + |
| 167 | +## When Not to Use Webiny |
| 168 | + |
| 169 | +**Be honest with yourself about these:** |
| 170 | + |
| 171 | +- **Simple sites or blogs.** Webiny is built for complex projects. If you need a blog with 10 pages, use something simpler. |
| 172 | +- **Not on AWS.** Webiny only runs on AWS. No GCP, no Azure, no on-prem. If that's a dealbreaker, it's a dealbreaker. |
| 173 | +- **No TypeScript/React skills on the team.** The entire extension model is TypeScript and React. If your team works in a different stack and doesn't want to adopt these, Webiny won't be a good fit. |
| 174 | +- **You want a no-code, plug-and-play SaaS CMS.** Webiny is a platform for developers to build on. If you want zero development involvement, this isn't it. |
| 175 | + |
| 176 | +--- |
| 177 | + |
| 178 | +## Licensing |
| 179 | + |
| 180 | +**Community Edition** — MIT license. Free forever. Includes Headless CMS, Website Builder, File Manager. |
| 181 | + |
| 182 | +**Business Edition** — Commercial license starting at $79/mo. Adds RBAC, multi-tenancy, publishing workflows. |
| 183 | + |
| 184 | +**Enterprise Edition** — Custom pricing. Adds SSO, audit logs, team management, priority support, managed hosting option. |
| 185 | + |
| 186 | +All plans: unlimited content entries, pages, assets, API calls, roles, and workflows. No per-seat pricing traps. No API metering. |
| 187 | + |
| 188 | +→ [Pricing Details](https://www.webiny.com/pricing) |
| 189 | + |
| 190 | +--- |
| 191 | + |
| 192 | +## Project Structure |
| 193 | + |
| 194 | +``` |
| 195 | +my-webiny-project/ |
| 196 | + extensions/ # Your custom code lives here |
| 197 | + public/ # Admin app static assets |
| 198 | + webiny.config.tsx # Project configuration (React components, type-safe) |
| 199 | + package.json |
| 200 | + tsconfig.json |
| 201 | +``` |
| 202 | + |
| 203 | +Single `package.json`. Single `tsconfig.json`. Configuration in `webiny.config.tsx` uses React components for type safety and IDE auto-completion. |
| 204 | + |
| 205 | +--- |
| 206 | + |
| 207 | +## Key Commands |
| 208 | + |
| 209 | +```bash |
| 210 | +npx create-webiny-project <name> # Create new project |
| 211 | +yarn webiny deploy # Deploy to AWS |
| 212 | +yarn webiny deploy core api # Deploy specific apps |
| 213 | +yarn webiny watch admin # Local admin dev server |
| 214 | +yarn webiny watch api # Local Lambda dev environment |
| 215 | +yarn webiny info # Show endpoints and URLs |
| 216 | +yarn webiny destroy # Tear down all AWS resources |
| 217 | +``` |
| 218 | + |
| 219 | +--- |
| 220 | + |
| 221 | +## Resources |
| 222 | + |
| 223 | +- **[Learn Webiny Course](https://www.webiny.com/learn)** — Structured course covering architecture, extensions, deployment, and AI-assisted development |
| 224 | +- **[Documentation](https://www.webiny.com/docs)** — Full reference docs |
| 225 | +- **[Community Slack](https://www.webiny.com/slack)** — Community chat |
| 226 | +- **[Website Builder Next.js Starter](https://github.com/webiny/website-builder-nextjs)** — Starter kit for rendering Webiny pages with Next.js |
| 227 | + |
| 228 | +--- |
31 | 229 |
|
32 | 230 | ## Contributing |
33 | 231 |
|
34 | | -If you're interested in contributing to Webiny, please read our [contributing docs](/docs/CONTRIBUTING.md) **before submitting a pull request**. |
| 232 | +We welcome contributions. See [CONTRIBUTING.md](docs/CONTRIBUTING.md) for guidelines. |
| 233 | + |
| 234 | +Before opening a PR, please check existing issues or start a discussion — it helps us give you better guidance and avoids duplicate work. |
0 commit comments