Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
ca3205c
feat: media plugin client
olliethedev Mar 19, 2026
4050610
fix: remove hidden class from media picker button to ensure visibility
olliethedev Mar 20, 2026
fec7455
fix: remove unnecessary Content-Type header from media file upload re…
olliethedev Mar 20, 2026
7843411
feat: integrate folder deletion functionality into media library page
olliethedev Mar 20, 2026
d6e63b9
feat: enhance file validation in media backend plugin to ensure prope…
olliethedev Mar 20, 2026
0ead2a2
fix: update URL validation in media asset schema to use httpUrl for i…
olliethedev Mar 20, 2026
fb09292
build: move media adapters from main entry
olliethedev Mar 20, 2026
d0f1c8c
refactor: reorganize image input handling in CMSFileUpload component …
olliethedev Mar 20, 2026
9528896
refactor: export FolderTreeItem component and clean up library page i…
olliethedev Mar 20, 2026
7d38e26
refactor: update uploadMediaFile function to accept apiBasePath param…
olliethedev Mar 20, 2026
bc4567d
refactor: enhance ImageInputField component with data-testid attribut…
olliethedev Mar 20, 2026
e164728
refactor: conditionally render image in CMSExampleContent component t…
olliethedev Mar 20, 2026
17a9e57
refactor: update external registry URLs to point to the new image upl…
olliethedev Mar 20, 2026
b1e42c4
refactor: update URL handling in media adapters and markdown editor t…
olliethedev Mar 20, 2026
e7a3384
refactor: implement MediaPicker integration in CMS image upload tests…
olliethedev Mar 20, 2026
e953d62
feat: add btst-media plugin with components and types for enhanced me…
olliethedev Mar 20, 2026
2e2994e
chore: update .gitignore to include .tanstack and local media uploads…
olliethedev Mar 20, 2026
976368d
refactor: enhance error handling in LibraryPage component by using Fa…
olliethedev Mar 20, 2026
0995b8c
feat: update uploadImage handling across examples for consistency
olliethedev Mar 20, 2026
5690902
feat: enhance AssetCard and MediaPicker components with new features …
olliethedev Mar 20, 2026
5f7de12
refactor: optimize media client configuration and upload functions us…
olliethedev Mar 20, 2026
e085781
fix: update ImagePicker component to safely handle asset URL selectio…
olliethedev Mar 20, 2026
cc97535
refactor: improve media picker tab interactions and adjust dimensions…
olliethedev Mar 20, 2026
ec6482a
chore: bump version to 2.9.1 in package.json for @btst/stack
olliethedev Mar 20, 2026
c29b6a0
feat: add Media plugin documentation and demo assets for enhanced med…
olliethedev Mar 20, 2026
cc74a9c
chore: update shadcn registry [skip ci]
github-actions[bot] Mar 20, 2026
1b1bfbb
docs: update README to include Media plugin details and installation …
olliethedev Mar 20, 2026
1d36169
feat: add Comments and Media plugin support to shadcn registry docume…
olliethedev Mar 20, 2026
453a25e
docs: clarify routing for plugin pages in shadcn registry documentati…
olliethedev Mar 20, 2026
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
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -748,6 +748,7 @@ Plugin UI pages are distributed as a shadcn v4 registry so consumers can eject a
### Key design rules

- **Hooks are excluded** from the registry. Components import hooks from `@btst/stack/plugins/{name}/client/hooks`. Only the view layer is ejectable.
- **Routable plugin pages should be wired back in via `pageComponents`** on the client plugin config when the plugin supports page overrides. If a plugin intentionally does not support `pageComponents`, document the direct-import rendering pattern clearly in the plugin docs and shared shadcn registry guide.
- **`@workspace/ui` imports are rewritten**: standard shadcn components → `registryDependencies`; custom components (`page-wrapper`, `empty`, etc.) → embedded as `registry:component` files from `packages/ui/src/`; multi-file components (`auto-form`, `minimal-tiptap`, `ui-builder`) → external registry URL in `registryDependencies`.
- **Directory structure is preserved**: source files land at `src/components/btst/{name}/client/{relative}` so all relative imports remain valid with no rewriting.
- **`EXTERNAL_REGISTRY_COMPONENTS`** in `build-registry.ts` maps directory-based workspace/ui components to their external registry URLs.
Expand Down
2 changes: 2 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -792,6 +792,8 @@ npx shadcn@latest add "https://raw.githubusercontent.com/better-stack-ai/better-

