-
Draft v0.2.3 Stable
released this
2026-10-20 17:20:23 +00:00 | 0 commits to main since this releaseChanges
- Generated Vue projects now use
@fernandojvideira/vue-ui-kit0.5.1 (was 0.5.0), via the updated project-template.- Navbars gain a
mobileActionsprop. Set it tofalsewhen yourmobileslot already builds its own mobile controls, so theactionsslot isn't shown twice in the mobile menu.
- Navbars gain a
Upgrading
Rebuild or reinstall the binary;
draft versionreportsv0.2.3. Existing projects are unaffected: bump@fernandojvideira/vue-ui-kitto^0.5.1yourself.Downloads
- Generated Vue projects now use
-
Draft v0.2.2 Stable
released this
2026-10-11 20:44:48 +00:00 | 2 commits to main since this releaseChanges
- Generated Vue projects now use
@fernandojvideira/vue-ui-kit0.5.0 (was 0.4.1), via the updated project-template.- Accessible names (menu toggle, dialog close, pagination, etc.) are now overridable per component or app-wide.
- Sturdier navbar mobile menu, higher-contrast borders and inputs, and smaller bundles (unused components tree-shake; markdown libraries load on demand).
- Generated projects no longer carry the temporary
minimumReleaseAgeexclusions for the kit.
Upgrading
Rebuild or reinstall the binary;
draft versionreportsv0.2.2. Existing projects are unaffected: bump@fernandojvideira/vue-ui-kitto^0.5.1yourself.Downloads
- Generated Vue projects now use
-
Draft v0.2.1 Stable
released this
2026-10-08 23:05:18 +00:00 | 6 commits to main since this releaseFixes two runtime breakages in projects generated by v0.2.0, and moves generated clients to
@lucide/vue. Upgrade recommended if you generated a client with v0.2.0.Fixed
- Generated clients could break at runtime. A fresh Vue client rendered a blank
/login(Injection Symbol(TabsRootContext) not found), and Nuxt clients could fail server rendering on pages containing a Dialog. Vite's dependency pre-bundler bundled vue-ui-kit's source with reka-ui inlined, while the kit's.vuefiles imported reka-ui from source. That produced two module instances whose provide/inject contexts could not find each other. Generatedvite.config.tsandnuxt.config.tsnow exclude@fernandojvideira/vue-ui-kitfromoptimizeDeps. The v0.2.0 notes listed this fix, but it only reached the template and not generated projects. This release delivers it.
Changed
- Auth tabs now drive the URL. The Log in / Register tabs navigate between
/loginand/signup, keeping?redirect=. Refresh, shared links and back/forward land on the right tab, and typed input survives switching. Nuxt adds the/signuproute record with apages:extendhook; Vue serves both routes from oneAuth.vue. Existing/signuplinks keep working. - Generated clients install
@lucide/vueinstead of the deprecatedlucide-vue-next, matching vue-ui-kit 0.4.1. The app and the kit now share one copy of the icon package.
Ships with
Nuxt client Vue client @fernandojvideira/vue-ui-kit^0.4.1 ^0.4.1 @lucide/vue^1.53.0 ^1.53.0 Framework Nuxt ^4.3.0 Vite ^8.1.5 vue^3.5.40 ^3.5.40 vue-router^4.6.4 ^5.2.0 pinia^3.0.4 ^4.0.2 tailwindcss^4.2.1 ^4.2.1 typescript~6.0.0 ~6.0.0 Client images are built on
node:22-alpine(Nuxt runs Nitro; Vue is served bynginx:1.27-alpine), with pnpm 11.22.0 for the build.Upgrade notes
- Projects already generated with v0.2.0: add the exclusion to your Vite config, no other change needed. In Vue, put
optimizeDeps: { exclude: ['@fernandojvideira/vue-ui-kit'] }at the top level ofvite.config.ts. In Nuxt, put it insidevite: { … }innuxt.config.ts. - Lockfile error in older projects: the registry now reports the kit's tarball URL in a different shape from the one older lockfiles recorded. On a machine with no pnpm cache (fresh CI, Docker),
pnpm install --frozen-lockfilecan fail withERR_PNPM_TARBALL_URL_MISMATCH. Fix it by deleting the, tarball: …part of the@fernandojvideira/vue-ui-kitentry inpnpm-lock.yaml. Projects generated by this release are not affected. - pnpm holds back releases less than a day old. The generated monorepo's
pnpm-workspace.yamlcarries a temporary, version-pinnedminimumReleaseAgeExcludefor@fernandojvideira/[email protected]and@lucide/[email protected]. Delete both lines once 2026-10-10 has passed.
Downloads
- Generated clients could break at runtime. A fresh Vue client rendered a blank
-
Draft v0.2.0 Stable
released this
2026-09-16 12:28:58 +00:00 | 10 commits to main since this releaseGenerated clients now ship on
@fernandojvideira/vue-ui-kit, with every default page rebuilt on it, and both client images build withdocker composeout of the box.Client scaffolding (
draft new client,draft new monorepo)- vue-ui-kit is the component library on both frameworks. Vue drops the shadcn-vue init/add steps and imports vue-ui-kit's
theme.cssdirectly; Nuxt switches from theui(Nuxt UI) starter tominimalwith Tailwind v4 + vue-ui-kit wired by hand. The leftover shadcn-vue / Nuxt UI config, deps, and generated component files are gone. - Default pages redesigned on real kit components — Card, FormField, Dialog, Select, EmptyState, Skeleton, Avatar, Badge, Alert, Spinner — with a shared
useEntrance()fade/rise entrance and.presstap feedback matching the kit. - Tabbed auth card.
/loginand/signupshare one Log in / Register card after the kit's AuthDemo; the route picks the initial tab so?redirect=and existing links keep working. - Single-tone page background. The tint lives once on the layout root and pages fill the viewport, instead of each page painting a band that stopped where its content ended.
- Docker images for both clients. Nuxt runs its Nitro server; Vue is served by nginx with a history-mode fallback and
/api/proxied to the api container (resolved per request, so it starts even beforeapiis up). Both mount~/.npmrcas a build secret to fetch@fernandojvideira/vue-ui-kitfrom the Gitea registry — nothing is baked into the image — and the monorepo'sdocker-compose.ymlwires the secret up, sojust local/docker compose buildneed no extra flags. typescriptpinned to~6.0.0in the Nuxt scaffold: theminimalstarter has no TypeScript devDependency, and an unpinned install lands on TS 7, which breaks the cross-file type resolution vue-ui-kit's components rely on.
Fixed
- Generated monorepos couldn't build their client image. The compose file referenced
apps/client/Dockerfilebut the Nuxt overlay never wrote it, and the Vue client had no image at all. Both now ship one (see above). - Vue monorepos had a stale root lockfile. The Vue scaffold wrote a
pnpm-workspace.yamlintoapps/client, making it its own workspace, so installs updated a nested lockfile while the root one kept describing the template's Nuxt client —pnpm install --frozen-lockfilerefused it. It's now only written for a standalone client. - Vue projects were missing
AuthCard.vue. The overlay listed components by name; it now embedssrc/components/as a whole. - Nuxt SSR crashed on any page using Dialog (
Injection Symbol(DialogRootContext) not found). The two client apps pinned differentvueranges, so pnpm resolved twovue/reka-uiinstances and reka-ui's provide/inject context couldn't cross them. Fixed with a workspace-widevueoverride and by excluding vue-ui-kit (raw.vuesource) from Vite's dependency pre-bundler. draft keyis registered on the root command with a working--sizeflag.make buildno longer builds the binary twice; the embed step is stamped so unchanged sources skip it. Newmake clean.- Help text now covers clients and monorepos, not just Go APIs.
- Removed a stray debug print from the service generator.
- Fresh clients rendered a blank
/login(Vue) or crashed SSR on Dialog pages (Nuxt): Vite pre-bundled vue-ui-kit with a second reka-ui instance, so its provide/inject contexts didn't match. Generated configs now exclude the package fromoptimizeDeps. - The auth card's Log in / Register tabs now update the URL (
/login↔/signup, keeping?redirect=) without losing typed input.
Upgrade notes
- Generated clients install
@fernandojvideira/vue-ui-kitfrom its Gitea npm registry, sopnpm installand container builds need the one-time~/.npmrctoken setup described in the vue-ui-kit README
Downloads
- vue-ui-kit is the component library on both frameworks. Vue drops the shadcn-vue init/add steps and imports vue-ui-kit's
-
Version 0.1.0 Stable
released this
2026-08-25 20:46:40 +00:00 | 24 commits to main since this releaseChangelog
v0.1.0
Added
draft newnow prompts for a project shape — API, Client, or Full Stack — instead of always scaffolding a standalone API.draft new clientscaffolds a frontend client, with a choice of framework:- Nuxt — generated via the official
nuxi inittooling (Nuxt UI + Tailwind), so the boilerplate and dependency versions stay current rather than pinned by Draft. - Vue — generated via
create-vue+shadcn-vue(Tailwind), with the same tooling-owns-the-boilerplate approach. - Both frameworks get a Draft-maintained overlay layered on top: an auth store (login/logout/register/token refresh), route guards, an API composable, and pages for login, signup, profile, organizations, email verification, and invites — pre-wired to a Draft-generated API.
- Nuxt — generated via the official
draft new monorepocombines a scaffolded API and client under one root (apps/api,apps/client) withgo.work,pnpm-workspace.yaml,docker-compose.yml, and aJustfiletying everything together.assets/embeddedrestructured intoapi/monorepo-root/client-nuxt/client-vuezones, synced from a reference template repo via a generalized, job-based sync tool (tools/sync_templates.go).
Fixed
draft keywas unreachable as documented — it was registered underdraft new keyinstead of the root command, and its--sizeflag was never actually registered with Cobra, so passing--sizefailed outright (and the dead flag-lookup code would have nil-panicked if ever reached). It's now a proper top-level command; an explicit--sizebelow 32 is rejected with an error instead of being silently replaced by the default.- Organizations were missing from the gRPC branch of generated
main.go— the HTTP and gRPC branches now both wire up the sameOrganizationService. - Fixed a silent no-op in the client-scaffolding overlay copier where branding replacements (e.g. project name substitution) were computed but never actually written to disk.
- Fixed Go's
embedpackage silently dropping dotfiles (.env.example) from the embedded template zones —//go:embednow usesall:prefixes. - Fixed
create-vuedropping into an interactive prompt when scaffolding into a nested path (e.g.apps/clientinside a monorepo), since it requires its target directory to double as a valid npm package name. - Removed a stray debug
print()call left indraft new service. randomString(used bydraft key) no longer generates a random prime number per character just to pick a random index — replaced with a direct random-integer draw.
Changed
- Consolidated the API-scaffolding logic shared between
draft new apianddraft new monorepointo a single orchestrator (runNewProject+scaffoldRecipe), removing duplicated prompt/install/tidy logic between the two commands. - Extracted shared tool-availability checks (
pnpm,npx) into one helper instead of duplicating the check acrossclientandmonorepo.
Downloads
Public Access