diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..dc18afd
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,40 @@
+name: CI
+
+on:
+ pull_request:
+ types: [opened, synchronize, reopened]
+
+jobs:
+ check-format:
+ name: Check Formatting
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: pnpm/action-setup@v4
+
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 24
+ cache: pnpm
+
+ - run: pnpm install --frozen-lockfile
+
+ - run: pnpm check:format
+
+ build:
+ name: Build
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: pnpm/action-setup@v4
+
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 24
+ cache: pnpm
+
+ - run: pnpm install --frozen-lockfile
+
+ - run: pnpm build
diff --git a/.oxfmtrc.json b/.oxfmtrc.json
new file mode 100644
index 0000000..55c15df
--- /dev/null
+++ b/.oxfmtrc.json
@@ -0,0 +1,4 @@
+{
+ "$schema": "./node_modules/oxfmt/configuration_schema.json",
+ "ignorePatterns": []
+}
diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts
index f275e37..5b52c8c 100644
--- a/docs/.vitepress/config.ts
+++ b/docs/.vitepress/config.ts
@@ -196,9 +196,9 @@ export default defineConfig({
socialLinks: [
{ icon: "github", link: "https://github.com/makeplane/plane" },
- { icon: "discord", link: "https://discord.com/invite/A92xrEGCge" },
- { icon: "twitter", link: "https://twitter.com/planepowers" },
- { icon: "linkedin", link: "https://www.linkedin.com/company/planepowers/" },
+ { icon: "discord", link: "https://discord.com/invite/A92xrEGCge" },
+ { icon: "twitter", link: "https://twitter.com/planepowers" },
+ { icon: "linkedin", link: "https://www.linkedin.com/company/planepowers/" },
],
nav: [
diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts
index efe01bd..bf8d8c0 100644
--- a/docs/.vitepress/theme/index.ts
+++ b/docs/.vitepress/theme/index.ts
@@ -113,7 +113,7 @@ export default {
handleTabHash();
setupTabHashUpdates();
});
- }
+ },
);
},
} satisfies Theme;
diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css
index 207bf0b..df9472e 100644
--- a/docs/.vitepress/theme/style.css
+++ b/docs/.vitepress/theme/style.css
@@ -187,10 +187,11 @@
/* Fonts */
--vp-font-family-base:
- "Satoshi", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ "Satoshi", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell,
+ sans-serif;
--vp-font-family-mono:
- "IBM Plex Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New",
- monospace;
+ "IBM Plex Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas,
+ "Liberation Mono", "Courier New", monospace;
}
/* Dark mode */
@@ -686,7 +687,6 @@ a.VPLink.VPNavBarMenuLink[href*="sign-in"]:hover {
}
}
-
/* ================================================
HERO IMAGE STYLES
================================================ */
@@ -874,4 +874,3 @@ article img[src$="#hero-br"] {
.medium-zoom-image--opened {
z-index: 1000;
}
-
diff --git a/docs/ai/plane-ai-credits.md b/docs/ai/plane-ai-credits.md
index b380df3..d27a2fa 100644
--- a/docs/ai/plane-ai-credits.md
+++ b/docs/ai/plane-ai-credits.md
@@ -135,19 +135,19 @@ Credits provide granular control while remaining predictable. Unlike token-based
It depends on your plan and how you acquired them. Free plan credits reset monthly with no rollover. Pro plan credits roll over for 1 month, Business for 3 months, and Enterprise plans roll over for up to 12 months. Top-up credits purchased separately are valid for 12 months on all paid plans, regardless of your base plan's rollover period.
:::
-::: details Do all workspace members share the same credit pool?
+::: details Do all workspace members share the same credit pool?
Yes. Credits are allocated at the workspace level, creating a shared balance that all members draw from. This prevents the problem of some team members having unused credits while others run out. Admins can set per-user limits if needed to prevent any single member from consuming the entire pool.
:::
-::: details What happens when my workspace runs out of credits?
+::: details What happens when my workspace runs out of credits?
You'll receive alerts when your balance reaches 20% and 5% of total capacity, giving you time to respond. Once you hit zero, AI features become unavailable until you top up or your monthly allocation renews. Your existing data, past AI results, and all non-AI functionality remain fully accessible. You just can't request new AI operations.
:::
-::: details Can I switch between plans without losing credits?
+::: details Can I switch between plans without losing credits?
Yes, you can change plans anytime. When you switch, your unused credits carry forward and adopt the new plan's rollover rules. If you upgrade mid-month, your increased allocation takes effect immediately. If you downgrade, the change happens at your next billing cycle to avoid losing paid credits.
:::
-::: details How can I monitor my workspace's credit usage?
+::: details How can I monitor my workspace's credit usage?
The real-time dashboard shows your remaining balance, consumption history, and trends over time. Before executing any AI action, you'll see a credit cost preview.
:::
diff --git a/docs/authentication/group-sync.md b/docs/authentication/group-sync.md
index caaee67..29d7a64 100644
--- a/docs/authentication/group-sync.md
+++ b/docs/authentication/group-sync.md
@@ -23,16 +23,16 @@ Group syncing lets workspace admins map identity provider groups to Plane projec
1. Navigate to **Workspace Settings → Group syncing**.
2. Toggle on **Enable group syncing**.
- 
+
## Configure sync settings
-| Setting | Description | Default |
-|---------|-------------|---------|
-| **Sync on login** | Update group membership and project access when a user signs in | Enabled (recommended) |
-| **Offline sync** | Run sync automatically every six hours, without waiting for users to log in | Disabled |
-| **Auto remove** | Automatically remove users from projects when they no longer match the group | Disabled |
-| **Group attribute key** | The identity provider attribute used to identify and sync user groups | `groups` |
+| Setting | Description | Default |
+| ----------------------- | ---------------------------------------------------------------------------- | --------------------- |
+| **Sync on login** | Update group membership and project access when a user signs in | Enabled (recommended) |
+| **Offline sync** | Run sync automatically every six hours, without waiting for users to log in | Disabled |
+| **Auto remove** | Automatically remove users from projects when they no longer match the group | Disabled |
+| **Group attribute key** | The identity provider attribute used to identify and sync user groups | `groups` |
Set **Group attribute key** to match exactly what your IdP sends. Common values include `groups` (default), `roles`, `memberOf`, or `custom:groups`.
@@ -52,18 +52,19 @@ Repeat for additional group-to-project mappings.
## What happens on login
-| Condition | Result |
-|-----------|--------|
-| User not in workspace, but in a mapped group | Added to workspace as Member, then added to mapped project(s) |
-| User in workspace, in mapped group, not yet in project | Added to project with configured role |
-| User in workspace, in mapped group, already in project | No change |
-| User in workspace, not in any mapped group | No action |
+| Condition | Result |
+| ------------------------------------------------------ | ------------------------------------------------------------- |
+| User not in workspace, but in a mapped group | Added to workspace as Member, then added to mapped project(s) |
+| User in workspace, in mapped group, not yet in project | Added to project with configured role |
+| User in workspace, in mapped group, already in project | No change |
+| User in workspace, not in any mapped group | No action |
## When users leave IdP groups
If a user is removed from an IdP group and **Auto remove** is enabled, they're removed from the corresponding project. They are never removed from the workspace.
**These users are never auto-removed**
+
- Users who were manually added to the project
- Users who are the sole project admin
@@ -86,4 +87,4 @@ Map your `engineering` group to all engineering projects. New engineers get acce
Map `product-team`, `design-team`, and `marketing-team` to their respective projects. Users only see what's relevant to them.
**Contractor offboarding**
-Map `contractors` to projects with Guest role and enable Auto remove. Access is revoked the moment they're removed from the IdP group.
\ No newline at end of file
+Map `contractors` to projects with Guest role and enable Auto remove. Access is revoked the moment they're removed from the IdP group.
diff --git a/docs/core-concepts/issues/epics.md b/docs/core-concepts/issues/epics.md
index ac0acba..b792703 100644
--- a/docs/core-concepts/issues/epics.md
+++ b/docs/core-concepts/issues/epics.md
@@ -86,6 +86,7 @@ A work item can belong to only one Epic. This ensures clarity in organization an
:::
## Duplicate Epics
+
When you need to create similar Epics or replicate an Epic's structure across projects, Plane allows you to duplicate existing Epics either within the same project or to different projects in your workspace.
To duplicate an Epic, click the ••• menu in the Epic header and select Make a copy. You'll see two options:
diff --git a/docs/core-concepts/issues/overview.md b/docs/core-concepts/issues/overview.md
index 2789727..1ac004d 100644
--- a/docs/core-concepts/issues/overview.md
+++ b/docs/core-concepts/issues/overview.md
@@ -46,6 +46,7 @@ Break down larger tasks into smaller, manageable components by creating sub-work

## Duplicate work items
+
When you need to create similar work items or replicate a work item's structure and properties, Plane lets you duplicate existing work items either within the same project or across different projects.
To duplicate a work item, click the **•••** menu in the work item header and select **Make a copy**. You'll see two options:
@@ -124,6 +125,7 @@ Plane allows you to upload different file types directly to the work item. Use t
CSS, JavaScript, JSON, XML, CSV, SQL
## Link pages to work items
+
Connect relevant project pages and wiki documentation to your work items to provide instant access to related context, specifications, or reference materials.
1. Use the **Link pages** button in the work item to open the page linking modal.
diff --git a/docs/core-concepts/pages/overview.md b/docs/core-concepts/pages/overview.md
index 4f7d968..b045fc7 100644
--- a/docs/core-concepts/pages/overview.md
+++ b/docs/core-concepts/pages/overview.md
@@ -134,6 +134,7 @@ Share the page by copying its link to send to your teammates or link it in a wor
Duplicate an existing page to jumpstart new content.
### Move Page
+
Transfer a page to Wiki, Teamspace or a different Project in your workspace.
### Lock Page
diff --git a/docs/core-concepts/pages/wiki.md b/docs/core-concepts/pages/wiki.md
index 707f17c..8a0bd2b 100644
--- a/docs/core-concepts/pages/wiki.md
+++ b/docs/core-concepts/pages/wiki.md
@@ -37,6 +37,7 @@ Where project pages zoom in on team-specific details, the Wiki gives you a bird'
4. Need to find something quick? Use the sidebar's search function to locate specific pages or information.
## Share private pages
+
While private pages are typically only accessible to their creator, you can selectively share private wiki pages with specific team members in your workspace. This gives you granular control over who can access sensitive documentation without making it visible to your entire organization.

diff --git a/docs/core-concepts/workspaces/members.md b/docs/core-concepts/workspaces/members.md
index b29924a..fde5756 100644
--- a/docs/core-concepts/workspaces/members.md
+++ b/docs/core-concepts/workspaces/members.md
@@ -100,18 +100,16 @@ Track member actions like invitations, role changes, and removals to maintain vi
1. Navigate to **Workspace settings → Members**.
2. Click **Activity** in the top right.
- The activity panel shows recent workspace member events:
-
- - **Member invitations** - Who invited which members and when
- - **Invitation acceptances** - When members accepted and joined the workspace
- - **Role changes** - Role updates with who made the change and when
- - **Member removals** - Who removed members from the workspace
-
- Each activity entry shows:
-
- - The action taken
- - Who performed the action
- - When it happened (relative time like "about 1 month ago" or "5 days ago")
+ The activity panel shows recent workspace member events:
+ - **Member invitations** - Who invited which members and when
+ - **Invitation acceptances** - When members accepted and joined the workspace
+ - **Role changes** - Role updates with who made the change and when
+ - **Member removals** - Who removed members from the workspace
+
+ Each activity entry shows:
+ - The action taken
+ - Who performed the action
+ - When it happened (relative time like "about 1 month ago" or "5 days ago")
This audit trail helps workspace admins monitor membership changes and troubleshoot access issues. Activity is retained for workspace history and can be filtered by clicking on specific activity types.
diff --git a/docs/dashboards.md b/docs/dashboards.md
index 7862afd..969c7da 100644
--- a/docs/dashboards.md
+++ b/docs/dashboards.md
@@ -3,7 +3,7 @@ title: Custom dashboards to visualize project metrics and data
description: Build custom dashboards in Plane to visualize project metrics.
---
-# Build custom dashboards
+# Build custom dashboards
Dashboards in Plane give you a bird's-eye view of your projects through customizable visualizations. They help you monitor progress, identify bottlenecks, and make data-driven decisions without diving into individual projects.
diff --git a/docs/devices/mobile.md b/docs/devices/mobile.md
index 4dc2073..d6937ab 100644
--- a/docs/devices/mobile.md
+++ b/docs/devices/mobile.md
@@ -64,39 +64,38 @@ The navigation bar at the bottom of your screen helps you quickly access key are
- **Create**
Need to create a new project, work item, or page? Tap the + Create button.
+ - **New project**
+ Add the project details such as icon, name, description, and the lead. Mark it public or private. Hit the **Create** button.
- - **New project**
- Add the project details such as icon, name, description, and the lead. Mark it public or private. Hit the **Create** button.
-
- - **New page**
- - Select the project by clicking the project name at the top.
- - Add an icon and the page title.
- - You can use the toolbar at the bottom to add different content blocks and format them as needed.
- - Hit the **Create** button to add it to your project.
-
-
-
-

-
-
-

-
-
+ - **New page**
+ - Select the project by clicking the project name at the top.
+ - Add an icon and the page title.
+ - You can use the toolbar at the bottom to add different content blocks and format them as needed.
+ - Hit the **Create** button to add it to your project.
- - **New work item**
- - Select the project by clicking the project name at the top.
- - Add work item details like title and description. For the description, you can use the toolbar at the bottom to add different blocks and format the text as needed.
- - Tap the **+** icon at the bottom left to assign members, priority, state, and other properties.
- - Hit the **Create** button to add it to your project.
-
-
-
-

-
-
-

-
-
+
+
+

+
+
+

+
+
+
+ - **New work item**
+ - Select the project by clicking the project name at the top.
+ - Add work item details like title and description. For the description, you can use the toolbar at the bottom to add different blocks and format the text as needed.
+ - Tap the **+** icon at the bottom left to assign members, priority, state, and other properties.
+ - Hit the **Create** button to add it to your project.
+
+
+
+

+
+
+

+
+
- **Inbox**
Stay updated with notifications about work items you’ve created, are assigned to, or where you’ve been mentioned. You’ll never miss an important update again.
@@ -132,26 +131,25 @@ You will notice that the bottom navigation bar now shows different buttons:
- **Work items**
View a list of all, active and backlog work items.
+ - You can search, sort, and filter work items using the icon buttons on the top right.
- - You can search, sort, and filter work items using the icon buttons on the top right.
-
- - Tap any work item to view or modify work item details and view the activity. You can also add comments, copy the link, and share the work item with a personalized message via other apps.
+ - Tap any work item to view or modify work item details and view the activity. You can also add comments, copy the link, and share the work item with a personalized message via other apps.
- - Click the **+ Add** button on the bottom left to add sub-work items and relations. You can also swipe left or right to view sub-work items, relations, links, and attachments.
+ - Click the **+ Add** button on the bottom left to add sub-work items and relations. You can also swipe left or right to view sub-work items, relations, links, and attachments.
-
-
-

-
-
-

-
-
-
+
+
+

+
+
+

+
+
+
- ::: tip
- You can add or edit the priority, state, start date, target date, cycle, and module by tapping the pencil icon in the **Properties** section. Alternatively, use the icons on the top right for choosing Priority, Cycle, and Module.
- :::
+ ::: tip
+ You can add or edit the priority, state, start date, target date, cycle, and module by tapping the pencil icon in the **Properties** section. Alternatively, use the icons on the top right for choosing Priority, Cycle, and Module.
+ :::
- **Cycles**
Track active and upcoming cycles, and dive into the work items within each cycle.
@@ -212,18 +210,19 @@ Make sure you have a browser (like Chrome, Firefox, or Edge) installed on your p
**Browser opens, but sign-in keeps looping?**
This might be due to default browser settings. Try the following:
- 1. Open your device’s **Settings**.
- 2. Go to **Apps** or **Default Apps**.
- 3. Find and tap on the browser you're using.
- 4. Look for an option like **Clear defaults** or **Reset default app**
- 5. Clear the defaults, then try signing in again.
+1. Open your device’s **Settings**.
+2. Go to **Apps** or **Default Apps**.
+3. Find and tap on the browser you're using.
+4. Look for an option like **Clear defaults** or **Reset default app**
+5. Clear the defaults, then try signing in again.
+
+You’ll be prompted to choose a browser. Choose one that's in the same profile as the Plane app.
- You’ll be prompted to choose a browser. Choose one that's in the same profile as the Plane app.
+**Still stuck?**
+Try clearing site data:
-**Still stuck?**
-Try clearing site data:
-1. When the web sign-in page opens, tap the three-dot menu (usually in the top-right corner of the browser).
-2. Go to **Settings → Site settings → Clear data** (wording may vary slightly by browser).
+1. When the web sign-in page opens, tap the three-dot menu (usually in the top-right corner of the browser).
+2. Go to **Settings → Site settings → Clear data** (wording may vary slightly by browser).
3. Try the sign-in process again.
### Unable to log in using SSO
diff --git a/docs/importers/clickup.md b/docs/importers/clickup.md
index 0dd4c6f..3ebae39 100644
--- a/docs/importers/clickup.md
+++ b/docs/importers/clickup.md
@@ -24,7 +24,7 @@ To import custom task types from ClickUp, make sure the [Work item types](/core-
> **Role**: Workspace admins
- 
+
1. Go to your Workspace Settings.
2. Select **Imports** on the left pane and click **Import** next to ClickUp.
diff --git a/docs/importers/jira.md b/docs/importers/jira.md
index 137fbfd..65deac9 100644
--- a/docs/importers/jira.md
+++ b/docs/importers/jira.md
@@ -57,10 +57,9 @@ To import Jira issues to a Plane project, follow these steps:
- **Upload CSV**
Click the **Upload CSV** button to import users to your Plane project. Refer to [Export users from a site](https://support.atlassian.com/organization-administration/docs/export-users-from-a-site/) to download the CSV file from Jira. _(recommended)_
- Admin or Member role users invited to your workspace count toward your billed seats right away, but the importer only treats them as active members once they accept the invitation. So, when importing users, you have two options:
-
- - Don't invite users to the workspace manually and let the importer handle user creation.
- - Invite users first and wait for all of them to accept before running the import.
+ Admin or Member role users invited to your workspace count toward your billed seats right away, but the importer only treats them as active members once they accept the invitation. So, when importing users, you have two options:
+ - Don't invite users to the workspace manually and let the importer handle user creation.
+ - Invite users first and wait for all of them to accept before running the import.
- **Skip user import**
You can select the **Skip Importing User data** checkbox and manually add users later.
diff --git a/docs/importers/notion.md b/docs/importers/notion.md
index 3dc1d4c..6e4de26 100644
--- a/docs/importers/notion.md
+++ b/docs/importers/notion.md
@@ -36,7 +36,7 @@ Only HTML exports from Notion are supported. Make sure to select HTML as your ex
## Import Notion content
- 
+
Once you have your exported ZIP file:
@@ -47,13 +47,13 @@ Once you have your exported ZIP file:
3. On the Notion import page, click **Upload Notion Exported ZIP**.
4. Select and upload the ZIP file you exported from Notion.
- 
+
5. Wait for the upload to complete. You'll see a "Upload complete!" message.
6. Click **Start Import** to begin processing your Notion data.
7. The import will process in phases. Once finished, the status will change to "Finished".
- 
+
8. After the import completes, your Notion pages will be available in Plane's **Wiki** section. The page hierarchy from Notion will be preserved, with main pages and their nested pages organized in the same structure.
diff --git a/docs/intake/intake-forms.md b/docs/intake/intake-forms.md
index ccf472f..9c1e7fc 100644
--- a/docs/intake/intake-forms.md
+++ b/docs/intake/intake-forms.md
@@ -4,6 +4,7 @@ description: Set up public web forms to collect bug reports, feature requests, a
---
# Collect work items with public web forms
+
Now, you can easily gather bug reports, feature requests, or support tickets from external users, all by sharing a
simple form link.
diff --git a/docs/integrations/github.md b/docs/integrations/github.md
index 72c06f1..508a8d0 100644
--- a/docs/integrations/github.md
+++ b/docs/integrations/github.md
@@ -34,7 +34,6 @@ Link your GitHub organization to your Plane workspace to start syncing repositor
> [!CAUTION] Plane self-hosted instances
> If you're running a self-hosted instance of Plane, you'll need to first create and configure a GitHub App to get GitHub integration working. Follow this [setup guide](https://developers.plane.so/self-hosting/govern/integrations/github?edition=github-cloud#create-github-app) first before diving into the steps on this page.
-
1. Navigate to [Workspace settings](/core-concepts/workspaces/overview#access-workspace-settings) in Plane.
2. On the right pane, select **Integrations**.
3. Find the **GitHub** integration and click **Configure**.
diff --git a/docs/introduction/tutorials/collaborate-on-work-items.md b/docs/introduction/tutorials/collaborate-on-work-items.md
index e11519b..6020c70 100644
--- a/docs/introduction/tutorials/collaborate-on-work-items.md
+++ b/docs/introduction/tutorials/collaborate-on-work-items.md
@@ -30,7 +30,7 @@ Start conversations that move work forward effectively.
- Click in the **Add comment** text area.
- Write a comment that provides value to the team.
::: tip Example
- Started working on this - I've identified the CSS issue and should have a fix ready by tomorrow. The problem is with the media query breakpoint at 375px.
+ Started working on this - I've identified the CSS issue and should have a fix ready by tomorrow. The problem is with the media query breakpoint at 375px.
:::
3. **Use formatting options**
@@ -67,14 +67,14 @@ Organize large tasks into manageable, assignable pieces.
- In your work item, look for **Add sub-work item** button.
- Click to create a related, smaller task.
- Fill in the sub-item details with specificity.
- ::: tip Example
- **Parent task:** "Implement user authentication system"
- **Sub-work items:**
- - "Design login page wireframes" → Designer
- - "Set up authentication database tables" → Backend developer
- - "Create password reset flow" → Frontend developer
- - "Write user registration API endpoints" → Backend developer
- :::
+ ::: tip Example
+ **Parent task:** "Implement user authentication system"
+ **Sub-work items:**
+ - "Design login page wireframes" → Designer
+ - "Set up authentication database tables" → Backend developer
+ - "Create password reset flow" → Frontend developer
+ - "Write user registration API endpoints" → Backend developer
+ :::
3. **Understand sub-item benefits**
- Each sub-item has independent lifecycle and can be worked on separately.
- Team members focus on specific sub-items while staying connected to bigger picture.
diff --git a/docs/introduction/tutorials/create-project.md b/docs/introduction/tutorials/create-project.md
index ecbc9fa..aa53423 100644
--- a/docs/introduction/tutorials/create-project.md
+++ b/docs/introduction/tutorials/create-project.md
@@ -76,15 +76,14 @@ Customize your project to match how your team works.
2. **Customize project details**
-
+
- **Project icon and cover**: Choose an emoji and a header image for your project.
+ - **Project visibility (Network)**: Choose based on your team's collaboration needs.
+ - **Public**: All workspace members can see and join the project.
+ - **Private**: Only invited members can access the project.
- - **Project visibility (Network)**: Choose based on your team's collaboration needs.
- - **Public**: All workspace members can see and join the project.
- - **Private**: Only invited members can access the project.
-
- - **Project timezone**: Set the timezone for project scheduling and deadlines.
+ - **Project timezone**: Set the timezone for project scheduling and deadlines.
3. **Save your changes**
- Click **Update project** to apply your modifications.
diff --git a/package.json b/package.json
index 9c71aa5..9d3980c 100644
--- a/package.json
+++ b/package.json
@@ -14,7 +14,8 @@
"dev": "vitepress dev docs",
"build": "vitepress build docs",
"preview": "vitepress preview docs",
- "format": "oxfmt --write ."
+ "fix:format": "oxfmt --write .",
+ "check:format": "oxfmt --check ."
},
"dependencies": {
"@tailwindcss/vite": "^4.2.1",