• Features
  • Newsletter
  • Docs
  • Blog
  • Switch Theme

Native PHP.
Modern Reactivity.

Build modern, reactive UIs with zero API glue. The full-stack solution that unifies Prisma PHP architecture, PulsePoint reactivity, and the Prisma ORM data layer.

GitHub
Prisma ORM
PulsePoint
PHPX UI
PHPX Architecture

Components.
Not Includes.

Import your custom UI or PHPX library components once, then reuse them anywhere with standard HTML syntax. Total control in your hands.

Read the Documentation See how to build custom components →
index.php
<?php
use App\UI\{Card, Button}; 
?>

<!-- Simple, Reusable, Native -->
<Card class="p-6">
    <h1>Hello Developer</h1>
    <Button variant="outline">Get Started</Button>
</Card>

Data access, reimagined.
Type-safe & delightful.

Ditch raw SQL and brittle strings. Write expressive PHP queries with IDE autocompletion, real types, and instant feedback — iterate faster and ship with confidence.

app/users/index.php
$users = $prisma->user->findMany([
  'where'   => ['active' => true],
  'include' => ['posts'  => true],
]);
Full-Stack Synchronization

One Data Model.
Front and Back.

Stop writing DTOs and mapping layers. With Prisma PHP, your database schema is your frontend state. The JSON model stays perfectly in sync across the stack.

  • Seamless Fidelity: The exact shape of your database entity (backend) is preserved in your reactive state (frontend).
  • Effortless Round-Trips: Since the model never changes structure, sending modified data back to the database requires zero transformation.
  • Instant Injection: Pass PHP arrays directly to pp.state() and let PulsePoint handle the DOM.
UsersController.php
PHP + PP

<?php
// 1. Fetch DB Model (Server)
use Lib\Prisma\Classes\Prisma;

$prisma = Prisma::getInstance();
$users  = $prisma->user->findMany(); 
// $users is now a structured Array/JSON model
?>

// 2. Render UI
<ul>
    <template pp-for="user in users">
        <li key="{user.id}">{user.name}</li>
    </template>
</ul>

// 3. Hydrate (State = DB Model)
<script>
    const [users, setUsers] = pp.state(<?php echo json_encode($users); ?>);
    // "users" here has the exact same fields as your DB
</script>
                            

Write HTML.
Get Reactivity for free.

With PulsePoint, you don't need complex build steps or hydration logic. Define your state in the browser and bind it directly to your PHPX components.

1

Zero-Bundle Reactivity

Use pp.state to handle DOM updates instantly.

2

Server-First Mental Model

Your logic stays in PHP. Your UI stays interactive. No context switching.

Counter.php
<h1>Count is: {count}</h1>

<button
    onclick="setCount(count + 1)"
    disabled="{count >= 10}">
    Increment
</button>
<button
    onclick="setCount(count - 1)"
    disabled="{count <= 0}">
    Decrement
</button>

<script type="text/pp">
    const [count, setCount] = pp.state(0);
</script>

Feedback

Help us improve your experience

Received!

{successMessage}

Join Community Get help on Discord

Operating hours: Mon-Fri, 9am - 5pm EST

Feedback