tekir
All Packages
Dev Toolsv0.1.12

create-tekir-app

Project scaffolding CLI with templates.

Installation

$bunx create-tekir-app my-app

Features

  • Interactive project scaffolding CLI
  • Templates: minimal, api, fullstack, vite, next
  • Scaffolded scripts use the `tekir` CLI: `tekir serve --dev`, `tekir build --outdir ./dist`, `tekir serve`
  • Auto-generates package.json and .env from .env.example
  • Copies template directory with smart defaults
  • Single command: bunx create-tekir-app my-app

Quick Example

TypeScript
# Interactive mode
bunx create-tekir-app my-app

# With template flag
bunx create-tekir-app my-app --template=api

# Templates: minimal, api, fullstack, with-vite, with-next

# Inside the scaffolded project
cd my-app
bun install
bun run dev      # tekir serve --dev (watch mode)
bun run build    # tekir build --outdir ./dist
bun run start    # tekir serve (NODE_ENV=production)

Changelog

v0.1.12LatestSeptember 16, 2026
  • The scaffolder now uses the shared package build pipeline while preserving every starter template in the published output.
  • Published output now uses the shared Node-targeted ESM bundle pipeline with external dependencies and generated TypeScript declarations, while Bun consumers keep the native source export.
v0.1.11July 23, 2026
  • Package metadata now follows the shared compatible 0.1.x dependency range used by this coordinated Tekir release.
v0.1.10July 16, 2026
  • Starter templates now use credential-safe CORS defaults, keep frontend dependency versions aligned, and reject unsafe project targets before scaffolding.
v0.1.9June 13, 2026
  • The project name passed on the command line is now validated. A target that resolves outside the current directory (via ./.., an absolute path, a path separator, or other unexpected characters) is rejected before any directory is created, so scaffolding cannot write to an arbitrary location.
  • The generated package.json name is normalized (lowercased, leading ./_ stripped, falling back to app), so an unusual project name no longer produces an invalid manifest.
  • Interactive prompts now handle a closed or piped stdin (CI) by resolving empty instead of hanging forever.
  • Found and fixed with Fable.
v0.1.8May 6, 2026
  • All five templates now scaffold bun run start as tekir serve instead of tekir start. The two are aliases on the CLI side, but serve is the canonical name documented in the help output and in @tekir/core 0.1.25's unified dispatch. New projects start on the canonical command, so the deprecated alias only sticks around for existing scripts.
v0.1.7May 5, 2026
  • All five templates (minimal, api, fullstack, with-vite, with-next) now scaffold with tekir CLI scripts: bun run dev becomes tekir serve --dev (watch mode + NODE_ENV=development), bun run build becomes tekir build --outdir ./dist, bun run start becomes tekir start (NODE_ENV=production). @tekir/cli is added to each template's dependencies so the bin shim resolves under node_modules/.bin/tekir after bun install. Replaces the previous bun run --watch index.ts / bun run index.ts build pattern.
  • tekir build runs the entry through the in-app dispatcher, so @tekir/vite 0.1.2's onBuild hook fires and the frontend lands in dist/client/ alongside the backend bundle in dist/index.js. Previously tekir build (in the bin's old code path) called Bun.build directly without ever invoking the entry, so frontend templates that rely on the build hook would silently ship without the client output.
v0.1.6May 3, 2026
  • The api and fullstack templates now wire tekir() with explicit envFile, configDir, and startDir paths, matching the loader contract in @tekir/core. New projects scaffold and boot end-to-end without any extra setup.
v0.1.5April 27, 2026
  • request_logger middleware now reads the response status via ctx.response.getStatusCode() so it type-checks under strict TypeScript.
  • AuthController reads validated bodies through RegisterBody / LoginBody types exported from validations/auth.ts (z.infer<typeof schema>), so destructured fields are typed instead of unknown.
v0.1.4April 27, 2026
  • Auth wiring simplified: the kernel no longer needs an explicit silentAuth()/attachAuth() middleware. AuthProvider registers its own ctx.auth initializer. Public routes like /register and /login just call auth.login(user) directly.
  • AuthController now uses the natural destructured signature ({ body, response, auth }) => ... and works after a login swap (the framework mutates ctx.auth in place).
  • Logout endpoint switched to auth.logout() (no-op for JWT, since JWT is stateless); the comment in the controller points the user at auth.revokeAll() for revocable token guards.
  • Test files in templates renamed from auth.test.ts to auth.test.ts.template so the framework's own test runner stops trying to execute them in-place. The installer still strips .template when scaffolding.
v0.1.3April 27, 2026
  • api and fullstack templates now declare every package they actually import (@tekir/bodyparser, @tekir/cron, @tekir/drive, @tekir/emitter, @tekir/notification). Fresh scaffolds no longer surface Cannot find module errors in services.ts.
  • All start/*.ts files cleaned up: broken imports for non-existent listeners, schedules, controllers, and middleware were removed. Templates boot end-to-end on the first bun run dev.
  • AuthController added with POST /api/auth/register, POST /api/auth/login, POST /api/auth/logout, and GET /api/auth/me. Validation schemas live under validations/, mapped via #validations/* import alias and a matching tsconfig path.
  • Database setup moved from db.exec(Model.createSQL) to a real migration pipeline: database/migrations/ with timestamped files, run via bun run index.ts migrate. Demo migrations create the users and auth_tokens tables.
  • Tests added: tests/auth.test.ts covers register/login/logout/me end-to-end. Backed by @tekir/testing's in-memory sqlite + auto-migration so they're hermetic.
  • request_logger middleware ships out of the box and is wired into the kernel.
  • Generated config files use satisfies (AppConfig, AuthConfig, CacheConfig, CorsConfig, DatabaseConfig, HashConfig, LoggerConfig) for autocomplete without losing literal-type narrowing.
  • Auth config now passes model: User instead of a findUser arrow, removing per-app boilerplate.
  • Health controller no longer leaks server time (new Date().toISOString() removed from the response).
  • Every template ships a .gitignore covering node_modules, .env, build artifacts, and sqlite files.
  • zod is declared as a dependency where templates use it, and @tekir/db migration commands are auto-registered through DatabaseProvider.commands so no manual start/commands.ts is needed.
v0.1.2April 27, 2026
  • Every template now ships an eslint.config.ts with the required dev dependencies (eslint, @eslint/js, globals, typescript-eslint) and lint / lint:fix scripts wired up.
  • with-vite template upgraded to Vite 7.
v0.1.1April 27, 2026
  • Dropped the misleading await before start(...) in every template (start() is sync).
  • with-next template now scaffolds a Next.js 16 project. Cleaned up next.config.ts and tsconfig.json so a fresh scaffold runs without warnings on first boot.
  • Sqlite-backed templates with path: './database/app.sqlite' boot cleanly on a fresh project even without a pre-existing database/ directory.
v0.1.0April 1, 2026
  • Initial release

Other Dev Tools packages