Giter VIP home page Giter VIP logo

webiny / webiny-js Goto Github PK

View Code? Open in Web Editor NEW
7.1K 68.0 572.0 360.76 MB

Open-source serverless enterprise CMS. Includes a headless CMS, page builder, form builder, and file manager. Easy to customize and expand. Deploys to AWS.

Home Page: https://www.webiny.com

License: Other

JavaScript 15.87% CSS 0.17% HTML 0.03% TypeScript 83.73% SCSS 0.19%
graphql react serverless nodejs cms microservice javascript typescript lambda spa

webiny-js's Introduction



Open-Source Serverless Enterprise CMS

Website | Documentation | Community Slack | Forum | Twitter

Prettier license SemVer PRs Welcome Contributor Covenant Join our Slack community https://www.webiny.com/slack

product-video-2022.mp4

Webiny Serverless CMS includes:

1️⃣ Page Builder - Drag&drop page editor. Pages are prerendered automatically and cached on CloudFront for lightning-fast delivery.

2️⃣ Headless CMS - Headless CMS with a GraphQL API. Build APIs and content models through a UI. It includes content revisions, localization, and fine-grain permission control.

3️⃣ File Manager - Upload files images. Search and organize your assets. It includes a built-in image editor for basic image manipulations.

4️⃣ Form Builder - Build forms with a drag&drop editor. Insert forms through Page Builder into your pages. It has webhook support and ReCaptcha integration.

All Webiny apps can be customized easily to fully fit an enterprise publishing workflow and integrate with leading identity providers like OKTA and Cognito.

🏁 Quick installation guide

  1. Create a Webiny project:

npx create-webiny-project my-new-project

  1. Deploy to your AWS cloud:

yarn webiny deploy

Prerequisites

  • Node.js ^12 || ^14
  • yarn ^1.22.0 || ^2
  • AWS account

For the detailed install guide, please see 👉 https://www.webiny.com/docs/tutorials/install-webiny

Need help, having trouble installing, find us on our community slack 👉 https://www.webiny.com/slack

📕 Documentation

For complete documentation 👉 https://www.webiny.com/docs

🤝 Community & Support

Community Forum. Best for: help with building, discussion about database best practices 👉 https://www.webiny.com/slack

GitHub Issues. Best for: bugs and errors you encounter using Webbiny 👉 https://github.com/webiny/webiny-js/issues

💪 Contributing

Webiny is all about the community. Please feel free to join in, whether it's fixing bugs, improving our documentation, or simply spreading the word. Please see our Contributing Guidelines, which explain project organization, setup, testing, and other steps. If you need any assistance in contribution, please reach out via our community Slack.

📜 License

This project is licensed under the terms of the MIT license except for the following modules, which require a Webiny Enterprise license:

  • Multi-tenancy module
  • OKTA integration

Contact [email protected] for more information.

Why are those modules paid? It's a way we support the development of the project!

👷‍♀️ When to use Webiny?

Webiny has many features, too many to list to make this readme digestible, so instead of talking about features, here are the common use-cases you can satisfy using Webiny:

  • Headless CMS - Programmatically integrate your apps with Webiny's GraphQL Headless CMS.

  • GraphQL API - You can build a GraphQL API using the Headless CMS, but you can also use the webiny scaffold command to create new GraphQL resolvers where you can add your custom business logic.

  • Marketing landing pages and micro-sites - Using the Page Builder marketing teams can quickly build new websites without knowledge of HTML or CSS.

  • Multi-tenant SaaS applications - Webiny has a robust multi-tenancy layer with built-in data separation. You can build your own SaaS applications on top and let Webiny handle the API, security, and data storage for you.

  • Full-stack serverless applications - Besides using Webiny to manage your content needs, you can expand the existing functionality by creating new full-stack serverless applications on top. Follow this tutorial to build your own full-stack serverless Pinterest clone.

  • Multi-website & multi-language portal - All Webiny apps are multi-tenant by default, meaning with a single instance of Webiny, you can run hundreds of projects and websites from a single code-base.

  • Dynamic Page (coming soon) - We're working on seamless integration between the Headless CMS and the Page Builder, so you can build and publish dynamic pages without a single line of code or build pipelines required. New content is live instantly and visible to the users.

  • Multi-cloud support (coming soon) - At the moment, Webiny only supports AWS, but we have plans to add support for other cloud vendors such as GCP and Azure. Because Webiny uses cloud-native services to run, not containers, this task is not easy, but we have a plan.



❓ FAQ

♦ Why serverless?

We believe serverless is the future of web development. It gives us much more bang for our buck!

♦ Why open-source?

Open-source has two main aspects over SaaS:

  1. It's customizable, unlike being locked in a SaaS solution.
  2. Your data is stored under your rules, in your data center, with your compliance standard inside your security parameter and delivered through your CDN.

♦ How is this enterprise?

  1. Webiny is built to be integrated inside enterprise environments. Being open-source is one part of that solution; the other is that Webiny integrates with enterprise IdPs such as OKTA and Cognito.
  2. Webiny is architected to sustain heavy usage coming from large volumes of users.
  3. Webiny is built on top of fault-tolerant serverless services.
  4. Webiny keeps the data encrypted both in transit and at rest.
  5. In the paid edition, enterprises have access to our SLA-based support and consultancy services.

♦ How fast and scalable is Webiny?

How about a load-test :)

♦ How much does it cost to run Webiny?

