FlareMo is one of the more interesting Cloudflare-native projects in this series because it sits between several categories at once.

It is a Memos-compatible note app. It is a team knowledge base. It is a PWA with offline behavior. It has MCP and agent memory. It also has an article publishing surface, plugins, semantic search, and a Cloudflare-only deployment model.

That makes it a useful follow-up to Monolith, EmDash, and the Cloudflare Workers, D1, KV, and R2 serverless stack post.

What is FlareMo?

FlareMo is an AGPL-3.0 Cloudflare-native knowledge-base app inspired by Flomo and Memos.

Its README describes the pitch as:

Zero Servers · Zero Upkeep · 24/7 Global Edge Uptime · Absolute Data Ownership

The practical feature list is broad:

  • memo capture with tags, Markdown/GFM, attachments, image/audio previews, and revisions;
  • D1 FTS5 keyword search;
  • semantic search with Workers AI embeddings and Vectorize;
  • PWA install and offline replay for submissions/uploads;
  • projects, tasks, Kanban boards, due dates, and reminders;
  • team mode with owner/admin/member/reader roles;
  • three visibility levels: private, team, public;
  • Memos /api/v1 compatibility subset;
  • Better Auth sessions and revocable memos_pat_ tokens;
  • MCP endpoints;
  • Agent Memory CLI and Skill;
  • plugin card system for share images;
  • article publishing with worker-rendered public pages, feed, and sitemap.

This is not a small weekend clone of Memos. It is a serious Cloudflare app.

The Important Self-Hosting Detail

FlareMo is self-hostable, but not in the Docker Compose sense.

Self-hosting here means:

deploy the Worker, static assets, D1 database, R2 bucket, queues, Vectorize indexes, and secrets into your Cloudflare account

There is no docker-compose.yml because the runtime is built around Cloudflare bindings.

The decision point is direct:

If you want… Pick…
A local Docker notes app Memos, Outline, SilverBullet, Logseq-style tools
A Git-backed static Markdown site Astro, Hugo, Jekyll, Quartz, Starlight
A Cloudflare-native Memos-style knowledge base FlareMo

Architecture Overview

FlareMo uses Workers Static Assets for the React frontend and a Worker for the dynamic routes and API.

Layer FlareMo Uses
Frontend React 19, Vite 8, TanStack Router, TanStack Query
UI Tailwind CSS 4, Radix/Base UI, Lucide
API Hono on Cloudflare Workers
Static hosting Workers Static Assets
Database Cloudflare D1
ORM Drizzle ORM
Auth Better Auth, Drizzle adapter, API Key plugin
File storage Cloudflare R2
Async work Cloudflare Queues and Cron
Semantic search Workers AI embeddings plus Vectorize
PWA Custom service worker and manifest
API compatibility Memos-compatible adapter, OpenAPI, Connect/gRPC-Web subset
Agent tooling CLI, Skill, MCP endpoints

The wrangler.jsonc.example file is useful because it shows the app’s real shape. It defines:

  • ASSETS for Workers Static Assets;
  • DB for D1;
  • ATTACHMENTS for R2;
  • MEMBER_REMOVAL_QUEUE;
  • DATA_EXPORT_QUEUE;
  • VECTORIZE_MEMOS;
  • VECTORIZE_MEMORIES;
  • AI;
  • RATE_LIMITER;
  • daily cron.

