Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions archive/archive.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<uri>http://php.net/contact</uri>
<email>php-webmaster@lists.php.net</email>
</author>
<xi:include href="entries/2026-03-09-1.xml"/>
<xi:include href="entries/2026-02-12-2.xml"/>
<xi:include href="entries/2026-02-12-1.xml"/>
<xi:include href="entries/2026-02-09-1.xml"/>
Expand Down
29 changes: 29 additions & 0 deletions archive/entries/2026-03-09-1.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom">
<title>FrankenPHP: Now with Windows Support</title>
<id>https://www.php.net/archive/2026.php#2026-03-09-1</id>
<published>2026-03-09T18:12:42+00:00</published>
<updated>2026-03-09T18:12:42+00:00</updated>
<link href="https://www.php.net/index.php#2026-03-09-1" rel="alternate" type="text/html"/>
<link href="https://www.php.net/archive/2026.php#2026-03-09-1" rel="via" type="text/html"/>
<category term="frontpage" label="PHP.net frontpage news"/>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>
In 2025, <a href="https://frankenphp.dev/">FrankenPHP</a>, the modern PHP application server built on Caddy,
joined the official PHP organization on GitHub at
<a href="https://github.com/php/frankenphp">php/frankenphp</a>,
with support from <a href="https://thephp.foundation/blog/2025/05/15/frankenphp/">The PHP Foundation</a>.
</p>
<p>
The latest release brings
<a href="https://dunglas.dev/2026/03/windows-support-for-frankenphp-its-finally-alive/">Windows support</a>,
making FrankenPHP available on Linux, macOS, and Windows.
Comment thread
pronskiy marked this conversation as resolved.
Outdated
</p>
<p>
FrankenPHP is now also listed as an installation option on the
<a href="https://www.php.net/downloads.php">downloads page</a>.
</p>
</div>
</content>
</entry>
24 changes: 18 additions & 6 deletions downloads-get-instructions.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,17 +47,29 @@

switch ($options['os']) {
case 'linux':
$defaultOrCommunity = ($options['version'] !== 'default' || $multiversion) ? 'community' : 'default';
if ($defaultOrCommunity === 'community' && $options['version'] == 'default') {
$options['version'] = $latestPhpVersion;
if ($options['osvariant'] === 'linux-frankenphp') {
if ($options['version'] === 'default') {
$options['version'] = $latestPhpVersion;
}
$file = 'frankenphp';
} else {
$defaultOrCommunity = ($options['version'] !== 'default' || $multiversion) ? 'community' : 'default';
if ($defaultOrCommunity === 'community' && $options['version'] == 'default') {
$options['version'] = $latestPhpVersion;
}
$file = "{$options['osvariant']}-{$options['usage']}-{$defaultOrCommunity}";
}
$file = "{$options['osvariant']}-{$options['usage']}-{$defaultOrCommunity}";
break;
case 'osx':
case 'windows':
if($options['osvariant'] === "{$options['os']}-docker") {
if ($options['osvariant'] === "{$options['os']}-docker") {
$file = "{$options['osvariant']}-{$options['usage']}";
} elseif($options['osvariant'] === "{$options['os']}-scoop") {
} elseif ($options['osvariant'] === "{$options['os']}-frankenphp") {
if ($options['version'] === 'default') {
$options['version'] = $latestPhpVersion;
}
$file = 'frankenphp';
} elseif ($options['osvariant'] === "{$options['os']}-scoop") {
$file = "{$options['osvariant']}-" . ($options['version'] == $latestPhpVersion ? 'main' : 'versions');
} else {
$file = "{$options['osvariant']}";
Expand Down
8 changes: 8 additions & 0 deletions downloads.php
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,12 @@ function option(string $value, string $desc, $attributes = []): string

$options = array_merge($defaults, $_GET);

if ($options['usage'] === 'web') {
$os['linux']['variants']['linux-frankenphp'] = 'FrankenPHP';
$os['osx']['variants']['osx-frankenphp'] = 'FrankenPHP';
$os['windows']['variants']['windows-frankenphp'] = 'FrankenPHP';
}

if ($auto_osvariant && (!array_key_exists('osvariant', $options) || !array_key_exists($options['osvariant'], $os[$options['os']]['variants']))) {
$options['osvariant'] = $auto_osvariant;
} elseif (!array_key_exists('osvariant', $options) || !array_key_exists($options['osvariant'], $os[$options['os']]['variants'])) {
Expand Down Expand Up @@ -187,6 +193,7 @@ function option(string $value, string $desc, $attributes = []): string
</select>
</div>

<?php if (!str_ends_with($options['osvariant'] ?? '', '-frankenphp')): ?>
<label for="multiversion" class="instructions-label">
I want to be able to use multiple PHP versions:
<input type="checkbox" id="multiversion" name="multiversion" value="Y"
Expand All @@ -198,6 +205,7 @@ function option(string $value, string $desc, $attributes = []): string
<input type="checkbox" id="source" name="source" value="Y"
<?= array_key_exists('source', $options) && $options['source'] === 'Y' ? 'checked' : '' ?>/>
</label>
<?php endif; ?>

<button type="submit" class="button">Update Instructions</button>
</form>
Expand Down
38 changes: 38 additions & 0 deletions include/download-instructions/frankenphp.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php if ($options['os'] === 'linux'): ?>
<p>
On the command line, run the following commands:
</p>
<pre><code class="language-bash line-numbers">
# Download and install FrankenPHP.
curl https://frankenphp.dev/install.sh | sh

# Serve the current directory.
frankenphp php-server
</code></pre>
<?php elseif ($options['os'] === 'osx'): ?>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could also just run the same commands on a on Linux, if Homebrew is available it will be automatically used by the script.

<p>
On the command line, run the following commands:
</p>
<pre><code class="language-bash line-numbers">
# Install FrankenPHP using Homebrew.
brew install dunglas/frankenphp/frankenphp

# Serve the current directory.
frankenphp php-server
</code></pre>
<?php elseif ($options['os'] === 'windows'): ?>
<p>
In PowerShell, run the following commands:
</p>
<pre><code class="language-powershell line-numbers">
# Download and install FrankenPHP.
irm https://frankenphp.dev/install.ps1 | iex

# Serve the current directory.
frankenphp php-server
</code></pre>
<?php endif; ?>

<p>
For more information, see the <a href="https://frankenphp.dev/docs/">FrankenPHP documentation</a>.
</p>