[{"data":1,"prerenderedAt":1208},["ShallowReactive",2],{"app-page-berrytree":3},{"id":4,"title":5,"app_id":6,"apple_store":7,"body":8,"description":1093,"export":1094,"export_shape":1095,"extension":1096,"google_play":7,"import":1097,"last_verified":1098,"license":7,"links":1099,"logo":1108,"mapping":1109,"meta":1149,"modules":1150,"name":1199,"navigation":1094,"order":1200,"path":1201,"platform":1202,"repo":7,"self_reported":1097,"seo":1203,"spec_version":7,"status":1204,"stem":1205,"summary":1206,"website":7,"__hash__":1207},"apps\u002Fapps\u002Fberrytree.md","Berrytree","berrytree",null,{"type":9,"value":10,"toc":1081},"minimark",[11,16,20,23,27,30,48,51,71,74,78,81,166,172,175,262,266,277,941,945,951,974,978,981,1049,1053,1060,1063,1067,1070],[12,13,15],"h2",{"id":14},"status","Status",[17,18,19],"p",{},"BerryTree has been unpublished from Google Play, and its server has been\nunreachable since roughly August 2026. There was never an iOS release.\nThere is no project website; the Discord server linked above is the only\nofficial presence we have been able to find, and at time of writing it\nis locked with a notice that the service is down.",[17,21,22],{},"This entry exists because BerryTree users are holding export files from\nan app they can no longer run, and the recovery question is a real one.",[12,24,26],{"id":25},"evidence-level","Evidence level",[17,28,29],{},"This entry draws on two sources, neither reviewed or confirmed by anyone\nfrom the project, which is why it is not marked self-reported:",[31,32,33,42],"ul",{},[34,35,36,37,41],"li",{},"A ",[38,39,40],"strong",{},"single export file",", contributed by a BerryTree user. It was\ngenerated from a test account, so only seven sections held records.",[34,43,44,47],{},[38,45,46],{},"Static analysis of the last public Android client (1.0.16)",", carried\nout for interoperability. This shows how the app reads and writes each\nkind of record through its server API, which covers most of the\nsections the export sample left empty.",[17,49,50],{},"The two are not equally strong, and the record shapes below say which\none each comes from. \"Seen in export\" means the field names were\nobserved in a real export file. \"Inferred from client\" means the shape\nis what the app sends to and reads from its server; the export is a dump\nmade on the server side, so its field names are very likely the same,\nbut that has not been observed.",[17,52,53,54,58,59,62,63,66,67,70],{},"They can differ. The export sample carries fields that the 1.0.16 client\nnever references at all, such as ",[55,56,57],"code",{},"status_label"," on front entries and\n",[55,60,61],{},"layer_ids",", ",[55,64,65],{},"system_context_ids"," and ",[55,68,69],{},"hidden_in_contexts"," on members.\nSo the server's data model had moved ahead of that client, and a real\nexport may hold fields the client analysis cannot describe.",[17,72,73],{},"Corrections are very welcome, particularly a populated export.",[12,75,77],{"id":76},"export-shape","Export shape",[17,79,80],{},"A single JSON document, produced by the server and saved unchanged by\nthe app. Top-level keys observed:",[17,82,83,62,86,62,89,62,92,62,95,98,99,62,102,62,105,62,108,62,111,98,114,62,117,62,120,62,123,62,126,98,129,62,132,62,135,62,138,62,141,98,144,62,147,62,150,98,153,62,156,62,159,98,162,165],{},[55,84,85],{},"app",[55,87,88],{},"schema_version",[55,90,91],{},"exported_at",[55,93,94],{},"system",[55,96,97],{},"members",",\n",[55,100,101],{},"front_entries",[55,103,104],{},"custom_statuses",[55,106,107],{},"chat",[55,109,110],{},"polls",[55,112,113],{},"reminders",[55,115,116],{},"privacy_buckets",[55,118,119],{},"useful_links",[55,121,122],{},"folders",[55,124,125],{},"sub_systems",[55,127,128],{},"notes",[55,130,131],{},"journal",[55,133,134],{},"relationships",[55,136,137],{},"places",[55,139,140],{},"map_nodes",[55,142,143],{},"field_templates",[55,145,146],{},"user_settings",[55,148,149],{},"external_contacts",[55,151,152],{},"external_relationships",[55,154,155],{},"cross_system_relationships",[55,157,158],{},"system_contexts",[55,160,161],{},"layers",[55,163,164],{},"_partial_errors",".",[17,167,168,169,165],{},"The sample carried ",[55,170,171],{},"schema_version: 3",[17,173,174],{},"Details worth knowing before writing a reader:",[31,176,177,203,244,252],{},[34,178,179,184,185,188,189,192,193,196,197,199,200,165],{},[38,180,181,183],{},[55,182,104],{}," holds two different things",", discriminated by\n",[55,186,187],{},"kind",". Rows with ",[55,190,191],{},"kind: \"type\""," are fronting types that annotate a\nfront entry. Rows with ",[55,194,195],{},"kind: \"status\""," are standalone fronting\nentities that front with no member attached, which is the custom-front\npattern. Treating them as one list produces a roster full of things\nthat are not members. A missing ",[55,198,187],{}," means ",[55,201,202],{},"\"status\"",[34,204,205,211,212,214,215,217,218,221,222,224,225,98,228,62,231,62,234,98,237,66,240,243],{},[38,206,207,208,210],{},"The system profile is not on the ",[55,209,94],{}," object."," That one carries\nlittle more than a username and an account email. In the sample, the\nname, description, avatar, colour, tag and pronouns live on the\n",[55,213,158],{}," row whose ",[55,216,187],{}," is ",[55,219,220],{},"\"main\"",". The 1.0.16 client,\nhowever, never references system contexts, and edits the profile\nthrough these ",[55,223,146],{}," keys instead: ",[55,226,227],{},"system_description",[55,229,230],{},"system_avatar",[55,232,233],{},"system_banner",[55,235,236],{},"system_tags",[55,238,239],{},"system_custom_fields",[55,241,242],{},"system_status",". A reader should check both\nplaces.",[34,245,246,251],{},[38,247,248,250],{},[55,249,164],{}," is the exporter's own failure log."," A file\ncarrying entries here was already incomplete when it was written, and\na reader should surface that rather than presenting a clean import.\nNote that these strings are written by the exporter about a record\nthat failed, so they can quote user content; treat them accordingly if\nyour job logs are not encrypted.",[34,253,254,257,258,261],{},[38,255,256],{},"Images are references, not bytes."," An avatar, banner, folder image\nor profile-block image is either a base64 ",[55,259,260],{},"data:image\u002F..."," URI, which\nis self-contained and survives the server being gone, or a URL into\npublic object storage, which only works for as long as that storage\nkeeps serving. URLs pointing at the app's own server are dead.",[12,263,265],{"id":264},"record-shapes","Record shapes",[17,267,268,269,272,273,276],{},"Timestamps are ISO 8601 strings. Records carry a string ",[55,270,271],{},"id",", and the\nexport sample shows a ",[55,274,275],{},"user_id"," owner field on every record type it had.",[31,278,279,388,416,456,505,557,584,611,656,686,700,722,752,765,781,816,836,854,876,898,933],{},[34,280,281,286,287,62,290,62,293,98,296,62,299,62,302,62,305,62,308,62,311,98,314,62,317,320,321,324,325,98,328,62,331,334,335,62,338,341,342,62,345,62,348,98,351,354,355,358,359,62,362,365,366,98,369,372,373,376,377,380,381,384,385,387],{},[38,282,283],{},[55,284,285],{},"members[]"," (seen in export): ",[55,288,289],{},"name",[55,291,292],{},"display_name",[55,294,295],{},"pronouns",[55,297,298],{},"role",[55,300,301],{},"description",[55,303,304],{},"color",[55,306,307],{},"emoji",[55,309,310],{},"avatar",[55,312,313],{},"banner",[55,315,316],{},"is_private",[55,318,319],{},"proxy_tags"," (",[55,322,323],{},"{prefix, suffix}"," pairs), ",[55,326,327],{},"custom_fields",[55,329,330],{},"tags",[55,332,333],{},"folder_ids"," plus a legacy single ",[55,336,337],{},"folder_id",[55,339,340],{},"sub_system_ids","\nplus a legacy single ",[55,343,344],{},"sub_system_id",[55,346,347],{},"pinned",[55,349,350],{},"is_template",[55,352,353],{},"archived"," (a flag with no date), ",[55,356,357],{},"counts_toward_headcount"," (defaults\nto true), ",[55,360,361],{},"hide_from_main",[55,363,364],{},"mood"," (free text), ",[55,367,368],{},"blocks",[55,370,371],{},"theme_overrides",", and server-set ",[55,374,375],{},"short_id",", thumbnails and\n",[55,378,379],{},"has_avatar","\u002F",[55,382,383],{},"has_banner"," flags. ",[55,386,330],{}," is a plain list of strings\n(inferred from client; empty in the sample).",[34,389,390,395,396,399,400,403,404,407,408,411,412,415],{},[38,391,392],{},[55,393,394],{},"members[].custom_fields[]"," (inferred from client): one object per\nfield, ",[55,397,398],{},"{label, value, type, template_id}",", matched to its template by\n",[55,401,402],{},"template_id"," or, failing that, by label ignoring case. ",[55,405,406],{},"value"," is\nalways a string. A ",[55,409,410],{},"friend_note"," field instead holds ",[55,413,414],{},"entries",", each\nwith a body, a timestamp and the name of the friend who wrote it, which\nmakes that content another user's writing.",[34,417,418,423,424,62,427,430,431,62,434,62,437,62,440,62,443,98,446,66,449,452,453,455],{},[38,419,420],{},[55,421,422],{},"members[].blocks[]"," (inferred from client): profile layout blocks\nof type ",[55,425,426],{},"paragraph",[55,428,429],{},"h1"," to ",[55,432,433],{},"h3",[55,435,436],{},"quote",[55,438,439],{},"list",[55,441,442],{},"image",[55,444,445],{},"gallery",[55,447,448],{},"divider",[55,450,451],{},"columns",". The inside of a ",[55,454,451],{}," block is not known.",[34,457,458,463,464,62,467,98,470,62,473,476,477,62,480,62,483,98,486,62,489,62,492,62,494,62,497,62,500,66,503,165],{},[38,459,460],{},[55,461,462],{},"field_templates[]"," (inferred from client): ",[55,465,466],{},"label",[55,468,469],{},"type",[55,471,472],{},"required",[55,474,475],{},"order",". The types are ",[55,478,479],{},"text",[55,481,482],{},"longtext",[55,484,485],{},"markdown",[55,487,488],{},"html",[55,490,491],{},"block",[55,493,304],{},[55,495,496],{},"date",[55,498,499],{},"url",[55,501,502],{},"number",[55,504,410],{},[34,506,507,286,512,98,515,62,518,62,521,62,524,527,528,62,530,62,533,536,537,540,541,544,545,547,548,550,551,553,554,556],{},[38,508,509],{},[55,510,511],{},"front_entries[]",[55,513,514],{},"member_id",[55,516,517],{},"custom_status_id",[55,519,520],{},"fronting_type_id",[55,522,523],{},"note",[55,525,526],{},"custom_status"," (free\ntext), ",[55,529,57],{},[55,531,532],{},"started_at",[55,534,535],{},"ended_at"," (null while still\nfronting). A sub-system fronting as a unit is stored as one entry per\nmember tagged with ",[55,538,539],{},"subsystem_id"," (spelled without the underscore\nhere, inferred from client). ",[38,542,543],{},"Legacy form:"," older data records a\nfronting type as ",[55,546,514],{}," plus a ",[55,549,517],{}," that points at\na ",[55,552,191],{}," status, and sometimes as a ",[55,555,517],{}," of that\nkind with no member at all. Entries can also point at a status that\nhas since been deleted.",[34,558,559,286,564,62,566,62,568,98,570,62,572,62,575,62,577,62,580,583],{},[38,560,561],{},[55,562,563],{},"custom_statuses[]",[55,565,289],{},[55,567,307],{},[55,569,304],{},[55,571,301],{},[55,573,574],{},"image_url",[55,576,187],{},[55,578,579],{},"category",[55,581,582],{},"sort_order",". The\nfive default fronting types are created by the server.",[34,585,586,286,591,62,593,62,595,98,597,62,599,62,601,62,603,98,606,62,609,165],{},[38,587,588],{},[55,589,590],{},"folders[]",[55,592,289],{},[55,594,304],{},[55,596,307],{},[55,598,301],{},[55,600,442],{},[55,602,316],{},[55,604,605],{},"parent_id",[55,607,608],{},"show_in_main_list",[55,610,344],{},[34,612,613,463,618,62,620,98,622,62,624,62,626,62,628,62,630,62,632,62,635,98,638,62,640,62,643,98,646,320,648,651,652,655],{},[38,614,615],{},[55,616,617],{},"sub_systems[]",[55,619,289],{},[55,621,301],{},[55,623,307],{},[55,625,304],{},[55,627,310],{},[55,629,313],{},[55,631,295],{},[55,633,634],{},"tag",[55,636,637],{},"leader_id",[55,639,316],{},[55,641,642],{},"can_front_as_unit",[55,644,645],{},"hide_members_from_main",[55,647,327],{},[55,649,650],{},"{label, value}"," pairs) and ",[55,653,654],{},"member_ids",". Membership\nis also recorded on each member, so a reader should combine both.",[34,657,658,463,663,62,666,669,670,365,672,674,675,677,678,62,681,62,683,165],{},[38,659,660],{},[55,661,662],{},"journal[]",[55,664,665],{},"title",[55,667,668],{},"body"," (Markdown),\n",[55,671,364],{},[55,673,654],{}," (several authors, with a legacy single\n",[55,676,514],{},"), ",[55,679,680],{},"tag_ids",[55,682,337],{},[55,684,685],{},"created_at",[34,687,688,463,693,62,695,697,698,165],{},[38,689,690],{},[55,691,692],{},"notes[]",[55,694,665],{},[55,696,668],{}," (plain text),\n",[55,699,304],{},[34,701,702,463,707,66,710,713,714,717,718,721],{},[38,703,704],{},[55,705,706],{},"polls[]",[55,708,709],{},"question",[55,711,712],{},"options",", each\noption being ",[55,715,716],{},"{text, votes}"," where ",[55,719,720],{},"votes"," lists the ids of the\nmembers who chose it.",[34,723,724,463,729,62,731,734,735,98,738,741,742,430,745,748,749,165],{},[38,725,726],{},[55,727,728],{},"reminders[]",[55,730,665],{},[55,732,733],{},"time"," as ",[55,736,737],{},"HH:MM",[55,739,740],{},"days"," as a list of ",[55,743,744],{},"mon",[55,746,747],{},"sun",", and ",[55,750,751],{},"enabled",[34,753,754,463,759,62,761,98,763,165],{},[38,755,756],{},[55,757,758],{},"useful_links[]",[55,760,665],{},[55,762,499],{},[55,764,301],{},[34,766,767,463,772,62,775,777,778,780],{},[38,768,769],{},[55,770,771],{},"chat[]",[55,773,774],{},"channel_id",[55,776,514],{}," (the\nmember posting) and ",[55,779,479],{}," (Markdown). The client shows no replies,\nreactions, attachments or timestamps.",[34,782,783,463,788,98,791,62,794,62,797,799,800,802,803,806,807,810,811,813,814,165],{},[38,784,785],{},[55,786,787],{},"relationships[]",[55,789,790],{},"member_a_id",[55,792,793],{},"member_b_id",[55,795,796],{},"type_id",[55,798,469],{}," (a copy of the type's label), ",[55,801,523],{},",\nand optional per-link styling. Reciprocal relationships are stored as\n",[38,804,805],{},"two rows",", one in each direction, linked by ",[55,808,809],{},"inverse_pair_id",", so a\nreader that does not deduplicate on it imports every such link twice.\nOlder rows can have a ",[55,812,469],{}," label and no ",[55,815,796],{},[34,817,818,463,823,62,825,98,827,62,829,62,831,62,833,835],{},[38,819,820],{},[55,821,822],{},"external_contacts[]",[55,824,289],{},[55,826,298],{},[55,828,295],{},[55,830,307],{},[55,832,304],{},[55,834,301],{},". No avatar.",[34,837,838,463,843,98,845,62,848,62,850,62,852,165],{},[38,839,840],{},[55,841,842],{},"external_relationships[]",[55,844,514],{},[55,846,847],{},"external_contact_id",[55,849,469],{},[55,851,796],{},[55,853,523],{},[34,855,856,463,861,98,863,62,866,62,869,62,871,62,873,875],{},[38,857,858],{},[55,859,860],{},"cross_system_relationships[]",[55,862,514],{},[55,864,865],{},"friend_user_id",[55,867,868],{},"friend_member_id",[55,870,469],{},[55,872,796],{},[55,874,523],{},". The\nfriend ids point at another account on the same server, so they cannot\nbe resolved anywhere else.",[34,877,878,463,883,62,885,98,887,62,889,62,892,98,895,165],{},[38,879,880],{},[55,881,882],{},"privacy_buckets[]",[55,884,289],{},[55,886,304],{},[55,888,654],{},[55,890,891],{},"friend_ids",[55,893,894],{},"allowed_features",[55,896,897],{},"field_template_ids",[34,899,900,463,905,62,907,98,909,62,911,62,914,917,918,98,921,62,923,926,927,66,930,165],{},[38,901,902],{},[55,903,904],{},"places[]",[55,906,289],{},[55,908,301],{},[55,910,304],{},[55,912,913],{},"icon",[55,915,916],{},"parent_place_id"," (places nest), ",[55,919,920],{},"map_id",[55,922,654],{},[55,924,925],{},"images",", and a position as ",[55,928,929],{},"x",[55,931,932],{},"y",[34,934,935,940],{},[38,936,937],{},[55,938,939],{},"map_nodes[]"," (inferred from client): member positions on the\nrelationships graph, with no content of their own.",[12,942,944],{"id":943},"not-in-the-export","Not in the export",[17,946,947,948,950],{},"The app has several features whose records have no section in the\n",[55,949,171],{}," export. They were either not exported or added after\nthat version, and only a newer export would tell which:",[31,952,953,956,959,962,965,968,971],{},[34,954,955],{},"Journal tags and journal folders, which the journal entries refer to\nby id.",[34,957,958],{},"Chat channels and categories, which the chat messages refer to by id.",[34,960,961],{},"Relationship types, including their colours, symbols and whether they\nare reciprocal.",[34,963,964],{},"Mood check-ins and dissociation self-assessment (DES) results.",[34,966,967],{},"Named maps, the connections drawn between places, and free-form canvas\nitems on the map.",[34,969,970],{},"Habits and habit logs, custom quiz questions, and a companion pet.",[34,972,973],{},"Friends, friend requests, and notes shared with a friend.",[12,975,977],{"id":976},"known-loss","Known loss",[17,979,980],{},"Things BerryTree tracks that have no obvious v0.1 target:",[31,982,983,989,998,1007,1012,1018,1024,1029,1035],{},[34,984,985,988],{},[38,986,987],{},"Fronting types"," as a first-class user-editable vocabulary attached\nper front entry.",[34,990,991,994,995,997],{},[38,992,993],{},"Multi-context rosters with layers",", including per-context member\nhiding (",[55,996,69],{},").",[34,999,1000,320,1003,62,1005,997],{},[38,1001,1002],{},"Inner-world map",[55,1004,137],{},[55,1006,140],{},[34,1008,1009],{},[38,1010,1011],{},"Named privacy buckets.",[34,1013,1014,1017],{},[38,1015,1016],{},"External and cross-system relationships",", as distinct from\nmember-to-member ones.",[34,1019,1020,1023],{},[38,1021,1022],{},"Member templates"," as a first-class flag.",[34,1025,1026],{},[38,1027,1028],{},"Per-system useful-links list.",[34,1030,1031,1034],{},[38,1032,1033],{},"Profile blocks",", as a structured layout rather than a description.",[34,1036,1037,1038,62,1041,98,1043,62,1045,62,1047,165],{},"Assorted per-member flags: ",[55,1039,1040],{},"silent_switch",[55,1042,361],{},[55,1044,347],{},[55,1046,375],{},[55,1048,371],{},[12,1050,1052],{"id":1051},"how-to-get-an-export","How to get an export",[17,1054,1055,1056,1059],{},"The export is generated by BerryTree's server: the app requests it and\nsaves the reply as a JSON file. With the server unreachable, ",[38,1057,1058],{},"no new\nexports can be made",", so the only exports that exist are ones users\nsaved while it was running.",[17,1061,1062],{},"The app also keeps a local cache of the server responses for screens a\nuser visited, stored in its private app storage. On a device where the\napp is still installed that cache may hold data that was never exported,\nbut reading it requires root access to the device.",[12,1064,1066],{"id":1065},"reader-implementations","Reader implementations",[17,1068,1069],{},"Sheaf ships an importer covering the system profile, members, custom\nstatuses, fronting history and folders, marked experimental for exactly\nthe reason set out under Evidence level. It counts and reports every\nsection it cannot read rather than guessing at field names, so an import\ntells the user what was left behind instead of quietly dropping it.",[17,1071,1072,1073,1080],{},"The ",[1074,1075,1079],"a",{"href":1076,"rel":1077},"https:\u002F\u002Fpluralport.github.io\u002Fpluralport-converter\u002F",[1078],"nofollow","PluralPort Converter","\nreads the same export in the browser and writes a PluralPort file covering\nmembers, custom fronts, folders, tags, custom fields, front history and\nimages, for apps that do not have a BerryTree importer of their own.",{"title":1082,"searchDepth":1083,"depth":1083,"links":1084},"",2,[1085,1086,1087,1088,1089,1090,1091,1092],{"id":14,"depth":1083,"text":15},{"id":25,"depth":1083,"text":26},{"id":76,"depth":1083,"text":77},{"id":264,"depth":1083,"text":265},{"id":943,"depth":1083,"text":944},{"id":976,"depth":1083,"text":977},{"id":1051,"depth":1083,"text":1052},{"id":1065,"depth":1083,"text":1066},"Android app with a server component and a single-document JSON export. Unpublished from Google Play; its server has been unreachable since August 2026.",true,"Single JSON document generated by the server, one key per section, plus a _partial_errors array the exporter uses to record sections it failed to write. It carries no media bytes.","md",false,"2026-09-23",[1100,1103,1106],{"label":1101,"href":1102},"Discord server (Disboard listing)","https:\u002F\u002Fdisboard.org\u002Fserver\u002F1503465858687570000",{"label":1104,"href":1105},"Discord invite","https:\u002F\u002Fdiscord.com\u002Finvite\u002F8vYzuEGrcQ",{"label":1107,"href":1076},"Convert an export to PluralPort","\u002Fimages\u002Flogos\u002Fberrytree.png",[1110,1113,1117,1121,1124,1127,1130,1132,1135,1138,1141,1143,1146],{"source":285,"target":1111,"note":1112},"Member","counts_toward_headcount: false is the custom-front pattern; role and mood have no obvious target and suit custom fields.",{"source":1114,"target":1115,"note":1116},"members[].tags","TaxonomyTerm + TaxonomyAssignment","Tags are plain strings, deduplicated case-insensitively.",{"source":1118,"target":1119,"note":1120},"field_templates[] + members[].custom_fields[]","CustomFieldDefinition + CustomFieldValue","Values are inline on the member and reference a template by template_id when they have one, otherwise by label.",{"source":1122,"target":1123},"custom_statuses[] where kind is \"status\"","Member (custom front)",{"source":1125,"target":1126},"custom_statuses[] where kind is \"type\"","No direct target. Fronting types annotate a front rather than being one; they map naturally onto FrontAssignment front_role.",{"source":511,"target":1128,"note":1129},"FrontPeriod","An entry names either a member or a custom status. Older entries can carry a fronting type in custom_status_id, so resolve that id and check its kind before treating the entry as a status.",{"source":590,"target":1131},"Group with parent_group_id",{"source":1133,"target":1134},"journal[] + notes[]","Note, with the note kind in extensions",{"source":771,"target":1136,"note":1137},"Conversation + ChatMessage","Channel records are not exported, so conversations can only be rebuilt from each message's channel_id.",{"source":787,"target":1139,"note":1140},"MemberRelationship","Reciprocal relationships are stored as two rows linked by inverse_pair_id; deduplicate on it. Types are not exported, so RelationshipType can only be rebuilt from each row's type label.",{"source":706,"target":1142},"Provisional polls module",{"source":1144,"target":1145},"system_contexts[] and layers[]","No direct target. Closest fit is System records with parent_system_id, which loses the per-context member hiding.",{"source":1147,"target":1148},"places[] and map_nodes[]","No target. Inner-world map has no module in v0.1.",{},[1151,1155,1158,1161,1164,1167,1169,1171,1174,1177,1179,1181,1183,1185,1187,1190,1193,1196],{"key":1152,"support":1153,"note":1154},"systems","partial","One account system, plus a multi-context model (system_contexts, layers) and a separate sub_systems section with leaders, members and unit fronting. The editable system profile is split between system_contexts and user_settings.",{"key":97,"support":1156,"note":1157},"full","Name, display name, pronouns, description, colour, emoji, avatar, banner, privacy flag, role, mood, tags, proxy tags, profile blocks, multiple folders, archive and template flags, and a counts_toward_headcount flag equivalent to a custom front.",{"key":1159,"support":1156,"note":1160},"fronting","Intervals naming either a member or a custom status, with a user-editable fronting-type vocabulary (Fronting, Co-fronting, Co-conscious, Blurry, Influencing) attached per entry. Older data can encode the fronting type differently, see below.",{"key":1162,"support":1156,"note":1163},"groups","Folders with a parent chain, so nesting is preserved. Membership is recorded on the member, not the folder.",{"key":1165,"support":1153,"note":1166},"taxonomy","Per-member tags as plain strings, with no tag records of their own. Journal tags exist in the app but have no section in the export.",{"key":327,"support":1153,"note":1168},"field_templates definitions with ten field types, and values stored inline on each member keyed by label. One field type holds entries written by friends rather than by the system.",{"key":128,"support":1153,"note":1170},"Separate notes (plain text) and journal (Markdown, several member authors) sections. Journal folders and tags exist in the app but have no section in the export.",{"key":1172,"support":1153,"note":1173},"assets","Avatars and banners are either base64 data URIs, which are self-contained, or URLs into public object storage. The export carries no media bytes, so URL-referenced images depend on that storage still serving.",{"key":1175,"support":1153,"note":1176},"privacy","Per-record is_private booleans, plus privacy_buckets that grant chosen friends access to chosen members, features and custom fields, and per-context member hiding.",{"key":107,"support":1153,"note":1178},"Messages posted as a member into channels. Channel and category records have no section in the export, so their names are lost.",{"key":1180,"support":7,"note":7},"boards",{"key":134,"support":1153,"note":1182},"Three sections: member relationships, external relationships to people outside the system, and cross-system relationships. Relationship types have no section in the export.",{"key":110,"support":1153,"note":1184},"A question and options, with votes recorded per member. No close state or expiry.",{"key":113,"support":1153,"note":1186},"Weekly reminders only: a title, a time of day and a set of weekdays, scheduled on the device.",{"key":1188,"support":1153,"note":1189},"habits","Habits with a daily target and per-day completion logs exist in the app, but have no section in the export.",{"key":1191,"support":1153,"note":1192},"proxy","Members carry proxy_tags, though the app is not a Discord proxy bot.",{"key":1194,"support":1153,"note":1195},"sharing","Friends between accounts, with access granted through privacy buckets. Friend records have no section in the export.",{"key":1197,"support":1153,"note":1198},"safety","An app PIN lock and a calculator disguise mode, held in account settings rather than exported.","BerryTree",17,"\u002Fapps\u002Fberrytree","Android (unpublished), server-backed",{"description":1093},"inactive","apps\u002Fberrytree","Android app backed by a server, with a broad feature surface covering members, fronting, folders, journals, chat, polls, reminders, an inner-world map, and a multi-context roster model. It was unpublished from Google Play and its server has been unreachable since around August 2026, so the practical question for its users is what can be recovered from an export they already hold. Its JSON export writes a key for every section whether or not it has rows, which makes the feature surface unusually easy to enumerate from a single file.","eA9AK_0TF3GrZIk0WBweMPSK0h0cenz10gBq_7wJJ-8",1792272242563]