It also configures assets.run_worker_first for dynamic paths such as /api/*, /article/*, /file/*, /mcp, /memory/*, /share/*, /feed.xml, /sitemap.xml, and /openapi.json.

That prevents the SPA fallback from swallowing routes that the Worker must render or authorize.

Deployment Notes

FlareMo supports several deployment paths:

  • Deploy to Cloudflare button;
  • manual Wrangler deployment;
  • manually triggered GitHub Actions deployment from your fork;
  • agent-guided deployment using the included docs.

Manual deployment looks like:

pnpm install
cp wrangler.jsonc.example wrangler.jsonc
pnpm provision:remote
pnpm exec wrangler secret put BETTER_AUTH_SECRET --config ./wrangler.jsonc
pnpm exec wrangler secret put FLAREMO_BOOTSTRAP_SECRET --config ./wrangler.jsonc
pnpm deploy:dry-run
pnpm deploy

The important production secrets are:

Secret Purpose
BETTER_AUTH_SECRET Better Auth session/signing secret
FLAREMO_BOOTSTRAP_SECRET One-time /setup passphrase for owner bootstrap
FLAREMO_RECOVERY_SECRET Optional break-glass owner recovery
ASR provider secrets Optional voice capture providers
FLAREMO_VOICE_CONFIG_KEY Optional encryption key for voice provider config

The important public vars are:

Variable Purpose
FLAREMO_PUBLIC_URL Canonical origin for Better Auth and cookies
FLAREMO_TRUSTED_ORIGINS Additional allowed browser origins
FLAREMO_SINGLE_USER_EMAIL Owner email for single-user runtime model
FLAREMO_SINGLE_USER_NAME Owner display name
FLAREMO_EMBEDDING_PROVIDER workers-ai, http, or none
FLAREMO_EMBEDDING_MODEL Default Workers AI embedding model

For GitHub Actions deployment, the documented required secrets are:

  • CLOUDFLARE_API_TOKEN;
  • CLOUDFLARE_ACCOUNT_ID;
  • BETTER_AUTH_SECRET;
  • FLAREMO_BOOTSTRAP_SECRET.

The Cloudflare token needs edit permissions for Workers, D1, R2, Queues, Vectorize, and Worker scripts.

Home-Lab Note

I added a Home-Lab folder for FlareMo, but it is documentation-only:

There is no compose file because a compose file would be misleading. The application is not designed as a portable Node container with SQLite on disk. The persistent state lives in Cloudflare D1, R2, Queues, and Vectorize.

Local Trial Notes

I did not deploy FlareMo to Cloudflare from this machine.

I did run the bounded checks that do not create remote resources:

npx -y -p node@22 -p [email protected] bash -lc 'node -v && pnpm -v && pnpm install --frozen-lockfile --ignore-scripts'
npx -y -p node@22 -p [email protected] bash -lc 'pnpm --filter @flaremo/web build'
npx -y -p node@22 -p [email protected] bash -lc 'pnpm --filter @flaremo/worker check'

Results:

Check Result
Install Passed
Web production build Passed
Worker TypeScript check Passed
Full local UI Not attempted
Cloudflare deployment Not attempted

The full local UI path needs a configured wrangler.jsonc, .dev.vars, local D1 migrations, and Worker bindings. The upstream docs point to:

pnpm migrate:local
pnpm dev

with the local app at:

http://localhost:8787

Build warnings worth noting:

  • Vite warned about __dirname in the Vite config and a future native config loader.
  • Some chunks exceed 500 kB after minification.
  • One dynamic import is ineffective because the same module is also statically imported elsewhere.

None of those blocked the checked build.

PWA and Offline Behavior

FlareMo’s PWA design is worth studying.

The service worker deliberately avoids caching private API traffic, attachments, share responses, and Cloudflare Access pages. It caches only:

  • public app shell;
  • offline page;
  • Vite content-addressed static assets.

It also checks HTML body markers before caching app-shell/offline documents. That matters because an Access login page or error page should never become the offline fallback.

For the Git-backed static Astro idea, this is one of the best patterns to borrow:

cache the editor shell
never cache auth walls as content
queue writes explicitly
show local/synced/published state separately

FlareMo vs Monolith vs EmDash

Project Main Identity Rendering / Runtime Content Source
FlareMo Memos-style knowledge base and PWA React/Vite SPA plus Worker routes D1 notes/articles, R2 files
Monolith Cloudflare blog CMS React/Vite app plus Hono Worker API Database-backed Markdown
EmDash Astro-native CMS Astro SSR/server output SQL-backed Portable Text
Git Astro idea Static publishing workflow Astro static build Markdown/MDX files in Git plus R2 media

FlareMo is not trying to be an Astro CMS.

It is useful here because it shows how much product behavior can live inside a Cloudflare Worker app: offline shell, memos API, public share pages, article pages, feed/sitemap, MCP, auth, R2 media, semantic search, and background cleanup.

FAQ

Prompt Used for the Cover

Text-free editorial cover for FlareMo, a Cloudflare-native Memos-style knowledge base. Show a quiet notes timeline, offline PWA shell, D1 database, R2 media bucket, vector search nodes, AI memory cards, and Cloudflare edge routes. High-end technical illustration, graphite background, white, cyan, orange, lime, and violet accents, no logos, no readable UI text, no watermarks.