{"id":26927463,"url":"https://github.com/bobrippling/podsync","last_synced_at":"2025-10-29T04:37:01.966Z","repository":{"id":142234121,"uuid":"606733741","full_name":"bobrippling/podsync","owner":"bobrippling","description":"A minimal podcast sync server, using the same API as GPodder, compatible with AntennaPod. See also https://github.com/kd2org/opodsync","archived":false,"fork":false,"pushed_at":"2025-02-24T09:56:19.000Z","size":290,"stargazers_count":4,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-27T09:07:20.507Z","etag":null,"topics":["antennapod","gpodder","nextcloud","open-podcast-api","podcast","sqlite"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bobrippling.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-26T12:06:23.000Z","updated_at":"2025-02-24T09:56:22.000Z","dependencies_parsed_at":"2024-02-22T19:47:34.664Z","dependency_job_id":"1efceb2e-ce38-4532-8d24-9981cf0f948e","html_url":"https://github.com/bobrippling/podsync","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bobrippling%2Fpodsync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bobrippling%2Fpodsync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bobrippling%2Fpodsync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bobrippling%2Fpodsync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bobrippling","download_url":"https://codeload.github.com/bobrippling/podsync/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246563369,"owners_count":20797444,"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":["antennapod","gpodder","nextcloud","open-podcast-api","podcast","sqlite"],"created_at":"2025-04-02T04:15:57.282Z","updated_at":"2025-10-29T04:37:01.961Z","avatar_url":"https://github.com/bobrippling.png","language":"Rust","readme":"# podsync\n\nA HTTP server for syncing podcast app state, mirroring the [gpodder API]. Designed for use with [AntennaPod]'s [sync service].\n\n[gpodder API]: https://github.com/gpodder/mygpo/blob/80c41dc0c9a58dc0e85f6ef56662cdfd0d6e3b16/doc/api/reference/events.rst\n[AntennaPod]: https://github.com/AntennaPod/AntennaPod\n[sync service]: https://github.com/AntennaPod/AntennaPod/blob/24d1a06662c8eec31f3a4c3ebdcd3aea759fb63a/core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java\n\n# Setup\n\n## Creating Users\n\nAdd a user with `scripts/add-user.sh`:\n\n```sh\n$ ./scripts/add-user.sh yourname\nyourname's pass: \u003center password\u003e\n```\n\nThis will add a user into the database, assumed to be `pod.sql`.\n\n# Endpoints\n\npodsync doesn't cover the [full gpodder API], just enough to get AntennaPod to work:\n\n- auth:\n\t- `POST api/2/auth/{username}/login.json`\n\t- `POST api/2/auth/{username}/logout.json`\n- devices:\n\t- `GET api/2/devices/{username}.json`\n\t- `POST api/2/devices/{username}/{device}.json`\n- subscriptions:\n\t- `GET api/2/subscriptions/{username}/{device}.json`\n\t- `POST api/2/subscriptions/{username}/{device}.json`\n- episodes:\n\t- `GET api/2/episodes/{username}.json`\n\t- `POST api/2/episodes/{username}.json`\n\n[full gpodder API]: https://github.com/gpodder/mygpo/tree/80c41dc0c9a58dc0e85f6ef56662cdfd0d6e3b16/doc/api/reference\n\n# Logging\n\npodsync uses the `RUST_LOG` environment variable for logging. To generate logs similar to a webserver:\n```sh\nexport RUST_LOG=podsync=info\n\n# or for debugging:\nexport RUST_LOG=podsync=trace\n\n# for warp/endpoint output:\nexport RUST_LOG=podsync=info,warp=info\n```\n\nSee the [log crate] for more details\n\n[log crate]: https://crates.io/crates/log\n\n# Building\n\n## Modes\n\npodsync has two backends: SQL database or plain text files. The former being more scalable, the latter being easier to inspect and manipulate with Unix tools.\n\nBy default it builds in file mode, to build in sql mode, build with `cargo build --features backend-sql`.\n\n## SQLx offline build\n\npodsync uses sqlx in [offline mode] for builds (see [`build.rs`](./build.rs) for more).\n\nTo update the schema:\n```sh\nexport DATABASE_URL=sqlite://pod.sql\ncargo install sqlx-cli\ncargo sqlx prepare -- --tests --features backend-sql\ngit commit -m 'Update sqlx snapshot' sqlx-data.json\n```\n\n[offline mode]: https://docs.rs/sqlx/latest/sqlx/macro.query.html#offline-mode-requires-the-offline-feature\n\n## Docker\n\nAn unofficial [Docker image exists](https://github.com/OpenByteDev/podsync-docker), maintained by OpenByteDev\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbobrippling%2Fpodsync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbobrippling%2Fpodsync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbobrippling%2Fpodsync/lists"}