{"id":25393232,"url":"https://github.com/xtruder/ffbookmarks-to-markdown","last_synced_at":"2026-05-03T22:32:20.575Z","repository":{"id":277711339,"uuid":"929458837","full_name":"xtruder/ffbookmarks-to-markdown","owner":"xtruder","description":"Firefox bookmarks to markdown","archived":false,"fork":false,"pushed_at":"2025-02-15T16:10:40.000Z","size":72,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-06T02:59:53.733Z","etag":null,"topics":["bookmarks","firefox","markdown","obsidian","obsidian-md","sync"],"latest_commit_sha":null,"homepage":"","language":"Go","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/xtruder.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}},"created_at":"2025-02-08T15:47:01.000Z","updated_at":"2025-09-07T06:45:51.000Z","dependencies_parsed_at":"2025-02-15T16:23:16.204Z","dependency_job_id":"d000d7d4-700e-4281-83a4-e3b63305db0d","html_url":"https://github.com/xtruder/ffbookmarks-to-markdown","commit_stats":null,"previous_names":["xtruder/ffbookmarks-to-markdown"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/xtruder/ffbookmarks-to-markdown","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xtruder%2Fffbookmarks-to-markdown","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xtruder%2Fffbookmarks-to-markdown/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xtruder%2Fffbookmarks-to-markdown/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xtruder%2Fffbookmarks-to-markdown/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xtruder","download_url":"https://codeload.github.com/xtruder/ffbookmarks-to-markdown/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xtruder%2Fffbookmarks-to-markdown/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32587817,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"ssl_error","status_checked_at":"2026-05-03T22:09:10.534Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["bookmarks","firefox","markdown","obsidian","obsidian-md","sync"],"created_at":"2025-02-15T17:53:34.164Z","updated_at":"2026-05-03T22:32:20.555Z","avatar_url":"https://github.com/xtruder.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Firefox Bookmarks to Markdown\n\n[![Latest Release](https://img.shields.io/github/v/release/xtruder/ffbookmarks-to-markdown?style=flat-square)](https://github.com/xtruder/ffbookmarks-to-markdown/releases/latest)\n[![Docker Image](https://img.shields.io/badge/container-ghcr.io-blue?style=flat-square)](https://github.com/xtruder/ffbookmarks-to-markdown/pkgs/container/ffbookmarks-to-markdown)\n\nA tool that syncs Firefox bookmarks to markdown files for use with tools like Obsidian.\n\n- **Firefox Sync Integration**: Syncs bookmarks directly from Firefox Sync service using [ffsclient](https://github.com/Mikescher/firefox-sync-client)\n- **Content download**:\n  - Downloads content from the web using [markdowner](https://md.dhr.wtf/dashboard) service\n  - Special handing for github repositories and youtube videos\n- **Content Processing**: \n  - Markdown cleanup using LLM (gemini)\n  - Fixes relative links\n  - Preserves code blocks and technical content\n- **Screenshots**: Captures website screenshots using [gowitness](https://github.com/sensepost/gowitness)\n- **Caching**: Caches web content and LLM responses for efficiency\n- **Obsidian Integration**: \n  - Creates year-based index files\n  - Adds proper frontmatter\n  - Compatible with Dataview plugin\n\n## Usage\n\n### Basic Usage\n\n```shell\n# Sync bookmarks from Firefox toolbar folder\nffbookmarks-to-markdown -folder toolbar -output bookmarks\n\n# List available bookmarks\nffbookmarks-to-markdown -list\n\n# Enable verbose logging\nffbookmarks-to-markdown -verbose\n```\n\n### Advanced Options\n\n```shell\n# Ignore specific folders\nffbookmarks-to-markdown -ignore \"Archive,Old Stuff\"\n\n# Use custom LLM settings\nffbookmarks-to-markdown -llm-key \"your-key\" -llm-model \"your-model\"\n\n# Use custom screenshot API\nffbookmarks-to-markdown -screenshot-api \"https://your-screenshot-service\"\n```\n\n## Installing\n\nHere is a single-liner to install the binary to your local bin directory:\n\n```shell\nmkdir -p ~/.local/bin\ncurl -L https://github.com/xtruder/ffbookmarks-to-markdown/releases/download/v0.1.0/ffbookmarks-to-markdown-linux-amd64.tar.gz | tar -xz -C ~/.local/bin\n```\n\n## Running\n\nFirst you need to login to your Firefox Sync account using `ffsclient` tool:\n\n```shell\nffsclient login\n```\n\nIt will ask you for your username and password.\n\nAfter that you can run the tool, which will sync bookmarks from your Firefox Sync account and save them to the specified directory:\n\n```shell\nffbookmarks-to-markdown -folder toolbar -output bookmarks\n```\n\nIf you want to use LLM to clean up the markdown content, you need to set `GEMINI_API_KEY` environment variable:\n\n```shell\nexport GEMINI_API_KEY=\"your-key\"\n```\n\n## Full docker-compose example\n\nHere is a full example of docker-compose file that will run gowitness, obsidian and ffbookmarks-to-markdown.\nYou must make sure to copy your Firefox Sync credentials to the `obsidian-config` volume.\n\n```yaml\nversion: '3.9'\nname: obsidian-stack\nservices:\n  obsidian:\n    container_name: obsidian\n    image: linuxserver/obsidian:1.8.4\n    networks:\n      - net\n    environment:\n      - PUID=1000\n      - PGID=1000\n      - TZ=UTC\n      - DOCKER_MODS=linuxserver/mods:universal-package-installer\n    volumes:\n      - obsidian-config:/config\n    shm_size: \"1gb\"\n    deploy:\n      resources:\n        reservations:\n          devices:\n            - driver: nvidia\n              count: 1\n              capabilities: [compute,video,graphics,utility]\n    restart: unless-stopped\n  gowitness:\n    image: ghcr.io/sensepost/gowitness:latest\n    restart: unless-stopped\n    command: gowitness report server --host 0.0.0.0 --screenshot-path /data/screenshots --db-uri sqlite:///data/gowitness.sqlite3\n    volumes:\n      - gowitness-storage:/data\n    networks:\n      - net\n  ffbookmarks-to-markdown:\n    image: ghcr.io/xtruder/ffbookmarks-to-markdown:0.1.0\n    command: -output /data/my-vault/Bookmarks -screenshot-api http://gowitness\n    environment:\n      - TZ=UTC\n      - GEMINI_API_KEY=${GEMINI_API_KEY}\n      - HOME=/home/user\n    working_dir: /home/user\n    user: 1000:1000\n    restart: never\n    volumes:\n      - obsidian-config:/data\n      - ffbookmarks-home:/home/user\n    networks:\n      - net\n\nvolumes:\n  gowitness-storage:\n  obsidian-config:\n  ffbookmarks-home:\n\nnetworks:\n  net:\n```\n\n## Usage\n\n```shell\nUsage of ./ffbookmarks-to-markdown:\n  -folder string\n        Base folder name to sync from Firefox bookmarks (default \"toolbar\")\n  -ignore string\n        Comma-separated list of folder names to ignore\n  -list\n        List all available bookmarks\n  -llm-key string\n        API key for LLM service\n  -llm-model string\n        Model to use for LLM service (default \"gemini-2.0-flash\")\n  -llm-url string\n        Base URL for LLM service (default \"https://generativelanguage.googleapis.com/v1beta/openai/\")\n  -output string\n        Output directory for markdown files (default \"bookmarks\")\n  -screenshot-api string\n        Screenshot API base URL (default \"https://gowitness.cloud.x-truder.net\")\n  -verbose\n        Enable verbose logging\n```\n\n## Environment Variables\n\n- `GEMINI_API_KEY`: API key for Gemini LLM service (optional)\n\n## Output Structure\n\nThe tool creates the following structure in your output directory:\n\n```text\nbookmarks/\n├── 2024.md           # Year index\n├── 2023.md           # Year index\n└── folder/           # Bookmark folders\n    └── bookmark.md   # Bookmark files\n```\n\nEach bookmark file contains:\n- Frontmatter with metadata\n- Cleaned markdown content\n- Screenshot (if available)\n- Original URL and creation date\n\n## License\n\nMIT License \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxtruder%2Fffbookmarks-to-markdown","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxtruder%2Fffbookmarks-to-markdown","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxtruder%2Fffbookmarks-to-markdown/lists"}