Everything you need to ship modern apps, fully integrated and type-safe.
The Reactive Engine. Browser-resident state management without the hydration nightmares.
Shadcn-style components. Beautiful, accessible, and server-rendered components.
1000+ crisp, consistent SVG icons optimized specifically for the Prisma PHP ecosystem.
Next.js-style routing, Type-safe ORM, and CLI tooling. The foundation of your app.
Import your custom UI or PHPX library components once, then reuse them anywhere with standard HTML syntax. Total control in your hands.
<?php
use App\UI\{Card, Button};
?>
<!-- Simple, Reusable, Native -->
<Card class="p-6">
<h1>Hello Developer</h1>
<Button variant="outline">Get Started</Button>
</Card>
Ditch raw SQL and brittle strings. Write expressive PHP queries with IDE autocompletion, real types, and instant feedback — iterate faster and ship with confidence.
$users = $prisma->user->findMany([ 'where' => ['active' => true], 'include' => ['posts' => true], ]);
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.
pp.state() and let PulsePoint handle the DOM.
<?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>
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.
Use pp.state to handle DOM updates instantly.
Your logic stays in PHP. Your UI stays interactive. No context switching.
<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>
Help us improve your experience
{successMessage}
Operating hours: Mon-Fri, 9am - 5pm EST