tightenco/jigsaw
Jigsaw is a simple static site generator powered by Laravel's Blade templating engine. Build fast, framework-free websites using familiar Blade components, Markdown content, and collections, all without needing a database or server.
Architecture fit. Jigsaw is a build-time compiler, not a runtime package. It is installed as a standalone Composer project (composer create-project tightenco/jigsaw) and emits a directory of static HTML/CSS/JS from Blade templates and Markdown. It does not extend the host application's HTTP kernel, Eloquent models, queues, auth, or service container at runtime. The fit is therefore organizational rather than architectural: the team reuses Blade syntax, Laravel-style config, and PHP/Composer tooling, but nothing is shared at runtime. Layouts and components can be copy-pasted between the app and the site, not imported — unless we explicitly extract a shared Blade component package, which is extra scope. Treat Jigsaw as a sibling repository that happens to speak the same template language, not as a module of the Laravel application.
Integration feasibility. High. A working prototype is a day's work: scaffold, point CI at ./vendor/bin/jigsaw build production, publish the artifact to S3/CloudFront, Netlify, or GitHub Pages. jigsaw serve gives local preview. The friction is not technical setup — it is the constraints that come with a static output: no server-side forms, no authenticated content, no search without a third-party index (Algolia, Pagefind), no personalization, and no CMS unless we bolt one on. Content lives in Git, which means every copy change is a pull request. For a docs site or campaign landing page that is a feature; for a marketing team that expects a WYSIWYG editor it is a blocker we must plan around.
Technical risk. Blast radius is deliberately small — nothing here can take down the application. The real risks are:
illuminate/* versions and its own Node toolchain (Laravel Mix or Vite depending on release). That is a second PHP dependency graph to patch, independent of the app's Laravel version, and upgrades will not always land in lockstep.config.php, collections, front matter). That is a bus-factor risk, not a technology risk.Key questions.
Stack fit. Requires PHP 8.x, Composer, and Node for the asset pipeline. It slots cleanly into a Laravel shop's CI, coding standards, and Tailwind setup, and Blade familiarity removes the template learning curve entirely. It does not fit if the design system is React/Vue componentized and maintained by a frontend team — in that case Astro or Next is the honest recommendation, and pushing Jigsaw would create two component ecosystems.
Migration path. Two realistic origins:
Compatibility. Verify three things before committing: (a) Jigsaw's pinned illuminate/* versions against the PHP version in our base images; (b) Node version required by Mix/Vite, since this is the most common breakage on CI image upgrades; (c) whether any custom Blade directives we rely on in the app are portable or need reimplementation. Deployment target is unconstrained — any static host or object store plus CDN works.
Sequencing. Do not start with the primary marketing site.
Maintenance. Near-zero runtime maintenance — no servers, no PHP-FPM, no database, no security patching of a live application. What remains is two dependency tracks to keep current (Composer and npm) and a rebuild on every content change. Pin versions, wire Renovate or Dependabot, and assign a named owner. Note the favorable supply-chain position: dependents: 0 means this is never pulled in transitively, so there is no hidden dependency surface in production artifacts.
Support. No vendor SLA. Support is the Tighten docs, the issue tracker, and whoever on the team has done it before. The real support cost is editorial, not operational: content authors will need a written workflow and someone contractually obligated to review their PRs within a day. Without that, the site becomes the thing nobody can update.
Scaling. Request scaling is effectively free — a CDN absorbs any traffic pattern we are likely to see. The ceiling is build-time scaling: every content change triggers a full rebuild of every page, with no incremental build. That is comfortable in the hundreds of pages and starts to hurt in the low thousands, especially with image processing in the pipeline. Search, personalization, and A/B testing all require external services and should be treated as separate line items in any scaling plan.
Failure modes.
build_local versus build_production config divergence produces staging/production drift.Ramp-up. A Laravel developer is productive in one to two days; a content author needs about half a day plus a template. The genuine ramp cost is CI/CD and editorial process definition, which is one to two weeks of a TPM-plus-engineer pairing and is where most of the value and most of the risk sits. Budget for that explicitly rather than treating the tool as the whole project.
How can I help you explore Laravel packages today?