Webiny comes in 2 database options, DynamoDB + Elasticsearch and DynamoDB only. The latter option, when looking at all the infrastructure pieces Webiny uses to operate, the consumption of the AWS services fully determines the cost. In the DDB + ES option, there is a minimum ~$25/mo charge to AWS for the Elasticsearch cluster as it's not a consumption-based service.

As part of our performance benchmark, we also benchmarked the cost of the DDB + ES, specifically, Headless CMS read and write operations. So that benchmark is a good starting point to determine your cost.

As a rule of thumb, we recommend the DDB option for small and medium-size projects, which should be cheaper when compared to a solution running on VMs or containers.

♦ Why should my enterprise consider using Webiny?

Top 5 reasons to do so:

  1. Self-hosted: Webiny runs inside your own AWS cloud; you keep control over your data and security perimeter.
  2. Open-source: We released Webiny under the MIT license, so you can customize every aspect of the system to match your needs fully.
  3. Serverless: Webiny runs on AWS services such as Lambda, S3, and DynamoDB, to offer a highly scalable and fault-tolerant infrastructure.
  4. Cost-savings: Cut your infrastructure and operations costs by 60% to 80% compared to solutions running on VMs.
  5. Secure: Webiny follows security best practices by encrypting data both in transit and rest across all services. It integrates with IdPs such as OKTA and Cognito. CodeQL and Dependabot scanning tools ensure code security.

Contributors

🧡 Thanks goes to these wonderful people!

webiny-js's People

Contributors

abitshift avatar adrians5j avatar afzalsayed96 avatar albionahoti avatar ankurvr avatar anshuman71 avatar anushkrishnav avatar ashu96 avatar asmaloth avatar boyuan459 avatar brunozoric avatar emilk15 avatar endymion1818 avatar ewan-roberts avatar fsalker avatar jimjoes avatar kedrzu avatar latotty avatar leopuleo avatar maxmmorz avatar mihajlovco avatar neatbyte-vnobis avatar ng29 avatar pavel910 avatar roman-vabishchevych avatar snstanton avatar svenalhamad avatar swapnilmmane avatar tommyjackson85 avatar val-fom avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

webiny-js's Issues

Offer passing custom ID validation callback

Currently if idGenerator is set, driver assumes that it needs to be a string and that's the only validation step in the isId method.

Add the ability to pass a custom ID validation callback, in which users might execute more sophisticated validation.

Not throwing correct errors

Check webiny-entity completely and ensure instances of EntityError classes are thrown instead of plain Error.

Entity attribute - save linked entity only if dirty

Currently when saving main entity, linked entity will be saved if it was instantiated. Add additional checking - only save if actually something has changed in the loaded linked entity.

Implementing this would improve performance.

EntityCollection

Create entity collection and ensure it contains all sent params meta data.

Add support for table name

webiny-entity-mysql currently uses classId as a table name. It should be able to receive a custom table name (useful when users already have tables in an existing database).

Allow params or connection instance

On construct, users should be able to send params directly (that will configure mysql pool) or an instance of already existing mysql connection or pool.

Entity attribute - using feature

Entity attribute should also have setUsing method for setting an aggregation entity over which the main linked entity will be loaded.

Example:
this.attr('company').entity(Company).setUsing(CompaniesUsers, 'company');

Test - entity attribute (save method)

Ensure that if multiple nested entities are linked, that if validation fails on one, that main save fails.

Note 1: currently if most nested entity validates successfully, it will be saved, even if the parent entity is invalid (which is determined after the child entity got saved).

Note 2: if entity is loading, it must be validated - test that case.

EntityCollection

Forbid appending anything that is not an instance of Entity class.

isId method on webiny-entity drivers

Sometimes, entity layer must check if given value is a valid ID. The best solution for this is to enable drivers to tell if the value is a valid id or not.

Implement isId(value) method on drivers.

Optimize toJSON method

Right now it has to convert the whole entity to JSON, which means often it will have to load entities.

That's a wrong approach, lazy load only what is needed.

Note 1: as any attribute, entity attribute has a getJSONValue method, and it will always return a whole JSON representation of an entity. This also must be taken care of.

Note2: this also causes problems when doing something like user.get('company.image.id'), where image has createdBy attribute, which links to the original user, because current behavior recursively fetches data.

isId - transform to async

Since developers might need to do async validation of ID using eg. webiny-validation, let's make this method async.

File storage package

Create a standalone file storage package with support for drivers.
Searching the npm gave me nothing I would want to use, google did not help either.

Goals:

  • ability to provide CDN URL
  • ability to create date folder structure
  • abstract interface to support 3rd party drivers
  • local filesystem driver (as a separate package) #29
  • AWS S3 driver (as a separate package) #30

entities attribute

Currently, attribute loads linked IDs immediately from database, but it should not since it's a performance issue.

Refactor is so that everything is completely lazy-loaded.

Remove undefined when extracting

If a field doesn't exist, the output would include that field, but with value undefined.

This is not a JSON value, so ideally, we don't want to include this field at all in the outputted JSON.

Image entity - additional attributes

Implement following useful attributes on Image entity:

  1. width, float
  2. height, float
  3. aspectRatio, dynamic
  4. isPortrait, dynamic
  5. isLandscape, dynamic

Exposing query method.

Expose a method for querying database directly, so that users can write advanced queries (eg. GROUP BY or JOIN) by themselves.

Data extractor - support for arrays

If user passes a path that is a part of an array, data extractor must recognize it is an array and apply the rest of the path to each item in it.

entity/entities attribute - autoSave setting

autoSave attribute setting - so that users can decide whether or not all non-saved linked entities (in both entity and entities attribute) can be automatically saved on save of main entity.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.