What Is the Purpose of the `src` Directory in usekaneo/kaneo?
The src directories in usekaneo/kaneo contain all typed TypeScript source files—the functional code for the API server, React frontend, and shared packages that power the entire platform.
Every src folder in this monorepo serves as the dedicated home for implementation logic. These directories are deliberately separated from configuration files, tests, and build artifacts, letting developers focus solely on core features. Whether you're adding API endpoints, building UI components, or sharing utilities across apps, the src directory is where all meaningful development happens.
What the src Directory Contains Across the Monorepo
Kaneo uses a Turborepo-based monorepo structure with multiple src directories, each serving a distinct purpose:
| Package/App | src Path |
Purpose |
|---|---|---|
API (apps/api) |
apps/api/src |
Hono-based backend server, routes, database schema, authentication, WebSocket handling |
Web (apps/web) |
apps/web/src |
React frontend components, hooks, query fetchers, utilities |
Shared Libraries (packages/*) |
packages/*/src |
Reusable code: API client, email templates, permissions, MCP (Kaneo Control Panel) |
This separation ensures clean architectural boundaries while enabling type-safe imports between packages.
Backend: apps/api/src — The Hono Server Implementation
The API's src directory implements the entire backend infrastructure. In apps/api/src/index.ts, the Hono application is instantiated and all feature routes are wired together:
// From apps/api/src/index.ts
const app = new Hono();
// Feature routes mounted here
api.route("/project", project);
api.route("/task", task);
api.route("/workspace", workspace);
This entry point also configures middleware stacks including CORS, authentication verification, and WebSocket adapters. Every business-logic controller, database interaction, and route handler lives under this src tree.
Frontend: apps/web/src — React Components and Client Logic
The web application's src directory contains the complete React implementation. This includes page components, custom hooks for data fetching, utility libraries, and TypeScript type definitions.
Consider apps/web/src/lib/utils/create-slug.ts, a small but representative utility:
export function createSlug(name: string): string {
return name
.toLowerCase()
.trim()
.replace(/[^\w\s-]/g, "")
.replace(/[\s_-]+/g, "-")
.replace(/^-+|-+$/g, "");
}
This function normalizes strings into URL-friendly slugs—the kind of reusable client-side logic that populates apps/web/src.
Shared Packages: Cross-Cutting src Code
The packages/*/src directories contain infrastructure code imported by multiple apps. A critical example is packages/libs/src/hono.ts, which builds a type-safe Hono client for API consumption:
export const client = hc<AppType>(apiUrl, {
fetch: (input, init) =>
fetch(input, {
...init,
headers: {
...init?.headers,
"Content-Type": "application/json",
"X-Kaneo-Window-Id": windowId,
},
credentials: "include",
})
});
This client automatically injects the X-Kaneo-Window-Id header for request tracing across the system, demonstrating how src folders in packages enable centralized, maintainable logic.
Build Pipeline: From src to Production
The src directories are compilation sources, not runtime artifacts. The build pipeline transforms them as follows:
- Web app: Vite compiles
apps/web/srcinto optimized browser bundles - API: The
srcfiles are executed directly via TypeScript or transpiled for deployment - Packages: Biome handles linting and type-checking before distribution
This compile-step separation means src stays free of generated files, keeping version control clean and developer navigation straightforward.
Key Files Illustrating src Directory Purpose
| File | Location | Role |
|---|---|---|
index.ts |
apps/api/src/ |
Backend bootstrap and route mounting |
create-slug.ts |
apps/web/src/lib/utils/ |
Frontend utility function |
hono.ts |
packages/libs/src/ |
Typed API client for cross-app use |
index.ts |
packages/permissions/src/ |
Permission logic shared system-wide |
Each file exemplifies the centralized implementation pattern that makes src directories the definitive location for functional code.
Summary
srcdirectories contain all typed TypeScript implementation—no configuration, no tests, no build artifactsapps/api/srcpowers the Hono backend with routes, middleware, and business logicapps/web/srcdelivers the React frontend through components, hooks, and utilitiespackages/*/srcshares cross-cutting libraries like typed API clients and permission systems- Build tools (Vite, Biome) compile
srcinto production bundles, keeping source and output cleanly separated
Frequently Asked Questions
Why does usekaneo/kaneo use multiple src directories instead of one?
Kaneo follows monorepo best practices where each application and package maintains its own src directory. This enforces strict architectural boundaries: the API cannot accidentally import frontend code, and shared packages explicitly declare their public interfaces. The structure scales cleanly as the project grows.
What build tools process the src files in Kaneo?
Vite handles the web app's src compilation and bundling. Biome provides linting and formatting across all TypeScript src files. The API's src runs under TypeScript execution or transpilation depending on deployment context.
Can I add new features by only editing files in src directories?
Yes. The src directories are designed as the sole location for functional code changes. New API endpoints go in apps/api/src/routes/. New UI components belong in apps/web/src/components/. Shared utilities belong in the appropriate packages/*/src/ folder. Configuration files, test files, and build outputs live elsewhere by design.
How does packages/libs/src/hono.ts differ from direct fetch calls?
The Hono client in packages/libs/src/hono.ts provides end-to-end type safety: TypeScript knows exactly what request shapes each API route accepts and what responses it returns. It also centralizes cross-cutting concerns like the X-Kaneo-Window-Id header and credential handling, eliminating duplicate boilerplate across the web app.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →