Repository navigation
Releases
Releases · ynamite/create-viterex
v3.3.2
Removed
- Obsolete
LocalValetDriver.phptemplate. New projects no longer get a Valet driver.
Fixed
- Node requirement matches the scaffolded toolchain:
^22.12.0 || >=24.0.0inenginesand the README (was>=22/ "Node.js >= 18"), as Vite 8 andvite-plugin-static-copy4.1 need.
v3.3.1
Fixed
- The scaffolded
.htaccessno longer forces HTTPS or stripswww.out of the box. Active by default, the rules broke plain-http hosts (local dev, reverse proxies that don't sendX-Forwarded-Proto). They now ship commented out — uncomment them once the production host serves HTTPS.
v3.3.0
Added
submoduleAddons[].branch— track a branch instead of the remote HEAD (git submodule add -b <branch>), e.g. to install an addon from an open PR's head branch.
Changed
- Preset custom prompts (
templateReplacements) are pre-filled with the answers saved in.viterex-state.json, even when the reuse offer is declined.
Fixed
- Re-running on a completed install no longer drops and half-rebuilds the database.
isSetupCompletechecked forsetup: trueinconfig.yml, which in Redaxo means "setup mode active" — a finishedsetup:runwritessetup: false, so the guard never fired. A re-run backed up and dropped the DB, then re-ransetup:run, which skipped the system addons because the stalevar/cache/core/config.cachestill listed them as installed, leavingrex_user_role,rex_media, … missing (yform then failed withTable 'rex_user_role' doesn't exist). The check is inverted, and the retry path now clears the Redaxo cache dir beforesetup:run. - The saved-answers offer now works with the same command line that created the project. Passing
--preset(or--layout,--pm,--lang,--timezone) suppressed the offer entirely; now a flag only suppresses it when it disagrees with the saved value. create-viterex <existing-dir>from a parent folder targeted the wrong directory. In augment modeprojectDirwasprocess.cwd()instead of the named directory, so the state file wasn't found and the install would have landed in the parent folder.- A failed
install:downloadno longer aborts the whole addon loop. The addon is skipped (install/activate/plugins included), the remaining addons are installed, and the failures are listed in a warning at the end of the task. Background: redaxo.org lists some addons twice under the same version with a dead download path (e.g. navbuilder 1.0.6), which makesinstall:downloadfail with a checksum error every time.
v3.2.1
Fixed
- Default preset: the scaffolded
@source "/src/…"globs resolved as absolute
filesystem paths and matched nothing — Tailwind's default whole-project scan
carried projects implicitly and tokenized docs/markdown prose into bogus
class candidates (spurioustailwind-clampbuild warnings). The template now
uses@import "tailwindcss" source(none)with stylesheet-relative globs
(incl.src/assets/js), making scanning explicit-only and deterministic.
v3.2.0
Added
- Bun is now a supported package manager — and the default when installed.
bunjoinspnpm/yarn/npmacross the full flow: the PM prompt (listed first, with a(not installed)hint on missing PMs), the--pmflag, presets, dep install, the interactive upgrade step (bun update --interactive --latest), the browserslist refresh (per-PM dlx runner:bunx/pnpm dlx/npx), and the generateddeploy.php(chosen PM pinned as the firstcommandExistcheck, existing chain kept as fallback). The default is auto-detected:bunon PATH →bun, elsepnpm. The chosen PM is also stamped into the projectpackage.jsonas"packageManager": "<pm>@<version>"before the first install, and a PM resolved via--pmor a preset that isn't installed now fails fast before the pipeline starts instead of mid-run. - A completed install can be re-run without re-entering answers.
.viterex-state.jsonnow persists in the project after a successful install (it was previously deleted). When the interactive flow finds one in the target directory, it offers to reuse the saved answers — running the full pipeline with the previous config (idempotent tasks skip what's already done). Declining answers prompts as usual;--configand--resumeare unaffected.
Fixed
.viterex-state.jsonis no longer committed into the scaffolded repo. The state file — which contains the DB and Redaxo admin passwords — was tracked by the initialgit add -Aand then deleted from disk, leaving the credentials in git history (and on the remote when a git provider was configured).initGitReponow merges.viterex-state.jsoninto the project.gitignore(idempotent, covers fresh and augment installs) before anything is committed. Existing projects need a one-timegit rm --cached .viterex-state.jsonplus a gitignore entry.--pmno longer silently overrides presetpackageManager. The flag had a commander hard default of"pnpm", so the documented precedence (flag > preset > prompt) never held — the PM prompt was dead code and a preset'spackageManagercould never take effect. The default is gone;--pmonly wins when actually passed.loadStateno longer crashes on an unparseable state file — it warns and starts fresh.
v3.1.0
Changed
- Node
>=22is now required (engineswas>=18; Node 18 and 20 are EOL). Needed forutil.styleTextand stablefs.cp. - Four dependencies dropped, replaced by Node stdlib (−189 lines net):
ora(unused — the pipeline uses@clack/prompts' spinner),chalk(→util.styleText),fs-extra+@types/fs-extra(→node:fs/promises, with a minimalsrc/utils/fs.tsprovidingpathExists/readJSON/writeJSON). Runtime deps are now just@clack/prompts,commander,execa. getLatestRedaxoVersionnow uses globalfetch(native redirect handling +AbortSignal.timeout) instead of hand-rollednode:https.
Fixed
- CI workflow no longer fails at the pnpm cache step (
ERROR packages field missing or empty). Local dev on pnpm 11 wrote pnpm-11-style config (allowBuilds) intopnpm-workspace.yaml, which the workflows' pinned pnpm 9 rejects. The pnpm version is now pinned once via package.json'spackageManagerfield (pnpm@11.13.0) and both workflows letpnpm/action-setupread it. CI also runs Node 24 (was 20) to matchengines.
v3.0.1
Fixed
- README no longer carries the alpha-release warning — the note and
@alphainstall commands lingered from the pre-release phase and showed on npmjs.com for the stable 3.0.0.
v3.0.0
First stable release of the v3 rewrite (TypeScript pipeline, presets, viterex_addon stubs).
Changed
- Default deployment template overhauled (
templates/deploy/deploy.php.tpl): configurable$removeOnReleaselist of dev-only files pruned from each release, conditionalassets_install, and general cleanup of the generateddeploy.php.
Fixed
- Restored the
{{DEPLOYER_EXTRAS}}/{{DEPLOYER_EXTRAS_CLEAR_PATHS}}placeholders in the deploy template. The deployment-setup update had replaced them with a hardcodedrequireofdeployer.task.release.metanet.php(a MASSIF-preset file), so any non-MASSIF project with deploy enabled got adeploy.phpthat fataled on a missing file, and presetdeployerExtraswere copied but never wired in. Extras are again injected per preset; the MASSIF preset output is unchanged.
v3.0.0-alpha.3
Added (2026-06-02)
pnpm devnow diffs ydeploy migrations around the Vite dev server when ydeploy is installed. A new pipeline task (src/tasks/patch-dev-script.ts, "Patch dev script for ydeploy") rewrites the projectpackage.jsondevscript from"vite"to"<console> ydeploy:diff && cross-env NODE_ENV=development vite && <console> ydeploy:diff", so schema changes made during development surface as migrations both before Vite starts and after it exits.<console>is layout-aware (bin/consolein modern,redaxo/bin/consolein classic / classic+theme);cross-envalready ships as a devDependency inviterex_addon's stubpackage.json. "ydeploy installed" is read from disk (the addon'spackage.yml), covering both a fresh install (ydeploy is part of the always-included baseline) and an augmented existing install. The task runs after Apply preset files (the default preset overwrites the stubpackage.jsonverbatim, so the patch must land on the final file) and before the initial commit. Idempotent and surgical: only the exact stub/preset"dev": "vite"value is rewritten, so a re-run or a customised dev script is left untouched. New pure helpersrc/utils/patch-dev-script.ts(unit-tested); ordering locked insrc/__tests__/pipeline-order.test.ts(task count 18 → 19).
v3.0.0-alpha.2
Added (2026-06-02)
- A preset can extend the project
.gitignoreinstead of clobbering it. A top-level.gitignorein a preset'sfilesDiris now append-merged into the project.gitignore(only the missing patterns, under an# Added by preset '<name>'header, idempotent) rather than copied verbatim — mirroring thepackage-deps.json→package.jsonmerge. The baseline.gitignoreis owned byviterex_addon(stubs/.gitignore.example, merged duringviterex:install-stubs); the preset now layers on top of it. Nested per-directory.gitignorefiles still copy verbatim (full-path check, not basename). New pure helpersrc/utils/merge-gitignore.ts(mirrorsviterex_addon'sStubsInstaller::mergeGitignore); wired intosrc/tasks/apply-preset-files.ts. For ignores that apply to every project, add them toviterex_addon'sstubs/.gitignore.exampleinstead.
Added (2026-05-29)
- Presets can pre-fill — and thereby skip — any installer prompt. A
preset.jsonmay now set any scalar installer field (redaxoVersion,redaxoServerName,redaxoAdminUser/redaxoAdminPassword/redaxoAdminEmail/redaxoErrorEmail,redaxoLang,redaxoTimezone,skipDb,dbHost/dbPort/dbName/dbUser/dbPassword,packageManager,setupDeploy,skipGit,gitProvider/gitNamespace/gitRepoName,withTower,verbose,forcePush). When the preset supplies a value the matching prompt is skipped and a one-lineUsing values from preset '<name>': …summary is logged. Previously these fields existed onViterexConfigbut were never read from a preset (onlyredaxoLang/redaxoTimezone/layout/withTower/filesDir/addons/seed/installer/deployer fields were), so e.g. a preset'sredaxoAdminEmailwas silently ignored and prompted for anyway. Precedence is CLI flag > preset value > prompt/default. New pure, unit-tested resolversrc/utils/resolve-preset-values.ts;PresetConfig(src/types.ts) extended with the fields andCliOptionsmoved there for shared use;src/prompts.tsnow loads the preset right after the project-name prompt so all later prompts can be skipped. Notes: the git remote resolves per field — emptygitProvider("") = no remote; a non-emptygitProviderconfigures a remote withgitNamespacefrom the preset (else prompted) andgitRepoNamealways prompted (default: project name) unless the preset pins it; an omittedgitProviderruns the normal opt-in flow.dbNamestays prompted (per-project) unless the preset sets it; a presetredaxoAdminPasswordis honoured only if it meets Redaxo's 8–4096-char rule, else ignored with a warning and prompted. The--config <path>path is unchanged.
Fixed (2026-05-29)
git statusis clean immediately after install. The Git initial commit task is now the last file-touching step in the pipeline (src/pipeline.ts). Previously Build frontend (Vite output) and the browserslist refresh ran after the commit, leaving the freshly-scaffolded working tree dirty. Build frontend now runs before the commit (and absorbs thenpx update-browserslist-db@latestrefresh that used to live in Show next steps, each step warn-and-continue); the remote push, browser open, and next-steps message run after the commit and touch no tracked files.git initstill runs early (before Add submodule addons, which needs.git); only the commit moved. Task count unchanged (18); names unchanged, so--resumeis unaffected. New ordering test:src/__tests__/pipeline-order.test.ts.
Changed (2026-05-19)
- A preset's frontend now installs through the generic
filesDiroverlay. The short-lived dedicatedfrontendDirtask was folded into Apply preset files: a preset directory whose tree mirrors the project (src/…,public/…) is copied verbatim, and apackage-deps.jsonplaced in it is merged into the projectpackage.json(additive, higher-version-wins) before the dependency install instead of being copied. New helpersrc/utils/merge-package-deps.ts. Consumed by the externalviterex-massif-presetrepo ("filesDir": "frontend").