···11+MIT License
22+33+Copyright (c) 2026 Daniel Roe
44+55+Permission is hereby granted, free of charge, to any person obtaining a copy
66+of this software and associated documentation files (the "Software"), to deal
77+in the Software without restriction, including without limitation the rights
88+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
99+copies of the Software, and to permit persons to whom the Software is
1010+furnished to do so, subject to the following conditions:
1111+1212+The above copyright notice and this permission notice shall be included in all
1313+copies or substantial portions of the Software.
1414+1515+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1616+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1717+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1818+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1919+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2020+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2121+SOFTWARE.
+56
README.md
···11+# synchub.to
22+33+> mirror your GitHub repos to [tangled.org](https://tangled.org), automatically.
44+55+- [👉 Check it out](https://synchub.to/)
66+77+## Features
88+99+- a GitHub App
1010+- OAuth connection to tangled
1111+- per-push sync of branches and tags
1212+1313+> [!IMPORTANT]
1414+> Only public repositories are synced (tangled does not yet support private repositories).
1515+1616+## Try it out locally
1717+1818+You will need:
1919+2020+1. A GitHub App with a webhook pointed at your local tunnel and `contents:read`, `metadata:read` permissions plus the `push`, `create`, `delete`, `repository` events.
2121+2. A [Neon](https://neon.tech) Postgres database.
2222+3. An AT Protocol confidential OAuth client (see `.well-known/atproto-client-metadata.json`).
2323+2424+Set your environment variables in a `.env` file:
2525+2626+```env
2727+NUXT_GITHUB_APP_ID=<github app id>
2828+NUXT_GITHUB_APP_PRIVATE_KEY=<github app private key, pem>
2929+NUXT_GITHUB_WEBHOOK_SECRET=<github app webhook secret>
3030+NUXT_DATABASE_URL=<neon postgres connection string>
3131+NUXT_ENCRYPTION_KEY=<32-byte base64 key for sealing ssh private keys>
3232+NUXT_CRON_SECRET=<shared secret for the worker cron route>
3333+```
3434+3535+### Setup
3636+3737+```bash
3838+# install dependencies
3939+corepack enable
4040+pnpm install
4141+4242+# serve in dev mode, with hot reload at localhost:3000
4343+pnpm dev
4444+4545+# build for production
4646+pnpm build
4747+4848+# preview in production mode
4949+pnpm preview
5050+```
5151+5252+## License
5353+5454+Made with ❤️
5555+5656+Published under [MIT License](./LICENCE).