Dev Toolsv0.1.12
create-tekir-app
Project scaffolding CLI with templates.
Installation
$
bunx create-tekir-app my-appFeatures
- 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.xdependency 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.jsonname is normalized (lowercased, leading./_stripped, falling back toapp), 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 startastekir serveinstead oftekir start. The two are aliases on the CLI side, butserveis the canonical name documented in the help output and in@tekir/core0.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 withtekirCLI scripts:bun run devbecomestekir serve --dev(watch mode +NODE_ENV=development),bun run buildbecomestekir build --outdir ./dist,bun run startbecomestekir start(NODE_ENV=production).@tekir/cliis added to each template'sdependenciesso the bin shim resolves undernode_modules/.bin/tekirafterbun install. Replaces the previousbun run --watch index.ts/bun run index.ts buildpattern. tekir buildruns the entry through the in-app dispatcher, so@tekir/vite0.1.2'sonBuildhook fires and the frontend lands indist/client/alongside the backend bundle indist/index.js. Previouslytekir build(in the bin's old code path) calledBun.builddirectly 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
apiandfullstacktemplates now wiretekir()with explicitenvFile,configDir, andstartDirpaths, 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_loggermiddleware now reads the response status viactx.response.getStatusCode()so it type-checks under strict TypeScript.AuthControllerreads validated bodies throughRegisterBody/LoginBodytypes exported fromvalidations/auth.ts(z.infer<typeof schema>), so destructured fields are typed instead ofunknown.
v0.1.4April 27, 2026
- Auth wiring simplified: the kernel no longer needs an explicit
silentAuth()/attachAuth()middleware.AuthProviderregisters its ownctx.authinitializer. Public routes like/registerand/loginjust callauth.login(user)directly. AuthControllernow uses the natural destructured signature({ body, response, auth }) => ...and works after a login swap (the framework mutatesctx.authin place).- Logout endpoint switched to
auth.logout()(no-op for JWT, since JWT is stateless); the comment in the controller points the user atauth.revokeAll()for revocable token guards. - Test files in templates renamed from
auth.test.tstoauth.test.ts.templateso the framework's own test runner stops trying to execute them in-place. The installer still strips.templatewhen scaffolding.
v0.1.3April 27, 2026
apiandfullstacktemplates now declare every package they actually import (@tekir/bodyparser,@tekir/cron,@tekir/drive,@tekir/emitter,@tekir/notification). Fresh scaffolds no longer surfaceCannot find moduleerrors inservices.ts.- All
start/*.tsfiles cleaned up: broken imports for non-existent listeners, schedules, controllers, and middleware were removed. Templates boot end-to-end on the firstbun run dev. AuthControlleradded withPOST /api/auth/register,POST /api/auth/login,POST /api/auth/logout, andGET /api/auth/me. Validation schemas live undervalidations/, 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 viabun run index.ts migrate. Demo migrations create theusersandauth_tokenstables. - Tests added:
tests/auth.test.tscovers register/login/logout/me end-to-end. Backed by@tekir/testing's in-memory sqlite + auto-migration so they're hermetic. request_loggermiddleware 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: Userinstead of afindUserarrow, removing per-app boilerplate. - Health controller no longer leaks server time (
new Date().toISOString()removed from the response). - Every template ships a
.gitignorecoveringnode_modules,.env, build artifacts, and sqlite files. zodis declared as a dependency where templates use it, and@tekir/dbmigration commands are auto-registered throughDatabaseProvider.commandsso no manualstart/commands.tsis needed.
v0.1.2April 27, 2026
- Every template now ships an
eslint.config.tswith the required dev dependencies (eslint,@eslint/js,globals,typescript-eslint) andlint/lint:fixscripts wired up. with-vitetemplate upgraded to Vite 7.
v0.1.1April 27, 2026
- Dropped the misleading
awaitbeforestart(...)in every template (start()is sync). with-nexttemplate now scaffolds a Next.js 16 project. Cleaned upnext.config.tsandtsconfig.jsonso 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-existingdatabase/directory.
v0.1.0April 1, 2026
- Initial release