ozmos / viper
Laravel plugin for Viper
v0.1.0
2025-06-05 07:12 UTC
Requires
- php: ^8.2
- illuminate/contracts: ^10.0||^11.0||^12.0
- nikic/php-parser: ^5.4
- spatie/laravel-data: ^4.15
- spatie/laravel-package-tools: ^1.16
- spatie/typescript-transformer: ^2.5
Requires (Dev)
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^10.0.0||^9.0.0||^8.22.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-arch: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
This package is not auto-updated.
Last update: 2025-06-06 05:28:22 UTC
README
Warning
Viper is still in early development (but functional!).
You may (definitely) encounter issues or sharp edges.
Viper combines Laravel, Vue, @tanstack/vue-query
, and spatie/typescript-transformer
to help you build applications rapidly.
📚 Read the docs to find out more.
Get up and running with a new project in a single command:
laravel new app --using=ozmos/viper-vue-shadcn
Wondering what it looks like? Here's a preview of an automatically registered route with type-safe queries and mutations.
// resources/js/pages/users/[user]/edit.vue <template> <form method="post" @submit.prevent="mutate()"> <label> Your Name <input v-model="state.name" /> </label> <button type="submit" :disabled="isPending">Update Profile</button> </form> </template> <script setup lang="ts"> import { usePage } from '@ozmos/viper-vue'; const page = usePage<ViperGen.Example>(); const { data: user } = page.useProp('user'); const { mutate, state, isPending } = page.useForm('updateProfile', { state: { name: user.value.name, }, onSuccess(data) { alert(`Updated name to ${data.name}`); } }); </script> <php> use Ozmos\Viper\Attrs\Prop; use Ozmos\Viper\Attrs\Action; use Illuminate\Http\Request; use App\Dto\UserDto; use App\Dto\UpdateUserDto; use App\Models\User; return new class { #[Prop] public function user(User $user): UserDto { return UserDto::from($user); } #[Action] public function updateProfile(User $user, UpdateUserDto $data): UserDto { $user->update($data->toArray()); return UserDto::from($user); } }; </php>