https://github.com/axbecher/issue-sync-to-obsidian
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.
https://github.com/axbecher/issue-sync-to-obsidian
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
Last synced: 9 months ago
JSON representation
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.
- Host: GitHub
- URL: https://github.com/axbecher/issue-sync-to-obsidian
- Owner: axbecher
- Created: 2025-06-27T17:54:40.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2025-06-29T10:40:57.000Z (9 months ago)
- Last Synced: 2025-06-29T11:29:47.376Z (9 months ago)
- 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
- Language: Python
- Homepage:
- Size: 1000 Bytes
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# π§ issue-sync-to-obsidian
Sync GitHub Issues to your Obsidian vault β as Markdown.
This 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.
## π Table of Contents
- [π Project Structure](#-project-structure)
- [πΌοΈ Screenshots](#οΈ-screenshots)
- [βοΈ Setup](#οΈ-setup)
- [βΆοΈ Usage](#οΈ-usage)
- [β
Example Output](#-example-output)
- [π .env Security](#-env-security)
- [π Suggestions](#-suggestions)
- [π‘ License](#-license)
- [π€ Contributor](#-contributor)
- [π¬ Contact](#-contact)
---
## π Project Structure
```
issue-sync-to-obsidian/
βββ .env # Your personal secrets (not committed)
βββ .env_example # A template for your .env file
βββ .gitignore
βββ run.py # Launches test.py then main.py if passed
βββ requirements.txt # Dependencies list
βββ README.md # This file
βββ src/
βββ main.py # Main script: fetches issues, writes to Markdown
βββ test.py # Verifies .env values and setup before running
```
---
## πΌοΈ Screenshots
### π¬ Issues in Github Repo Brwoser Preview
Hereβs an example of issues from github repo:

### βοΈ Issues in Obsidian formated as Markdown
This is how data formated as Markdown look in Obsidian:

---
## βοΈ Setup
1. Clone the repository:
```bash
git clone https://github.com/axbecher/issue-sync-to-obsidian.git
cd issue-sync-to-obsidian
```
2. Install dependencies:
```bash
pip install -r requirements.txt
```
3. Create a .env file using the example:
```bash
cp .env_example .env
```
4. Fill in your .env file:
```
GITHUB_TOKEN=ghp_yourgithubtokenhere
REPO=username/repository-name
VAULT_PATH=/absolute/path/to/your/obsidian/vault
```
π Notes:
- GITHUB_TOKEN should be a GitHub personal access token (PAT) with repo scope if the repository is private.
- REPO must follow username/repository-name format (no URLs).
- VAULT_PATH should be the full path to your local Obsidian vault folder.
---
## βΆοΈ Usage
To safely run the main script:
```bash
python run.py
```
run.py executes test.py first to check:
- Environment variables are defined
- REPO is in the correct format
- GitHub token and repository are valid
- Obsidian VAULT_PATH exists and is a folder
Only if all checks pass, main.py will run and update your vault file.
---
## β
Example Output
File: ObsidianVault/GitHub_Issues.md
```markdown
# GitHub Issues (last updated 2025-06-29)
## #12 - Fix login bug
> Resolves session timeout when using 2FA.
[View on GitHub](https://github.com/axbecher/issue-sync-to-obsidian/issues/12)
## #11 - Add search filter
> Add a search bar to filter dashboard entries.
[View on GitHub](https://github.com/axbecher/issue-sync-to-obsidian/issues/11)
```
---
## π .env Security
Always exclude your .env file from commits. This project includes a .gitignore entry to prevent that automatically. Use .env_example for sharing the structure safely.
---
## π Suggestions
- Schedule run.py using cron (Linux/macOS) or Task Scheduler (Windows)
- Customize it to fetch only open issues, or with certain labels
- Extend to sync PRs, milestones, or even write per-issue files
---
## π‘ License
MIT License β open to use, modify, and distribute.
---
### π€ Contributor
## π¬ Contact
For 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).