{"id":13546568,"url":"https://github.com/nolanlawson/pinafore","last_synced_at":"2025-05-15T20:01:37.083Z","repository":{"id":40063916,"uuid":"116539127","full_name":"nolanlawson/pinafore","owner":"nolanlawson","description":"Alternative web client for Mastodon (UNMAINTAINED)","archived":false,"fork":false,"pushed_at":"2024-09-22T21:34:50.000Z","size":150638,"stargazers_count":1034,"open_issues_count":169,"forks_count":177,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-04-13T02:02:08.937Z","etag":null,"topics":["fediverse","mastodon","pwa"],"latest_commit_sha":null,"homepage":"https://pinafore.social","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nolanlawson.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-01-07T05:05:53.000Z","updated_at":"2025-03-22T23:21:07.000Z","dependencies_parsed_at":"2023-02-18T07:00:53.117Z","dependency_job_id":"cb95456f-72fa-4611-a26b-70b221898239","html_url":"https://github.com/nolanlawson/pinafore","commit_stats":{"total_commits":2367,"total_committers":57,"mean_commits":"41.526315789473685","dds":0.09294465568229826,"last_synced_commit":"74e1ae793d6c08d810db7d44c86c764b69f7aed1"},"previous_names":[],"tags_count":116,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nolanlawson%2Fpinafore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nolanlawson%2Fpinafore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nolanlawson%2Fpinafore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nolanlawson%2Fpinafore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nolanlawson","download_url":"https://codeload.github.com/nolanlawson/pinafore/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248654036,"owners_count":21140235,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["fediverse","mastodon","pwa"],"created_at":"2024-08-01T12:00:40.268Z","updated_at":"2025-04-13T02:03:42.397Z","avatar_url":"https://github.com/nolanlawson.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","Overview","Clients","mastodon","客户端"],"sub_categories":["Mastodon"],"readme":"# Pinafore [![No Maintenance Intended](http://unmaintained.tech/badge.svg)](http://unmaintained.tech/)\n\n_**Note:** Pinafore is unmaintained. Read [this](https://nolanlawson.com/2023/01/09/retiring-pinafore/). Original documentation follows._\n\nAn alternative web client for [Mastodon](https://joinmastodon.org), focused on speed and simplicity.\n\nPinafore is available at [pinafore.social](https://pinafore.social). Beta releases are at [dev.pinafore.social](https://dev.pinafore.social).\n\nSee the [user guide](https://github.com/nolanlawson/pinafore/blob/master/docs/User-Guide.md) for basic usage. See the [admin guide](https://github.com/nolanlawson/pinafore/blob/master/docs/Admin-Guide.md) if Pinafore cannot connect to your instance.\n\nFor updates and support, follow [@pinafore@fosstodon.org](https://fosstodon.org/@pinafore).\n\n## Browser support\n\nPinafore supports the latest versions of the following browsers:\n\n- Chrome\n- Edge\n- Firefox\n- Safari\n\nCompatible versions of each (Opera, Brave, Samsung, etc.) should be fine.\n\n## Goals and non-goals\n\n### Goals\n\n- Support the most common use cases\n- Small page weight\n- Fast even on low-end devices\n- Accessibility\n- Offline support in read-only mode\n- Progressive Web App features\n- Multi-instance support\n- Support latest versions of Chrome, Edge, Firefox, and Safari\n- Support non-Mastodon instances (e.g. Pleroma) as well as possible\n- Internationalization\n\n### Secondary / possible future goals\n\n- Serve as an alternative frontend tied to a particular instance\n- Offline search\n\n### Non-goals\n\n- Supporting old browsers, proxy browsers, or text-based browsers\n- React Native / NativeScript / hybrid-native version\n- Android/iOS apps (using Cordova or similar)\n- Full functionality with JavaScript disabled\n- Emoji support beyond the built-in system emoji\n- Multi-column support\n- Admin/moderation panel\n- Offline support in read-write mode (would require sophisticated sync logic)\n\n## Building\n\nPinafore requires [Node.js](https://nodejs.org/en/) and [Yarn](https://yarnpkg.com).\n\nTo build Pinafore for production, first install dependencies:\n\n    yarn --production --pure-lockfile\n\nThen build:\n\n    yarn build\n\nThen run:\n\n    PORT=4002 node server.js\n\n### Docker\n\nTo build a Docker image for production:\n\n    docker build .\n    docker run -d -p 4002:4002 [your-image]\n\nNow Pinafore is running at `localhost:4002`.\n\n### docker-compose\n\nAlternatively, use docker-compose to build and serve the image for production:\n\n    docker-compose up --build -d\n\nThe image will build and start, then detach from the terminal running at `localhost:4002`.\n\n### Updating\n\nTo keep your version of Pinafore up to date, you can use `git` to check out the latest tag:\n\n    git checkout $(git tag -l | sort -Vr | head -n 1)\n\n### Exporting\n\nPinafore is a static site. When you run `yarn build`, static files will be\nwritten to `__sapper__/export`.\n\nIt is _not_ recommended to directly expose these files when self-hosting. Instead, you should use `node server.js` (e.g. with an\nnginx or Apache proxy in front). This adds several things you don't get from the raw static files:\n\n- [CSP headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) (important for security)\n- Certain dynamic routes (less important because of Service Worker managing routing, but certain things could break if Service Workers are disabled in the user's browser)\n\nHaving an [nginx config generator](https://github.com/nolanlawson/pinafore/issues/1878) is currently an open issue.\n\n## Developing and testing\n\nSee [CONTRIBUTING.md](https://github.com/nolanlawson/pinafore/blob/master/CONTRIBUTING.md) for\nhow to run Pinafore in dev mode and run tests.\n\n## Changelog\n\nFor a changelog, see the [GitHub releases](http://github.com/nolanlawson/pinafore/releases/).\n\nFor a list of breaking changes, see [BREAKING_CHANGES.md](https://github.com/nolanlawson/pinafore/blob/master/BREAKING_CHANGES.md).\n\n## What's with the name?\n\nPinafore is named after the [Gilbert and Sullivan play](https://en.wikipedia.org/wiki/Hms_pinafore). The [soundtrack](https://www.allmusic.com/album/gilbert-sullivan-hms-pinafore-1949-mw0001830483) is very good.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnolanlawson%2Fpinafore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnolanlawson%2Fpinafore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnolanlawson%2Fpinafore/lists"}