--- title: Language-Specific description: This document outlines the language-specific conventions for the Formbricks codebase, providing guidelines for writing code in TypeScript/JavaScript. icon: code --- ## TypeScript Our codebase follows the Vercel Engineering Style Guide conventions. ### ESLint Configuration We maintain three primary ESLint configurations for different project types: 1. **Library Configuration** (for packages): ```javascript extends: [ "@vercel/style-guide/eslint/node", "@vercel/style-guide/eslint/typescript" ] ``` 2. **React Configuration** (for React applications): ```javascript extends: [ "@vercel/style-guide/eslint/node", "@vercel/style-guide/eslint/typescript", "@vercel/style-guide/eslint/browser", "@vercel/style-guide/eslint/react", "@vercel/style-guide/eslint/next" ] ``` 3. **Next.js Configuration** (for Next.js applications): ```javascript extends: [ "@vercel/style-guide/eslint/node", "@vercel/style-guide/eslint/typescript", "@vercel/style-guide/eslint/browser", "@vercel/style-guide/eslint/react", "@vercel/style-guide/eslint/next" ] ``` ### Key Conventions 1. **TypeScript Usage** - Strict TypeScript checking enabled - Explicit type annotations when necessary - Proper interface and type naming (prefix with T for types, I for interfaces when helpful) - No use of `any` type unless absolutely necessary 2. **Imports/Exports** - Follow strict import ordering: 1. Mocks (for testing) 2. Server-only imports 3. Third-party modules 4. Internal `@formbricks/*` modules 5. Local aliases (`~/*) 6. Relative imports 3. **Error Handling** - Use typed error responses - Proper error propagation - Consistent error message formatting - Implement error boundaries in React components 4. **Async/Await** - Prefer async/await over raw promises - Proper error handling in async functions - Use Promise.all for parallel operations 5. **React Specific** - Functional components with TypeScript - Proper use of hooks - Consistent prop typing - Server Components by default in Next.js App Router ### Code Formatting We use Prettier with specific configurations: ```javascript { bracketSpacing: true, bracketSameLine: true, singleQuote: false, jsxSingleQuote: false, trailingComma: "es5", semi: true, printWidth: 110, arrowParens: "always" } ``` ## Swift Will be added upon release of the native iOS SDK. ## Kotlin Will be added upon release of the native Android SDK.