Excited to announce west-js-app v3.1.0 🎉 I've been building west-js-app — an open-source CLI that scaffolds a production-ready Express + TypeScript backend in seconds. Think of it as `create-react-app`, but for your Node.js backend. With a single command: $ npx west-js-app ...you get a fully configured project with your choice of ORM (Prisma, Drizzle, TypeORM, Mongoose), database, Docker setup, Zod validation, Pino logging, ESLint, Prettier, and Husky pre-commit hooks — all wired up from day one. Version 3.1.0 brings the most requested feature yet: Vitest support ⚡ Here's what's new: • Vitest is now available as an alternative to Jest for unit and integration testing • New --test-framework flag lets you choose between jest, vitest, or none during scaffolding • Tests are only generated when a framework is selected — no clutter if you don’t need it • Improved Jest compatibility on Windows (no extra tooling required) • Boilerplate templates now include explicit Vitest imports for better IDE support Vitest is now the recommended choice for performance-critical projects — it’s faster, native to ESM, and feels right at home alongside modern TypeScript toolchains. If you’re tired of spending the first few hours of every project configuring boilerplate, give west-js-app a try. It’s open source, zero runtime dependency, and you own all the generated code. 🔗 westjs.vishalvoid.com 📦 npm: npx west-js-app ⭐ GitHub: https://lnkd.in/ge5w3peV #OpenSource #NodeJS #ExpressJS #TypeScript #Vitest #BackendDevelopment #DeveloperTools #WebDevelopment
West-js-app v3.1.0 Released with Vitest Support
More Relevant Posts
-
Our team analyzed 70 full-stack applications using TypeScript and tRPC, and the results were eye-opening. We found an average 25% reduction in bugs related to API mismatches. End-to-end type safety is not just a buzzword—it's a real game changer. Have you ever considered the impact of strong typing on your full-stack development process? At first, I was skeptical about the learning curve that adding tRPC would introduce. But integrating these robust types into both the backend and frontend created a synchronized development flow I hadn't experienced before. Imagine defining your API in one single place, and knowing that any changes are instantly reflected wherever it's used—no more chasing down those pesky runtime errors. This became our team's standard with TypeScript and tRPC. When changes happen, the confidence in our code remains unshaken. Here's a quick TypeScript snippet showcasing how effortlessly you can define a tRPC procedure: ```typescript import { initTRPC } from '@trpc/server'; const t = initTRPC.create(); const appRouter = t.router({ getUser: t.procedure .input(z.string()) .query(async ({ input }) => { return await getUserFromDatabase(input); // Assume this fetches a user by ID }), }); ``` This snippet highlights how simple it is to create a type-safe procedure, ensuring the input and output are consistent across the board. So, have you tried tRPC or similar libraries? How do you ensure end-to-end type safety in your projects? #WebDevelopment #TypeScript #Frontend #JavaScript
To view or add a comment, sign in
-
𝐖𝐚𝐧𝐭 𝐭𝐨 𝐥𝐞𝐚𝐫𝐧 𝐁𝐚𝐜𝐤𝐞𝐧𝐝 𝐃𝐞𝐯𝐞𝐥𝐨𝐩𝐦𝐞𝐧𝐭 𝐛𝐮𝐭 𝐝𝐨𝐧'𝐭 𝐤𝐧𝐨𝐰 𝐰𝐡𝐞𝐫𝐞 𝐭𝐨 𝐬𝐭𝐚𝐫𝐭? Save this post. 🔖 I've put together free, beginner-friendly notes on Node.js, JS Runtimes & npm — the foundation every backend developer needs before touching Express, APIs, or databases. 𝐂𝐡𝐚𝐩𝐭𝐞𝐫 𝟏 covers everything you need to actually understand what's happening under the hood 👇 1️⃣ How JavaScript went from browser-only to running servers and CLI tools 2️⃣ What a JS Runtime really is (and why it matters) 3️⃣ The V8 Engine — how your code becomes machine instructions 4️⃣ npm: the App Store for developers with 1.3M+ free packages 5️⃣ Semantic Versioning — what ^, ~, and exact versions actually mean 6️⃣ Why package-lock.json exists and why you should never ignore it 7️⃣ Core built-in modules: fs, path, http and when to use them → 2 practical CLI projects to solidify your understanding No fluff. Just clean, structured notes with real analogies and code examples. 📎 𝐅𝐮𝐥𝐥 𝐏𝐃𝐅 𝐚𝐭𝐭𝐚𝐜𝐡𝐞𝐝 — 𝐟𝐫𝐞𝐞 𝐟𝐨𝐫 𝐞𝐯𝐞𝐫𝐲𝐨𝐧𝐞. If this helps you or someone you know, share it forward ♻️ Chapter 2 dropping soon → HTTP Module, Building Servers & the Event Loop ⚡ #NodeJS #BackendDevelopment #JavaScript #LearningInPublic #WebDevelopment #100DaysOfCode #Programming #npm #OpenSource #SoftwareEngineering
To view or add a comment, sign in
-
2 posts ago: a 9,200-line React codebase from 2019. Today: migration done. The numbers: 📊 Codebase - 77 files → 142 focused modules - 0% → 100% TypeScript strict - 11 runtime deps → 3 🛡️ Removed entirely - jQuery - moment.js - axios 0.19 (known CVEs) - Redux + react-redux + redux-thunk - create-react-app 3.4 (abandoned) - Console.log interceptors leaking tokens ⚡ Tooling - HMR: ~8s → <1s (CRA → Vite 8) - react-router v5 → v7 - tsc --strict: 0 errors - ESLint flat config: 0 warnings 🕐 Time - Manual rewrite: weeks, team - My pipeline: days, solo Note: LOC actually *went up* (9.2k → 12.4k). That's what a real migration looks like — types, split files, typed API layer. The win isn't shrinkage. It's 8 dependencies gone, zero CVEs, every file type-checked. Full case study: https://lnkd.in/gsw29EEd --- Here's the thing nobody talks about: Most companies don't rewrite legacy code because it's too expensive and too risky. So they keep patching. Adding duct tape on top of duct tape. Until one day the entire thing breaks and they're stuck. What if the rewrite took days instead of months? What if it cost a fraction of what agencies charge? What if the risk was near zero because the business logic is preserved automatically? That's what I built. If your startup or agency is sitting on a codebase that slows down every sprint — DM me. I'll show you what the modernized version looks like before you commit to anything. --- #react #typescript #vite #javascript #ai #webdevelopment #legacycode #codemodernization #softwaredevelopment
To view or add a comment, sign in
-
-
If you are building an open-source tool and importing `express` or `next/server` into your core logic, you are building a trap. When you tightly couple your logic to an HTTP framework, you alienate 80% of the ecosystem. A Next.js dev can't use your Express tool. A Hono dev can't use your Fastify plugin. You need to build compilers, not switchboards. I use the 𝗘𝗻𝗴𝗶𝗻𝗲-𝗔𝗱𝗮𝗽𝘁𝗲𝗿 𝗣𝗮𝘁𝘁𝗲𝗿𝗻: 1. 𝗧𝗵𝗲 𝗘𝗻𝗴𝗶𝗻𝗲: Pure TypeScript. Zero HTTP context. It takes raw inputs and returns standard outputs. 2. 𝗧𝗵𝗲 𝗔𝗱𝗮𝗽𝘁𝗲𝗿𝘀: Tiny 20-line wrappers that translate a framework's request into your engine's context. This is exactly how I built TableCraft to seamlessly support Hono, Express, Next.js, and Elysia from a single codebase. Stop writing one-off endpoints. Start building generic compilers. I wrote a technical deep dive on how to structure this in a monorepo. Link below 👇 https://lnkd.in/gr9hBJnd #SoftwareArchitecture #TypeScript #OpenSource #WebDev #BackendEngineering
To view or add a comment, sign in
-
-
Real talk - 'npm cache clean -- force' has become everyone's first instinct when something breaks. But clearing the cache is not always the answer and running it blindly can waste more time than it saves. Here's when it genuinely fixes the problem, and when it doesn't. 👇 ✅ USE IT WHEN: → You installed a package and it's behaving like an older version → Your node_modules look fine, but the app keeps breaking in weird ways → You're getting checksum or integrity errors during install → You just upgraded Node or npm and things stopped working ❌ DON'T USE IT WHEN: → Your package.json or package-lock.json has conflicts - fix those first → You haven't tried deleting node_modules and reinstalling yet → The error has nothing to do with packages (check your code first 😅) → You're on a slow connection - clearing cache means re-downloading everything The better troubleshooting order: 1. Read the actual error message 2. Delete node_modules and run npm install again 3. Check for version conflicts in package-lock.json 4. Then run npm cache clean -- force if nothing else works The cache is not the enemy. Most of the time, it's doing exactly what it's supposed to do. Save this for the next time your first instinct is to nuke it. 🙃 #DevOps #JavaScript #NodeJS #WebDev #TechTips #SoftwareEngineering #Frontend
To view or add a comment, sign in
-
Day 4 of 30 Days of TypeScript 🚀 Today’s topic: any vs unknown A lot of developers use any thinking it gives flexibility… But in reality, it removes the biggest advantage of TypeScript — type safety. Here’s the truth: 🔴 any Disables type checking Allows anything (even wrong code) Can lead to runtime bugs 🟢 unknown Forces you to validate data Keeps your code safe Encourages better patterns Example 👇 let data: unknown = "hello"; if (typeof data === "string") { console.log(data.toUpperCase()); // ✅ safe } 👉 Rule of thumb: If you don’t know the type yet, use unknown — not any. Because good developers don’t just make code work… They make it reliable. #TypeScript #WebDevelopment #JavaScript #Frontend #CleanCode #100DaysOfCode
To view or add a comment, sign in
-
-
Ever wondered how Node.js handles multiple tasks while being single-threaded? 🚀 It all comes down to the powerful synergy between the V8 Engine and Libuv. Here’s a simple breakdown of what’s happening under the hood: ⚙️ V8 JavaScript Engine This is where your synchronous code runs. It manages the Call Stack and Memory Heap. For example, when you call a function like multiplyFn(a, b), V8 executes it instantly. 🌐 Libuv & System APIs When Node.js encounters an asynchronous task—like a network request, timer, or file operation—it doesn’t block execution. Instead, it delegates the work to Libuv, which communicates with the OS. ⏳ Non-Blocking I/O in Action While the system is handling tasks like reading a file or fetching API data, the main thread remains free to continue executing other code. 🚀 The Result? Highly efficient, scalable applications that never “freeze” while waiting for operations to complete. That’s the real beauty of Node.js — not just JavaScript, but smart task delegation at scale. 🙏 Credit: Akshay Saini 🚀 #NodeJS #BackendDevelopment #WebDevelopment #JavaScript #SystemDesign #V8Engine #Libuv #NamasteDev
To view or add a comment, sign in
-
-
Node.js Event Loop — One Concept Every Developer Should Know 🧠 Many developers get confused about this: Why does Promise run before setTimeout? Example 👇 console.log("Start"); setTimeout(() => console.log("Timeout"), 0); Promise.resolve().then(() => console.log("Promise")); console.log("End"); Output: Start → End → Promise → Timeout Why? Because JavaScript has 2 queues: ✔ Microtask Queue (Promises, async/await) ✔ Macrotask Queue (setTimeout, setInterval) Rule: 👉 Microtasks run before Macrotasks This is why Promise executes before setTimeout, even if timeout is 0ms. Understanding this helps in: ✔ Debugging async issues ✔ Writing better Node.js code ✔ Handling real-time applications 👇 Did this confuse you before learning event loop? #nodejs #javascript #eventloop #backenddeveloper #webdevelopment
To view or add a comment, sign in
-
Just published my first npm package! Introducing "typed-env" — a lightweight, type-safe environment variable validator for Node.js & TypeScript. 💡 Problem: Working with process.env is error-prone: - Missing variables - Wrong types - Runtime crashes ✅ Solution: typed-env validates and types your environment variables at startup — no surprises later. ✨ Features: - Type-safe env variables - Runtime validation - Enum support (e.g. NODE_ENV) - Zero dependencies ⚡ Example code: const env = createEnv({ PORT: "number", NODE_ENV: ["development", "production"], }); 🔗 Check it out: https://lnkd.in/gZtPUQUF #javascript #typescript #nodejs #opensource #webdevelopment
To view or add a comment, sign in
-
-
If you are writing TypeScript without runtime validation, you are only half protected. The type system catches errors at compile time. But it cannot stop a malformed API response, an unexpected form submission, or a config file with missing fields from breaking your app at runtime. Most developers discover this the hard way. Zod solves this by connecting both sides of the problem. You write a schema once. Zod validates your data when it arrives and automatically generates the TypeScript type from that same schema. That means your types are never out of sync with your validation logic. You stop maintaining two separate definitions for the same data. And you stop trusting data that was never actually checked. It has zero external dependencies, runs in Node.js and all modern browsers, and the core bundle is 2kb when zipped. There is no good reason not to add it to your stack. Follow me for more insights in software development. Read the full article here: https://lnkd.in/e-TUKGtx Alain Ngongang #TypeScript #Zod #SoftwareDevelopment #BackendDevelopment #WebDevelopment #CleanCode #JavaScript
To view or add a comment, sign in
-
More from this author
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development