{
    "stable": true,
    "versions": {
        "0.0.14": {
            "manifest": {
                "id": "io.timconsidine.mdmap",
                "title": "mdmap",
                "author": "timconsidine",
                "description": "mdmap is a single-user web application for writing markdown files and instantly visualising them as hierarchical mindmaps.\n\nKey features:\n- Edit markdown source with a built-in text editor\n- Three view modes: Edit (markdown only), Split (markdown + mindmap side by side), Preview (mindmap only)\n- Multiple top-level `#` headings in one file render as independent root nodes on a canvas\n- Coloured nodes and edges driven by inline markdown metadata (`- bgcolor:`, `- fgcolor:`), cascading down from parents to children\n- Tapering edge thickness: thicker lines for level 1 → 2, getting thinner at deeper levels\n- Pan by dragging the canvas background, zoom with the mouse wheel or on-screen controls\n- Export any mindmap as SVG, PNG, or JPG directly into the app's image library\n- Authentication is handled by Cloudron proxyAuth addon — no separate login\n- All data is stored as plain markdown files and images in persistent storage\n- User preference (last view mode, last opened file) is remembered in a local SQLite settings database\n",
                "tagline": "mdmap - mindmap rendering of markdown source",
                "version": "0.0.14",
                "healthCheckPath": "/",
                "httpPort": 3000,
                "memoryLimit": 2147483648,
                "addons": {
                    "localstorage": {},
                    "proxyAuth": {}
                },
                "manifestVersion": 2,
                "postInstallMessage": "mdmap is now installed.\n\n**First use**\n1. Authentication is handled automatically by Cloudron via the proxyAuth addon, so you will be signed in as your Cloudron user immediately.\n2. You should see the bundled `welcome.md` file open in Edit view. It demonstrates the node colour metadata format and multiple top-level sections.\n3. Use the sidebar \"Markdown\" section and its `+` button to create a new markdown file.\n4. Toggle between **Edit**, **Split**, and **Preview** modes in the toolbar.\n5. To add colour metadata, place a bullet list immediately under a heading, e.g.:\n\n```markdown\n# Project\n- bgcolor: blue\n- fgcolor: white\n\n## Module 1\n- bgcolor: orange\n```\n\nValues cascade down to child headings that don't declare their own.\n\n**Exporting mindmaps**\n- In Split or Preview mode, use the **Export ▾** button to save the current mindmap as SVG, PNG, or JPG.\n- Exports are saved alongside your markdown files and listed in the sidebar \"Images\" section. Click an image name to open it in a new tab, or use the `×` button to delete it.\n\n**Keyboard shortcuts**\n- Save: `Ctrl/Cmd + S`\n- Edit view: `Ctrl/Cmd + E`\n- Split view: `Ctrl/Cmd + L`\n- Preview view: `Ctrl/Cmd + P`\n- Close modal/menu: `Esc`\n",
                "changelog": "* initial build\n",
                "website": "https://ca.cloudron.io",
                "contactEmail": "support@appx.uk",
                "icon": "file://mdmap-logo.png",
                "tags": [
                    "productivity",
                    "markdown",
                    "mindmap"
                ],
                "iconUrl": "https://communityapps.appx.uk/cloudron-mdmap/mdmap-logo.png",
                "packagerName": "@timconsidine",
                "packagerUrl": "https://forgejo.tcjc.uk/cca/cloudron-mdmap",
                "minBoxVersion": "9.1.0",
                "mediaLinks": [
                    "https://communityapps.appx.uk/cloudron-mdmap/media/screenshot.png"
                ],
                "dockerImage": "forgejo.tcjc.uk/cca/cloudron-mdmap:0.0.14"
            },
            "creationDate": "Tue, 18 Aug 2026 08:40:11 GMT",
            "ts": "Tue, 18 Aug 2026 08:40:11 GMT",
            "publishState": "published"
        },
        "0.0.15": {
            "manifest": {
                "id": "io.timconsidine.mdmap",
                "title": "mdmap",
                "author": "timconsidine",
                "description": "**mdmap** is a web application for writing markdown files and instantly visualising them as hierarchical mindmaps without sacrificing detailed information.\n\n**mdmap** offers non-standard cool features :\n- cross-node lines \n- hover notes\n- plain markdown files and rendered images in persistent storage\n- additional content such as deep documentation / thought captures are not rendered in the map but are available in the markdown source.\n\nIt is packaged for deployment on Cloudron as a single user app with authentication handled by the Cloudron proxyAuth addon — no separate login.\n\nWritten from scratch after inspration from [MarkMap](https://github.com/markmap/markmap).\n\nKey features:\n- Edit markdown source with a built-in text editor\n- Three view modes: Edit (markdown only), Split (markdown + mindmap side by side), Preview (mindmap only)\n- Split mode defaults to 30% editor / 70% canvas; the divider is draggable (15–55%) and the last ratio is remembered per-user\n- Multiple top-level `#` headings in one file render as independent root nodes on a canvas (level-1 nodes are never connected to each other)\n- Styled nodes via inline markdown metadata placed directly below a heading: `- bgcolor:`, `- fgcolor:`, `- corner: square|round`, `- line: solid|dots` — all of these cascade down to children that don't override them\n- Per-root layout switch: add `- layout: square` under a level-1 `#` heading to render that root balanced (root centered, children split around it); declare nothing or `- layout: default` for the standard left-to-right tree. Per-root, so you can mix styles in one file.\n- Cross-links between any nodes on any branches/levels: write `- base: TargetHeading` and `- link: SourceHeading` on the same heading, with optional `- linkcolor: color`. A sparse dotted bezier is drawn from the source node to the target with a small arrow at the destination end.\n- Hover notes: add `- note: free text` under any heading to attach a tooltip; a small `i` badge appears on the node so you know which items carry notes (notes do not cascade)\n- Tapering edge thickness: thicker lines for level 1 → 2, thinning at each subsequent parent→child level; each edge uses the child node's accent color and dash style\n- Pan by dragging the canvas background, zoom with the mouse wheel, double-click anywhere to zoom in at that point, plus on-screen zoom controls (+, −, fit) in the top-right\n- Keyboard zoom shortcuts: `+`/`=`/numpad `+` in, `−`/numpad `−` out\n- Full-canvas image export — renders the full mindmap at its native size (no current pan/zoom letterboxing) to SVG, PNG, or JPG, including cross-links and layout styles, saved directly into the app's image library\n- `?` help button to the right of Export opens an in-app metadata reference, so the bundled welcome.md can be deleted without losing documentation\n- All data is stored as plain markdown files and images in persistent storage\n- User preferences (last view mode, last opened file, split ratio) are remembered in a local SQLite settings database\n",
                "tagline": "mdmap - mindmap rendering of markdown source",
                "version": "0.0.15",
                "healthCheckPath": "/",
                "httpPort": 3000,
                "memoryLimit": 2147483648,
                "addons": {
                    "localstorage": {},
                    "proxyAuth": {}
                },
                "manifestVersion": 2,
                "postInstallMessage": "mdmap is now installed.\n\n**First use**\n1. Authentication is handled automatically by Cloudron via the proxyAuth addon, so you will be signed in as your Cloudron user immediately.\n2. You should see the bundled `welcome.md` file open in Edit view. It demonstrates all metadata styles and the multi-root, non-connected level-1 layout.\n3. Use the sidebar \"Markdown\" section and its `+` button to create a new markdown file. Use the `+` in the Images section only to see (refresh) exported images — new images arrive via the Export button.\n4. Toggle between **Edit**, **Split**, and **Preview** modes in the toolbar (the mode and last-opened file are restored on your next visit).\n\n**Metadata styling (quick reference)**\nPlace bullet lines immediately below a heading (blank lines, normal text, or another heading close the window). Unknown keys are preserved but ignored.\n\n```markdown\n# Project\n- layout: square\n- bgcolor: #0f172a\n- fgcolor: #e2e8f0\n- corner: round\n- line: dots\n- note: strategy top level, click anywhere on the node to see this tooltip\n\n## Product\n- bgcolor: #2563eb\n- line: solid         # overrides inherited \"dots\" from above\n- base: Platform      # destination (arrow points at this node)\n- link: Delivery      # source (arrow starts here)\n- linkcolor: #ffcc66\n\n### Discovery\n### Design\n- corner: square     # overrides inherited \"round\"\n### Delivery\n```\n\nCascade behavior:\n- `bgcolor`, `fgcolor`, `corner`, `line`, and `linkcolor` inherit down to any child that doesn't set its own value.\n- `note`, `base`, `link`, and `layout` do **not** cascade — they apply only to the heading you write them under.\n- `corner: square` is the default if nothing declares it. `line: solid` is the default.\n- `layout:` is honoured only on level-1 `#` headings; ignored silently on sub-headings. Use `- layout: square` to draw that root balanced (root centered, children split to the left and right halves, odd numbers place the extra child on the right).\n\n**Cross-links between elements on different branches / levels**\nTo draw a sparse dotted bezier with a small arrow from a **source** node to a **destination** node:\n1. Pick a heading (any level anywhere in the file) as the control point.\n2. Under that heading, write both lines:\n   - `- link: EXACT_HEADING_TEXT_OF_SOURCE` — arrow starts here\n   - `- base: EXACT_HEADING_TEXT_OF_DESTINATION` — arrow ends here (arrow tip points at the \"base\" side)\n3. Optionally write `- linkcolor: yourcolor` on the same heading to brand that edge. `linkcolor` cascades to children, so you can set it on a branch root to apply to many relations at once.\n4. The edge uses a sparser `1 7` dot rhythm than the `line: dots` hierarchy style, so it visually reads as a relation instead of a parent edge.\n5. If you want arrows in *both* directions (A ↔ B), write the opposite pair under a heading (or under either side) and both will render.\n6. Hover tooltip notes: nodes with `- note:` show a small `i` badge in the top-right; hover anywhere on the node to read it. Notes are strictly an in-app UI feature and are intentionally stripped from exported images.\n\n**Canvas controls**\n- Pan: drag empty canvas background.\n- Zoom: scroll wheel (zooms around cursor), or the floating `+` / `−` / `⤧ fit` controls in the top-right of the canvas, or keys:\n  - `+` / `=` / numpad `+` — zoom in\n  - `−` / numpad `−` — zoom out\n  - **double-click any empty canvas spot** — zoom in by 1.4× around that point\n\n**Split view**\nSplit mode opens with 30% editor / 70% canvas. Grab the vertical divider bar between them and drag to resize (15%–55%). Your last split width is remembered across sessions.\n\n**Exporting mindmaps**\n- In Split or Preview mode, use the **Export ▾** button to save the current mindmap as SVG, PNG, or JPG.\n- Exports always render the full diagram at native resolution. Current on-screen pan, zoom, and note badges never appear in the file.\n- `corner`, `line`, `layout` styles, and cross-links (including arrows + their `linkcolor`) are preserved in every exported format.\n- `note` tooltips are intentionally hidden in exports since they are a hover-only UI feature.\n- Exports are saved into your persistent image library and listed in the sidebar \"Images\" section. Click an image name to open it in a new tab, or use the `×` button to delete it.\n\n**Help button**\nThe `?` button to the right of **Export ▾** opens an in-app metadata reference. It is independent of the bundled `welcome.md` so you can safely delete the sample file.\n\n**Keyboard shortcuts**\n- Save: `Ctrl/Cmd + S`\n- Edit view: `Ctrl/Cmd + E`\n- Split view: `Ctrl/Cmd + L`\n- Preview view: `Ctrl/Cmd + P`\n- Close export menu, help modal, or new-file modal: `Esc`\n- Split drag: grab and drag the splitter bar\n",
                "changelog": "* initial build\n",
                "website": "https://ca.cloudron.io",
                "contactEmail": "support@appx.uk",
                "icon": "file://mdmap-logo.png",
                "tags": [
                    "productivity",
                    "markdown",
                    "mindmap"
                ],
                "iconUrl": "https://communityapps.appx.uk/cloudron-mdmap/mdmap-logo.png",
                "packagerName": "@timconsidine",
                "packagerUrl": "https://forgejo.tcjc.uk/cca/cloudron-mdmap",
                "minBoxVersion": "9.1.0",
                "mediaLinks": [
                    "https://communityapps.appx.uk/cloudron-mdmap/media/screenshot.png",
                    "https://communityapps.appx.uk/cloudron-mdmap/media/square.png"
                ],
                "dockerImage": "forgejo.tcjc.uk/cca/cloudron-mdmap:0.0.15"
            },
            "creationDate": "Tue, 18 Aug 2026 15:24:48 GMT",
            "ts": "Tue, 18 Aug 2026 15:24:48 GMT",
            "publishState": "published"
        },
        "0.0.16": {
            "manifest": {
                "id": "io.timconsidine.mdmap",
                "title": "mdmap",
                "author": "timconsidine",
                "description": "**mdmap** is a web application for writing markdown files and instantly visualising them as hierarchical mindmaps without sacrificing detailed information.\n\n**mdmap** offers non-standard cool features :\n- cross-node lines \n- hover notes\n- plain markdown files and rendered images in persistent storage\n- additional content such as deep documentation / thought captures are not rendered in the map but are available in the markdown source.\n\nIt is packaged for deployment on Cloudron as a single user app with authentication handled by the Cloudron proxyAuth addon — no separate login.\n\nWritten from scratch after inspration from [MarkMap](https://github.com/markmap/markmap).\n\nKey features:\n- Edit markdown source with a built-in text editor\n- Three view modes: Edit (markdown only), Split (markdown + mindmap side by side), Preview (mindmap only)\n- Split mode defaults to 30% editor / 70% canvas; the divider is draggable (15–55%) and the last ratio is remembered per-user\n- Multiple top-level `#` headings in one file render as independent root nodes on a canvas (level-1 nodes are never connected to each other)\n- Styled nodes via inline markdown metadata placed directly below a heading: `- bgcolor:`, `- fgcolor:`, `- corner: square|round`, `- line: solid|dots` — all of these cascade down to children that don't override them\n- Per-root layout switch: add `- layout: square` under a level-1 `#` heading to render that root balanced (root centered, children split around it); declare nothing or `- layout: default` for the standard left-to-right tree. Per-root, so you can mix styles in one file.\n- Cross-links between any nodes on any branches/levels: write `- base: TargetHeading` and `- link: SourceHeading` on the same heading, with optional `- linkcolor: color`. A sparse dotted bezier is drawn from the source node to the target with a small arrow at the destination end.\n- Hover notes: add `- note: free text` under any heading to attach a tooltip; a small `i` badge appears on the node so you know which items carry notes (notes do not cascade)\n- Tapering edge thickness: thicker lines for level 1 → 2, thinning at each subsequent parent→child level; each edge uses the child node's accent color and dash style\n- Pan by dragging the canvas background, zoom with the mouse wheel, double-click anywhere to zoom in at that point, plus on-screen zoom controls (+, −, fit) in the top-right\n- Keyboard zoom shortcuts: `+`/`=`/numpad `+` in, `−`/numpad `−` out\n- Full-canvas image export — renders the full mindmap at its native size (no current pan/zoom letterboxing) to SVG, PNG, or JPG, including cross-links and layout styles, saved directly into the app's image library\n- `?` help button to the right of Export opens an in-app metadata reference, so the bundled welcome.md can be deleted without losing documentation\n- All data is stored as plain markdown files and images in persistent storage\n- User preferences (last view mode, last opened file, split ratio) are remembered in a local SQLite settings database\n",
                "tagline": "mdmap - mindmap rendering of markdown source",
                "version": "0.0.16",
                "healthCheckPath": "/",
                "httpPort": 3000,
                "memoryLimit": 2147483648,
                "addons": {
                    "localstorage": {},
                    "proxyAuth": {}
                },
                "manifestVersion": 2,
                "postInstallMessage": "mdmap is now installed.\n\n**First use**\n1. Authentication is handled automatically by Cloudron via the proxyAuth addon, so you will be signed in as your Cloudron user immediately.\n2. You should see the bundled `welcome.md` file open in Edit view. It demonstrates all metadata styles and the multi-root, non-connected level-1 layout.\n3. Use the sidebar \"Markdown\" section and its `+` button to create a new markdown file. Use the `+` in the Images section only to see (refresh) exported images — new images arrive via the Export button.\n4. Toggle between **Edit**, **Split**, and **Preview** modes in the toolbar (the mode and last-opened file are restored on your next visit).\n\n**Metadata styling (quick reference)**\nPlace bullet lines immediately below a heading (blank lines, normal text, or another heading close the window). Unknown keys are preserved but ignored.\n\n```markdown\n# Project\n- layout: square\n- bgcolor: #0f172a\n- fgcolor: #e2e8f0\n- corner: round\n- line: dots\n- note: strategy top level, click anywhere on the node to see this tooltip\n\n## Product\n- bgcolor: #2563eb\n- line: solid         # overrides inherited \"dots\" from above\n- base: Platform      # destination (arrow points at this node)\n- link: Delivery      # source (arrow starts here)\n- linkcolor: #ffcc66\n\n### Discovery\n### Design\n- corner: square     # overrides inherited \"round\"\n### Delivery\n```\n\nCascade behavior:\n- `bgcolor`, `fgcolor`, `corner`, `line`, and `linkcolor` inherit down to any child that doesn't set its own value.\n- `note`, `base`, `link`, and `layout` do **not** cascade — they apply only to the heading you write them under.\n- `corner: square` is the default if nothing declares it. `line: solid` is the default.\n- `layout:` is honoured only on level-1 `#` headings; ignored silently on sub-headings. Use `- layout: square` to draw that root balanced (root centered, children split to the left and right halves, odd numbers place the extra child on the right).\n\n**Cross-links between elements on different branches / levels**\nTo draw a sparse dotted bezier with a small arrow from a **source** node to a **destination** node:\n1. Pick a heading (any level anywhere in the file) as the control point.\n2. Under that heading, write both lines:\n   - `- link: EXACT_HEADING_TEXT_OF_SOURCE` — arrow starts here\n   - `- base: EXACT_HEADING_TEXT_OF_DESTINATION` — arrow ends here (arrow tip points at the \"base\" side)\n3. Optionally write `- linkcolor: yourcolor` on the same heading to brand that edge. `linkcolor` cascades to children, so you can set it on a branch root to apply to many relations at once.\n4. The edge uses a sparser `1 7` dot rhythm than the `line: dots` hierarchy style, so it visually reads as a relation instead of a parent edge.\n5. If you want arrows in *both* directions (A ↔ B), write the opposite pair under a heading (or under either side) and both will render.\n6. Hover tooltip notes: nodes with `- note:` show a small `i` badge in the top-right; hover anywhere on the node to read it. Notes are strictly an in-app UI feature and are intentionally stripped from exported images.\n\n**Canvas controls**\n- Pan: drag empty canvas background.\n- Zoom: scroll wheel (zooms around cursor), or the floating `+` / `−` / `⤧ fit` controls in the top-right of the canvas, or keys:\n  - `+` / `=` / numpad `+` — zoom in\n  - `−` / numpad `−` — zoom out\n  - **double-click any empty canvas spot** — zoom in by 1.4× around that point\n\n**Split view**\nSplit mode opens with 30% editor / 70% canvas. Grab the vertical divider bar between them and drag to resize (15%–55%). Your last split width is remembered across sessions.\n\n**Exporting mindmaps**\n- In Split or Preview mode, use the **Export ▾** button to save the current mindmap as SVG, PNG, or JPG.\n- Exports always render the full diagram at native resolution. Current on-screen pan, zoom, and note badges never appear in the file.\n- `corner`, `line`, `layout` styles, and cross-links (including arrows + their `linkcolor`) are preserved in every exported format.\n- `note` tooltips are intentionally hidden in exports since they are a hover-only UI feature.\n- Exports are saved into your persistent image library and listed in the sidebar \"Images\" section. Click an image name to open it in a new tab, or use the `×` button to delete it.\n\n**Help button**\nThe `?` button to the right of **Export ▾** opens an in-app metadata reference. It is independent of the bundled `welcome.md` so you can safely delete the sample file.\n\n**Keyboard shortcuts**\n- Save: `Ctrl/Cmd + S`\n- Edit view: `Ctrl/Cmd + E`\n- Split view: `Ctrl/Cmd + L`\n- Preview view: `Ctrl/Cmd + P`\n- Close export menu, help modal, or new-file modal: `Esc`\n- Split drag: grab and drag the splitter bar\n",
                "changelog": "* arrows and hover text update\n",
                "website": "https://ca.cloudron.io",
                "contactEmail": "support@appx.uk",
                "icon": "file://mdmap-logo.png",
                "tags": [
                    "productivity",
                    "markdown",
                    "mindmap"
                ],
                "iconUrl": "https://communityapps.appx.uk/cloudron-mdmap/mdmap-logo.png",
                "packagerName": "@timconsidine",
                "packagerUrl": "https://forgejo.tcjc.uk/cca/cloudron-mdmap",
                "minBoxVersion": "9.1.0",
                "mediaLinks": [
                    "https://communityapps.appx.uk/cloudron-mdmap/media/screenshot.png",
                    "https://communityapps.appx.uk/cloudron-mdmap/media/square.png"
                ],
                "dockerImage": "forgejo.tcjc.uk/cca/cloudron-mdmap:0.0.16"
            },
            "creationDate": "Tue, 18 Aug 2026 15:58:41 GMT",
            "ts": "Tue, 18 Aug 2026 15:58:41 GMT",
            "publishState": "published"
        },
        "0.0.17": {
            "manifest": {
                "id": "io.timconsidine.mdmap",
                "title": "mdmap",
                "author": "timconsidine",
                "description": "**mdmap** is a web application for writing markdown files and instantly visualising them as hierarchical mindmaps without sacrificing detailed information.\n\n**mdmap** offers non-standard cool features :\n- cross-node lines \n- hover notes\n- plain markdown files and rendered images in persistent storage\n- additional content such as deep documentation / thought captures are not rendered in the map but are available in the markdown source.\n\nIt is packaged for deployment on Cloudron as a single user app with authentication handled by the Cloudron proxyAuth addon — no separate login.\n\nWritten from scratch after inspration from [MarkMap](https://github.com/markmap/markmap).\n\nKey features:\n- Edit markdown source with a built-in text editor\n- Three view modes: Edit (markdown only), Split (markdown + mindmap side by side), Preview (mindmap only)\n- Split mode defaults to 30% editor / 70% canvas; the divider is draggable (15–55%) and the last ratio is remembered per-user\n- Multiple top-level `#` headings in one file render as independent root nodes on a canvas (level-1 nodes are never connected to each other)\n- Styled nodes via inline markdown metadata placed directly below a heading: `- bgcolor:`, `- fgcolor:`, `- corner: square|round`, `- line: solid|dots` — all of these cascade down to children that don't override them\n- Per-root layout switch: add `- layout: square` under a level-1 `#` heading to render that root balanced (root centered, children split around it); declare nothing or `- layout: default` for the standard left-to-right tree. Per-root, so you can mix styles in one file.\n- Cross-links between any nodes on any branches/levels: write `- base: TargetHeading` and `- link: SourceHeading` on the same heading, with optional `- linkcolor: color`. A sparse dotted bezier is drawn from the source node to the target with a small arrow at the destination end.\n- Hover notes: add `- note: free text` under any heading to attach a tooltip; a small `i` badge appears on the node so you know which items carry notes (notes do not cascade)\n- Tapering edge thickness: thicker lines for level 1 → 2, thinning at each subsequent parent→child level; each edge uses the child node's accent color and dash style\n- Pan by dragging the canvas background, zoom with the mouse wheel, double-click anywhere to zoom in at that point, plus on-screen zoom controls (+, −, fit) in the top-right\n- Keyboard zoom shortcuts: `+`/`=`/numpad `+` in, `−`/numpad `−` out\n- Full-canvas image export — renders the full mindmap at its native size (no current pan/zoom letterboxing) to SVG, PNG, or JPG, including cross-links and layout styles, saved directly into the app's image library\n- `?` help button to the right of Export opens an in-app metadata reference, so the bundled welcome.md can be deleted without losing documentation\n- All data is stored as plain markdown files and images in persistent storage\n- User preferences (last view mode, last opened file, split ratio) are remembered in a local SQLite settings database\n",
                "tagline": "mdmap - mindmap rendering of markdown source",
                "version": "0.0.17",
                "healthCheckPath": "/",
                "httpPort": 3000,
                "memoryLimit": 2147483648,
                "addons": {
                    "localstorage": {},
                    "proxyAuth": {}
                },
                "manifestVersion": 2,
                "postInstallMessage": "mdmap is now installed.\n\n**First use**\n1. Authentication is handled automatically by Cloudron via the proxyAuth addon, so you will be signed in as your Cloudron user immediately.\n2. You should see the bundled `welcome.md` file open in Edit view. It demonstrates all metadata styles and the multi-root, non-connected level-1 layout.\n3. Use the sidebar \"Markdown\" section and its `+` button to create a new markdown file. Use the `+` in the Images section only to see (refresh) exported images — new images arrive via the Export button.\n4. Toggle between **Edit**, **Split**, and **Preview** modes in the toolbar (the mode and last-opened file are restored on your next visit).\n\n**Metadata styling (quick reference)**\nPlace bullet lines immediately below a heading (blank lines, normal text, or another heading close the window). Unknown keys are preserved but ignored.\n\n```markdown\n# Project\n- layout: square\n- bgcolor: #0f172a\n- fgcolor: #e2e8f0\n- corner: round\n- line: dots\n- note: strategy top level, click anywhere on the node to see this tooltip\n\n## Product\n- bgcolor: #2563eb\n- line: solid         # overrides inherited \"dots\" from above\n- base: Platform      # destination (arrow points at this node)\n- link: Delivery      # source (arrow starts here)\n- linkcolor: #ffcc66\n\n### Discovery\n### Design\n- corner: square     # overrides inherited \"round\"\n### Delivery\n```\n\nCascade behavior:\n- `bgcolor`, `fgcolor`, `corner`, `line`, and `linkcolor` inherit down to any child that doesn't set its own value.\n- `note`, `base`, `link`, and `layout` do **not** cascade — they apply only to the heading you write them under.\n- `corner: square` is the default if nothing declares it. `line: solid` is the default.\n- `layout:` is honoured only on level-1 `#` headings; ignored silently on sub-headings. Use `- layout: square` to draw that root balanced (root centered, children split to the left and right halves, odd numbers place the extra child on the right).\n\n**Cross-links between elements on different branches / levels**\nTo draw a sparse dotted bezier with a small arrow from a **source** node to a **destination** node:\n1. Pick a heading (any level anywhere in the file) as the control point.\n2. Under that heading, write both lines:\n   - `- link: EXACT_HEADING_TEXT_OF_SOURCE` — arrow starts here\n   - `- base: EXACT_HEADING_TEXT_OF_DESTINATION` — arrow ends here (arrow tip points at the \"base\" side)\n3. Optionally write `- linkcolor: yourcolor` on the same heading to brand that edge. `linkcolor` cascades to children, so you can set it on a branch root to apply to many relations at once.\n4. The edge uses a sparser `1 7` dot rhythm than the `line: dots` hierarchy style, so it visually reads as a relation instead of a parent edge.\n5. If you want arrows in *both* directions (A ↔ B), write the opposite pair under a heading (or under either side) and both will render.\n6. Hover tooltip notes: nodes with `- note:` show a small `i` badge in the top-right; hover anywhere on the node to read it. Notes are strictly an in-app UI feature and are intentionally stripped from exported images.\n\n**Canvas controls**\n- Pan: drag empty canvas background.\n- Zoom: scroll wheel (zooms around cursor), or the floating `+` / `−` / `⤧ fit` controls in the top-right of the canvas, or keys:\n  - `+` / `=` / numpad `+` — zoom in\n  - `−` / numpad `−` — zoom out\n  - **double-click any empty canvas spot** — zoom in by 1.4× around that point\n\n**Split view**\nSplit mode opens with 30% editor / 70% canvas. Grab the vertical divider bar between them and drag to resize (15%–55%). Your last split width is remembered across sessions.\n\n**Exporting mindmaps**\n- In Split or Preview mode, use the **Export ▾** button to save the current mindmap as SVG, PNG, or JPG.\n- Exports always render the full diagram at native resolution. Current on-screen pan, zoom, and note badges never appear in the file.\n- `corner`, `line`, `layout` styles, and cross-links (including arrows + their `linkcolor`) are preserved in every exported format.\n- `note` tooltips are intentionally hidden in exports since they are a hover-only UI feature.\n- Exports are saved into your persistent image library and listed in the sidebar \"Images\" section. Click an image name to open it in a new tab, or use the `×` button to delete it.\n\n**Help button**\nThe `?` button to the right of **Export ▾** opens an in-app metadata reference. It is independent of the bundled `welcome.md` so you can safely delete the sample file.\n\n**Keyboard shortcuts**\n- Save: `Ctrl/Cmd + S`\n- Edit view: `Ctrl/Cmd + E`\n- Split view: `Ctrl/Cmd + L`\n- Preview view: `Ctrl/Cmd + P`\n- Close export menu, help modal, or new-file modal: `Esc`\n- Split drag: grab and drag the splitter bar\n",
                "changelog": "* logo visibility\n",
                "website": "https://ca.cloudron.io",
                "contactEmail": "support@appx.uk",
                "icon": "file://mdmap-logo.png",
                "tags": [
                    "productivity",
                    "markdown",
                    "mindmap"
                ],
                "iconUrl": "https://communityapps.appx.uk/cloudron-mdmap/mdmap-logo.png",
                "packagerName": "@timconsidine",
                "packagerUrl": "https://forgejo.tcjc.uk/cca/cloudron-mdmap",
                "minBoxVersion": "9.1.0",
                "mediaLinks": [
                    "https://communityapps.appx.uk/cloudron-mdmap/media/screenshot.png",
                    "https://communityapps.appx.uk/cloudron-mdmap/media/square.png"
                ],
                "dockerImage": "forgejo.tcjc.uk/cca/cloudron-mdmap:0.0.17"
            },
            "creationDate": "Tue, 18 Aug 2026 16:08:11 GMT",
            "ts": "Tue, 18 Aug 2026 16:08:11 GMT",
            "publishState": "published"
        },
        "0.0.18": {
            "manifest": {
                "id": "io.timconsidine.mdmap",
                "title": "mdmap",
                "author": "timconsidine",
                "description": "**mdmap** is a web application for writing markdown files and instantly visualising them as hierarchical mindmaps without sacrificing detailed information.\n\n**mdmap** offers non-standard cool features :\n- cross-node lines \n- hover notes\n- plain markdown files and rendered images in persistent storage\n- additional content such as deep documentation / thought captures are not rendered in the map but are available in the markdown source.\n\nIt is packaged for deployment on Cloudron as a single user app with authentication handled by the Cloudron proxyAuth addon — no separate login.\n\nWritten from scratch after inspration from [MarkMap](https://github.com/markmap/markmap).\n\nKey features:\n- Edit markdown source with a built-in text editor\n- Three view modes: Edit (markdown only), Split (markdown + mindmap side by side), Preview (mindmap only)\n- Split mode defaults to 30% editor / 70% canvas; the divider is draggable (15–55%) and the last ratio is remembered per-user\n- Multiple top-level `#` headings in one file render as independent root nodes on a canvas (level-1 nodes are never connected to each other)\n- Styled nodes via inline markdown metadata placed directly below a heading: `- bgcolor:`, `- fgcolor:`, `- corner: square|round`, `- line: solid|dots` — all of these cascade down to children that don't override them\n- Per-root layout switch: add `- layout: square` under a level-1 `#` heading to render that root balanced (root centered, children split around it); declare nothing or `- layout: default` for the standard left-to-right tree. Per-root, so you can mix styles in one file.\n- Cross-links between any nodes on any branches/levels: write `- base: TargetHeading` and `- link: SourceHeading` on the same heading, with optional `- linkcolor: color`. A sparse dotted bezier is drawn from the source node to the target with a small arrow at the destination end.\n- Hover notes: add `- note: free text` under any heading to attach a tooltip; a small `i` badge appears on the node so you know which items carry notes (notes do not cascade)\n- Tapering edge thickness: thicker lines for level 1 → 2, thinning at each subsequent parent→child level; each edge uses the child node's accent color and dash style\n- Pan by dragging the canvas background, zoom with the mouse wheel, double-click anywhere to zoom in at that point, plus on-screen zoom controls (+, −, fit) in the top-right\n- Keyboard zoom shortcuts: `+`/`=`/numpad `+` in, `−`/numpad `−` out\n- Full-canvas image export — renders the full mindmap at its native size (no current pan/zoom letterboxing) to SVG, PNG, or JPG, including cross-links and layout styles, saved directly into the app's image library\n- `?` help button to the right of Export opens an in-app metadata reference, so the bundled welcome.md can be deleted without losing documentation\n- All data is stored as plain markdown files and images in persistent storage\n- User preferences (last view mode, last opened file, split ratio) are remembered in a local SQLite settings database\n",
                "tagline": "mdmap - mindmap rendering of markdown source",
                "version": "0.0.18",
                "healthCheckPath": "/",
                "httpPort": 3000,
                "memoryLimit": 2147483648,
                "addons": {
                    "localstorage": {},
                    "proxyAuth": {}
                },
                "manifestVersion": 2,
                "postInstallMessage": "mdmap is now installed.\n\n**First use**\n1. Authentication is handled automatically by Cloudron via the proxyAuth addon, so you will be signed in as your Cloudron user immediately.\n2. You should see the bundled `welcome.md` file open in Edit view. It demonstrates all metadata styles and the multi-root, non-connected level-1 layout.\n3. Use the sidebar \"Markdown\" section and its `+` button to create a new markdown file. Use the `+` in the Images section only to see (refresh) exported images — new images arrive via the Export button.\n4. Toggle between **Edit**, **Split**, and **Preview** modes in the toolbar (the mode and last-opened file are restored on your next visit).\n\n**Metadata styling (quick reference)**\nPlace bullet lines immediately below a heading (blank lines, normal text, or another heading close the window). Unknown keys are preserved but ignored.\n\n```markdown\n# Project\n- layout: square\n- bgcolor: #0f172a\n- fgcolor: #e2e8f0\n- corner: round\n- line: dots\n- note: strategy top level, click anywhere on the node to see this tooltip\n\n## Product\n- bgcolor: #2563eb\n- line: solid         # overrides inherited \"dots\" from above\n- base: Platform      # destination (arrow points at this node)\n- link: Delivery      # source (arrow starts here)\n- linkcolor: #ffcc66\n\n### Discovery\n### Design\n- corner: square     # overrides inherited \"round\"\n### Delivery\n```\n\nCascade behavior:\n- `bgcolor`, `fgcolor`, `corner`, `line`, and `linkcolor` inherit down to any child that doesn't set its own value.\n- `note`, `base`, `link`, and `layout` do **not** cascade — they apply only to the heading you write them under.\n- `corner: square` is the default if nothing declares it. `line: solid` is the default.\n- `layout:` is honoured only on level-1 `#` headings; ignored silently on sub-headings. Use `- layout: square` to draw that root balanced (root centered, children split to the left and right halves, odd numbers place the extra child on the right).\n\n**Cross-links between elements on different branches / levels**\nTo draw a sparse dotted bezier with a small arrow from a **source** node to a **destination** node:\n1. Pick a heading (any level anywhere in the file) as the control point.\n2. Under that heading, write both lines:\n   - `- link: EXACT_HEADING_TEXT_OF_SOURCE` — arrow starts here\n   - `- base: EXACT_HEADING_TEXT_OF_DESTINATION` — arrow ends here (arrow tip points at the \"base\" side)\n3. Optionally write `- linkcolor: yourcolor` on the same heading to brand that edge. `linkcolor` cascades to children, so you can set it on a branch root to apply to many relations at once.\n4. The edge uses a sparser `1 7` dot rhythm than the `line: dots` hierarchy style, so it visually reads as a relation instead of a parent edge.\n5. If you want arrows in *both* directions (A ↔ B), write the opposite pair under a heading (or under either side) and both will render.\n6. Hover tooltip notes: nodes with `- note:` show a small `i` badge in the top-right; hover anywhere on the node to read it. Notes are strictly an in-app UI feature and are intentionally stripped from exported images.\n\n**Canvas controls**\n- Pan: drag empty canvas background.\n- Zoom: scroll wheel (zooms around cursor), or the floating `+` / `−` / `⤧ fit` controls in the top-right of the canvas, or keys:\n  - `+` / `=` / numpad `+` — zoom in\n  - `−` / numpad `−` — zoom out\n  - **double-click any empty canvas spot** — zoom in by 1.4× around that point\n\n**Split view**\nSplit mode opens with 30% editor / 70% canvas. Grab the vertical divider bar between them and drag to resize (15%–55%). Your last split width is remembered across sessions.\n\n**Exporting mindmaps**\n- In Split or Preview mode, use the **Export ▾** button to save the current mindmap as SVG, PNG, or JPG.\n- Exports always render the full diagram at native resolution. Current on-screen pan, zoom, and note badges never appear in the file.\n- `corner`, `line`, `layout` styles, and cross-links (including arrows + their `linkcolor`) are preserved in every exported format.\n- `note` tooltips are intentionally hidden in exports since they are a hover-only UI feature.\n- Exports are saved into your persistent image library and listed in the sidebar \"Images\" section. Click an image name to open it in a new tab, or use the `×` button to delete it.\n\n**Help button**\nThe `?` button to the right of **Export ▾** opens an in-app metadata reference. It is independent of the bundled `welcome.md` so you can safely delete the sample file.\n\n**Keyboard shortcuts**\n- Save: `Ctrl/Cmd + S`\n- Edit view: `Ctrl/Cmd + E`\n- Split view: `Ctrl/Cmd + L`\n- Preview view: `Ctrl/Cmd + P`\n- Close export menu, help modal, or new-file modal: `Esc`\n- Split drag: grab and drag the splitter bar\n",
                "changelog": "* square layout tweak\n",
                "website": "https://ca.cloudron.io",
                "contactEmail": "support@appx.uk",
                "icon": "file://mdmap-logo.png",
                "tags": [
                    "productivity",
                    "markdown",
                    "mindmap"
                ],
                "iconUrl": "https://communityapps.appx.uk/cloudron-mdmap/mdmap-logo.png",
                "packagerName": "@timconsidine",
                "packagerUrl": "https://forgejo.tcjc.uk/cca/cloudron-mdmap",
                "minBoxVersion": "9.1.0",
                "mediaLinks": [
                    "https://communityapps.appx.uk/cloudron-mdmap/media/screenshot.png",
                    "https://communityapps.appx.uk/cloudron-mdmap/media/square.png"
                ],
                "dockerImage": "forgejo.tcjc.uk/cca/cloudron-mdmap:0.0.18"
            },
            "creationDate": "Tue, 18 Aug 2026 16:18:02 GMT",
            "ts": "Tue, 18 Aug 2026 16:18:02 GMT",
            "publishState": "published"
        },
        "0.0.19": {
            "manifest": {
                "id": "io.timconsidine.mdmap",
                "title": "mdmap",
                "author": "timconsidine",
                "description": "**mdmap** is a web application for writing markdown files and instantly visualising them as hierarchical mindmaps without sacrificing detailed information.\n\n**mdmap** offers non-standard cool features :\n- cross-node lines \n- hover notes\n- plain markdown files and rendered images in persistent storage\n- additional content such as deep documentation / thought captures are not rendered in the map but are available in the markdown source.\n\nIt is packaged for deployment on Cloudron as a single user app with authentication handled by the Cloudron proxyAuth addon — no separate login.\n\nWritten from scratch after inspration from [MarkMap](https://github.com/markmap/markmap).\n\nKey features:\n- Edit markdown source with a built-in text editor\n- Three view modes: Edit (markdown only), Split (markdown + mindmap side by side), Preview (mindmap only)\n- Split mode defaults to 30% editor / 70% canvas; the divider is draggable (15–55%) and the last ratio is remembered per-user\n- Multiple top-level `#` headings in one file render as independent root nodes on a canvas (level-1 nodes are never connected to each other)\n- Styled nodes via inline markdown metadata placed directly below a heading: `- bgcolor:`, `- fgcolor:`, `- corner: square|round`, `- line: solid|dots` — all of these cascade down to children that don't override them\n- Per-root layout switch: add `- layout: square` under a level-1 `#` heading to render that root balanced (root centered, children split around it); declare nothing or `- layout: default` for the standard left-to-right tree. Per-root, so you can mix styles in one file.\n- Cross-links between any nodes on any branches/levels: write `- base: TargetHeading` and `- link: SourceHeading` on the same heading, with optional `- linkcolor: color`. A sparse dotted bezier is drawn from the source node to the target with a small arrow at the destination end.\n- Hover notes: add `- note: free text` under any heading to attach a tooltip; a small `i` badge appears on the node so you know which items carry notes (notes do not cascade)\n- Tapering edge thickness: thicker lines for level 1 → 2, thinning at each subsequent parent→child level; each edge uses the child node's accent color and dash style\n- Pan by dragging the canvas background, zoom with the mouse wheel, double-click anywhere to zoom in at that point, plus on-screen zoom controls (+, −, fit) in the top-right\n- Keyboard zoom shortcuts: `+`/`=`/numpad `+` in, `−`/numpad `−` out\n- Full-canvas image export — renders the full mindmap at its native size (no current pan/zoom letterboxing) to SVG, PNG, or JPG, including cross-links and layout styles, saved directly into the app's image library\n- `?` help button to the right of Export opens an in-app metadata reference, so the bundled welcome.md can be deleted without losing documentation\n- All data is stored as plain markdown files and images in persistent storage\n- User preferences (last view mode, last opened file, split ratio) are remembered in a local SQLite settings database\n",
                "tagline": "mdmap - mindmap rendering of markdown source",
                "version": "0.0.19",
                "healthCheckPath": "/",
                "httpPort": 3000,
                "memoryLimit": 2147483648,
                "addons": {
                    "localstorage": {},
                    "proxyAuth": {}
                },
                "manifestVersion": 2,
                "postInstallMessage": "mdmap is now installed.\n\n**First use**\n1. Authentication is handled automatically by Cloudron via the proxyAuth addon, so you will be signed in as your Cloudron user immediately.\n2. You should see the bundled `welcome.md` file open in Edit view. It demonstrates all metadata styles and the multi-root, non-connected level-1 layout.\n3. Use the sidebar \"Markdown\" section and its `+` button to create a new markdown file. Use the `+` in the Images section only to see (refresh) exported images — new images arrive via the Export button.\n4. Toggle between **Edit**, **Split**, and **Preview** modes in the toolbar (the mode and last-opened file are restored on your next visit).\n\n**Metadata styling (quick reference)**\nPlace bullet lines immediately below a heading (blank lines, normal text, or another heading close the window). Unknown keys are preserved but ignored.\n\n```markdown\n# Project\n- layout: square\n- bgcolor: #0f172a\n- fgcolor: #e2e8f0\n- corner: round\n- line: dots\n- note: strategy top level, click anywhere on the node to see this tooltip\n\n## Product\n- bgcolor: #2563eb\n- line: solid         # overrides inherited \"dots\" from above\n- base: Platform      # destination (arrow points at this node)\n- link: Delivery      # source (arrow starts here)\n- linkcolor: #ffcc66\n\n### Discovery\n### Design\n- corner: square     # overrides inherited \"round\"\n### Delivery\n```\n\nCascade behavior:\n- `bgcolor`, `fgcolor`, `corner`, `line`, and `linkcolor` inherit down to any child that doesn't set its own value.\n- `note`, `base`, `link`, and `layout` do **not** cascade — they apply only to the heading you write them under.\n- `corner: square` is the default if nothing declares it. `line: solid` is the default.\n- `layout:` is honoured only on level-1 `#` headings; ignored silently on sub-headings. Use `- layout: square` to draw that root balanced (root centered, children split to the left and right halves, odd numbers place the extra child on the right).\n\n**Cross-links between elements on different branches / levels**\nTo draw a sparse dotted bezier with a small arrow from a **source** node to a **destination** node:\n1. Pick a heading (any level anywhere in the file) as the control point.\n2. Under that heading, write both lines:\n   - `- link: EXACT_HEADING_TEXT_OF_SOURCE` — arrow starts here\n   - `- base: EXACT_HEADING_TEXT_OF_DESTINATION` — arrow ends here (arrow tip points at the \"base\" side)\n3. Optionally write `- linkcolor: yourcolor` on the same heading to brand that edge. `linkcolor` cascades to children, so you can set it on a branch root to apply to many relations at once.\n4. The edge uses a sparser `1 7` dot rhythm than the `line: dots` hierarchy style, so it visually reads as a relation instead of a parent edge.\n5. If you want arrows in *both* directions (A ↔ B), write the opposite pair under a heading (or under either side) and both will render.\n6. Hover tooltip notes: nodes with `- note:` show a small `i` badge in the top-right; hover anywhere on the node to read it. Notes are strictly an in-app UI feature and are intentionally stripped from exported images.\n\n**Canvas controls**\n- Pan: drag empty canvas background.\n- Zoom: scroll wheel (zooms around cursor), or the floating `+` / `−` / `⤧ fit` controls in the top-right of the canvas, or keys:\n  - `+` / `=` / numpad `+` — zoom in\n  - `−` / numpad `−` — zoom out\n  - **double-click any empty canvas spot** — zoom in by 1.4× around that point\n\n**Split view**\nSplit mode opens with 30% editor / 70% canvas. Grab the vertical divider bar between them and drag to resize (15%–55%). Your last split width is remembered across sessions.\n\n**Exporting mindmaps**\n- In Split or Preview mode, use the **Export ▾** button to save the current mindmap as SVG, PNG, or JPG.\n- Exports always render the full diagram at native resolution. Current on-screen pan, zoom, and note badges never appear in the file.\n- `corner`, `line`, `layout` styles, and cross-links (including arrows + their `linkcolor`) are preserved in every exported format.\n- `note` tooltips are intentionally hidden in exports since they are a hover-only UI feature.\n- Exports are saved into your persistent image library and listed in the sidebar \"Images\" section. Click an image name to open it in a new tab, or use the `×` button to delete it.\n\n**Help button**\nThe `?` button to the right of **Export ▾** opens an in-app metadata reference. It is independent of the bundled `welcome.md` so you can safely delete the sample file.\n\n**Keyboard shortcuts**\n- Save: `Ctrl/Cmd + S`\n- Edit view: `Ctrl/Cmd + E`\n- Split view: `Ctrl/Cmd + L`\n- Preview view: `Ctrl/Cmd + P`\n- Close export menu, help modal, or new-file modal: `Esc`\n- Split drag: grab and drag the splitter bar\n",
                "changelog": "* multiple cross links from single node\n",
                "website": "https://ca.cloudron.io",
                "contactEmail": "support@appx.uk",
                "icon": "file://mdmap-logo.png",
                "tags": [
                    "productivity",
                    "markdown",
                    "mindmap"
                ],
                "iconUrl": "https://communityapps.appx.uk/cloudron-mdmap/mdmap-logo.png",
                "packagerName": "@timconsidine",
                "packagerUrl": "https://forgejo.tcjc.uk/cca/cloudron-mdmap",
                "minBoxVersion": "9.1.0",
                "mediaLinks": [
                    "https://communityapps.appx.uk/cloudron-mdmap/media/screenshot.png",
                    "https://communityapps.appx.uk/cloudron-mdmap/media/square.png"
                ],
                "dockerImage": "forgejo.tcjc.uk/cca/cloudron-mdmap:0.0.19"
            },
            "creationDate": "Tue, 18 Aug 2026 16:31:23 GMT",
            "ts": "Tue, 18 Aug 2026 16:31:23 GMT",
            "publishState": "published"
        },
        "0.0.20": {
            "manifest": {
                "id": "io.timconsidine.mdmap",
                "title": "mdmap",
                "author": "timconsidine",
                "description": "**mdmap** is a web application for writing markdown files and instantly visualising them as hierarchical mindmaps without sacrificing detailed information.\n\n**mdmap** offers non-standard cool features :\n- cross-node lines \n- hover notes\n- plain markdown files and rendered images in persistent storage\n- additional content such as deep documentation / thought captures are not rendered in the map but are available in the markdown source.\n\nIt is packaged for deployment on Cloudron as a single user app with authentication handled by the Cloudron proxyAuth addon — no separate login.\n\nWritten from scratch after inspration from [MarkMap](https://github.com/markmap/markmap).\n\nKey features:\n- Edit markdown source with a built-in text editor\n- Three view modes: Edit (markdown only), Split (markdown + mindmap side by side), Preview (mindmap only)\n- Split mode defaults to 30% editor / 70% canvas; the divider is draggable (15–55%) and the last ratio is remembered per-user\n- Multiple top-level `#` headings in one file render as independent root nodes on a canvas (level-1 nodes are never connected to each other)\n- Styled nodes via inline markdown metadata placed directly below a heading: `- bgcolor:`, `- fgcolor:`, `- corner: square|round`, `- line: solid|dots` — all of these cascade down to children that don't override them\n- Per-root layout switch: add `- layout: square` under a level-1 `#` heading to render that root balanced (root centered, children split around it); declare nothing or `- layout: default` for the standard left-to-right tree. Per-root, so you can mix styles in one file.\n- Cross-links between any nodes on any branches/levels: write `- base: TargetHeading` and `- link: SourceHeading` on the same heading, with optional `- linkcolor: color`. A sparse dotted bezier is drawn from the source node to the target with a small arrow at the destination end.\n- Hover notes: add `- note: free text` under any heading to attach a tooltip; a small `i` badge appears on the node so you know which items carry notes (notes do not cascade)\n- Tapering edge thickness: thicker lines for level 1 → 2, thinning at each subsequent parent→child level; each edge uses the child node's accent color and dash style\n- Pan by dragging the canvas background, zoom with the mouse wheel, double-click anywhere to zoom in at that point, plus on-screen zoom controls (+, −, fit) in the top-right\n- Keyboard zoom shortcuts: `+`/`=`/numpad `+` in, `−`/numpad `−` out\n- Full-canvas image export — renders the full mindmap at its native size (no current pan/zoom letterboxing) to SVG, PNG, or JPG, including cross-links and layout styles, saved directly into the app's image library\n- `?` help button to the right of Export opens an in-app metadata reference, so the bundled welcome.md can be deleted without losing documentation\n- All data is stored as plain markdown files and images in persistent storage\n- User preferences (last view mode, last opened file, split ratio) are remembered in a local SQLite settings database\n",
                "tagline": "mdmap - mindmap rendering of markdown source",
                "version": "0.0.20",
                "healthCheckPath": "/",
                "httpPort": 3000,
                "memoryLimit": 2147483648,
                "addons": {
                    "localstorage": {},
                    "proxyAuth": {}
                },
                "manifestVersion": 2,
                "postInstallMessage": "mdmap is now installed.\n\n**First use**\n1. Authentication is handled automatically by Cloudron via the proxyAuth addon, so you will be signed in as your Cloudron user immediately.\n2. You should see the bundled `welcome.md` file open in Edit view. It demonstrates all metadata styles and the multi-root, non-connected level-1 layout.\n3. Use the sidebar \"Markdown\" section and its `+` button to create a new markdown file. Use the `+` in the Images section only to see (refresh) exported images — new images arrive via the Export button.\n4. Toggle between **Edit**, **Split**, and **Preview** modes in the toolbar (the mode and last-opened file are restored on your next visit).\n\n**Metadata styling (quick reference)**\nPlace bullet lines immediately below a heading (blank lines, normal text, or another heading close the window). Unknown keys are preserved but ignored.\n\n```markdown\n# Project\n- layout: square\n- bgcolor: #0f172a\n- fgcolor: #e2e8f0\n- corner: round\n- line: dots\n- note: strategy top level, click anywhere on the node to see this tooltip\n\n## Product\n- bgcolor: #2563eb\n- line: solid         # overrides inherited \"dots\" from above\n- base: Platform      # destination (arrow points at this node)\n- link: Delivery      # source (arrow starts here)\n- linkcolor: #ffcc66\n\n### Discovery\n### Design\n- corner: square     # overrides inherited \"round\"\n### Delivery\n```\n\nCascade behavior:\n- `bgcolor`, `fgcolor`, `corner`, `line`, and `linkcolor` inherit down to any child that doesn't set its own value.\n- `note`, `base`, `link`, and `layout` do **not** cascade — they apply only to the heading you write them under.\n- `corner: square` is the default if nothing declares it. `line: solid` is the default.\n- `layout:` is honoured only on level-1 `#` headings; ignored silently on sub-headings. Use `- layout: square` to draw that root balanced (root centered, children split to the left and right halves, odd numbers place the extra child on the right).\n\n**Cross-links between elements on different branches / levels**\nTo draw a sparse dotted bezier with a small arrow from a **source** node to a **destination** node:\n1. Pick a heading (any level anywhere in the file) as the control point.\n2. Under that heading, write both lines:\n   - `- link: EXACT_HEADING_TEXT_OF_SOURCE` — arrow starts here\n   - `- base: EXACT_HEADING_TEXT_OF_DESTINATION` — arrow ends here (arrow tip points at the \"base\" side)\n3. Optionally write `- linkcolor: yourcolor` on the same heading to brand that edge. `linkcolor` cascades to children, so you can set it on a branch root to apply to many relations at once.\n4. The edge uses a sparser `1 7` dot rhythm than the `line: dots` hierarchy style, so it visually reads as a relation instead of a parent edge.\n5. If you want arrows in *both* directions (A ↔ B), write the opposite pair under a heading (or under either side) and both will render.\n6. Hover tooltip notes: nodes with `- note:` show a small `i` badge in the top-right; hover anywhere on the node to read it. Notes are strictly an in-app UI feature and are intentionally stripped from exported images.\n\n**Canvas controls**\n- Pan: drag empty canvas background.\n- Zoom: scroll wheel (zooms around cursor), or the floating `+` / `−` / `⤧ fit` controls in the top-right of the canvas, or keys:\n  - `+` / `=` / numpad `+` — zoom in\n  - `−` / numpad `−` — zoom out\n  - **double-click any empty canvas spot** — zoom in by 1.4× around that point\n\n**Split view**\nSplit mode opens with 30% editor / 70% canvas. Grab the vertical divider bar between them and drag to resize (15%–55%). Your last split width is remembered across sessions.\n\n**Exporting mindmaps**\n- In Split or Preview mode, use the **Export ▾** button to save the current mindmap as SVG, PNG, or JPG.\n- Exports always render the full diagram at native resolution. Current on-screen pan, zoom, and note badges never appear in the file.\n- `corner`, `line`, `layout` styles, and cross-links (including arrows + their `linkcolor`) are preserved in every exported format.\n- `note` tooltips are intentionally hidden in exports since they are a hover-only UI feature.\n- Exports are saved into your persistent image library and listed in the sidebar \"Images\" section. Click an image name to open it in a new tab, or use the `×` button to delete it.\n\n**Help button**\nThe `?` button to the right of **Export ▾** opens an in-app metadata reference. It is independent of the bundled `welcome.md` so you can safely delete the sample file.\n\n**Keyboard shortcuts**\n- Save: `Ctrl/Cmd + S`\n- Edit view: `Ctrl/Cmd + E`\n- Split view: `Ctrl/Cmd + L`\n- Preview view: `Ctrl/Cmd + P`\n- Close export menu, help modal, or new-file modal: `Esc`\n- Split drag: grab and drag the splitter bar\n",
                "changelog": "* auto-position map\n",
                "website": "https://ca.cloudron.io",
                "contactEmail": "support@appx.uk",
                "icon": "file://mdmap-logo.png",
                "tags": [
                    "productivity",
                    "markdown",
                    "mindmap"
                ],
                "iconUrl": "https://communityapps.appx.uk/cloudron-mdmap/mdmap-logo.png",
                "packagerName": "@timconsidine",
                "packagerUrl": "https://forgejo.tcjc.uk/cca/cloudron-mdmap",
                "minBoxVersion": "9.1.0",
                "mediaLinks": [
                    "https://communityapps.appx.uk/cloudron-mdmap/media/screenshot.png",
                    "https://communityapps.appx.uk/cloudron-mdmap/media/square.png"
                ],
                "dockerImage": "forgejo.tcjc.uk/cca/cloudron-mdmap:0.0.20"
            },
            "creationDate": "Fri, 21 Aug 2026 20:30:23 GMT",
            "ts": "Fri, 21 Aug 2026 20:30:23 GMT",
            "publishState": "published"
        },
        "0.0.21": {
            "manifest": {
                "id": "io.timconsidine.mdmap",
                "title": "mdmap",
                "author": "timconsidine",
                "description": "**mdmap** is a web application for writing markdown files and instantly visualising them as hierarchical mindmaps without sacrificing detailed information.\n\n**mdmap** offers non-standard cool features :\n- cross-node lines \n- hover notes\n- plain markdown files and rendered images in persistent storage\n- additional content such as deep documentation / thought captures are not rendered in the map but are available in the markdown source.\n\nIt is packaged for deployment on Cloudron as a single user app with authentication handled by the Cloudron proxyAuth addon — no separate login.\n\nWritten from scratch after inspration from [MarkMap](https://github.com/markmap/markmap).\n\nKey features:\n- Edit markdown source with a built-in text editor\n- Three view modes: Edit (markdown only), Split (markdown + mindmap side by side), Preview (mindmap only)\n- Split mode defaults to 30% editor / 70% canvas; the divider is draggable (15–55%) and the last ratio is remembered per-user\n- Multiple top-level `#` headings in one file render as independent root nodes on a canvas (level-1 nodes are never connected to each other)\n- Styled nodes via inline markdown metadata placed directly below a heading: `- bgcolor:`, `- fgcolor:`, `- corner: square|round`, `- line: solid|dots` — all of these cascade down to children that don't override them\n- Per-root layout switch: add `- layout: square` under a level-1 `#` heading to render that root balanced (root centered, children split around it); declare nothing or `- layout: default` for the standard left-to-right tree. Per-root, so you can mix styles in one file.\n- Cross-links between any nodes on any branches/levels: write `- base: TargetHeading` and `- link: SourceHeading` on the same heading, with optional `- linkcolor: color`. A sparse dotted bezier is drawn from the source node to the target with a small arrow at the destination end.\n- Hover notes: add `- note: free text` under any heading to attach a tooltip; a small `i` badge appears on the node so you know which items carry notes (notes do not cascade)\n- Tapering edge thickness: thicker lines for level 1 → 2, thinning at each subsequent parent→child level; each edge uses the child node's accent color and dash style\n- Pan by dragging the canvas background, zoom with the mouse wheel, double-click anywhere to zoom in at that point, plus on-screen zoom controls (+, −, fit) in the top-right\n- Keyboard zoom shortcuts: `+`/`=`/numpad `+` in, `−`/numpad `−` out\n- Full-canvas image export — renders the full mindmap at its native size (no current pan/zoom letterboxing) to SVG, PNG, or JPG, including cross-links and layout styles, saved directly into the app's image library\n- `?` help button to the right of Export opens an in-app metadata reference, so the bundled welcome.md can be deleted without losing documentation\n- All data is stored as plain markdown files and images in persistent storage\n- User preferences (last view mode, last opened file, split ratio) are remembered in a local SQLite settings database\n",
                "tagline": "mdmap - mindmap rendering of markdown source",
                "version": "0.0.21",
                "healthCheckPath": "/",
                "httpPort": 3000,
                "memoryLimit": 2147483648,
                "addons": {
                    "localstorage": {},
                    "proxyAuth": {}
                },
                "manifestVersion": 2,
                "postInstallMessage": "mdmap is now installed.\n\n**First use**\n1. Authentication is handled automatically by Cloudron via the proxyAuth addon, so you will be signed in as your Cloudron user immediately.\n2. You should see the bundled `welcome.md` file open in Edit view. It demonstrates all metadata styles and the multi-root, non-connected level-1 layout.\n3. Use the sidebar \"Markdown\" section and its `+` button to create a new markdown file. Use the `+` in the Images section only to see (refresh) exported images — new images arrive via the Export button.\n4. Toggle between **Edit**, **Split**, and **Preview** modes in the toolbar (the mode and last-opened file are restored on your next visit).\n\n**Metadata styling (quick reference)**\nPlace bullet lines immediately below a heading (blank lines, normal text, or another heading close the window). Unknown keys are preserved but ignored.\n\n```markdown\n# Project\n- layout: square\n- bgcolor: #0f172a\n- fgcolor: #e2e8f0\n- corner: round\n- line: dots\n- note: strategy top level, click anywhere on the node to see this tooltip\n\n## Product\n- bgcolor: #2563eb\n- line: solid         # overrides inherited \"dots\" from above\n- base: Platform      # destination (arrow points at this node)\n- link: Delivery      # source (arrow starts here)\n- linkcolor: #ffcc66\n\n### Discovery\n### Design\n- corner: square     # overrides inherited \"round\"\n### Delivery\n```\n\nCascade behavior:\n- `bgcolor`, `fgcolor`, `corner`, `line`, and `linkcolor` inherit down to any child that doesn't set its own value.\n- `note`, `base`, `link`, and `layout` do **not** cascade — they apply only to the heading you write them under.\n- `corner: square` is the default if nothing declares it. `line: solid` is the default.\n- `layout:` is honoured only on level-1 `#` headings; ignored silently on sub-headings. Use `- layout: square` to draw that root balanced (root centered, children split to the left and right halves, odd numbers place the extra child on the right).\n\n**Cross-links between elements on different branches / levels**\nTo draw a sparse dotted bezier with a small arrow from a **source** node to a **destination** node:\n1. Pick a heading (any level anywhere in the file) as the control point.\n2. Under that heading, write both lines:\n   - `- link: EXACT_HEADING_TEXT_OF_SOURCE` — arrow starts here\n   - `- base: EXACT_HEADING_TEXT_OF_DESTINATION` — arrow ends here (arrow tip points at the \"base\" side)\n3. Optionally write `- linkcolor: yourcolor` on the same heading to brand that edge. `linkcolor` cascades to children, so you can set it on a branch root to apply to many relations at once.\n4. The edge uses a sparser `1 7` dot rhythm than the `line: dots` hierarchy style, so it visually reads as a relation instead of a parent edge.\n5. If you want arrows in *both* directions (A ↔ B), write the opposite pair under a heading (or under either side) and both will render.\n6. Hover tooltip notes: nodes with `- note:` show a small `i` badge in the top-right; hover anywhere on the node to read it. Notes are strictly an in-app UI feature and are intentionally stripped from exported images.\n\n**Canvas controls**\n- Pan: drag empty canvas background.\n- Zoom: scroll wheel (zooms around cursor), or the floating `+` / `−` / `⤧ fit` controls in the top-right of the canvas, or keys:\n  - `+` / `=` / numpad `+` — zoom in\n  - `−` / numpad `−` — zoom out\n  - **double-click any empty canvas spot** — zoom in by 1.4× around that point\n\n**Split view**\nSplit mode opens with 30% editor / 70% canvas. Grab the vertical divider bar between them and drag to resize (15%–55%). Your last split width is remembered across sessions.\n\n**Exporting mindmaps**\n- In Split or Preview mode, use the **Export ▾** button to save the current mindmap as SVG, PNG, or JPG.\n- Exports always render the full diagram at native resolution. Current on-screen pan, zoom, and note badges never appear in the file.\n- `corner`, `line`, `layout` styles, and cross-links (including arrows + their `linkcolor`) are preserved in every exported format.\n- `note` tooltips are intentionally hidden in exports since they are a hover-only UI feature.\n- Exports are saved into your persistent image library and listed in the sidebar \"Images\" section. Click an image name to open it in a new tab, or use the `×` button to delete it.\n\n**Help button**\nThe `?` button to the right of **Export ▾** opens an in-app metadata reference. It is independent of the bundled `welcome.md` so you can safely delete the sample file.\n\n**Keyboard shortcuts**\n- Save: `Ctrl/Cmd + S`\n- Edit view: `Ctrl/Cmd + E`\n- Split view: `Ctrl/Cmd + L`\n- Preview view: `Ctrl/Cmd + P`\n- Close export menu, help modal, or new-file modal: `Esc`\n- Split drag: grab and drag the splitter bar\n",
                "changelog": "* auto-position map\n",
                "website": "https://ca.cloudron.io",
                "contactEmail": "support@appx.uk",
                "icon": "file://mdmap-logo.png",
                "tags": [
                    "productivity",
                    "markdown",
                    "mindmap"
                ],
                "iconUrl": "https://communityapps.appx.uk/cloudron-mdmap/mdmap-logo.png",
                "packagerName": "@timconsidine",
                "packagerUrl": "https://forgejo.tcjc.uk/cca/cloudron-mdmap",
                "minBoxVersion": "9.1.0",
                "mediaLinks": [
                    "https://communityapps.appx.uk/cloudron-mdmap/media/screenshot.png",
                    "https://communityapps.appx.uk/cloudron-mdmap/media/square.png"
                ],
                "dockerImage": "forgejo.tcjc.uk/cca/cloudron-mdmap:0.0.21"
            },
            "creationDate": "Fri, 21 Aug 2026 20:39:37 GMT",
            "ts": "Fri, 21 Aug 2026 20:39:37 GMT",
            "publishState": "published"
        }
    }
}