Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

This is the **Plane developer documentation site** built with **VitePress** (Vue 3-based static site generator). It covers REST API reference, self-hosting guides, and developer tools documentation for the Plane project management platform.

Live site: https://developers.plane.so

## Commands

```bash
pnpm install # Install dependencies (use --frozen-lockfile in CI)
pnpm dev # Start dev server at http://localhost:5173
pnpm build # Production build
pnpm preview # Preview production build
pnpm check:format # Check Prettier formatting
pnpm fix:format # Auto-fix Prettier formatting
```

**CI checks on PRs** (to `master`): Prettier formatting + VitePress build must pass.

## Architecture

- **`docs/`** — All documentation content and VitePress config
- **`docs/.vitepress/config.mts`** — Main VitePress config: navigation, sidebar structure, SEO, Algolia search, analytics. This is a large file (~39KB) that defines the entire site structure.
- **`docs/.vitepress/theme/`** — Custom theme with Vue components and global styles
- **`docs/api-reference/`** — REST API endpoint docs (180+ endpoints across 25+ categories)
- **`docs/self-hosting/`** — Deployment guides (Docker, Kubernetes, etc.)
- **`docs/dev-tools/`** — Webhooks, OAuth apps, agents, MCP server docs

## Custom Vue Components

Used directly in markdown files — defined in `docs/.vitepress/theme/components/`:

| Component | Usage |
| ---------------------- | ----------------------------------------------------------------- |
| `<ApiParam>` | API parameter with name, type, required badge, expandable details |
| `<CodePanel>` | Multi-language code tabs (cURL, Python, JavaScript) |
| `<ResponsePanel>` | Syntax-highlighted API response JSON |
| `<Card>` | Feature card with icon, title, description |
| `<CardGroup cols="N">` | Responsive grid layout (2, 3, or 4 columns) |

## API Documentation Pattern

API endpoint pages follow a strict two-column layout pattern:

```markdown
<div class="api-two-column">
<div class="api-left">
<!-- Parameters using <ApiParam> -->
</div>
<div class="api-right">
<!-- Code examples using <CodePanel> + <ResponsePanel> -->
</div>
</div>
```

Each endpoint page: one file per endpoint, includes path/body params, OAuth scopes, and code examples in cURL/Python/JavaScript.

## Conventions

- **Frontmatter**: Every markdown page needs `title`, `description`, and `keywords` fields
- **Images**: Stored in `docs/.vitepress/public/images/`, referenced with absolute paths (`/images/...`)
- **Branch workflow**: Branch from `master`, use `fix/`, `feat/`, `docs/`, `update/` prefixes
- **Formatting**: Prettier enforced — 120 char width, 2-space indent, semicolons, double quotes, ES5 trailing commas
- **Sidebar updates**: When adding new pages, update the sidebar config in `docs/.vitepress/config.mts`
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,11 @@ Write clear, concise commit messages:

### Pull Requests

1. Create a branch from `preview`
1. Create a branch from `master`
2. Make your changes
3. Test locally with `pnpm dev`
4. Build and verify with `pnpm build && pnpm preview`
5. Submit a pull request to the `preview` branch
5. Submit a pull request to the `master` branch

### PR Guidelines

Expand Down
7 changes: 6 additions & 1 deletion docs/dev-tools/build-plane-app/create-oauth-application.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,12 @@ keywords: plane oauth application, create plane app, client id secret, plane app

# Create an OAuth Application

1. Navigate to **Workspace Settings** → **Integrations**. `https://app.plane.so/<workspace>/settings/integrations/`
1. Navigate to **Workspace Settings** → **Integrations**.

```text
https://app.plane.so/<workspace>/settings/integrations/
```

2. Click **Build your own**.
3. Fill in the required details:

Expand Down
2 changes: 1 addition & 1 deletion docs/dev-tools/build-plane-app/examples.md
Original file line number Diff line number Diff line change
Expand Up @@ -242,4 +242,4 @@ if __name__ == "__main__":

