{"id":13494366,"url":"https://github.com/goniszewski/grimoire","last_synced_at":"2025-05-14T05:10:50.311Z","repository":{"id":209191790,"uuid":"657204276","full_name":"goniszewski/grimoire","owner":"goniszewski","description":"Bookmark manager for the wizards 🧙","archived":false,"fork":false,"pushed_at":"2025-02-27T11:29:43.000Z","size":5894,"stargazers_count":2422,"open_issues_count":26,"forks_count":74,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-05-08T19:48:43.324Z","etag":null,"topics":["bookmarks","bookmarks-manager","docker","self-hosted","svelte","sveltekit","tailwindcss","typescript"],"latest_commit_sha":null,"homepage":"https://grimoire.pro","language":"TypeScript","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/goniszewski.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","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},"funding":{"github":["goniszewski"]}},"created_at":"2023-06-22T14:41:17.000Z","updated_at":"2025-05-07T07:34:15.000Z","dependencies_parsed_at":"2023-12-28T15:31:53.685Z","dependency_job_id":"61ba31fe-19d4-4864-9a02-d12227c417e1","html_url":"https://github.com/goniszewski/grimoire","commit_stats":{"total_commits":294,"total_committers":13,"mean_commits":"22.615384615384617","dds":0.4931972789115646,"last_synced_commit":"cc2954812844dcee1da3b166350b7772b45aa03e"},"previous_names":["goniszewski/grimoire"],"tags_count":35,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goniszewski%2Fgrimoire","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goniszewski%2Fgrimoire/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goniszewski%2Fgrimoire/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goniszewski%2Fgrimoire/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/goniszewski","download_url":"https://codeload.github.com/goniszewski/grimoire/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254076850,"owners_count":22010611,"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":["bookmarks","bookmarks-manager","docker","self-hosted","svelte","sveltekit","tailwindcss","typescript"],"created_at":"2024-07-31T19:01:24.320Z","updated_at":"2025-05-14T05:10:50.242Z","avatar_url":"https://github.com/goniszewski.png","language":"TypeScript","funding_links":["https://github.com/sponsors/goniszewski"],"categories":["Svelte","Bookmarking","TypeScript","HarmonyOS","typescript"],"sub_categories":["Android Launcher","Windows Manager"],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg alt=\"Grimoire Logo\" src=\"static/grimoire_logo_300.webp\"\u003e\n  \u003ch1\u003eGrimoire\u003c/h1\u003e\n  \u003cp\u003eBookmark manager for the wizards 🧙\u003c/p\u003e\n\u003cimg alt=\"GitHub License\" src=\"https://img.shields.io/github/license/goniszewski/grimoire\"\u003e\n\u003cimg alt=\"GitHub Actions Workflow Status\" src=\"https://img.shields.io/github/actions/workflow/status/goniszewski/grimoire/ci.yml?event=release\"\u003e\n\u003cimg alt=\"GitHub Release\" src=\"https://img.shields.io/github/v/release/goniszewski/grimoire\"\u003e\n\u003cimg alt=\"Docker Pulls\" src=\"https://img.shields.io/docker/pulls/goniszewski/grimoire\"\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\n\u003e [!IMPORTANT]\n\u003e Version `0.4` introduces a new approach for data storage and user authorization. If you are upgrading from version `0.3.X` you may want to utilize the built-in [**migration tool** (read more)](https://grimoire.pro/docs/migration-tool/).\n\nGlimpse into the magical book of _your_ forbidden knowledge - **Grimoire!** 📖💫\n\nUnleash your inner sorcerer and conquer the chaos of bookmarks! With Grimoire, you'll have a bewitching way to store and sort your enchanted links.\n\nBut wait, there's **more**!\n\nTransmute your saved pages into juicy content snippets with our mystical extraction feature. Embrace the magic, tame the clutter, and let Grimoire be your mystical companion in the vast library of the web.\n\nIt's time to conjure up some organization! 📚✨\n\n## Features\n\n- add and organize bookmarks easily 🔖\n- create new user accounts, each with their own bookmarks, categories and tags 🙋\n- fuzzy search through bookmarks 🔍\n- supports tags and categories 🏷️\n- fetch metadata from websites, store it locally and update it when needed 🌐\n- add your personal notes to bookmarks 📝\n- integration API to add bookmarks from other sources 🧰\n- embrace the night with a dark mode 🌙\n- and stay productive using our official browser extension, _grimoire companion_ ([available here](https://github.com/goniszewski/grimoire-web-extension)) 🪄\n\n## Screenshots\n\n| Light Mode                                                                      | Dark Mode                                                                            |\n| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |\n| ![Only unread](screenshots/only-unread-white.png) Show only unread              | ![Adding new bookmark](screenshots/adding-new-bookmark-dark.png) Adding new bookmark |\n| ![User Profile view](screenshots/user-profile-view-white.png) User Profile view | ![Bookmark details](screenshots/bookmark-details-dark.png) Bookmark details          |\n\nMore screenshots can be found in the [screenshots directory](screenshots).\n\n## Installation\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eRun using Docker Compose\u003c/strong\u003e (recommended)\u003c/summary\u003e\n\n### Prerequisites\n\n- [Docker](https://docs.docker.com/get-docker/)\n- [Docker Compose](https://docs.docker.com/compose/install/)\n\n### Steps\n\n1. Create a `docker-compose.yml` file with the following content:\n\n```yml\nservices:\n  grimoire:\n    image: goniszewski/grimoire:latest # or change from 'latest' to 'preview' to use the latest preview version\n    container_name: grimoire\n    restart: unless-stopped\n    environment:\n      - PORT=5173\n      - PUBLIC_HTTPS_ONLY=false\n      - PUBLIC_SIGNUP_DISABLED=false\n    volumes:\n      - grimoire_data:/app/data/\n    build:\n      context: .\n      dockerfile: Dockerfile\n    healthcheck:\n      test: wget --no-verbose --tries=1 --spider http://localhost:$PORT/api/health || exit 1\n      interval: 30s\n      timeout: 10s\n      retries: 3\n    ports:\n      - '${PORT:-5173}:${PORT:-5173}'\nvolumes:\n  grimoire_data:\n```\n\n2. [Optional] Update the environment variables to match your needs.\n3. Run the app using `docker compose up -d` command.\n\n\u003c/details\u003e\n\n\u003e [!NOTE]\n\u003e For the recommended setup, only the `docker-compose.yml` file is required.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eRun app using Node\u003c/strong\u003e\u003c/summary\u003e\n\n### Prerequisites\n\n- [Docker](https://docs.docker.com/get-docker/)\n- [Docker Compose](https://docs.docker.com/compose/install/)\n- [Node.js](https://nodejs.org/en/download/)\n- [PNPM](https://pnpm.io/installation)\n\n### Steps\n\n```bash\n# Clone the repository\ngit clone https://github.com/goniszewski/grimoire\n\n# Rename the `.env.example` file to `.env`\n# \"mv .env.example .env\" on Linux/MacOS, \"ren .env.example .env\" on Windows\n\n# Install the dependencies\npnpm i\n\n# Run the app\nchmod +x ./run-dev.sh \u0026\u0026 ./run-dev.sh\n```\n\n\u003c/details\u003e\n\n\u003e [!TIP]\n\u003e Although the above setups are intended for development, they are also suitable for daily use. For a better experience, it is recommended to use a Node.js process manager, such as [PM2](https://github.com/Unitech/pm2).\n\n## Development\n\nCheck out the [development guide](https://grimoire.pro/docs/getting-started/development) to learn how to set up the project for development.\n\n## Roadmap\n\n- [x] Initial relase (0.1.0) 🚀\n- [x] Official Docker image 🐳\n- [x] Add Integration API 🧰\n- [x] Official browser extension ([repository](https://github.com/goniszewski/grimoire-web-extension)) 🪄\n- [ ] Bookmark import and export features 💼\n- [ ] AI features, like generated descriptions and tags suggestions 🤖\n- [ ] Public User profiles \u0026 bookmark sharing 🌍\n- [ ] Flows - a way to keep bookmarks in a session-like order with related notes (e.g. for learning, research, etc.) ✨\n- [ ] ...and more to come! 🧙\n\nWe're open to suggestions and feature requests! If you have an idea for a feature, please [open an issue](https://github.com/goniszewski/grimoire/issues) or [start a discussion](https://github.com/goniszewski/grimoire/discussions/categories/ideas).\n\n## Contributing\n\nIf you want to contribute to the project, please read the [contributing guide](CONTRIBUTING.md).\n\n## License\n\nThis project is licensed under the [MIT License](LICENSE).\n\n## Credits\n\nSpecial thanks to: [@extractus/article-extractor](https://github.com/extractus/article-extractor),\n[Bun](https://github.com/oven-sh/bun),\n[DaisyUI](https://github.com/saadeghi/daisyui),\n[Drizzle](https://github.com/drizzle-team/drizzle-orm),\n[Fuse.js](https://github.com/krisk/fuse),\n[Lucia](https://github.com/pilcrowOnPaper/lucia),\n[MetaScraper](https://github.com/microlinkhq/metascraper),\n[PocketBase](https://github.com/pocketbase/pocketbase),\n[sanitize-html](https://github.com/apostrophecms/sanitize-html),\n[SvelteKit](https://github.com/sveltejs/kit),\n[Svelte Select](https://github.com/rob-balfre/svelte-select),\n[Svelte French Toast](https://github.com/kbrgl/svelte-french-toast),\n[Swagger UI](https://github.com/swagger-api/swagger-ui),\n[Tabler Icons](https://github.com/tabler/tabler-icons),\n[Tailwind CSS](https://tailwindcss.com),\n[url-metadata](https://github.com/laurengarcia/url-metadata)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoniszewski%2Fgrimoire","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoniszewski%2Fgrimoire","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoniszewski%2Fgrimoire/lists"}