Eén taal. Eén platform.
Van code tot complete infrastructuur.

Phlo transpileert een eigen full-stack taal naar PHP die je kunt lezen. Dezelfde taal schrijft je routes, stuurt je DOM aan, draait je server en beheert je vloot. Gebouwd op de techniek die ruim 70% van het web draagt, als antwoord op vijftien jaar JavaScript-stacks.

poll.phlo
prop title = 'Phlo Poll'
prop options = ['Phlo', 'Svelte', 'Laravel', 'Rails']

route GET poll => view($this, $this->title)

view:
<main#app.poll>
	<h1>$this->title</h1>
	<foreach $this->options AS $option>
		<a.async href="/vote/$option">$option</a>
	</foreach>
</main>

<style>
.poll a {
	display: block
	background: $primary
	border-radius: 8px
}
</style>

Phlo in 70 seconden

Waarom Phlo bestaat en wat het je geeft, zonder een regel documentatie te lezen.

Vier lagen, één systeem

Phlo is niet alleen een taal en niet alleen een framework. Elke laag is gebouwd op de vorige, in dezelfde syntax, met hetzelfde denkmodel.

Alles wat Phlo in huis heeft

Van CSRF tot realtime, van ORM tot Stripe: één taal, batterijen inbegrepen. Filter of klik een begrip.

Zo leest Phlo

Vijf voorbeelden van Phlo-bron naast wat de transpiler ervan maakt. Geen toolchain, geen magie: gewoon leesbare output.

Eén regel dispatcht en rendert. Een route eindigt altijd in view(), apply() of location().

Phlo-bron
prop question = 'Which stack wins?'

route GET poll => view($this->question, 'Phlo Poll')
Output
// Compiles to readable PHP:
class poll extends obj {
	public $question = 'Which stack wins?';

	public static function GETpoll(){
		return view(phlo('poll')->question, 'Phlo Poll');
	}
}

HTML in dezelfde file als de logica. Dot-syntax voor class en id. Blank line sluit de view.

Phlo-bron
prop question = 'Which stack wins?'
prop options = ['Phlo', 'Next.js', 'Laravel', 'Rails']

view:
<main#app.poll>
	<h1>$this->question</h1>
	<foreach $this->options AS $option>
		<button>$option</button>
	</foreach>
</main>
Output
<!-- Server-rendered HTML: -->
<main id="app" class="poll">
	<h1>Which stack wins?</h1>
	<button>Phlo</button>
	<button>Next.js</button>
	<button>Laravel</button>
	<button>Rails</button>
</main>

Schrijf in je brontaal. Phlo zoekt vertalingen op via hash en valt terug op de bron.

Phlo-bron
view:
<h1>{en: Which stack wins?}</h1>
<button>{en: Vote}</button>
Output
<!-- /poll  (source language: English) -->
<h1>Which stack wins?</h1>
<button>Vote</button>

<!-- /nl/poll  (auto-translated via langs/nl.ini) -->
<h1>Welke stack wint?</h1>
<button>Stem</button>

Eén route bedient sync én async. Bij async stuurt hij DOM-commando's in plaats van HTML; de client past ze direct toe.

Phlo-bron
route both POST poll vote $id {
	if (!$option = type_poll::record(id: (int)$id)) return false
	type_poll::change('id=?', (int)$id, votes: $option->votes + 1)
	if (%req->async) return apply(outer: arr('#results' => $this->results))
	location('/poll')
}
Output
// Async vote: the server replies with DOM commands,
// the client applies them. No reload, no JS, no API layer.
{
	"outer": {
		"#results": "<section id=\"results\" class=\"card\">...</section>"
	}
}

// A plain browser (no async) gets a redirect to /poll instead.
// One route serves both.

CSS in dezelfde file: nesting, pseudo-selectors met een backslash, geen puntkomma's.

Phlo-bron
<style>
.option {
	display: grid
	grid-template-columns: 1fr auto
	gap: 4px 12px
	.bar {
		height: 8px
		border-radius: 4px
		background: $primary
		transition: width .4s
	}
	\:hover .bar: background: $accent
}
</style>
Output
/* Compiled into app.css: */
.option {
	display: grid;
	grid-template-columns: 1fr auto;
	gap: 4px 12px;
}
.option .bar {
	height: 8px;
	border-radius: 4px;
	background: var(--primary);
	transition: width .4s;
}
.option:hover .bar {
	background: var(--accent);
}

Dit is maar een voorproefje. Doe de hele tour en zie elke laag in actie.

Het handwerk

Onder de capabilities zit vakmanschap: schone output, minimale requests en een dev-ervaring die je in de meeste stacks niet vindt.

Perfect geïndenteerde DOM

De transpiler print pragmatisch: elke geneste view schuift precies één tab in, tabs alleen vóór tags. Je output blijft leesbaar, zonder prettifier.

<div class="card">
	<h1>Titel</h1>
	<p>Geneste view, netjes ingesprongen</p>
</div>

Eén CSS, één JS

Alle style- en script-blokken uit je app en resources bundelt Phlo tot één app.css en één app.js. Een volledige app laadt in circa 4 tot 6 requests, waar vergelijkbare frameworks er 15 tot 20 doen.

100% Lighthouse-score op alle vier de audits Zo haalt een Phlo-app 100/100 →

Eigen CSS-dialect

CSS in dezelfde file, zonder puntkomma's: nesting, variabelen, single-line-regels en color-mix. Transpileert naar standaard CSS met custom properties.

.card {
	background: $surface
	border-radius: $radius
	.title: color: $primary
}

Performance-monitor in debug

Zet debug aan en de console vertelt wat er gebeurt: elke pageload, interactie en async/SPA-request, met timing.

🌎 APP.GET /home
⚓ HISTORY.FORWARD 1
✅ APPLY

Analytics ingebouwd

De visitors-resource meet met een heartbeat de échte zichtbare tijd, per venster en per pagina, GDPR-bewust, zonder externe dienst. Plus view-transitions, audit-log, CSP-modi en AI-vertaling.

Meer specialiteiten →

Editor-highlighting

Syntax-highlighting voor VSCode en Notepad++ zit in de repo. De TextMate-grammar werkt ook in Sublime, JetBrains, Zed en Helix.

Editor-support →

Gebouwd met Phlo

Geen speelgoed-voorbeelden maar echte, draaiende producten: van de eerste route tot productie volledig in Phlo geschreven.

De kracht van Phlo zit niet in één laag, maar in de verticale integratie van alle lagen: dezelfde taal die je route schrijft, stuurt je DOM aan, draait je server en beheert je vloot.

Lees de ontwerpfilosofie →

Begin in twee minuten

Met Docker heb je zonder iets te installeren een draaiende app. De installer vraagt naam, host en resources en eindigt pas na een schone build.

$ docker run -it -v $(pwd)/app:/app ghcr.io/q-ainl/phlo php /phlo/install.php /app

Volledige installatiegids →

Een product van Q-AI, gebouwd door Q-dev

Q-AI ontwikkelt praktische producten en technische oplossingen die werk vereenvoudigen en echte waarde leveren. Phlo is het open-source fundament onder dat werk.

We gebruiken essentiële cookies om deze site te laten werken. Met uw toestemming gebruiken we ook analytics om de site te verbeteren.