Skip to content
Open
Show file tree
Hide file tree
Changes from all 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, FreeBSD, and Windows.
</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
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>
Loading