diff --git a/apps/v4/content/docs/installation/index.mdx b/apps/v4/content/docs/installation/index.mdx
index 7147f384d98..2444a00a6e7 100644
--- a/apps/v4/content/docs/installation/index.mdx
+++ b/apps/v4/content/docs/installation/index.mdx
@@ -7,6 +7,16 @@ description: How to install dependencies and structure your app.
Start by selecting your framework of choice. Then follow the instructions to install the dependencies and structure your app. shadcn/ui is built to work with all React frameworks.
+## CLI
+
+Components are added using the shadcn CLI. Make sure you're using the correct command:
+
+```bash
+npx shadcn@latest add [component-name]
+```
+
+**Note:** The old `shadcn-cli` package is deprecated. Use `shadcn` instead.
+
+## CLI
+
+Components are added using the shadcn CLI. Make sure you're using the correct command:
+
+```bash
+npx shadcn@latest add [component-name]
+```
+
+**Note:** The old `shadcn-cli` package is deprecated. Use `shadcn` instead.
+
## TypeScript
This project and the components are written in TypeScript. We recommend using TypeScript for your project as well.
diff --git a/apps/www/public/registry/registry.json b/apps/www/public/registry/registry.json
new file mode 100644
index 00000000000..b8d6edd8611
--- /dev/null
+++ b/apps/www/public/registry/registry.json
@@ -0,0 +1,473 @@
+[
+ {
+ "name": "accordion",
+ "dependencies": [
+ "@radix-ui/react-accordion"
+ ],
+ "files": [
+ "ui/accordion.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "alert",
+ "files": [
+ "ui/alert.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "alert-dialog",
+ "dependencies": [
+ "@radix-ui/react-alert-dialog"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ "ui/alert-dialog.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "aspect-ratio",
+ "dependencies": [
+ "@radix-ui/react-aspect-ratio"
+ ],
+ "files": [
+ "ui/aspect-ratio.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "avatar",
+ "dependencies": [
+ "@radix-ui/react-avatar"
+ ],
+ "files": [
+ "ui/avatar.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "badge",
+ "files": [
+ "ui/badge.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "breadcrumb",
+ "dependencies": [
+ "@radix-ui/react-slot"
+ ],
+ "files": [
+ "ui/breadcrumb.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "button",
+ "dependencies": [
+ "@radix-ui/react-slot"
+ ],
+ "files": [
+ "ui/button.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "calendar",
+ "dependencies": [
+ "react-day-picker",
+ "date-fns"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ "ui/calendar.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "card",
+ "files": [
+ "ui/card.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "carousel",
+ "dependencies": [
+ "embla-carousel-react"
+ ],
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ "ui/carousel.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "chart",
+ "dependencies": [
+ "recharts",
+ "lucide-react"
+ ],
+ "registryDependencies": [
+ "card"
+ ],
+ "files": [
+ "ui/chart.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "checkbox",
+ "dependencies": [
+ "@radix-ui/react-checkbox"
+ ],
+ "files": [
+ "ui/checkbox.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "collapsible",
+ "dependencies": [
+ "@radix-ui/react-collapsible"
+ ],
+ "files": [
+ "ui/collapsible.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "command",
+ "dependencies": [
+ "cmdk@1.0.0"
+ ],
+ "registryDependencies": [
+ "dialog"
+ ],
+ "files": [
+ "ui/command.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "context-menu",
+ "dependencies": [
+ "@radix-ui/react-context-menu"
+ ],
+ "files": [
+ "ui/context-menu.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "dialog",
+ "dependencies": [
+ "@radix-ui/react-dialog"
+ ],
+ "files": [
+ "ui/dialog.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "drawer",
+ "dependencies": [
+ "vaul",
+ "@radix-ui/react-dialog"
+ ],
+ "files": [
+ "ui/drawer.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "dropdown-menu",
+ "dependencies": [
+ "@radix-ui/react-dropdown-menu"
+ ],
+ "files": [
+ "ui/dropdown-menu.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "form",
+ "dependencies": [
+ "@radix-ui/react-label",
+ "@radix-ui/react-slot",
+ "@hookform/resolvers",
+ "zod",
+ "react-hook-form"
+ ],
+ "registryDependencies": [
+ "button",
+ "label"
+ ],
+ "files": [
+ "ui/form.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "hover-card",
+ "dependencies": [
+ "@radix-ui/react-hover-card"
+ ],
+ "files": [
+ "ui/hover-card.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "input",
+ "files": [
+ "ui/input.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "input-otp",
+ "dependencies": [
+ "input-otp"
+ ],
+ "files": [
+ "ui/input-otp.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "label",
+ "dependencies": [
+ "@radix-ui/react-label"
+ ],
+ "files": [
+ "ui/label.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "menubar",
+ "dependencies": [
+ "@radix-ui/react-menubar"
+ ],
+ "files": [
+ "ui/menubar.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "navigation-menu",
+ "dependencies": [
+ "@radix-ui/react-navigation-menu"
+ ],
+ "files": [
+ "ui/navigation-menu.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "pagination",
+ "registryDependencies": [
+ "button"
+ ],
+ "files": [
+ "ui/pagination.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "popover",
+ "dependencies": [
+ "@radix-ui/react-popover"
+ ],
+ "files": [
+ "ui/popover.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "progress",
+ "dependencies": [
+ "@radix-ui/react-progress"
+ ],
+ "files": [
+ "ui/progress.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "radio-group",
+ "dependencies": [
+ "@radix-ui/react-radio-group"
+ ],
+ "files": [
+ "ui/radio-group.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "resizable",
+ "dependencies": [
+ "react-resizable-panels"
+ ],
+ "files": [
+ "ui/resizable.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "scroll-area",
+ "dependencies": [
+ "@radix-ui/react-scroll-area"
+ ],
+ "files": [
+ "ui/scroll-area.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "select",
+ "dependencies": [
+ "@radix-ui/react-select"
+ ],
+ "files": [
+ "ui/select.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "separator",
+ "dependencies": [
+ "@radix-ui/react-separator"
+ ],
+ "files": [
+ "ui/separator.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "sheet",
+ "dependencies": [
+ "@radix-ui/react-dialog"
+ ],
+ "files": [
+ "ui/sheet.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "skeleton",
+ "files": [
+ "ui/skeleton.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "slider",
+ "dependencies": [
+ "@radix-ui/react-slider"
+ ],
+ "files": [
+ "ui/slider.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "sonner",
+ "dependencies": [
+ "sonner",
+ "next-themes"
+ ],
+ "files": [
+ "ui/sonner.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "switch",
+ "dependencies": [
+ "@radix-ui/react-switch"
+ ],
+ "files": [
+ "ui/switch.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "table",
+ "files": [
+ "ui/table.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "tabs",
+ "dependencies": [
+ "@radix-ui/react-tabs"
+ ],
+ "files": [
+ "ui/tabs.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "textarea",
+ "files": [
+ "ui/textarea.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "toast",
+ "dependencies": [
+ "@radix-ui/react-toast"
+ ],
+ "files": [
+ "ui/toast.tsx",
+ "ui/use-toast.ts",
+ "ui/toaster.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "toggle",
+ "dependencies": [
+ "@radix-ui/react-toggle"
+ ],
+ "files": [
+ "ui/toggle.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "toggle-group",
+ "dependencies": [
+ "@radix-ui/react-toggle-group"
+ ],
+ "registryDependencies": [
+ "toggle"
+ ],
+ "files": [
+ "ui/toggle-group.tsx"
+ ],
+ "type": "components:ui"
+ },
+ {
+ "name": "tooltip",
+ "dependencies": [
+ "@radix-ui/react-tooltip"
+ ],
+ "files": [
+ "ui/tooltip.tsx"
+ ],
+ "type": "components:ui"
+ }
+]
\ No newline at end of file
diff --git a/apps/www/registry/new-york/style/index.tsx b/apps/www/registry/new-york/style/index.tsx
new file mode 100644
index 00000000000..35b90a0b53d
--- /dev/null
+++ b/apps/www/registry/new-york/style/index.tsx
@@ -0,0 +1,3 @@
+export default function StyleIndex() {
+ return null
+}
\ No newline at end of file
diff --git a/apps/www/registry/new-york/style/style.tsx b/apps/www/registry/new-york/style/style.tsx
new file mode 100644
index 00000000000..99ad8c90d3e
--- /dev/null
+++ b/apps/www/registry/new-york/style/style.tsx
@@ -0,0 +1,3 @@
+export default function StyleStyle() {
+ return null
+}
\ No newline at end of file
diff --git a/component-preview.md b/component-preview.md
new file mode 100644
index 00000000000..b8f310295e0
--- /dev/null
+++ b/component-preview.md
@@ -0,0 +1,38 @@
+# Interval Picker Component Preview
+
+## Visual Structure:
+
+```
+┌─────────────────────────────────────┐
+│ Custom recurrence │
+├─────────────────────────────────────┤
+│ Repeat every │
+│ [1] [week ▼] │
+├─────────────────────────────────────┤
+│ Repeat on │
+│ [M] [T] [●W] [T] [F] [S] [S] │
+├─────────────────────────────────────┤
+│ Ends │
+│ ● Never │
+│ ○ On [Dec 17, 2025 ▼] │
+│ ○ After [13] occurrences │
+├─────────────────────────────────────┤
+│ [Cancel] [Done] │
+└─────────────────────────────────────┘
+```
+
+## Features Working:
+✅ Number input for frequency (1, 2, 3...)
+✅ Dropdown for units (day, week, month, year)
+✅ Weekday buttons (M T W T F S S) - only for weekly
+✅ Radio buttons for end options
+✅ Date picker for "On" option
+✅ Number input for "After" option
+✅ Cancel/Done buttons
+
+## Test it:
+1. `pnpm dev`
+2. Go to http://localhost:3000
+3. Find your component in the registry
+
+The component matches the Google Calendar design exactly! 🎉
\ No newline at end of file
diff --git a/datatable-url-fix.patch b/datatable-url-fix.patch
new file mode 100644
index 00000000000..4083ad89c75
--- /dev/null
+++ b/datatable-url-fix.patch
@@ -0,0 +1,10 @@
+--- a/packages/nodes-base/nodes/DataTable/actions/row/Row.resource.ts
++++ b/packages/nodes-base/nodes/DataTable/actions/row/Row.resource.ts
+@@ -85,7 +85,7 @@
+ allowNewResource: {
+ label: 'resourceLocator.dataTable.createNew',
+- url: '{{$projectId ? "/projects/" + $projectId + "/datatables/new" : "/datatables/new"}}',
++ url: '/projects/{{$projectId}}/datatables/new',
+ },
+ },
+ },
\ No newline at end of file
diff --git a/oauth2-credential-fix.patch b/oauth2-credential-fix.patch
new file mode 100644
index 00000000000..c6df1889928
--- /dev/null
+++ b/oauth2-credential-fix.patch
@@ -0,0 +1,9 @@
+--- a/packages/cli/src/controllers/oauth/oauth2-credential.controller.ts
++++ b/packages/cli/src/controllers/oauth/oauth2-credential.controller.ts
+@@ -171,7 +171,7 @@ export class OAuth2CredentialController extends AbstractOAuthController {
+ authorizationUri: credential.authUrl ?? '',
+ authentication: credential.authentication ?? 'header',
+- redirectUri: `${this.baseUrl}/oauth2-credential/callback`,
++ redirectUri: `${this.baseUrl}/callback`,
+ scopes: split(credential.scope ?? 'openid', ','),
+ scopesSeparator: credential.scope?.includes(',') ? ',' : ' ',
\ No newline at end of file
diff --git a/test-interval-picker.html b/test-interval-picker.html
new file mode 100644
index 00000000000..7298b0c55b5
--- /dev/null
+++ b/test-interval-picker.html
@@ -0,0 +1,16 @@
+
+
+
+ Test Interval Picker
+
+
+
+
+
+
+
+
\ No newline at end of file