algonote(en)

There's More Than One Way To Do It

List of open source web services that architects should check out

Reference for implementation

Preface: Let's read open source implementations

When you are doing web development, you may feel uneasy whether this way of writing is normal or not, or whether the direction of implementation is good or not. In such cases, I try to find out by referring to existing implementations in the same repository, other repositories in the company, technical blogs and books, past experiences, and opinions of other members, but there is no better way than to have more references.

For some well-known languages and frameworks, open source web services are available on GitHub, GitLab, etc., which can be a good reference.

Each of them has its own license, and you should be careful about GPL pollution especially. The popular web services written in scripting languages and Go are listed below.

Ruby

Ruby on Rails is popular and there are many web services that use it.

Redmine

Redmine is a issue and project management software.

It is probably the most famous one made by Rails. Recently, more and more companies are using SaaS in the cloud, so there may be fewer cases of self-hosting.

It is made to be compatible with MySQL/PostgreSQL/Microsoft SQL Server/SQLite 3 (deprecated for production).

Mastodon

Mastodon is a social networking and microblogging service, which has seen a rapid increase in users since the Twitter acquisition.

The DB is PostgreSQL, and they use Sidekiq a lot. It is also helpful to look at ActivityPub's handling.

AGPL.

Forem

Forem is famous for the internal of dev.to.

DB is PostgreSQL. Rails repositories often lack front-end update, but Forem uses Storybook in React and tests with Cypress, so it's fairly modern.

There are some monitoring tools in there, and there are some articles on dev.to explaining the internal implementation, so there may be a good reference in terms of load balancing.

AGPL.

Discourse

Discourse, a discussion forum.

DB is PostgreSQL and Ember.js is used for the frontend. Recently React and Vue are more popular.

Discourse has a concept called Trust Levels, and it might be interesting to see the implementation of trust scores.

GitLab

GitLab, a Git hosting company. It is a publicly traded company with a market capitalization of 360 billion yen.

They used to support MySQL for DB, but moved to PostgreSQL only. Since they use Gitaly for Git operations, in addition to Ruby, Go is also required.

The repository is quite large among open source Rails repositories, and its use of Elasticsearch and GraphQL may be helpful in designing it. The front is in Vue (series 2 as of 2023/05), and there is also a Storybook.

PHP

Laravel is the most popular PHP framework these days, but Symfony, the base of Laravel, has more examples. However, there are many frameworks that are highly modular. So there are a lot of combinations.

MySQL is the popular choice as DB. It is called LAMP stack. CMS, WIki and EC are strength.

WordPress

WordPress is the most popular blogging software in the world. Although it is not on the MVC framework, it is probably the most famous software made with PHP.

Static Site Generator seems to be more popular for engineers with self-made blogs, but for non-engineers with self-hosted blogs, I think it is the first choice.

Gutenberg, a block editor that has been included in WordPress 5.0, seems to use React.

Magento

Magento, an e-commerce platform, acquired by Adobe in 2018.

It is built on top of Laminas Project (formerly Zend Framework).

EC-CUBE

Japanese EC building software, made by Symfony.

Drupal

Drupal is a CMS. It uses Symfony as a dependency.

Front page uses Backbone.js with jQuery and CKEditor.

Joomla

Joomla is a CMS. It has Symfony as a dependency, but there are also many custom framework components as seen in joomla/application.

Concrete5

Concrete5 is a CMS, built on top of the Laminas Project (formerly Zend Framework) with some Laravel components.

The front page uses Vue in some parts.

MediaWiki

MediaWiki is a wiki software. It is famous for being used in Wikipedia.

PukiWiki

PukiWiki is a wiki software.

Python

Airflow

Apache Airflow is a workflow management system.

It is made by Flask and its ORM is SQLAlchemy. Some companies are using SQLAlchemy for their Django projects instead of the built-in ORM.

PostgreSQL/MySQL/MSSQL (experimental)/SQLite are supported as DB.

Zulip

Zulip is a chat app. There is an example of migration to Zulip due to the more strict restrictions of community Slack.

It has unique history. It was open sourced after being acquired by Dropbox.

Made by Django and uses a built-in ORM. Frontend uses zod but jQuery and handlebars.

node.js

Historically, the strength of the stack has been tightly coupled with NoSQL (especially MongoDB). Recently, however, more and more are becoming RDB-based.

There is a opinion that it is better not to share anything but API types. There is a lot of mono repository knowledge because the language can be unified between client and server.

Ghost

Ghost is a CMS for blogs.

There was a time when it was said to be the most promising alternative to WordPress. It has a mono repository structure with modules cut into small pieces.

It is made with Express and DB is MySQL accessed via Knex.js. The front of Admin is Ember.js and React.

Strapi

Strapi is a Headless CMS.

Made by Koa. Nx is used for mono repository management. It supports MySQL/MariaDB/PostgreSQL/SQLite via Knex.js.

Admin frontend is React+Redux.

Misskey

Misskey is a social networking and microblogging service.

It uses TypeORM with NestJS on Fastify. DB is PostgreSQL.

Front page uses Vue3. It has storybook.

AGPL.

GROWI

GROWI is a Wiki software.

Half of the code is in TypeScript and the DB is MongoDB.

React is used for the frontend.

Other node.js reference implementations

There are many other node.js reference implementations, but it doesn't mean TypeScript is fully supported.

Go

One of Go's strengths is Protocol Buffers+gRPC with microservices, but it's hard to find reference implementations because monolithic has advantage for the case someone installs it.

Grafana

Grafana is a monitoring tool.

It supports SQLite, MySQL, and PostgreSQL as DB. There are many dependencies on public cloud packages for managed services.

The frontend is managed by Lerna. UsingTypeScript for Angular and React.

Mattermost

Mattermost is a chat platform.

MySQL and PostgreSQL are supported as DB. There are many people who think that net/http is sufficient for Go's framework.

Frontend is React.

Lastly

Please let me know if there are others or if I'm wrong. I'm also interested in Rust, JVM, and C# ecosystems.