{"id":16826850,"url":"https://github.com/jdkato/pb","last_synced_at":"2026-05-20T06:10:16.467Z","repository":{"id":57657271,"uuid":"418397717","full_name":"jdkato/pb","owner":"jdkato","description":"A command-line tool to facilitate a multi-platform, scientific publishing workflow.","archived":false,"fork":false,"pushed_at":"2021-11-12T23:39:22.000Z","size":88,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-24T07:08:16.971Z","etag":null,"topics":["markdown","math-typesetting"],"latest_commit_sha":null,"homepage":"https://jdkato.medium.com/an-automated-workflow-for-scientific-writing-on-medium-ac9b74e08849?sk=e2f6d49eb4538c84d59a1b158a632015","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jdkato.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":"2021-10-18T07:48:59.000Z","updated_at":"2022-02-02T12:15:31.000Z","dependencies_parsed_at":"2022-08-26T05:20:52.842Z","dependency_job_id":null,"html_url":"https://github.com/jdkato/pb","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdkato%2Fpb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdkato%2Fpb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdkato%2Fpb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdkato%2Fpb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jdkato","download_url":"https://codeload.github.com/jdkato/pb/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244102039,"owners_count":20398379,"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":["markdown","math-typesetting"],"created_at":"2024-10-13T11:18:38.987Z","updated_at":"2026-05-20T06:10:16.440Z","avatar_url":"https://github.com/jdkato.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `pb`: Write once, publish anywhere\n\n`pb` is a command-line tool designed to facilitate a multi-platform, scientific\npublishing workflow.\n\nIt allows you to write your posts locally using scientific-styled Markdown\n(tables, code blocks, footnotes, and math formulas) *and* publish to external\nhosts[^1] while maintaining the structure of the original post.\n\n## Installation\n\nIf you have the [Go toolchain][4] installed, then you can use `go get`:\n\n```\ngo get github.com/jdkato/pb\n```\n\nOtherwise, download one of the [pre-built binaries][1].\n\n## Configuration\n\n### Medium\n\nUploading content to Medium requires an [Integration token][2]. To generate one, go to your [settings page][3], select \"Integration tokens\" from the sidebar, and create one:\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd width=\"50%\"\u003e\n            \u003ca href=\"https://user-images.githubusercontent.com/8785025/138613054-9487c146-29b0-4417-a33d-c9e0af6e561a.png\"\u003e\n                \u003cimg src=\"https://user-images.githubusercontent.com/8785025/138613054-9487c146-29b0-4417-a33d-c9e0af6e561a.png\" width=\"100%\"\u003e\n            \u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd width=\"50%\"\u003e\n            \u003ca href=\"https://user-images.githubusercontent.com/8785025/138613173-ca33e57b-9248-49c0-b472-65eeb31278eb.png\"\u003e\n                \u003cimg src=\"https://user-images.githubusercontent.com/8785025/138613173-ca33e57b-9248-49c0-b472-65eeb31278eb.png\" width=\"100%\"\u003e\n            \u003c/a\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd width=\"50%\"\u003e\n          Select 'Integrations tokens' from the sidebar.\n        \u003c/td\u003e\n        \u003ctd width=\"50%\"\u003eCreate an Integration token; the description can be anything you want.\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\nThen, enter the `pb configure` command, follow the instructions, and enter your token. For math formulas on Medium, you also need to have [Inkscape][5] installed and available on your `$PATH`.\n\n## Usage\n\n```\npb - A multi-platform publishing workflow.\n\nUsage:\tpb [options] [command] [arguments...]\n\tpb --to medium file.md\n\tpb configure\n\npb is a tool for cross-posting Markdown content while preserving structural\nelements (math typesetting, syntax highlighting, diagrams, etc.) across\nmultiple platforms.\n\nFlags:\n\n -h, --help       Print this help message.\n -d, --image-dir  Search directory for local images.\n -t, --to         Comma-delimited list of destination platforms.\n -v, --version    Print the current version.\n\nCommands:\n\n configure        Run an interactive configuration wizard.\n ```\n \n The basic command is\n \n ```\n pb -d \u003cimage path\u003e \u003cmarkdown file\u003e\n ```\n \n Where `\u003cimage path\u003e` is the directory where your local images are stored. For example, if you have an image definition like \n \n ```markdown\n ![A demo of uploading content to Medium](/img/medium-upload.gif)\n ```\n \n and the file is stored at `/some/path/static/img/medium-upload.gif`, then you'd use:\n \n  ```\n pb -d /some/path/static \u003cmarkdown file\u003e\n ```\n\n[1]: https://github.com/jdkato/pb/releases\n[2]: https://help.medium.com/hc/en-us/articles/213480228-Get-an-integration-token-for-your-writing-app\n[3]: https://medium.com/me/settings\n[4]: https://golang.org/\n[5]: https://inkscape.org/\n\n[^1]: Currently, only [Medium](https://medium.com/) is supported. Other hosts, like DEV and Hashnode, will be added in a future release. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdkato%2Fpb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjdkato%2Fpb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdkato%2Fpb/lists"}