Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Jetstrap Laravel Package

nascent-africa/jetstrap

Jetstrap is a Laravel package that replaces Jetstream's default Tailwind frontend with Bootstrap 5. It scaffolds authentication, profile, password reset, and email verification views, plus team and API support, so you can build responsive Bootstrap-based Laravel apps faster. Install via Composer.

View on GitHub
Deep Wiki
Context7

Getting Started

Jetstrap is a one-shot scaffolding converter, not a runtime dependency. It replaces the Tailwind-styled Blade views that laravel/jetstream or laravel/breeze publish with Bootstrap 4 equivalents, then gets out of the way. Treat it like a code generator you run once per project.

Minimal path on a fresh Laravel 8 app:

# 1. Install the auth/UI scaffold you actually want
composer require laravel/jetstream
php artisan jetstream:install livewire   # or: breeze:install blade

# 2. Pull in the converter (dev-only)
composer require nascent-africa/jetstrap --dev

# 3. Swap the Tailwind views for Bootstrap 4
php artisan jetstrap:swap jetstream      # or: jetstrap:swap breeze

# 4. Fix the asset pipeline, then build
npm install && npm run dev

Where to look first. Before running anything, open vendor/nascent-africa/jetstrap/stubs/ (or src/Console/ for the command itself). That directory is the package — every file it will drop into your app is sitting there as plain Blade. Reading it takes five minutes and tells you exactly which views, components, and layouts you'll get, which is far more reliable than guessing from the README. Also run php artisan jetstrap:swap --help to confirm the preset/stack arguments your installed version supports; the signature changed across 1.x/2.x.

First real use case. You have a working Jetstream app — teams, API tokens, profile management, two-factor — and a stakeholder who wants Bootstrap. You do not want to rewrite 40 Blade files by hand. Run the swap on a branch, review the diff, and you're 80% done in an afternoon.

Implementation Patterns

Greenfield scaffold. Install Jetstream/Breeze → install Jetstrap → swap → build assets → then start writing feature code. Order matters: the swap must happen before you touch any published view, because it overwrites unconditionally. This is the happy path and the one the package is designed for.

Retrofit an existing app. Never run the command on a dirty working tree. Branch, commit, run, then:

git diff --stat          # what got touched
git diff resources/views # eyeball the replacements

Because the output is committed source rather than a dependency, you can cherry-pick individual files back into main and leave the rest, or revert selectively. This is the single most valuable property of the package: it's a diff generator with a nice CLI.

Partial / incremental adoption. Skip the command entirely and copy stubs by hand:

cp vendor/nascent-africa/jetstrap/stubs/jetstream/resources/views/auth/login.blade.php \
   resources/views/auth/login.blade.php

Useful when you only need the auth screens converted and want to keep Tailwind for the marketing site, or when you're migrating a legacy Bootstrap 4 app into Laravel and want visual continuity on the authenticated area only.

Pair it with the asset pipeline deliberately. Jetstrap converts markup, not your build. You still need Bootstrap available. Two viable patterns:

  • Compiled (recommended for production): install bootstrap@4, @popperjs/core, jquery, and sass; replace the @tailwind directives in resources/css/app.css with a Bootstrap SCSS import; drop tailwind.config.js and the Tailwind devDependencies.
  • CDN (fine for prototypes and internal tools): strip the Tailwind CSS entirely and drop the Bootstrap 4 stylesheet + bundle script into resources/views/layouts/app.blade.php. Faster to demo, worse for custom theming later.

Complete the theme, don't stop at the swap. Three places Tailwind survives the command and will look broken next to your new Bootstrap UI:

  1. Pagination. Laravel 8's default paginator renders Tailwind markup. Add Paginator::useBootstrap() to AppServiceProvider::boot().
  2. Markdown mail templates. resources/views/vendor/mail/* still uses Tailwind utility classes; emails will render unstyled. Publish and convert, or accept plain-ish mail.
  3. Error pages and any vendor:published packages that shipped Tailwind views.

Livewire + Bootstrap. Jetstrap's Livewire views keep wire:model bindings on Bootstrap form controls, which works fine. The friction is Bootstrap 4's JS components (modals, dropdowns, tooltips) needing jQuery/Popper initialisation — do that once in resources/js/app.js and keep it out of Livewire component code, otherwise re-renders will fight the modal lifecycle.

Use the stubs as a component template. Once swapped, the Jetstrap output is your house style. When you add a new screen (a settings page, an admin CRUD table), copy the nearest stub and edit — it keeps form-group spacing, validation error markup, and button conventions consistent instead of drifting toward hand-rolled Bootstrap.

Gotchas and Tips

The command overwrites without asking. There is no dry-run and no backup. Commit first, every time. If you've already customised navigation-menu.blade.php, it's gone.

Bootstrap 4, not 5. The package targets BS4. Installing bootstrap@5 breaks it in a dozen small ways: form-group/form-row removal, input-group-append/prepend gone, ml-*/mr-* renamed to ms-*/me-*, float-right → float-end, data-toggle → data-bs-toggle, badge-* colour classes changed, .close button markup changed. Pin "bootstrap": "^4.6" or budget a manual sweep.

jQuery and Popper are genuinely required. Bootstrap 4's dropdown, modal, collapse, and tooltip JS are jQuery plugins. Jetstream's own dropdown uses Alpine and will keep working; the Bootstrap-side interactions will silently do nothing until jQuery and Popper are loaded before bootstrap.bundle.js. Symptom: hamburger menu does nothing, no console error.

Don't re-run jetstream:install afterwards. It re-publishes the Tailwind views over your swapped ones. Same trap with breeze:install. If you need to add a stack later, expect to re-swap and re-diff.

Inertia / React / Vue pages are not converted. Jetstrap is a Blade-file swapper. If you installed jetstream:install inertia or Breeze's Inertia stack, everything under resources/js/Pages/ stays Tailwind and you'll need to rewrite those SFCs yourself. Blade and Livewire stacks are where this package actually delivers. Check the README's supported-presets table before committing to it for an Inertia app.

Version ceiling. Last release Feb 2022, built for Laravel 8 / Jetstream 2.x / Breeze 1.x. On Laravel 9+ you'll hit composer resolution conflicts or, worse, install cleanly and get views referencing Jetstream component APIs that have since changed. If you're on Laravel 8 and staying there, it's solid. If you're greenfielding on Laravel 11 and just want Bootstrap, you're better off hand-rolling auth views or using a maintained Bootstrap starter — Jetstrap is the wrong tool for that job.

Clear the compiled views. After swapping, run php artisan view:clear. Stale compiled Blade in storage/framework/views will keep serving Tailwind markup and make you think the swap failed.

Watch the files that don't error but do break. The command touches auth screens, the dashboard, profile/team settings, and API token management. Anything you added yourself (a custom header, a sidebar partial included from layouts/app.blade.php) won't be converted and will render with dead Tailwind class names — visually broken but syntactically valid, so no exception fires. Grep your own views for flex-, text-gray-, bg-white, rounded-md after the swap.

Extension point is forking, not configuring. There's no publishable config to remap stubs. If you need a house variant (Bootstrap 4 + custom brand components), copy vendor/nascent-africa/jetstrap/stubs/ into your repo, edit it, and treat that as your scaffolding generator — version it alongside the app.

Tests. Feature tests asserting on text survive. Tests asserting on Tailwind class names, dusk selectors built from .bg-white, or assertSee('Dashboard') where the Bootstrap navbar renders differently will need updating. Run the suite immediately after the swap while the diff is small.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core