Logo

Conduit

realworld

Main purpose of this projects is to have personal extensive API training on multiple backend languages or framework. It’s following the very known Conduit project, a Medium clone. Each project respect following conditions :

  • VS Code as only main editor !
  • 100% compatible by the official OpenAPI Spec
  • Proper OpenAPI documentation
  • Testable with last Postman collection of Conduit
  • Fully tested
  • High QA by following best practices for linting, formatting, with static analyzers for non strongly typed languages
  • Community-driven with usage of the most well-known packages
  • PostgreSQL as main databases
  • Use ORM whenever possible that follows any DataMapper or Active Record patterns
  • Proper seeder / faker for quick starting with filled DB
  • Separated RW / RO database connections for maximizing performance between these 2 contexts
  • Proper suited QA + production Dockerfile
  • Complete CI on Kubernetes with Concourse CI
  • Automatic CD on Kubernetes using Flux

Conduit Frontend

realworld-frontend

Instead of using outdated Bootstrap v4 alpha 2 theme, I rewrite it on UnoCSS, an awesome efficient Tailwind-like utility-first CSS framework, with Dark Mode support.

For API communication, as we have full proper OpenAPI spec, it’s a real benefit to have a generated Typescript client for full autocompletion feature. The well known OpenAPI Generator is okay for this task but generate massive amount of code as it generates a complete client SDK.

Thankfully this openapi-typescript package is a for more lightweight solution. It simply translates the OpenAPI spec to a simple Typescript file, with only types. No code generation involved ! In order to work, we need to use a specific fetch tool which will use all advanced features of Typescript 4 in order to guess type all the API with only a single TS file in runtime !

Common packages involved :

  • Vite as main bundler
  • ESLint with Prettier for linting and code formatting
  • Iconify as universal icons
  • TanStack Query, compatible with Vue and React for nice API communication and powerful caching system

To sum up, at the time of Vue 2 (Options API) and React <16.8 (class components), it was a complete different DX and each framework have their own unique way to develop components. But now with Composition API and React Hooks, the gap is much smaller and became just a matter of taste, JSX vs Vue template, tooling, community, etc.

React TS Realworld

react-ts

React 19 TS implementation. It uses only pure function components thanks to React Hooks, which can be more or less related to Vue 3 Composition API.

It uses React Context as minimalistic store system, without extra complexity from external libraries like Redux or MobX.

Additional packages :

  • Generouted, file based routing system with layout support, compatible with Vite

Compared to Vue implementation, it seems a bit less magical and more explicit, as it likes for Symfony VS Laravel. Don’t require heavy Typescript IDE tooling like Volar, because it’s just pure TS function components.

Vue 3 TS Realworld

vue-ts

Vue 3.5 TS implementation written with Composition API. Main packages involved :

  • Pinia as main store system
  • vue-tsc as main TS checker and compiler for Vue components, with full VS Code support with Volar plugin
  • VueUse for many composition function helpers

Additional packages that reduce boilerplate and improve DX :

Conduit Backend

realworld-backend

Not less than 6 different backend implementations using best practices on C#, Java, PHP, Python, Typescript, highly up to date, with complete integrated automated tests suite.

ASP.NET Core Realworld

aspnet-core

ASP.NET Core 10 implementation, using minimal APIs, following DDD principle, implemented with Hexa architecture and CQRS pattern. Swashbuckle is used as default Swagger UI, while keeping native Microsoft OpenAPI.

Main packages involved :

Spring Boot Realworld

spring-boot

Spring Boot 4 implementation using Gradle 9 & Java 25. Similar to the official Spring Boot implementation but with usage of Spring Data JPA instead of MyBatis. Here is another nice one that explicitly follows DDD.

Main packages involved :

Symfony Realworld

symfony

Symfony 8 implementation on PHP 8.5 that supports PHP 8 attributes, using API Platform.

Contrary to Laravel, the usage of DataMapper pattern ORM involve classic POPO models. The additional usage of plain PHP DTO classes facilitates the OpenAPI spec models generation without writing all schemas by hand. On the downside the Nelmio package is far more verbose than the Laravel OpenAPI version.

Main packages involved :

Laravel Realworld

laravel

Laravel 12 implementation on PHP 8.5 with extensive usage of last attributes support. The particularity of this framework is to give you almost of all you need for quickly develop any complex application. So minimal external packages need.

I obviously made usage of Eloquent as a very expressive Active Record ORM, and the Laravel factories system based on PHP Faker is already perfect for dummy data generator.

Contrary to most others projects, there is no usage of DTO classes, so it’s required to write all schema declarations for proper OpenAPI models generation.

Main packages involved :

NestJS Realworld

nestjs

NestJS 11 implementation under Node.js 24 using Typescript and pnpm as fast package manager. It relies by default on fastify as NodeJS HTTP server implementation. NestJS offers a nice OpenAPI documentation generator thanks to Typescript which provides strong typing.

Main packages involved :

  • Prisma 7 as ORM entirely built up for Typescript. Include migrations, models generator based on specific schema specification
  • Faker for generating seeders
  • ESLint with Prettier for linting and code formatting
  • Jest as main test framework

FastAPI Realworld

fastapi

FastAPI implementation under last Python 3.14 with Poetry as package manager.

It’s based on pydantic, an essential component that allows proper OpenAPI generation and data validations while bringing advanced type hints.

Main packages involved :

  • Pydantic 2, for any data validation
  • SQLAlchemy 2 with Alembic for schema migration
  • python-jose as JWT implementation
  • Faker as dummy data generator
  • Ruff as extremely fast linter and code formatter written in rust, a perfect drop-in replacement for flake8, isort and black
  • mypy as advanced static analyzer
  • pytest as main test framework