## Publish to Marketplace

Apps can be listed on the [Plane Marketplace](https://plane.so/marketplace/integrations). Contact [support@plane.so](mailto:support@plane.so) to list your app.
Apps can be listed on the [Plane Marketplace](https://plane.so/marketplace/integrations). Contact [support@plane.so](mailto:support@plane.so) to list your app.
180 changes: 90 additions & 90 deletions docs/dev-tools/build-plane-app/oauth-scopes.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,125 +10,125 @@ This document lists all OAuth scopes available when building a Plane app. Reques

## Project scopes

| Scope | Description |
|-------|-------------|
| `projects:read` | Read projects |
| `projects:write` | Create and update projects |
| `projects.features:read` | Read project features |
| `projects.features:write` | Create and update project features |
| `projects.members:read` | Read project members |
| `projects.members:write` | Manage project members |
| `projects.states:read` | Read project states |
| `projects.states:write` | Create and update project states |
| `projects.labels:read` | Read project labels |
| `projects.labels:write` | Create and update project labels |
| `projects.intakes:read` | Read project intakes |
| `projects.intakes:write` | Create and update project intakes |
| `projects.epics:read` | Read project epics |
| `projects.epics:write` | Create and update project epics |
| `projects.cycles:read` | Read project cycles |
| `projects.cycles:write` | Create and update project cycles |
| `projects.pages:read` | Read project pages |
| `projects.pages:write` | Create and update project pages |
| `projects.modules:read` | Read project modules |
| `projects.modules:write` | Create and update project modules |
| `projects.work_items:read` | Read project work items |
| `projects.work_items:write` | Create and update project work items |
| `projects.work_items.comments:read` | Read work item comments |
| `projects.work_items.comments:write` | Create and update work item comments |
| `projects.work_items.attachments:read` | Read work item attachments |
| `projects.work_items.attachments:write` | Create and update work item attachments |
| `projects.work_items.links:read` | Read work item links |
| `projects.work_items.links:write` | Create and update work item links |
| `projects.work_items.relations:read` | Read work item relations |
| `projects.work_items.relations:write` | Create and update work item relations |
| `projects.work_items.activities:read` | Read work item activities |
| `projects.work_items.activities:write` | Create and update work item activities |
| `projects.work_items.worklogs:read` | Read work item worklogs |
| `projects.work_items.worklogs:write` | Create and update work item worklogs |
| `projects.work_item_types:read` | Read work item types |
| `projects.work_item_types:write` | Create and update work item types |
| `projects.work_item_properties:read` | Read work item properties |
| `projects.work_item_properties:write` | Create and update work item properties |
| `projects.work_item_property_options:read` | Read work item property options |
| Scope | Description |
| ------------------------------------------- | -------------------------------------------- |
| `projects:read` | Read projects |
| `projects:write` | Create and update projects |
| `projects.features:read` | Read project features |
| `projects.features:write` | Create and update project features |
| `projects.members:read` | Read project members |
| `projects.members:write` | Manage project members |
| `projects.states:read` | Read project states |
| `projects.states:write` | Create and update project states |
| `projects.labels:read` | Read project labels |
| `projects.labels:write` | Create and update project labels |
| `projects.intakes:read` | Read project intakes |
| `projects.intakes:write` | Create and update project intakes |
| `projects.epics:read` | Read project epics |
| `projects.epics:write` | Create and update project epics |
| `projects.cycles:read` | Read project cycles |
| `projects.cycles:write` | Create and update project cycles |
| `projects.pages:read` | Read project pages |
| `projects.pages:write` | Create and update project pages |
| `projects.modules:read` | Read project modules |
| `projects.modules:write` | Create and update project modules |
| `projects.work_items:read` | Read project work items |
| `projects.work_items:write` | Create and update project work items |
| `projects.work_items.comments:read` | Read work item comments |
| `projects.work_items.comments:write` | Create and update work item comments |
| `projects.work_items.attachments:read` | Read work item attachments |
| `projects.work_items.attachments:write` | Create and update work item attachments |
| `projects.work_items.links:read` | Read work item links |
| `projects.work_items.links:write` | Create and update work item links |
| `projects.work_items.relations:read` | Read work item relations |
| `projects.work_items.relations:write` | Create and update work item relations |
| `projects.work_items.activities:read` | Read work item activities |
| `projects.work_items.activities:write` | Create and update work item activities |
| `projects.work_items.worklogs:read` | Read work item worklogs |
| `projects.work_items.worklogs:write` | Create and update work item worklogs |
| `projects.work_item_types:read` | Read work item types |
| `projects.work_item_types:write` | Create and update work item types |
| `projects.work_item_properties:read` | Read work item properties |
| `projects.work_item_properties:write` | Create and update work item properties |
| `projects.work_item_property_options:read` | Read work item property options |
| `projects.work_item_property_options:write` | Create and update work item property options |
| `projects.work_item_property_values:read` | Read work item property values |
| `projects.work_item_property_values:write` | Create and update work item property values |
| `projects.milestones:read` | Read project milestones |
| `projects.milestones:write` | Create and update project milestones |
| `projects.work_item_property_values:read` | Read work item property values |
| `projects.work_item_property_values:write` | Create and update work item property values |
| `projects.milestones:read` | Read project milestones |
| `projects.milestones:write` | Create and update project milestones |

## Wiki scopes

| Scope | Description |
|-------|-------------|
| `wiki.pages:read` | Read wiki pages |
| Scope | Description |
| ------------------ | ---------------------------- |
| `wiki.pages:read` | Read wiki pages |
| `wiki.pages:write` | Create and update wiki pages |

## Customer scopes

| Scope | Description |
|-------|-------------|
| `customers:read` | Read customers |
| `customers:write` | Create and update customers |
| `customers.requests:read` | Read customer requests |
| `customers.requests:write` | Create and update customer requests |
| `customers.properties:read` | Read customer properties |
| `customers.properties:write` | Create and update customer properties |
| `customers.property_values:read` | Read customer property values |
| Scope | Description |
| --------------------------------- | ------------------------------------------ |
| `customers:read` | Read customers |
| `customers:write` | Create and update customers |
| `customers.requests:read` | Read customer requests |
| `customers.requests:write` | Create and update customer requests |
| `customers.properties:read` | Read customer properties |
| `customers.properties:write` | Create and update customer properties |
| `customers.property_values:read` | Read customer property values |
| `customers.property_values:write` | Create and update customer property values |
| `customers.work_items:read` | Read customer work items |
| `customers.work_items:write` | Create and update customer work items |
| `customers.work_items:read` | Read customer work items |
| `customers.work_items:write` | Create and update customer work items |

## Initiatives scopes

| Scope | Description |
|-------|-------------|
| `initiatives:read` | Read initiatives |
| `initiatives:write` | Create and update initiatives |
| `initiatives.projects:read` | Read initiative projects |
| Scope | Description |
| ---------------------------- | ------------------------------------- |
| `initiatives:read` | Read initiatives |
| `initiatives:write` | Create and update initiatives |
| `initiatives.projects:read` | Read initiative projects |
| `initiatives.projects:write` | Create and update initiative projects |
| `initiatives.epics:read` | Read initiative epics |
| `initiatives.epics:write` | Create and update initiative epics |
| `initiatives.labels:read` | Read initiative labels |
| `initiatives.labels:write` | Create and update initiative labels |
| `initiatives.epics:read` | Read initiative epics |
| `initiatives.epics:write` | Create and update initiative epics |
| `initiatives.labels:read` | Read initiative labels |
| `initiatives.labels:write` | Create and update initiative labels |

## Workspace scopes

| Scope | Description |
|-------|-------------|
| `workspaces.members:read` | Read workspace members |
| `workspaces.features:read` | Read workspace features |
| Scope | Description |
| --------------------------- | ------------------------------------ |
| `workspaces.members:read` | Read workspace members |
| `workspaces.features:read` | Read workspace features |
| `workspaces.features:write` | Create and update workspace features |

## Stickies scopes

| Scope | Description |
|-------|-------------|
| `stickies:read` | Read stickies |
| Scope | Description |
| ---------------- | -------------------------- |
| `stickies:read` | Read stickies |
| `stickies:write` | Create and update stickies |

## Teamspaces scopes

| Scope | Description |
|-------|-------------|
| `teamspaces:read` | Read teamspaces |
| `teamspaces:write` | Create and update teamspaces |
| `teamspaces.projects:read` | Read teamspace projects |
| Scope | Description |
| --------------------------- | ------------------------------------ |
| `teamspaces:read` | Read teamspaces |
| `teamspaces:write` | Create and update teamspaces |
| `teamspaces.projects:read` | Read teamspace projects |
| `teamspaces.projects:write` | Create and update teamspace projects |
| `teamspaces.members:read` | Read teamspace members |
| `teamspaces.members:write` | Create and update teamspace members |
| `teamspaces.members:read` | Read teamspace members |
| `teamspaces.members:write` | Create and update teamspace members |

## Profile scopes

| Scope | Description |
|-------|-------------|
| Scope | Description |
| -------------- | ----------------- |
| `profile:read` | Read user profile |

## Agent Run scopes

| Scope | Description |
|-------|-------------|
| `agent_runs:read` | Read agent runs |
| `agent_runs:write` | Create and update agent runs |
| `agent_runs.activities:read` | Read agent run activities |
| `agent_runs.activities:write` | Create and update agent run activities |
| Scope | Description |
| ----------------------------- | -------------------------------------- |
| `agent_runs:read` | Read agent runs |
| `agent_runs:write` | Create and update agent runs |
| `agent_runs.activities:read` | Read agent run activities |
| `agent_runs.activities:write` | Create and update agent run activities |
6 changes: 6 additions & 0 deletions docs/dev-tools/build-plane-app/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ Follow these steps to build your first Plane app:
### 1. Create an OAuth application

Register your app in Plane to get credentials:

- Navigate to **Workspace Settings** → **Integrations**
- Configure your app's URLs and permissions
- Store your **Client ID** and **Client Secret** securely
Expand All @@ -61,6 +62,7 @@ Register your app in Plane to get credentials:
### 2. Choose your authentication flow

Decide between Bot Token or User Token based on your use case:

- **Bot Token** - For agents, webhooks, and automation
- **User Token** - For user-specific actions and permissions

Expand All @@ -69,6 +71,7 @@ Decide between Bot Token or User Token based on your use case:
### 3. Implement OAuth

Set up the OAuth flow to obtain access tokens:

- Redirect users to Plane's consent screen
- Handle the callback with authorization code
- Exchange code for access tokens
Expand All @@ -79,6 +82,7 @@ Set up the OAuth flow to obtain access tokens:
### 4. Handle webhooks

Set up webhook handlers to receive real-time events:

- Verify webhook signatures for security
- Process events like work item updates, comments, and more
- Respond to events with automated actions
Expand All @@ -102,6 +106,7 @@ Free ngrok URLs change on restart. Update your app settings when the URL changes
### Official SDKs

Speed up development with official SDKs for Node.js and Python:

- OAuth helpers for token management
- Typed API clients for all endpoints
- Built-in error handling and retries
Expand All @@ -111,6 +116,7 @@ Speed up development with official SDKs for Node.js and Python:
### Complete examples

See full working implementations:

- TypeScript (Express) example
- Python (Flask) example
- OAuth flow, webhooks, and API integration
Expand Down
Loading