VulCode

PHP: what we build with it and why

We meet PHP where hosting lives: in WHMCS, in Pterodactyl and its themes, in small sites without a framework and in APIs that must run on any server.

All technologies

PHP in real screenshots

The projects on this page on the screens from the portfolio and the case studies, each with a short description and the way to the full one.

The billing bridge in the Flaem panel: the connected billing system and products mapped to plans

Flaem: billing modules

WHMCS, HostBill, Paymenter and Blesta modules with tests.

When PHP, and when something else

A technology has to fit the place the code will run and the team that will take it over. The final choice is made in the quote, together with you.

We pick PHP

Modules for billing systems

The Flaem modules for WHMCS, HostBill, Paymenter and Blesta have PHPUnit tests. These systems load add-ons only in PHP, so it is the only way for a host to sell services from the platform.

Pterodactyl themes and add-ons

The Pterodactyl panel is built on Laravel. The WaveHost theme is a game panel in the client's colours, built on Pterodactyl's code.

Small APIs with no build step

ghapi is a GitHub statistics API in plain PHP, with no framework. Deployment is copying files, and the collector reads only the branches that moved.

Sites on any hosting

The DualFroz site has a simple router and HTML prepared on the server. The content is in the first response, and the site runs on any hosting with PHP.

A store without a heavy framework

bazaar has a catalogue, a cart, Stripe Checkout payments, customer accounts and an admin panel on its own microframework. Queries go only through PDO prepared statements, and forms have CSRF protection.

Taking over an existing project

We take over a working PHP system starting with a code review and a list of risks. It is often cheaper to fix and extend it than to rewrite it from scratch.

This is how we write it in our services

We pick something else

A new platform for years

A platform meant to grow for years gets a core in Rust and a panel in TypeScript. PHP handles one request and stops, while a platform needs processes that run all the time, and queues.

Live connections and voice

Classic PHP stops after every request, so it does not hold open connections. The Plazer servers with WebSocket and voice calls are in Go.

An agent on a server

An agent on someone else's machine cannot depend on an installed PHP and its extensions. The Flaem agents are in Go, as single binaries.

A panel with a console and charts

Server HTML is enough for a simple site, but we write a panel with a live console and charts in React and TypeScript. That is how the Flaem panel and the client panels are built.

A Discord bot

A bot has to hold its connection to Discord all the time, and PHP run per request does not fit that. We write bots in Python with discord.py or in TypeScript.

Long background jobs

Creating servers and syncing take longer than one request. In WaveHost a separate process with BullMQ queues in TypeScript does it, and in Flaem services in Rust and Go.

PHP compared, point by point

Each need on a row of its own, with what each of the two columns gives you on it side by side.

SituationPHPNode or Rust

A WHMCS module

The only option
Not possible

Shared hosting

Runs everywhere
Rarely available

A new platform for years

Possible, not the first choice
First choice

Deployment

Copying files
Building and starting a service

Open live connections

Needs a separate server
Built into the running process

A Pterodactyl theme or add-on

Laravel, so PHP
Only the React interface

Background jobs

A separate worker and scheduler
The process runs all the time

PHP in all our code

How many lines we have written in PHP, and what part of everything we have written that is. We count the lines added in the commits of our repositories, language by language.

130,914
lines written in PHP
2.4%
of all the lines we have written
6
repositories with PHP code
7th
place among 26 languages

The libraries these projects stand on

From the dependency files of our repositories. With each, one sentence on what we use it for.

The DualFroz site on a phone
  • PHP 8.2 without a framework

    The stats API and the personal site.

  • Laravel

    Pterodactyl and its themes.

  • PHPUnit

    Billing module tests.

  • sodium and openssl

    Cryptography from the standard library.

Our changes to other people's PHP projects

32 merged changes in 20 repositories. The maintainers of these projects reviewed our code and merged it into theirs.

Week by week

The languages of our changes

Other technologies, and where their code runs

Each has its own page with projects on real screens and a comparison with the alternatives.

Websites and web apps

What you see in a browser, and its back end.

Mobile apps

Native Android and iOS clients.

Desktop apps

Programs for Windows, macOS and Linux without a browser inside.

Back end and infrastructure

Cores, server agents and real-time services.

Bots and automation

Discord, scripts and monitoring.

Questions about PHP

Answers about PHP, our projects and the numbers on this page.

A project in PHP?

Describe what you want to build. We reply within an hour and tell you plainly whether this technology is a good choice.