Everything you need to know about Opensource Jamstack
Tags: opensource, jamstack, headlesscms, ssg
Published: 2021-10-06 09:07:37

Many mainstream Jamstack tools and projects are open-source. These projects are used by millions are built and maintained by large online communities of developers. Being a part of these communities and contributing to them can be a rewarding experience. You get to fix bugs that frustrate you, propose features you are in need of, develop your technical skills and help foster the community. But how would you get started? In this article, you’ll get to learn about open-source Jamstack projects and how to make your first contribution to them. 

Before exploring these different projects, it’s important to understand what the terms Jamstack and Open-source mean. Jamstack is a partial acronym for Javascript-API-Markup-Stack. It is a frontend architecture in which web content is pre-rendered then deployed. When a request is made for the web content through a client, the pre-rendered content is sent as a response. The content is typically delivered through a CDN to improve delivery speeds. The Markup of the stack is what structures and formats the web content in a document. This usually is HTML and CSS but other Jamstack projects may use a different kind of markup. The Javascript makes the markup documents interactive and dynamic. The APIs provide data and other external functionality. Jamstack sites are on the whole [cheaper and less intensive to build](https://strapi.io/blog/what-is-the-jamstack). They have a smaller footprint compared to legacy systems and are thus easier to secure and require fewer people to maintain. 

Open-source when used to describe software, means that anyone has access to its source code. Individuals may choose to look through it, use it in other projects, change it significantly, or share it with others. However, what exactly they may do with the source code is stipulated in a [license](https://opensource.org/licenses/alphabetical). Different licenses lay out the limits of what you can do with the source code. Although a lot of open-source projects generally tend to be free, not all are.  Open-sourcing software has led to the proliferation of so many innovative projects through global collaboration. It’s made so much software and resources available to people across the world. Without it, acquiring software would have been restrictive to many. Additionally, it has built flourishing communities around the software that’s made open. 

There are two main types of Jamstack open-source projects: static site generators (SSGs) and content management systems (CMSs). While this article focuses on these two, it’s also important to touch on open-source external APIs that support static sites.  

## Open-Source Static Site Generator (SSG)

A static site generators is a tool that build static web pages by taking templates and incorporating content and data into them. Templates define the structure of the web pages. Content and data can include things like menu items, site copy, blog posts, etc. An SSG takes the data and adds it to the templates during a build process and renders static web pages. These pages are then hosted and served to clients when requested. Some common applications for SSGs include business brochure websites, portfolios, blogs, online magazines, documentation, among others.

One of the most fastest and popular open-source SSGs is [Hugo](https://github.com/gohugoio/hugo). It’s written in Go and has over [700 contributors](https://github.com/gohugoio/hugo/graphs/contributors) listed on its core Github repository. It uses Go templates for its templates. A notable feature of the Hugo is its themes. It has over 300 website themes contributed and includes entries like developer portfolios, project documentation, and business websites. Community members also help to maintain the [Hugo documentation website](https://gohugo.io/). It has a [*good-first-issue*](https://github.com/gohugoio/hugo/issues?q=is%3Aopen+is%3Aissue+label%3AGoodFirstIssue) [](https://github.com/gohugoio/hugo/issues?q=is%3Aopen+is%3Aissue+label%3AGoodFirstIssue)tag for issues to encourage new contributors to take them on. It provides a [contribution guide](https://github.com/gohugoio/hugo/blob/master/CONTRIBUTING.md) for new contributors on its repository. 

Another well-known open-source SSG is [Jekyll](https://jekyllrb.com/) with over [900 contributors](https://github.com/jekyll/jekyll/graphs/contributors) on Github. It’s written in Ruby and is the engine that is used on Github Pages. It takes markdown files and liquid templates and converts them into static pages. Jekyll offers themes, plugins, and other integrations that you can use to enhance your generated site. It provides a [good-first-issue](https://github.com/jekyll/jekyll/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue+%3A1st_place_medal%3A%22) issue tag for new contributors. 

There are so many more open-source SSGs out there that accept contributions. You can find an extensive list of them [on the Jamstack website](https://jamstack.org/generators/). 

## Open-Source Content Management System (CMS)

A content management system manages digital content and/or the website it is displayed on. It provides site administrators and contributors a backend console where they can enter, modify, and delete content. When content changes are made on the console, they are reflected on the frontend without having to re-render or re-deploy a site. Originally, several CMSs shipped with a frontend or some functionality to generate one. The frontend sites are typically static and communicate with the backend through a set of APIs.  However, a new generation of CMSs have cropped up that do not include this frontend portion. These are called Headless CMSs. They still however provide a backend console and APIs to handle content. 

[Ghost](https://ghost.org/) is a prominent blogging open-source CMS. It’s a more traditional CMS and offers both an admin console and a frontend. Over [340 people](https://github.com/TryGhost/Ghost/graphs/contributors) have made contributions to it. It’s built on Node.js and offers features like themes, newsletters, subscriptions, and several integrations. Its repo lists a [contribution guide](https://github.com/TryGhost/Ghost/blob/main/.github/CONTRIBUTING.md) and some issues are tagged with [*good-first-issue*](https://github.com/TryGhost/Ghost/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22). 

Another example of an open-source CMS is [Strapi](https://strapi.io/). It’s built on Node.js and is a Headless CMS. It offers a customizable application programming interface (API) that it automatically generates for each content type you create. Your content is also made available through GraphQL. Strapi supports roles and permissions management with its [RBAC feature](https://strapi.io/features/custom-roles-and-permissions) where different users can be assigned different access levels and roles to the content. With internationalization, you can create content for different markets in various languages. A slate of Strapi integrations are available for all kinds of frameworks and languages like React, Angular, Go, Python, etc. On the Strapi admin panel, you can manage all these features with a user-friendly interface. Strapi ships with plugins that support [content management, type building, file uploads](https://strapi.io/documentation/developer-docs/latest/development/plugin-customization.html), etc. but you can also [add more plugins through its marketplace](https://strapi.io/documentation/user-docs/latest/plugins/installing-plugins-via-marketplace.html).  It has over [600 contributors](https://github.com/strapi/strapi/graphs/contributors), provides a [contribution guide](https://github.com/strapi/strapi/blob/master/CONTRIBUTING.md), and has several issues tagged [*good-first-issue*](https://github.com/strapi/strapi/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22). 

You can find other open-source CMSs listed on the Jamstack website. 

## Open-Source APIs

Many static sites augment their functionality by consuming application programming interfaces (APIs). For example, if a static website needs to support authentication, facilitate payments, manage an e-commerce store catalog, perform a search, etc. they may use an external API. Although the most popular API services are neither open-source nor free, there are still a number of APIs that are. They can be self-hosted and connected to static sites. 

[Elastic search](https://www.elastic.co/elasticsearch/), for example, is an open-source search and analytics engine that can be self-hosted. It has over [1600 contributors](https://github.com/elastic/elasticsearch/graphs/contributors) on Github. It provides a REST API to implement search that can be used on static sites. For new contributors, it has a [contribution guide](https://github.com/elastic/elasticsearch/blob/master/CONTRIBUTING.md) and a significant number of issues tagged as [good-first-issue](https://github.com/elastic/elasticsearch/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22). 

Another great API that could be self-hosted is [Coral](https://github.com/coralproject/talk). It’s a commenting platform where users can leave online comments. It’s received contributions from over [40 people](https://github.com/coralproject/talk/graphs/contributors) on Github. It has a [good-first-issue](https://github.com/coralproject/talk/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) tag and also offers a [contribution guide](https://github.com/coralproject/talk/blob/develop/CONTRIBUTING.md).

To find other open-source APIs that can complement static sites, checkout out [this self-hosted awesome list](https://github.com/awesome-selfhosted/awesome-selfhosted). 

## Tips for Contributing to Open-Source Jamstack Projects

If you’re unsure about what Jamstack project to start contributing to, look at what you use most often. Having experience with a project can make contributing much easier. Identify bugs that you may have come across and bring them to the attention of the community by listing them as an issue. You can then attempt to fix them. However, you do not have to limit yourself to code. An easy way to contribute is to work on documentation, add comments to provide context in code (if requested) or participate in discussions in issues. Once you become more experienced with the codebase, you can attempt proposing, planning, and working on features.

Before starting any work on an open-source codebase, always check the license to make sure it’s open-source. It’s important to check that they accept external contributions. Also, read community guidelines or a code of conduct if available so you understand the proper way to act within the community. Always lookout for a contribution guide. This will help you understand how to set up the project, take up issues, make commits and pull requests, as well as seek reviews of your work. 

To understand how the project works, read through the documentation. This could be in the form of wikis, the README, blog posts, articles, and even tutorials. You could also read through discussions other contributors are having on issue pages. If you ever get blocked, seek help from the community through forums, mailing lists, and chat platforms if they offer any. 

Codebase maintainers usually reserve issues for new contributors using tags on Github. Some commonly used tags include [first-timers-only](https://github.com/topics/first-timers-only), [beginner-friendly](https://github.com/topics/beginner-friendly), [good-first-issue](https://github.com/topics/good-first-issue), [good-first-bug](https://github.com/topics/good-first-bug), [low-hanging-fruit](https://github.com/topics/low-hanging-fruit), [easy](https://github.com/topics/easy), etc. When searching for tasks to work on, look out for these tags. After you’ve found an issue you’re confident you can complete, request that it gets assigned to you. Some organizations hold open-source events that are geared towards beginners. A great example if [Digital Ocean’s Hacktober Fest](https://hacktoberfest.digitalocean.com/). Events like these could be an awesome place to start. 

Lastly, only get involved in positive communities. Over the years, several open-source communities have been embroiled in controversy over some unpleasant behavior from their members. It’s important to make sure that the project has a code of conduct or has community guidelines. These help ensure everyone remains respectful. 

## Conclusion

Contributing to open source is an amazing learning experience. It helps you hone your technical skills. By being part of a community, you can contribute to useful projects that help so many. There are numerous Jamstack open-source projects looking to welcome new contributors. You can always start with small tasks as you work your way up to bigger contributions. You can find a list of possible projects to contribute to on [the Jamstack website](https://jamstack.org/). Strapi has a robust open-source community and is always welcoming to new contributors. The project has [numerous issues that they’ve marked good for contribution beginners](https://github.com/strapi/strapi/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22). If you’d like to make a contribution, checkout the [Strapi repo on Github](https://github.com/strapi/strapi).