MeeTree is a Nextcloud app for TreePad-style hierarchical notes.
MeeTree stores notes as native .mtre files containing JSON. It imports and exports compatibility formats around that native model.
- Tree note navigation with a Jreepad-inspired split layout
- Edit node title and Markdown content with a toggleable Edit mode
- Add child nodes and delete non-root nodes
- Drag and drop nodes before, after, or inside other nodes
- Expand or collapse the whole tree from the tree toolbar
- Undo tree add, delete, move, and sort actions
- Remember collapsed and expanded branches per document
- Create new
.mtretree files from the File menu - Open and convert supported files from Nextcloud Files
- Import
.mtre,.hjt,.ctd, and JSON files from your computer - Export MeeTree,
.hjt, and.ctdfiles - Search titles, content, case-sensitive text, and regular expressions
- Standalone browser preview for quick UI testing
Place the meetree/ app directory in custom_apps/meetree or symlink it there, then enable it:
php occ app:enable meetreeGitHub Actions builds build/meetree-<version>.tar.gz on pushes to main and manual workflow runs. Push a version tag such as v1.1.8 to publish the archive as a GitHub Release asset for Nextcloud users.
Tagged release archives are signed when the repository secret MEETREE_SIGNING_KEY contains the private key that matches meetree/appinfo/certificate.crt. When that secret is configured, GitHub releases include both meetree-<version>.tar.gz and meetree-<version>.tar.gz.sig for Nextcloud App Store uploads. Never commit the private key.
MeeTree uses app id meetree. The public certificate is committed at meetree/appinfo/certificate.crt; the matching private key must stay local, usually at ~/.nextcloud/certificates/meetree.key.
Register the app at https://apps.nextcloud.com/developer/apps/new. Paste the public certificate and generate the app ownership signature locally:
echo -n "meetree" | openssl dgst -sha512 -sign ~/.nextcloud/certificates/meetree.key | openssl base64Upload releases at https://apps.nextcloud.com/developer/apps/releases/new. Use the GitHub release archive URL and the matching archive signature. To generate both signatures locally for the current version, run:
./meetree/scripts/appstore-signatures.shThe script writes build/meetree-<version>.tar.gz.sig and prints the signatures needed by the App Store forms.
To preview the interface without Nextcloud, open meetree/standalone/index.html in a browser or serve the repository root locally:
python3 -m http.server 8080Then visit http://localhost:8080/meetree/standalone/. The standalone preview saves data to browser localStorage and supports local import/export, but it does not test Nextcloud routing, authentication, or file storage.
MeeTree's native extension is .mtre. The file contents are JSON so advanced users can inspect or repair files with a text editor.
Node content is plain Markdown text. MeeTree opens nodes in preview mode by default; press Edit to toggle editing. MeeTree supports common Markdown formatting such as headings, bold and italic text, links, lists, task lists, blockquotes, inline code, fenced code blocks, horizontal rules, and line breaks.
New trees are created in /MeeTree/ by default, for example /MeeTree/untitled.mtre.
Files imported with the browser's local file picker are saved as converted .mtre files under /MeeTree/. Browsers expose the selected file name and contents, but not the original local folder path.
Files opened from Nextcloud Files keep their Nextcloud location.
Native .mtre files autosave back to the same file.
Legacy files such as .hjt or .ctd are converted to .mtre beside the source file when possible, for example /Notes/project.hjt becomes /Notes/project.mtre. If MeeTree cannot write beside the source file, it falls back to /MeeTree/.
MeeTree writes TreePad 2.7 Lite-style HJT:
<Treepad version 2.7>
dt=Text
<node>
Title
0
Content
<end node> 5P9i0s8y19Z
CherryTree .ctd XML has first-pass plain text support. CherryTree .ctb SQLite, encrypted .ctz/.ctx, and Jreepad .jree are not implemented yet.