{"id":29126133,"url":"https://github.com/axbecher/issue-sync-to-obsidian","last_synced_at":"2026-04-11T08:05:33.057Z","repository":{"id":301877636,"uuid":"1009786025","full_name":"axbecher/issue-sync-to-obsidian","owner":"axbecher","description":"Basically is a lightweight Python script that fetches issues from a GitHub repository (including private ones) using the GitHub API and writes them into your Obsidian vault as neatly formatted Markdown notes.","archived":false,"fork":false,"pushed_at":"2025-06-29T10:40:57.000Z","size":1,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-29T11:29:47.376Z","etag":null,"topics":["automation","cli-tool","developer-tools","dotenv","github-api","issue-sync","issue-tracker","knowledge-management","markdown","obsidian","obsidian-md","open-source","personal-productivity","productivity-tool","python","secondbrain"],"latest_commit_sha":null,"homepage":"","language":"Python","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/axbecher.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":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-27T17:54:40.000Z","updated_at":"2025-06-29T10:41:00.000Z","dependencies_parsed_at":"2025-06-29T11:40:15.922Z","dependency_job_id":null,"html_url":"https://github.com/axbecher/issue-sync-to-obsidian","commit_stats":null,"previous_names":["axbecher/issue-sync-to-obsidian"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/axbecher/issue-sync-to-obsidian","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axbecher%2Fissue-sync-to-obsidian","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axbecher%2Fissue-sync-to-obsidian/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axbecher%2Fissue-sync-to-obsidian/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axbecher%2Fissue-sync-to-obsidian/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/axbecher","download_url":"https://codeload.github.com/axbecher/issue-sync-to-obsidian/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axbecher%2Fissue-sync-to-obsidian/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262680493,"owners_count":23347592,"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":["automation","cli-tool","developer-tools","dotenv","github-api","issue-sync","issue-tracker","knowledge-management","markdown","obsidian","obsidian-md","open-source","personal-productivity","productivity-tool","python","secondbrain"],"created_at":"2025-06-29T23:01:40.559Z","updated_at":"2026-04-11T08:05:33.017Z","avatar_url":"https://github.com/axbecher.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🧠 issue-sync-to-obsidian\n\nSync GitHub Issues to your Obsidian vault — as Markdown.\n\nThis simple Python utility pulls issues from a GitHub repository (including private ones) and writes them to a single Markdown file (GitHub_Issues.md) inside your local Obsidian vault. It updates the file only if changes are detected.\n\n## 📚 Table of Contents\n\n- [📁 Project Structure](#-project-structure)\n- [🖼️ Screenshots](#️-screenshots)\n- [⚙️ Setup](#️-setup)\n- [▶️ Usage](#️-usage)\n- [✅ Example Output](#-example-output)\n- [🔒 .env Security](#-env-security)\n- [🛠 Suggestions](#-suggestions)\n- [🛡 License](#-license)\n- [🤝 Contributor](#-contributor)\n- [📬 Contact](#-contact)\n\n---\n\n## 📁 Project Structure\n\n```\nissue-sync-to-obsidian/\n├── .env                # Your personal secrets (not committed)\n├── .env_example        # A template for your .env file\n├── .gitignore\n├── run.py              # Launches test.py then main.py if passed\n├── requirements.txt    # Dependencies list\n├── README.md           # This file\n└── src/\n    ├── main.py         # Main script: fetches issues, writes to Markdown\n    └── test.py         # Verifies .env values and setup before running\n```\n\n---\n\n## 🖼️ Screenshots\n\n### 📬 Issues in Github Repo Brwoser Preview\nHere’s an example of issues from github repo:\n![Github Repo in Browser alt text](assets/githubIssues.png)\n\n### ⚙️ Issues in Obsidian formated as Markdown\nThis is how data formated as Markdown look in Obsidian:\n![Issues in Obsidian Formated as Markdown alt text](assets/obsidianFormatedIssues.png)\n\n---\n\n## ⚙️ Setup\n\n1. Clone the repository:\n\n   ```bash\n   git clone https://github.com/axbecher/issue-sync-to-obsidian.git\n   cd issue-sync-to-obsidian\n   ```\n\n2. Install dependencies:\n\n   ```bash\n   pip install -r requirements.txt\n   ```\n\n3. Create a .env file using the example:\n\n   ```bash\n   cp .env_example .env\n   ```\n\n4. Fill in your .env file:\n\n   ```\n   GITHUB_TOKEN=ghp_yourgithubtokenhere\n   REPO=username/repository-name\n   VAULT_PATH=/absolute/path/to/your/obsidian/vault\n   ```\n\n   📌 Notes:\n   - GITHUB_TOKEN should be a GitHub personal access token (PAT) with repo scope if the repository is private.\n   - REPO must follow username/repository-name format (no URLs).\n   - VAULT_PATH should be the full path to your local Obsidian vault folder.\n\n---\n\n## ▶️ Usage\n\nTo safely run the main script:\n\n```bash\npython run.py\n```\n\nrun.py executes test.py first to check:\n\n- Environment variables are defined\n- REPO is in the correct format\n- GitHub token and repository are valid\n- Obsidian VAULT_PATH exists and is a folder\n\nOnly if all checks pass, main.py will run and update your vault file.\n\n---\n\n## ✅ Example Output\n\nFile: ObsidianVault/GitHub_Issues.md\n\n```markdown\n# GitHub Issues (last updated 2025-06-29)\n\n## #12 - Fix login bug\n\u003e Resolves session timeout when using 2FA.\n[View on GitHub](https://github.com/axbecher/issue-sync-to-obsidian/issues/12)\n\n## #11 - Add search filter\n\u003e Add a search bar to filter dashboard entries.\n[View on GitHub](https://github.com/axbecher/issue-sync-to-obsidian/issues/11)\n```\n\n---\n\n## 🔒 .env Security\n\nAlways exclude your .env file from commits. This project includes a .gitignore entry to prevent that automatically. Use .env_example for sharing the structure safely.\n\n---\n\n## 🛠 Suggestions\n\n- Schedule run.py using cron (Linux/macOS) or Task Scheduler (Windows)\n- Customize it to fetch only open issues, or with certain labels\n- Extend to sync PRs, milestones, or even write per-issue files\n\n---\n\n## 🛡 License\n\nMIT License — open to use, modify, and distribute.\n\n---\n\n### 🤝 Contributor\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://axbecher.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/72851811?v=4\" width=\"100px;\" alt=\"Alexandru Becher\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAlexandru Becher\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n## 📬 Contact\nFor questions or improvements, feel free to open an [issue](https://github.com/axbecher/issue-sync-to-obsidian/issues) or [PR](https://github.com/axbecher/issue-sync-to-obsidian/pulls).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxbecher%2Fissue-sync-to-obsidian","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faxbecher%2Fissue-sync-to-obsidian","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxbecher%2Fissue-sync-to-obsidian/lists"}