FYI Notes Developer Guide
Instructions for Creating .fyi Pages
This page is written for AI tools, scripts, and external automations that need to create FYI Notes `.fyi` files outside the FYI Notes app.
Goal
Create one complete `.fyi` file as valid JSON. A `.fyi` file has a top-level page id, a visible document section named `d`, and a paired blob/body section named `b`.
- `d` stores visible note titles, labels, URLs, columns, order, and symbols.
- `b` stores longer note body text for expandable notes.
- Both sections must use matching note ids so FYI Notes can pair visible notes with body content.
Output Rules
- Return only valid JSON when asked to create a `.fyi` file.
- Do not wrap JSON in Markdown and do not include comments or trailing commas.
- Use unique integer ids. Epoch milliseconds are preferred.
- Set page `v` to `18`, pub `v` to `4`, and note `v` to `12`.
- Set `d.uDocs.meta.typ` to `"d"` and `b.uDocs.meta.typ` to `"b"`.
- Set `uDocs.meta.cat` and `uDocs.pub.cat` to `"General"` unless the app provides another approved category.
- Set every note `alrm` to `0` unless the user explicitly asks for an alarm.
Safety Rules
- Use safe, plain text whenever possible.
- Do not include executable JavaScript, event handlers, script tags, iframes, embedded forms, or suspicious HTML.
- Do not invent fake URLs. If a URL cannot be verified, omit it or mark it as needing verification in plain text.
- If link checking is available, include only URLs that do not return `404` and whose response does not contain `404 - Page not found`.
Page Skeleton
{
"id": 1777777777000,
"d": {
"uDocs": {
"meta": {
"id": 1777777777000,
"name": "Page Title",
"ty": "000000",
"auth": "",
"updt": 1777777777000,
"vu": "",
"clck": 0,
"gclk": 0,
"col": "3",
"cols": "true",
"cat": "General",
"skey": "outside-model-1777777777000",
"v": 18,
"s": 0,
"u": "",
"u1": "",
"u2": "",
"u3": "",
"fav": 0,
"typ": "d"
},
"coltxt": [["0","1","2","3","4","5","6","7","8","9","10","11","12"], [], [], [], [], [], [], [], [], [], [], [], []],
"zdata": [],
"pub": {
"v": 4,
"title": "Page Title",
"cat": "General",
"id": 1777777777000,
"wType": "",
"signature": "",
"pw": "",
"sURL1": "",
"sURL2": "",
"sURL3": "",
"sURL4": "",
"pURL": "",
"wURL": "",
"cURL": "",
"mURL": "",
"Notes": ""
},
"tabs": ["", "", "", "", "", "", "", "", "", "", "", "", ""],
"colb": [1, 1, 1, "eng"]
}
},
"b": {
"uDocs": {
"meta": "deep-copy d.uDocs.meta, then set typ to b",
"coltxt": "same as d.uDocs.coltxt",
"zdata": [],
"pub": "deep-copy d.uDocs.pub",
"tabs": ["", "", "", "", "", "", "", "", "", "", "", "", ""],
"colb": [1, 1, 1, "eng"]
}
}
}
Note Skeleton
{
"id": 1777777777001,
"col": 1,
"css": "",
"ty": "1",
"t0": "Visible note title",
"t1": "",
"t2": "",
"t3": "",
"t4": "",
"t5": "",
"t6": "",
"ordr": 100,
"updt": 1777777777000,
"bdt": 0,
"clck": 0,
"gclk": 0,
"v": 12,
"s": 0,
"u": 0,
"pre1": 0,
"pre2": 2,
"grp": 0,
"lvl": 0,
"pop": 0,
"tab": 0,
"pa": 0,
"alrm": 0
}
For small or large notes, place the visible title in `d.uDocs.zdata[].t0` and the longer body in the matching `b.uDocs.zdata[].t1`. Use `ordr` values spaced by 100.
Note Types
| `ty` | Meaning |
|---|---|
| `"1"` | Text note |
| `"2"` | Small expandable note |
| `"3"` | Large note |
| `"4"` | URL-style item |
| `"5"` | Horizontal rule |
| `"6"` | Phone note |
| `"7"` | Section header |
| `"8"` | Email note |
| `"9"` | Block note |
| `"10"` | Container block note |
Symbol Indexes
| `pre2` | Meaning |
|---|---|
| `0` | No symbol |
| `1` | Arrow / marker |
| `2` | Bullet point |
| `3` | Empty checkbox / todo |
| `4` | Checked checkbox / completed |
| `5` | Star / important |
| `6` | Warning / caution |
| `7` | Urgent marker |
| `8` | Heart / favorite |
| `9` | Flag / milestone |
Suggested System Prompt
You create FYI Notes .fyi pages. Return only valid JSON. Use the FYI Notes .fyi schema exactly: top-level id, visible document d, and blob/body document b. Use unique epoch-millisecond-style ids. Use page meta version 18, note version 12, pub version 4, uDocs.meta.cat: "General", uDocs.pub.cat: "General", and note alrm: 0 unless alarms are requested. Use ty: "7" for section headers, ty: "1" for normal text, ty: "2" for expandable small notes, and ty: "3" for long notes. Use pre2 symbols: 0 none, 1 arrow, 2 bullet, 3 todo checkbox, 4 checked checkbox, 5 star, 6 warning, 7 urgent, 8 heart, 9 flag. Put visible titles in d.uDocs.zdata[].t0; put longer note body text in the matching b.uDocs.zdata[].t1; put URLs in d.uDocs.zdata[].t1 only when valid. Keep the JSON safe: no scripts, event handlers, iframes, forms, or invented links.
Validation Checklist
- JSON parses successfully.
- Top-level keys include `id`, `d`, and `b`.
- `d.uDocs` and `b.uDocs` both exist.
- `d.uDocs.meta.typ` is `"d"` and `b.uDocs.meta.typ` is `"b"`.
- Both `zdata` arrays exist and use matching ids.
- Every note has `id`, `col`, `ty`, `t0`, `ordr`, `updt`, `v`, `pre2`, `pa`, and `alrm`.
- `pre2` is an integer from `0` through `9`.
- `ordr` values are sorted and spaced.
- No note contains unsafe HTML or executable code.
- Any included URL has been verified when link checking is available.
Full Reference
The full Markdown reference is available in the project as `fyi-page-model-instructions.md`.