A CLI tool for publishing Markdown files and folders directly to FlowerShow with OAuth authentication.
npm install -g flowershow@latestThen use the flowershow command anywhere:
flowershow auth login
flowershow publish ./my-notesBefore using any commands, you must authenticate:
flowershow auth loginThis will:
- Display a URL and verification code
- Open your browser to authorize the CLI
- Store your authentication token locally
See Authentication Documentation for details.
# Publish a folder
flowershow publish ./my-notes
# Publish a single file
flowershow publish ./my-note.mdAuthenticate with FlowerShow via browser OAuth flow.
flowershow auth loginCheck your current authentication status.
flowershow auth statusRemove your stored authentication token.
flowershow auth logoutSee Authentication Documentation for detailed information.
Publish files or folders to FlowerShow.
Options:
--overwrite- Overwrite existing site if it already exists--name <siteName>- Custom name for the site (defaults to file/folder name)
Examples:
# Publish a single markdown file
flowershow publish ./my-note.md
# Publish multiple files
flowershow publish ./intro.md ./chapter1.md ./chapter2.md
# Publish a folder
flowershow publish ./my-notes
# Overwrite an existing site
flowershow publish ./my-notes --overwrite
# Publish with a custom site name
flowershow publish ./my-notes --name my-custom-site
# Combine options
flowershow publish ./my-notes --name my-custom-site --overwriteWhat happens:
- Files are discovered and filtered (ignores
.git,node_modules, etc.) - Project name is derived from the first file/folder name
- Site is created via the FlowerShow API
- Presigned URLs are obtained for secure file uploads
- Files are uploaded directly to Cloudflare R2 storage
- CLI waits for markdown files to be processed
- Site URL is displayed
Single file behavior:
- Filename becomes the project name
- File is saved as
README.md(orREADME.mdx) - Accessible at
/@{username}/{filename}
Multiple files behavior:
- First filename becomes the project name
- First file is saved as
README.md(orREADME.mdx) - Subsequent files keep their original names
- Accessible at
/@{username}/{first-filename}
Folder behavior:
- Folder name becomes the project name
- All files maintain their relative paths
- Accessible at
/@{username}/{foldername}
List all sites published by your authenticated user.
flowershow listShows site names, URLs, and timestamps.
Delete a site and all its files.
flowershow delete my-notesRemoves the site and all its files via the FlowerShow API.
The CLI automatically ignores common non-content files and directories:
.git/,node_modules/,.cache/,dist/,build/.DS_Store,Thumbs.db.env*,*.log.next/,.vercel/,.turbo/
If .gitignore file is present in the published folder, it will also ignore files matched by it.
All CLI-published sites are accessible at:
https://my.flowershow.app/@{username}/{project-name}
Where {username} is your authenticated username.
Run flowershow auth login to authenticate.
Your token may have been revoked. Re-authenticate:
flowershow auth loginA site with that name already exists. You can:
- Use the
--overwriteflag:flowershow publish <path> --overwrite - Delete it first:
flowershow delete <name> - Rename your file/folder
- Use
flowershow listto see all existing sites
The site is live, but some pages may not be ready yet. The Cloudflare worker processes files asynchronously. Check your site again in a moment.
All CLI commands communicate with the FlowerShow API:
- Authentication: OAuth device flow endpoints
- Site Management: Create, list, and delete sites
- File Upload: Presigned URL generation and status polling
- User Info: Retrieve authenticated user details
- Token Storage: Authentication tokens are stored in
~/.flowershow/token.json - Token Format: CLI tokens use the
fs_cli_prefix - Token Expiration: Tokens do not expire by default
- Token Revocation: Revoke tokens from the FlowerShow dashboard or via
flowershow auth logout - Secure Uploads: Files are uploaded using time-limited presigned URLs
- No Credentials: CLI never stores database or storage credentials
- Clone and install dependencies:
cd cli
pnpm install- Configure environment:
Use local or other non-production API and publish URLs.
cp .env.example .envAPI_URL="http://cloud.localhost:3000"
APP_URL="http://my.localhost:3000"- Run commands:
pnpm dev auth login
pnpm dev publish ...You can also build the project, link it globally and use it as you normally would the npm-installed version:
pnpm build
npm link
flowershow ...