{"id":38298641,"url":"https://github.com/arborchat/muscadine","last_synced_at":"2026-01-17T02:21:58.920Z","repository":{"id":57554090,"uuid":"154978625","full_name":"arborchat/muscadine","owner":"arborchat","description":"[legacy] The Arbor reference client implementation","archived":false,"fork":false,"pushed_at":"2019-06-13T23:56:59.000Z","size":464,"stargazers_count":5,"open_issues_count":25,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-10-09T12:21:32.650Z","etag":null,"topics":["arborchat","client","go"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arborchat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-10-27T15:20:15.000Z","updated_at":"2021-05-07T13:37:26.000Z","dependencies_parsed_at":"2022-09-26T18:51:13.239Z","dependency_job_id":null,"html_url":"https://github.com/arborchat/muscadine","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/arborchat/muscadine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arborchat%2Fmuscadine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arborchat%2Fmuscadine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arborchat%2Fmuscadine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arborchat%2Fmuscadine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arborchat","download_url":"https://codeload.github.com/arborchat/muscadine/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arborchat%2Fmuscadine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28492215,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T00:50:05.742Z","status":"online","status_checked_at":"2026-01-17T02:00:07.808Z","response_time":85,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arborchat","client","go"],"created_at":"2026-01-17T02:21:58.839Z","updated_at":"2026-01-17T02:21:58.901Z","avatar_url":"https://github.com/arborchat.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Muscadine\n\nMuscadine is the reference client for the [Arbor chat protocol](https://github.com/arborchat/protocol).\n\nYou can get information about the Arbor project [here](https://man.sr.ht/~whereswaldon/arborchat/)\n\n**DISCLAIMER**: Arbor currently doesn't use any encryption whatsoever. We are working to change that, but\nright now anything sent over the system can be recorded or modified by malicious third parties. DO NOT\nsend anything sensitive over Arbor, and DO NOT put a great deal of faith in the integrity of messages\nthat you recieve from others.\n\nIt currently runs as a terminal user interface that looks something like this:\n\n![muscadine screenshot](./img/readme-screenshot.png)\n\nIn this screenshot, you can see that one message (highlighted in red) is selected. The user can hit \"enter\"\nto reply to this message, or can use up/down arrow keys to scroll. Importantly, the selected message isn't\nactually a direct reply to the message above it. The messages highlighted in yellow are the series of replies\nrelevant to the selected message.\n\nThis is muscadine's (and arbor's) killer feature. You can actually see the context for new messages that come\nin. If someone replies to a much earlier message, you can tell that they are doing so. This is a marked improvement\nover the current clutter that can build up during group chat sessions.\n\nYou may also notice the `[join]` and `[quit]` messages. Since Arbor does not track online users, Muscadine sends these\nmessages to inform the chat of who is connected.\n\nThe very first line in the screenshot contains some extra information about the current session:\n\n- Shown in the screenshot\n    - `Selected: Mon Jan 7 14:34:53 EST 2019`: shows the timestamp of the selected message (the red line in the screenshot)\n    - `Connected`: indicates Muscadine is connected to an Arbor server\n    - `all known threads complete`: indicates the entire chat history is loaded by the client\n- Not shown in the screenshot\n    - `Connecting...`: indicates Muscadine is trying to connect to an Arbor server\n    - `3+ broken threads, q to query`: The `3` indicates how many messages are missing their history. `q to query` is a\n    reminder to press q in order to ask the server for missing information. This key usually has no effect since Muscadine\n    automatically queries missing history on startup.\n\n## What's a Muscadine?\n\nMuscadine is named after [muscadine grapes](https://en.wikipedia.org/wiki/Vitis_rotundifolia), a wild grape native to the\nsoutheastern United States. This name was chosen because the initial developers live in the southeastern US, and because\nthese grape vines are a climbing plant that is often supported by an arbor.\n\n## Install\n\nThe best way to install Muscadine is to head over to our [Releases](https://github.com/arborchat/muscadine/releases) page and pick up the latest build for your operating system.\n\n## Build\n\nIf you'd like to build Muscadine, make sure you have [Go](https://golang.org/) and [dep](https://github.com/golang/dep) installed. Clone this repository, then run:\n\n```\ncd muscadine\n./build.sh\n```\n\n## Use\n\nTo join a server, run:\n\n```\n~/go/bin/muscadine -username $USER \u003cIP:Port\u003e\n```\n\nThe keybindings are:\n\n- History Mode\n    - up/down/j/k - scroll the selected message up and down\n    - left/right/h/l - scroll the viewport (not the cursor) up and down\n    - enter/i/r - start a reply to the selected message\n    - n - reply to the earliest known message (the root message)\n    - home/g - jump to top of history\n    - end/G - jump to bottom of history\n    - q - query the server for any missing chat history (only necessary if top status bar indicates)\n    - w - toggle the list of active users (covers part of history)\n- Compose Mode:\n    - enter - send your message (unless in paste mode)\n    - ctrl+p - toggle \"paste mode\", in which the enter key will *not* send the message, but instead type a newline\n    - escape - return to history mode\n- Global:\n    - ctrl+c - quit\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farborchat%2Fmuscadine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farborchat%2Fmuscadine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farborchat%2Fmuscadine/lists"}