# What Are the Main Packages Within the Kaneo Monorepo?

> Explore the main packages within the usekaneo kaneo monorepo: @kaneo/libs, @kaneo/email, @kaneo/mcp, @kaneo/permissions, and @kaneo/typescript-config. Discover shared utilities and configurations.

- Repository: [kaneo.app/kaneo](https://github.com/usekaneo/kaneo)
- Tags: internals
- Published: 2026-08-09

---

**The Kaneo monorepo contains five core internal packages—`@kaneo/libs`, `@kaneo/email`, `@kaneo/mcp`, `@kaneo/permissions`, and `@kaneo/typescript-config`—that provide shared utilities, email templates, CLI tooling, permission checks, and TypeScript configuration across the workspace.**

Kaneo is organized as a **pnpm monorepo** that groups reusable code into several first-party packages under the `packages/` directory. Each package maintains its own [`package.json`](https://github.com/usekaneo/kaneo/blob/main/package.json) and follows the shared TypeScript configuration found in `packages/typescript-config`. Understanding the main packages within the Kaneo monorepo is essential for navigating the codebase and extending the platform's functionality.

## Package Architecture Overview

The monorepo follows a clean separation of concerns between applications (`apps/api` and `apps/web`) and shared libraries. The internal packages are referenced via the `@kaneo/*` scope and enable consistent code reuse, linting, and formatting standards across the backend, frontend, and auxiliary tooling.

## The Five Core Packages

### @kaneo/libs — Shared Runtime Utilities

Located in `packages/libs/`, this package provides cross-cutting utilities used by both the API and Web client. According to the source code in [`packages/libs/src/index.ts`](https://github.com/usekaneo/kaneo/blob/main/packages/libs/src/index.ts), it exports the `resolveApiBaseUrl` function for API URL resolution and the `client` object—a typed Hono client wrapper—along with `windowId` utilities.

Key exports from [`packages/libs/src/index.ts`](https://github.com/usekaneo/kaneo/blob/main/packages/libs/src/index.ts):
- `resolveApiBaseUrl` from `./api-url`
- `client` and `windowId` from `./hono`

Example usage of the shared Hono client:

```typescript
import { client, windowId } from "@kaneo/libs";

async function loadProfile() {
  const profile = await client["/api/v1/profile"].$get();
  console.log("Window:", windowId, "Profile:", profile);
}

```

*Source:* [`packages/libs/src/hono.ts`](https://github.com/usekaneo/kaneo/blob/main/packages/libs/src/hono.ts)

### @kaneo/email — Email Templates and SMTP

This package handles all email communication within Kaneo, including workspace invitations, password resets, and OTP notifications. It contains React-based email templates in `packages/email/src/templates/` and SMTP utilities in [`packages/email/src/send-email.tsx`](https://github.com/usekaneo/kaneo/blob/main/packages/email/src/send-email.tsx).

Key files:
- [`packages/email/src/templates/workspace-invitation.tsx`](https://github.com/usekaneo/kaneo/blob/main/packages/email/src/templates/workspace-invitation.tsx)
- [`packages/email/src/send-email.tsx`](https://github.com/usekaneo/kaneo/blob/main/packages/email/src/send-email.tsx)

Example implementation:

```typescript
import { sendEmail } from "@kaneo/email";
import { WorkspaceInvitation } from "@kaneo/email/templates/workspace-invitation";

await sendEmail({
  to: "newuser@example.com",
  subject: "You're invited to a Kaneo workspace!",
  html: WorkspaceInvitation({ workspaceName: "Acme", inviterName: "Bob" }),
});

```

*Source:* [`packages/email/src/send-email.tsx`](https://github.com/usekaneo/kaneo/blob/main/packages/email/src/send-email.tsx)

### @kaneo/mcp — CLI and Authentication Platform

The Kaneo Command-Line Platform (`packages/mcp/`) provides CLI utilities for installing and interacting with Kaneo instances. It includes device-flow authentication helpers, configuration merging, and the main CLI entry point at [`packages/mcp/src/cli.ts`](https://github.com/usekaneo/kaneo/blob/main/packages/mcp/src/cli.ts).

Key functionality:
- Device flow authentication ([`packages/mcp/src/auth/device-flow.ts`](https://github.com/usekaneo/kaneo/blob/main/packages/mcp/src/auth/device-flow.ts))
- CLI entry point ([`packages/mcp/src/cli.ts`](https://github.com/usekaneo/kaneo/blob/main/packages/mcp/src/cli.ts))

Example device registration:

```typescript
import { registerDevice } from "@kaneo/mcp";

await registerDevice({
  clientId: "my-cli",
  scopes: ["read", "write"],
});

```

*Source:* [`packages/mcp/src/auth/device-flow.ts`](https://github.com/usekaneo/kaneo/blob/main/packages/mcp/src/auth/device-flow.ts)

### @kaneo/permissions — Access Control Utilities

Located in `packages/permissions/`, this package exports permission-checking helpers and test utilities that enforce access rules across the API. The main entry point at [`packages/permissions/src/index.ts`](https://github.com/usekaneo/kaneo/blob/main/packages/permissions/src/index.ts) exposes functions used by API routes to validate user permissions before executing sensitive operations.

### @kaneo/typescript-config — Shared TypeScript Configuration

This package centralizes TypeScript configuration through preset files like [`base.json`](https://github.com/usekaneo/kaneo/blob/main/base.json) and [`react-library.json`](https://github.com/usekaneo/kaneo/blob/main/react-library.json). Located in `packages/typescript-config/`, it ensures type consistency and compiler options are synchronized across all workspace packages, eliminating configuration drift between the API, Web, and library code.

## Summary

- Kaneo organizes shared code into five internal packages under the `packages/` directory
- `@kaneo/libs` provides the typed Hono client and API URL resolution used across the stack via [`packages/libs/src/hono.ts`](https://github.com/usekaneo/kaneo/blob/main/packages/libs/src/hono.ts)
- `@kaneo/email` delivers React-based email templates and SMTP functionality for notifications through [`packages/email/src/send-email.tsx`](https://github.com/usekaneo/kaneo/blob/main/packages/email/src/send-email.tsx)
- `@kaneo/mcp` supplies CLI tooling and device-flow authentication for external integrations via [`packages/mcp/src/cli.ts`](https://github.com/usekaneo/kaneo/blob/main/packages/mcp/src/cli.ts)
- `@kaneo/permissions` centralizes access control logic for API route protection in [`packages/permissions/src/index.ts`](https://github.com/usekaneo/kaneo/blob/main/packages/permissions/src/index.ts)
- `@kaneo/typescript-config` maintains consistent compiler settings via shared JSON presets like [`react-library.json`](https://github.com/usekaneo/kaneo/blob/main/react-library.json)

## Frequently Asked Questions

### What is the purpose of the @kaneo/libs package?

The `@kaneo/libs` package serves as the shared runtime utility library for both the API and Web applications. It exports critical functions like `resolveApiBaseUrl` from [`packages/libs/src/api-url.ts`](https://github.com/usekaneo/kaneo/blob/main/packages/libs/src/api-url.ts) for environment-based URL resolution and a typed Hono client (`client`) from [`packages/libs/src/hono.ts`](https://github.com/usekaneo/kaneo/blob/main/packages/libs/src/hono.ts) that standardizes HTTP communication across the monorepo.

### How does Kaneo handle email templating?

Kaneo uses the `@kaneo/email` package which contains React components for email templates stored in `packages/email/src/templates/`. These components render to HTML and are sent via the `sendEmail` function exported from [`packages/email/src/send-email.tsx`](https://github.com/usekaneo/kaneo/blob/main/packages/email/src/send-email.tsx), supporting templates for workspace invitations, password resets, and OTP verification.

### What does the MCP package do in Kaneo?

The `@kaneo/mcp` (Kaneo Command-Line Platform) package provides CLI utilities and authentication flows for external tools interacting with Kaneo. It includes device-flow authentication helpers located in [`packages/mcp/src/auth/device-flow.ts`](https://github.com/usekaneo/kaneo/blob/main/packages/mcp/src/auth/device-flow.ts) and serves as the entry point for command-line operations via [`packages/mcp/src/cli.ts`](https://github.com/usekaneo/kaneo/blob/main/packages/mcp/src/cli.ts).

### How are TypeScript configurations managed across the monorepo?

TypeScript configurations are centralized in the `@kaneo/typescript-config` package, which exports preset files like [`base.json`](https://github.com/usekaneo/kaneo/blob/main/base.json) and [`react-library.json`](https://github.com/usekaneo/kaneo/blob/main/react-library.json) from `packages/typescript-config/`. This ensures all workspace packages share identical compiler options, strictness settings, and type-checking behavior.