---
title: "Welcome to [mdfy.app](http://mdfy.app)"
url: https://memory.wiki/2WqRPNiV
updated: 2026-05-15T03:33:05.393Z
hub: https://memory.wiki/hub/demo
concept_count: 12
source: "memory.wiki"
---
# Welcome to [mdfy.app](http://mdfy.app)

> Status: shipped 2026-04.

## What a bundle URL returns

GET `mdfy.app/b/{id}` returns plain markdown. The body is composed of (in order):

1. **Bundle metadata block** — title, description, creator, last-updated timestamp, member count.
2. **graph_data JSON block** — the synthesised analysis: nodes, edges, themes, insights, document summaries, reading order. Wrapped in a fenced code block tagged `mdfy:graph` so AI tools can ignore it if they want plain prose.
3. **Member doc stubs** — each member doc as a heading + a short summary + the URL. No full content (full content requires `?full=1`).

The whole response is &lt; 50KB for a typical 5-7 member bundle.

## Query parameters

- `?compact` — strip low-density sections from every member stub. Default off.
- `?full=1` — inline every member doc's full body inside the response, in member order. Default off. Use when you want one giant context blob.
- `?graph=0` — omit the graph_data block. Use when the receiving AI just wants prose.
- `?recall=$Q` — filter member stubs to only the ones matching query $Q. Cheap on the server (we already have the recall index per bundle).

These compose: `?compact&recall=cross-AI&graph=0` returns only the prose stubs of members matching "cross-AI", compacted, with no graph block. \~5KB total.

## What we explicitly don't return

- Auth-protected member docs that the requester isn't authorised for. They're silently omitted from the stub list. The bundle's member count adjusts.
- Embedded media. The renderer-ready HTML for images is in the doc URL, not the bundle digest.

## Cache headers

Public bundles: `Cache-Control: public, max-age=300, stale-while-revalidate=3600`. Five minutes fresh, an hour stale-served.

Restricted / private bundles: `Cache-Control: private, no-store`. Don't cache at edge or in the browser. Auth-sensitive content shouldn't be near any cache.

## What's frozen and what's not

**Frozen:** the response is always markdown. JSON is wrapped in fenced blocks; never as `Content-Type: application/json`. This is the core of "every URL is for both humans and AIs from the same address."

**Not frozen:** the exact set of `?` params can grow. The graph_data schema can evolve (additive only — never remove a field without a major version bump). The cache headers can be tuned.

## The bet underneath this format

That `markdown-as-API-response` is the right design for the next decade. Every AI tool today fetches URLs and reads markdown as a first-class input. If that stops being true, this format stops being right. We're betting it doesn't stop being true.

---

## Concepts in this document
- **mdfy.app** _(entity)_
  The platform hosting this hub with a hierarchical document structure and permission system.
- **bundle URL** _(entity)_
  The delivery mechanism for markdown digests that now carries embedded graph analysis instead of doc list only
- **graph_data** _(entity)_
  JSON blob containing LLM-generated analysis (themes, insights, connections, summaries) attached to bundles for zero-latency AI retrieval.
- **Query parameters** _(concept)_
  Composable flags (compact, full, graph, recall) that let clients customize response content, density, and format on a per-request basis.
- **Graph data synthesis** _(concept)_
  Automated analysis layer that extracts nodes, edges, themes, insights, and reading order from member documents and embeds it as JSON in the response.
- **Markdown-as-API-response** _(concept)_
  Core design philosophy: responses are always plain markdown with embedded JSON blocks, readable by both humans and AI tools from the same URL.
- **Authorization filtering** _(concept)_
  Auth-protected member docs are silently omitted from responses when the requester lacks permission; bundle member count adjusts accordingly.
- **Bundle metadata** _(concept)_
  Header information in bundle responses including title, description, creator, timestamp, and member count.
- **Bundle URL endpoint** _(concept)_
  The primary API mechanism (GET /b/{id}) that returns structured markdown with metadata, graph data, and member doc stubs.
- **API response format** _(tag)_
  Design decisions governing what mdfy.app returns: frozen markdown structure with JSON wrapped in fences; evolvable parameter and schema layers.
- **Markdown-as-API** _(concept)_
  The foundational design bet: markdown returned from API endpoints serves both human readers and AI tools from a single URL.
- **Cache control strategy** _(concept)_
  Differentiated caching: public bundles allow edge caching (300s fresh); restricted bundles prohibit caching for security.

## Concept relations (within this doc's concepts)
- **bundle URL** embeds **graph_data**
- **mdfy.app** implements via **Bundle URL endpoint**
- **Bundle URL endpoint** includes section **Graph data synthesis**
- **Query parameters** modifies response **Bundle URL endpoint**
- **Markdown-as-API** is design bet of **mdfy.app**
- **Cache control strategy** governs delivery of **Bundle URL endpoint**
- **mdfy.app** provides via **bundle URL**
- **bundle URL** implements principle **Markdown-as-API-response**
- **bundle URL** includes block **graph_data**
- **Query parameters** modifies response **bundle URL**
- **bundle URL** leads with **Bundle metadata**
- **Markdown-as-API-response** is core of **API response format**

_Hub canonical:_ https://memory.wiki/hub/demo
_Concept digest:_ https://memory.wiki/raw/hub/demo?digest=1&compact=1
