Pages
Serves the app and the API
D1
Holds your notes, in SQLite
R2
Holds your files, up to 25 MB
MIT
Open source, no monthly fee

Markflare: A Notion you own, in your own Cloudflare account.

A block editor with a / menu, nested pages, to-dos, code, math, tables and public share links. No server to maintain, no Docker, no subscription.

git clone https://github.com/Chaska-dev/Markflare.git
The Markflare editor: the page tree on the left and the Architecture page with a table of services and an SQL code block.
A real capture of the editor. Not a mockup.

What's inside

Everything the ZIP carries, with no plugins and no paid tier. If it is not on this list, the app does not promise it.

  • Block editor

    Type / and pick: headings, lists, to-dos, code, math, tables, quotes, callouts, images, files and subpages.

    /
  • Nested pages

    A page holds subpages. Deleting one moves its children to the Trash, where they can be restored.

    tree
  • Drag and drop

    Move and nest blocks. Drop an image or a document onto the page and it uploads.

    ≤ 25 MB
  • Public links

    One click publishes a page and its subpages read-only. Another click revokes it.

    128-bit
  • Markdown

    Import a .md file as a page and export any page back to Markdown.

    .md
  • MCP server

    Connect Claude Desktop, Cursor or Zed to your workspace to read, search and import notes.

    pnpm run mcp
  • Bilingual

    English and Spanish interface, light and dark themes, switched on the fly.

    EN · ES
The Deploy subpage inside Architecture, with a list of steps and a shell code block.
Nested subpages and code
Markflare on a phone screen.
On a phone
A Markflare page with a table of the six database tables.
Editable tables
Meeting notes with two lists: what closed and what is open.
Lists and headings

Instructions

Method 1 of 3: the Cloudflare dashboard. About 15 minutes.

You need a Cloudflare account, node and pnpm.

  1. 1. Get the code

    Clone it and build it. You get a dist/ folder.

    git clone https://github.com/Chaska-dev/Markflare.gitcd Markflarepnpm installpnpm run build
  2. 2. Create D1 and R2

    In the dashboard: a D1 database named markflare-db and an R2 bucket named markflare-files. Keep the bucket private.

  3. 3. Create the tables

    Open markflare-db, Console tab, and paste the SQL blocks in order. Every one uses IF NOT EXISTS.

    SQL blocks in the README
  4. 4. Wire it and lock it

    Create the Pages project and upload dist/. Bind DB and BUCKET, and add three encrypted secrets.

    DB      → markflare-db
    BUCKET  → markflare-files
    AUTH_USERNAME · AUTH_PASSWORD · AUTH_SECRET

    Generate AUTH_SECRET with openssl rand -hex 32

  5. 5. Light it

    Your workspace is live at markflare.pages.dev. If login answers 503, redeploy: secrets land on the next deploy.

The other two methods

Local

No Cloudflare: SQLite and a folder on disk.

pnpm run db:migrate:all && pnpm run dev

Terminal

Everything through wrangler and a local wrangler.toml.

pnpm run db:migrate:prod && pnpm run deploy
Full guide in the README

Specifications

Frontend
React 18, Vite 5, TypeScript
API
Pages Functions with Hono. Locally, Express 5 with the same routes
Notes
Cloudflare D1. Locally, a SQLite file
Files
Cloudflare R2, private bucket, 25 MB max. Locally, uploads/
Access
Single user. 24 h HMAC-SHA256 tokens
Login
5 attempts per minute per IP, max
Sharing
128-bit tokens, scoped to the shared subtree
MCP
@modelcontextprotocol/sdk, with per-client tokens
Packages
pnpm
License
MIT

Light your own.

Clone it, create D1 and R2, set three secrets. Your notes live in your account from the first minute.

git clone https://github.com/Chaska-dev/Markflare.git