Files are installed into `src/components/btst/{plugin}/client/` with all relative imports preserved. Data-fetching hooks remain in `@btst/stack`.

When a plugin exposes `pageComponents` on its client config, wire the ejected routable pages back in through that option. If a plugin intentionally does not support `pageComponents`, document the direct-import rendering pattern clearly in the plugin docs and the shared shadcn registry guide.

### Rebuild the registry locally

```bash
Expand Down
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ Enable the features you need and keep building your product.
| **Form Builder** | Dynamic form builder with drag-and-drop editor, submissions, and validation |
| **UI Builder** | Visual drag-and-drop page builder with component registry and public rendering |
| **Kanban** | Project management with boards, columns, tasks, drag-and-drop, and priority levels |
| **Media** | Media library with uploads, folders, picker UI, URL registration, and reusable image inputs |
| **OpenAPI** | Auto-generated API documentation with interactive Scalar UI |
| **Route Docs** | Auto-generated client route documentation with interactive navigation |
| **Better Auth UI** | Beautiful shadcn/ui authentication components for better-auth |
Expand Down Expand Up @@ -121,8 +122,8 @@ Supports Prisma, Drizzle, MongoDB and Kysely SQL dialects.
Each plugin's UI layer is available as a [shadcn registry](https://ui.shadcn.com/docs/registry) block. Use it to **eject and fully customize** the page components while keeping all data-fetching and API logic from `@btst/stack`:

```bash
# Install a single plugin's UI
npx shadcn@latest add https://github.com/better-stack-ai/better-stack/blob/main/packages/stack/registry/btst-blog.json
# Install a single plugin's UI (for example, Media)
npx shadcn@latest add https://github.com/better-stack-ai/better-stack/blob/main/packages/stack/registry/btst-media.json

# Or install the full collection
npx shadcn@latest add https://github.com/better-stack-ai/better-stack/blob/main/packages/stack/registry/registry.json
Expand Down
Binary file added docs/assets/media-demo-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions docs/content/docs/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"plugins/ui-builder",
"plugins/kanban",
"plugins/comments",
"plugins/media",
"plugins/open-api",
"plugins/route-docs",
"plugins/better-auth-ui",
Expand Down
14 changes: 13 additions & 1 deletion docs/content/docs/plugins/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ description: Available plugins and features for BTST
---

import { Card, Cards } from "fumadocs-ui/components/card";
import { BookOpen, Database, Hammer, Bot, Shield, FileText, FileCode, Route, Layout, Columns3 } from "lucide-react";
import { BookOpen, Database, Hammer, Bot, Shield, FileText, FileCode, Route, Layout, Columns3, MessageSquare, ImageIcon } from "lucide-react";


BTST provides a collection of full-stack plugins that you can easily integrate into your React application. Each plugin includes routes, APIs, database schemas, components, and hooks—everything you need to add complete features to your app.
Expand Down Expand Up @@ -48,6 +48,18 @@ With more plugins coming soon, you can add complete features to your app in minu
icon={<Columns3 size={20} />}
description="Project management with boards, columns, tasks, drag-and-drop, and priority levels."
/>
<Card
title="Comments Plugin"
href="/plugins/comments"
icon={<MessageSquare size={20} />}
description="Threaded comments with moderation, likes, replies, and embeddable comment threads."
/>
<Card
title="Media Plugin"
href="/plugins/media"
icon={<ImageIcon size={20} />}
description="Media library with uploads, folders, picker UI, URL registration, and reusable image inputs."
/>
<Card
title="OpenAPI Plugin"
href="/plugins/open-api"
Expand Down
Loading
Loading