Shiori

Simple bookmark manager written in Go, intended to be a clone of Pocket, it has both a simple and clean web interface as well as a CLI. Shiori has easy import/ export, is portable and has webpage archiving features.

Open Source

Shiori Source Code

Author

go-shiori

Description

Simple bookmark manager built with Go

#bookmark-manager#command-line#go#golang#hacktoberfest#web-interface

Homepage

Repository

  • LicenseMIT
  • Created23 Jan 18
  • Primary languageGo
  • Size49,603 KB
  • Stars11,668
  • Forks636
  • Watchers11,668

Language Usage

Language Usage

Project Health

  • Last commit1 day ago
  • Open issues120
  • Latest releasev1.8.0

Recent Commits

  • Felipe Martin(17 Oct 26)

    feat: api v1 (#1157) * Add comprehensive test coverage for bookmark handlers - Implement CRUD handlers: create, list, get, update, delete bookmarks - Add domain methods: CreateBookmark, UpdateBookmark, DeleteBookmarks - Comprehensive test suite with 47 handler tests and 24 domain tests - Edge case coverage: validation, pagination, concurrent access - Proper error handling and authentication requirements - Tag management with duplicate handling and clearing support Co-authored-by: Ona <[email protected]> * feat: bookmarks api v1 Co-authored-by: Ona <[email protected]> * feat: add generated api client * feat: improve tag and bookmark creation - Tag creation API returns 204 No Content if tag already exists - Frontend searches for existing tags before creating - Bookmark creation defaults title to URL when not provided - Add unit tests for new behavior * chore: removed message middleware * feat: update tags api client * chore: webapp updates * chore: fixes shiori dir in development * chore: new targets for the webapp * feat: api v1 endpoint to retrieve/update data * feat: api search bookmarks * chore: ensure secret is set for development * deps: updated webapp dependencies * feat: bookmark thumbnails * feat: cors configuration * webapp: tags list * feat: pagination * refactor: icons * chore: missing translations * webapp: fixed some dark mode issues * feat: allow choosing between list and card view * chore: run-webapp target * chore: remove cursor rules * fix: vue links * feat: display archive/content/ebook icons * feat: readable view * archive and content views * feat: basic add bookmark * fix: readable content in dark mode * chore: width for readable/archive * i18n: updated locales * fix: cors preflight request * fix: properly prefix HTTP_ to cors config * chore: remove archive and folder sections * chore: update favicons * refactor: archive/content headers * chore: add bookmark icon * feat: add bookmark modal * feat: refactored inputs * feat: added toast messages * chore: update i18n * chore: bookmarks icon * fix: library route * fix: add tag errors and view * feat: settings * feat: theme settings * feat: delete bookmarks * i18n update * fixed tests * chore: fixed lint issues * fix: login screen label alignment * Fix bookmark card bottom actions alignment - Restructure BookmarkCard layout to properly align actions to bottom edge - Move actions outside padded content area for true bottom alignment - Add auto-rows-fr to grid container for consistent card heights - Improve icon consistency and hover states - Replace Button components with native buttons for better control * refactor: unify buttons and inputs * feat: admin section * feat: added /api/v1/system/ping * fix: login primary button * fix: icon sizes * chore: buttons * fix: admin routes * chore: icons * feat: sidebar subsections * chore: formatting * chore: webapp lint & test * fix: superfluous http call * fix: event handling on bookmark deletion * fix: token expiration from claims * Add bookmark creation options and update API v1 handlers * Standardize API v1 JSON keys to PascalCase and fix frontend/backend mismatches Remove json struct tags across all Go models and handler types so encoding/json uses default PascalCase field names, ensuring consistent API responses. Add ImageURL field to BookmarkDTO populated automatically via populateAdditionalFields. Update the webapp's generated API client, page code, and templates to use PascalCase property names throughout. Fix critical issues found during review: updateCachePayload.Ids renamed to IDs to match JSON unmarshaling, createOrFindTag catch block narrowed to only swallow 409 Conflict, JWT Account field validated before saving to localStorage, handleApiError wrapped in try-catch for non-JSON responses, and getErrorMessage extended with Message fallback for validation errors. * fix: return webapp v1 routes * Update webapp v2 and generated TS client for PascalCase API JSON keys Regenerate swagger docs and TypeScript client from updated Go models. Update all generated client FromJSON/ToJSON functions to use PascalCase JSON keys matching Go's encoding/json output, while keeping camelCase TypeScript interface properties. Fix webapp stores, error handler, and views to work correctly with the updated client layer. * Add e2e tests for authentication user stories (remember me, auth redirect, deep-link) Cover the remaining 3 authentication user stories: - Remember me checkbox extends token expiration from 1h to 30 days - Unauthenticated users see the login form - Deep-link redirect via ?dst= param returns user to original destination after login Also add USER_STORIES.md documenting all 80 functional e2e user stories with current coverage tracking (20/80). * Add e2e tests for admin account management and prevent self-deletion - Add API-level e2e tests for role changes (promote/demote) and self-deletion prevention (stories 2.7, 2.8) - Fix: prevent admins from deleting their own account by adding a guard in HandleDeleteAccount that returns 403 Forbidden - Add unit test for the new self-deletion guard - Fix ID collision in existing successful deletion unit test * Add e2e tests for self-service account management and fix test issues - Add e2e assertions for stories 3.4 (admin section hidden for regular users) and 3.5 (wrong current password shows error) within the existing TestE2EAccounts flow - Fix SetFakeAdmin to use non-colliding ID (99999) and remove filler account hack from delete unit test - Fix HandleSystemPing to return empty body instead of JSON null * Add e2e tests for bookmark creation with local test HTTP server Introduce a Go test HTTP server (e2e/e2eutil/testserver.go) that serves static HTML pages from e2e/testserver/, replacing external URLs (https://example.com) that fail inside Docker containers due to TLS and network issues. The server binds to a random port and returns a host.docker.internal URL reachable from containers. Add Playwright UI tests for all section 4 bookmark creation stories (4.1-4.8) and update server-level bookmark tests to use the test server. * fix: improve error handling, security, and authorization in API v1 handlers Address issues found during PR review: - Fix race condition and remove dead code in HandleUpdateCache (idWithProblems) - Distinguish 404 vs 500 errors in GetBookmark calls using errors.Is - Add missing error logging before all 500 responses (11 locations) - Return generic "Invalid username or password" instead of leaking internal errors - Return 400 instead of 500 for invalid JSON in HandleUpdateLoggedAccount - Use errors.Is() instead of == for model.ErrNotFound in tags handler - Wrap error in SearchBookmarks with %w for proper error chain - Return model.ErrNotFound sentinel from GetAccountByID - Add URL validation to HandleUpdateBookmark to reject empty URLs - Require admin for HandleRemoveTagFromBookmark, HandleDeleteBookmarks, and HandleBulkUpdateBookmarkTags (consistent with HandleAddTagToBookmark) - Short-circuit middleware pipeline on CORS preflight via ErrPipelineStop - Delegate NewUserConfig to Defaults() to prevent drift - Log json.Unmarshal errors in UserConfig.Scan instead of swallowing them - Fix test payload key mismatch in TestHandleUpdateBookmarkTags - Clean up testcontainers images after e2e test runs * chore: clean up e2e Docker images after test runs Add a shiori.e2e=true label to Dockerfile.e2e and a trap in scripts/e2e.sh that prunes images matching that label on exit. The original exit code is preserved so CI still detects test failures. * Add server-level e2e tests for authentication stories 1.3-1.7 Add subtests to TestAuthLogin covering wrong password, empty username, empty password, logout, remember me (short/long expiration), and unauthenticated 401. Update USER_STORIES.md to reflect new coverage (7/8 server) and mark 1.8 as n/a for server layer. * Add server e2e tests for admin account management and fix lint issues Add e2e tests for stories 2.3 (delete user account), 2.4 (change another user's password), and 2.6 (system info panel). Fix gofmt issues in shortcuts_test.go and account.go, and use time.Until in auth tests. Also includes improvements to error handling, security, and input validation across API v1 handlers. * Add server e2e tests for self-service account management (stories 3.1-3.5) Cover all 5 self-service account stories: change own password, cannot see system info, can see account settings, cannot access admin accounts, and wrong current password error. Update USER_STORIES.md coverage from 0/5 to 5/5 (server total 26 → 31). * fix: tighten authorization and error mapping in API v1 handlers - Require admin for bookmark and tag write endpoints (create/update bookmark, update bookmark data, create/update tag), matching the legacy API rule that non-owner accounts are read-only. - Return ErrInvalidCredentials from GetAccountFromCredentials and map only that error to 400 in login and password change; other errors return 500 and are logged. - Run bcrypt against a dummy hash for unknown usernames so login timing does not reveal which usernames exist. - Map database not-found errors to model.ErrNotFound in UpdateAccount and GetAccountByID; other database errors are wrapped, not hidden. - Return 404 from PATCH /auth/account when the account no longer exists, and 409 when the payload conflicts or 400 on validation. - Return 409 when a bookmark update uses a URL that already exists; MySQL maps the duplicate URL error on both insert and update. - Detect duplicate tag names by constraint name in SQLite and MySQL and rely on the database constraint in HandleCreateTag. - Return 200 from the token refresh endpoint. - Remove the unused problem channel from HandleUpdateCache. * fix: address second review of API v1 and legacy web UI - Block self-updates through PATCH /api/v1/accounts/{id} (use /auth/account, which checks the old password) and block admins from removing their own owner status. - Match Postgres unique constraint names case-insensitively, so duplicate tags and bookmark URLs map to their domain errors, and check rows.Err() for duplicate tags. Cover both in the shared database test suite. - Return 404 for bookmark ID 0 instead of 500. - Populate derived fields (ImageURL) after a bookmark cache update. - Clear the token cookie with Http.RootPath on logout and on invalid tokens. - Use a precomputed bcrypt hash for the login timing guard instead of hashing at package init. - Web UI: fetch all tag pages, resolve thumbnail URLs against document.baseURI, and decode base64url JWT payloads as UTF-8. * feat: close API v1 gaps with legacy bookmark endpoints - Remove UTM parameters from bookmark URLs on create and update. - Remove thumbnail, archive and ebook files when bookmarks are deleted. - Return the updated bookmarks from PUT /api/v1/bookmarks/bulk/tags. - Fetch bookmarks by ID with a single database query. - Keep existing tags when the web UI batch-adds tags. - Move e2e tests to github.com/mxschmitt/playwright-go v0.6201.1. - Add tests for bulk tag replacement and the batch add tags UI. * fix: align web UIs with API v1 auth, paths and routes - Fix the readable endpoint path in swagger docs and the TS client. - Send the Bearer token and honor RootPath in the legacy UI API client. - Remove the unused saveSetting call to a missing endpoint. - Keep a token cookie in the webapp for archive and ebook requests. - Serve the webapp on bookmark content and archive routes in UI v2 mode. - Stop sending the unused X-Shiori-Response-Format header. - Rebuild webapp/dist. * chore: restore styles make targets and format legacy UI scripts - Restore the styles and styles-check targets used by the styles-check CI job. - Format legacy UI scripts so the Prettier check passes. * chore: update swag to v1.16.6 Read the swag version from the binary build info in swagger_check.sh, because swag v1.16.5 and v1.16.6 report v1.16.4 in `swag --version`. * fix(e2e): map host.docker.internal for Linux Docker hosts --------- Co-authored-by: Ona <[email protected]>

  • Jannik Bäcker(11 Oct 26)

    fix: correct spelling errors (#1203) * fix: correct 15 spelling errors across codebase Detected with codespell, typos and misspell. * Update scripts/styles.sh * Update internal/database/database_test.go --------- Co-authored-by: Felipe Martin <[email protected]>

  • Felipe Martin(11 Oct 26)

    ci: skip publishing jobs on forked repositories (#1213) * ci: skip publishing jobs on forked repositories * ci: set explicit permissions on tag-release job

  • Felipe Martin(10 Jul 26)

    fix: show version on login page again (#1183) (#1200)

  • Felipe Martin(10 Jul 26)

    fix: prevent users from self-escalate to owners (#1199)

  • Felipe Martin(10 Jul 26)

    fix: swagger annotations (#1198) * fix: swagger annotations fixes #1197 * ci: fix e2e by migrating to mxschmitt/playwright-go v0.6100.0 The playwright-community/playwright-go v0.5200.0 driver downloads from playwright.azureedge.net, which Microsoft has decommissioned, so the driver download now 404s and the e2e tests fail with 'please install the driver (v1.52.0) first'. Upstream fixed this by assembling the driver from the npm registry (playwright-core) plus Node.js from nodejs.org instead of the dead CDN. That fix ships in v0.6100.0, which also renamed the module path to github.com/mxschmitt/playwright-go. Bump to it and update the imports; the API is unchanged.

  • dependabot[bot](29 Sept 25)

    chore(deps): bump the all group with 9 updates (#1151) Bumps the all group with 9 updates: | Package | From | To | | --- | --- | --- | | [actions/checkout](https://github.com/actions/checkout) | `4.2.2` | `5.0.0` | | [actions/download-artifact](https://github.com/actions/download-artifact) | `4.3.0` | `5.0.0` | | [actions/setup-go](https://github.com/actions/setup-go) | `5.5.0` | `6.0.0` | | [actions/setup-node](https://github.com/actions/setup-node) | `4.4.0` | `5.0.0` | | [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) | `6.3.0` | `6.4.0` | | [actions/setup-python](https://github.com/actions/setup-python) | `5.6.0` | `6.0.0` | | [actions/cache](https://github.com/actions/cache) | `4.2.3` | `4.3.0` | | [codecov/codecov-action](https://github.com/codecov/codecov-action) | `5.4.3` | `5.5.1` | | [cross-platform-actions/action](https://github.com/cross-platform-actions/action) | `0.28.0` | `0.29.0` | Updates `actions/checkout` from 4.2.2 to 5.0.0 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/11bd71901bbe5b1630ceea73d27597364c9af683...08c6903cd8c0fde910a37f88322edcfb5dd907a8) Updates `actions/download-artifact` from 4.3.0 to 5.0.0 - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/d3f86a106a0bac45b974a628896c90dbdf5c8093...634f93cb2916e3fdff6788551b99b062d0335ce0) Updates `actions/setup-go` from 5.5.0 to 6.0.0 - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/d35c59abb061a4a6fb18e82ac0862c26744d6ab5...44694675825211faa026b3c33043df3e48a5fa00) Updates `actions/setup-node` from 4.4.0 to 5.0.0 - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/49933ea5288caeca8642d1e84afbd3f7d6820020...a0853c24544627f65ddf259abe73b1d18a591444) Updates `goreleaser/goreleaser-action` from 6.3.0 to 6.4.0 - [Release notes](https://github.com/goreleaser/goreleaser-action/releases) - [Commits](https://github.com/goreleaser/goreleaser-action/compare/9c156ee8a17a598857849441385a2041ef570552...e435ccd777264be153ace6237001ef4d979d3a7a) Updates `actions/setup-python` from 5.6.0 to 6.0.0 - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/a26af69be951a213d495a4c3e4e4022e16d87065...e797f83bcb11b83ae66e0230d6156d7c80228e7c) Updates `actions/cache` from 4.2.3 to 4.3.0 - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/5a3ec84eff668545956fd18022155c47e93e2684...0057852bfaa89a56745cba8c7296529d2fc39830) Updates `codecov/codecov-action` from 5.4.3 to 5.5.1 - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/18283e04ce6e62d37312384ff67231eb8fd56d24...5a1091511ad55cbe89839c7260b706298ca349f7) Updates `cross-platform-actions/action` from 0.28.0 to 0.29.0 - [Release notes](https://github.com/cross-platform-actions/action/releases) - [Changelog](https://github.com/cross-platform-actions/action/blob/master/changelog.md) - [Commits](https://github.com/cross-platform-actions/action/compare/97419d18f6470332677e345e9df97cdc71244ead...e8a7b572196ff79ded1979dc2bb9ee67d1ddb252) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: all - dependency-name: actions/download-artifact dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: all - dependency-name: actions/setup-go dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: all - dependency-name: actions/setup-node dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: all - dependency-name: goreleaser/goreleaser-action dependency-version: 6.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: actions/setup-python dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: all - dependency-name: actions/cache dependency-version: 4.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: codecov/codecov-action dependency-version: 5.5.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: cross-platform-actions/action dependency-version: 0.29.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

  • Felipe Martin(26 Sept 25)

    chore(deps): updated go, alpine, frontend/webapp and golangci lint (#1063) * deps: go 1.24 & alpine 3.21 * deps: update * fix: golangci-lint config * ci: fix golangci-lint version * ci: upgraded golangci-lint-action to v8.0.0 * deps: pin go into 1.24.3 * fix: updated openbsd test version to 7.7 * ci: updated cross-platform-actions * ci: updated cross-platform-action to latest master * ci: force openbsd to update quirks to 7.7 * ci: revert quirks change * fix: freebsd downloads golang directly * merge master * chore: checking the go binary * chore: give executable permissions * chore: freebsd -> openbsd * deps: updated webapp deps * deps: updated frontend deps * deps: updated go deps * ci: updated openbsd golang version * deps: updated alpine to 3.22 * deps: updated golangci-lint * deps: pinned swag to 1.16.4 * ci: ignore openbsd failures * test(e2e): enhance container log handling and cleanup * test(e2e): disable ryiuk

  • Felipe M.(26 Sept 25)

    ci: fix secrets access

  • Felipe Martin(26 Sept 25)

    ci: add DockerHub publishing for versioned releases (#1148) - Push versioned images (v*) to shioriapp/shiori on DockerHub - Maintain existing GitHub Container Registry publishing - Add DockerHub authentication for tagged releases only - Preserve backward compatibility for master and PR builds Co-authored-by: Ona <[email protected]>

  • Felipe M.(30 Jul 25)

    fix: resolve linting errors and e2e test failures - Fix ST1005 linting errors by lowercasing error message strings - Fix QF1008 linting errors by removing embedded field selectors in containers.go - Update Alpine version from 3.22 to 3.21 in Makefile to fix Docker image resolution - Update corresponding test expectations for error message changes

  • Federico Scodelaro(12 Jul 25)

    feat: support proxy forward headers authentication (#1105) * feat: Add SSO forward header * fix: Use domain layer * test: Some test * chore: Print new values when debugging * chore: Rename enabled envvar * fix: Wrongly parsing remote ip * fix: Always validate token. NPE on validateSession * fix: Dont overwrite token when sso * fix: Best effort to get ip. Parse as ip:port and then as ip * fix: Forgot to update handler version * fix: Forgot to commit changes * test: GetAccountByUsername * chore: Rename some variables * chore: return error from ssoAccount * refactor: Extract sso proxy auth to own middleware * fix: Dont panic if not sso account on legacy validate session * ci: gofmt --------- Co-authored-by: Felipe Martin <[email protected]>

  • Manny Karyampudi(12 Jul 25)

    docs: fix issue with reverse proxy webroot configuration (#1121) It looks like the `SHIORI_HTTP_ROOT_PATH` replaced the `SHIORI_WEBROOT` environment variable. Also, I needed to add the trailing `/` to the NGINX location config (i.e. `location /shiori/` to get the reverse proxy configuration to work.

  • Ben Oakes(12 Jul 25)

    docs: add cloudbreak.app under managed hosting (#1123)

  • Felipe Martin(28 Jun 25)

    ci: never close stale issues/rps

  • Marc Brugger(27 Jun 25)

    fix: parse pocket new CSV format (#1112) * fix pocket parsing error Signed-off-by: bakito <[email protected]> * add tests forpocket csv Signed-off-by: bakito <[email protected]> * Use file name from test case * fix lint ant test issues Signed-off-by: bakito <[email protected]> --------- Signed-off-by: bakito <[email protected]> Co-authored-by: Felipe Martin <[email protected]>

  • dependabot[bot](16 Jun 25)

    chore(deps): bump the all group with 9 updates (#1115) Bumps the all group with 9 updates: | Package | From | To | | --- | --- | --- | | [actions/download-artifact](https://github.com/actions/download-artifact) | `4.2.1` | `4.3.0` | | [actions/setup-go](https://github.com/actions/setup-go) | `5.4.0` | `5.5.0` | | [actions/setup-node](https://github.com/actions/setup-node) | `4.3.0` | `4.4.0` | | [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) | `6.5.2` | `8.0.0` | | [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) | `6.2.1` | `6.3.0` | | [actions/setup-python](https://github.com/actions/setup-python) | `5.4.0` | `5.6.0` | | [oven-sh/setup-bun](https://github.com/oven-sh/setup-bun) | `2.0.1` | `2.0.2` | | [codecov/codecov-action](https://github.com/codecov/codecov-action) | `5.4.0` | `5.4.3` | | [cross-platform-actions/action](https://github.com/cross-platform-actions/action) | `0.27.0` | `0.28.0` | Updates `actions/download-artifact` from 4.2.1 to 4.3.0 - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/95815c38cf2ff2164869cbab79da8d1f422bc89e...d3f86a106a0bac45b974a628896c90dbdf5c8093) Updates `actions/setup-go` from 5.4.0 to 5.5.0 - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/0aaccfd150d50ccaeb58ebd88d36e91967a5f35b...d35c59abb061a4a6fb18e82ac0862c26744d6ab5) Updates `actions/setup-node` from 4.3.0 to 4.4.0 - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/cdca7365b2dadb8aad0a33bc7601856ffabcc48e...49933ea5288caeca8642d1e84afbd3f7d6820020) Updates `golangci/golangci-lint-action` from 6.5.2 to 8.0.0 - [Release notes](https://github.com/golangci/golangci-lint-action/releases) - [Commits](https://github.com/golangci/golangci-lint-action/compare/55c2c1448f86e01eaae002a5a3a9624417608d84...4afd733a84b1f43292c63897423277bb7f4313a9) Updates `goreleaser/goreleaser-action` from 6.2.1 to 6.3.0 - [Release notes](https://github.com/goreleaser/goreleaser-action/releases) - [Commits](https://github.com/goreleaser/goreleaser-action/compare/90a3faa9d0182683851fbfa97ca1a2cb983bfca3...9c156ee8a17a598857849441385a2041ef570552) Updates `actions/setup-python` from 5.4.0 to 5.6.0 - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/42375524e23c412d93fb67b49958b491fce71c38...a26af69be951a213d495a4c3e4e4022e16d87065) Updates `oven-sh/setup-bun` from 2.0.1 to 2.0.2 - [Release notes](https://github.com/oven-sh/setup-bun/releases) - [Commits](https://github.com/oven-sh/setup-bun/compare/4bc047ad259df6fc24a6c9b0f9a0cb08cf17fbe5...735343b667d3e6f658f44d0eca948eb6282f2b76) Updates `codecov/codecov-action` from 5.4.0 to 5.4.3 - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/0565863a31f2c772f9f0395002a31e3f06189574...18283e04ce6e62d37312384ff67231eb8fd56d24) Updates `cross-platform-actions/action` from 0.27.0 to 0.28.0 - [Release notes](https://github.com/cross-platform-actions/action/releases) - [Changelog](https://github.com/cross-platform-actions/action/blob/master/changelog.md) - [Commits](https://github.com/cross-platform-actions/action/compare/fe0167d8082ac584754ef3ffb567fded22642c7d...97419d18f6470332677e345e9df97cdc71244ead) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: 4.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: actions/setup-go dependency-version: 5.5.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: actions/setup-node dependency-version: 4.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: golangci/golangci-lint-action dependency-version: 8.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: all - dependency-name: goreleaser/goreleaser-action dependency-version: 6.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: actions/setup-python dependency-version: 5.6.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: oven-sh/setup-bun dependency-version: 2.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: codecov/codecov-action dependency-version: 5.4.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: cross-platform-actions/action dependency-version: 0.28.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Felipe Martin <[email protected]>

  • Felipe Martin(16 Jun 25)

    chore: update golangci-lint (#1116)

  • Akshay Nair(16 Jun 25)

    docs: fix screenshot links in docs (#1114)

  • dependabot[bot](31 Mar 25)

    chore(deps-dev): bump vite (#1089) Bumps the npm_and_yarn group with 1 update in the /webapp directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite). Updates `vite` from 6.2.3 to 6.2.4 - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v6.2.4/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v6.2.4/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:development dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

  • dependabot[bot](31 Mar 25)

    chore(deps): bump golang.org/x/net in the go_modules group (#1080) Bumps the go_modules group with 1 update: [golang.org/x/net](https://github.com/golang/net). Updates `golang.org/x/net` from 0.35.0 to 0.36.0 - [Commits](https://github.com/golang/net/compare/v0.35.0...v0.36.0) --- updated-dependencies: - dependency-name: golang.org/x/net dependency-type: direct:production dependency-group: go_modules ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

  • dependabot[bot](31 Mar 25)

    chore(deps): bump the all group with 5 updates (#1084) Bumps the all group with 5 updates: | Package | From | To | | --- | --- | --- | | [actions/download-artifact](https://github.com/actions/download-artifact) | `4.1.9` | `4.2.1` | | [actions/setup-go](https://github.com/actions/setup-go) | `5.3.0` | `5.4.0` | | [actions/upload-artifact](https://github.com/actions/upload-artifact) | `4.6.1` | `4.6.2` | | [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) | `6.5.1` | `6.5.2` | | [actions/cache](https://github.com/actions/cache) | `4.2.2` | `4.2.3` | Updates `actions/download-artifact` from 4.1.9 to 4.2.1 - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/cc203385981b70ca67e1cc392babf9cc229d5806...95815c38cf2ff2164869cbab79da8d1f422bc89e) Updates `actions/setup-go` from 5.3.0 to 5.4.0 - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/f111f3307d8850f501ac008e886eec1fd1932a34...0aaccfd150d50ccaeb58ebd88d36e91967a5f35b) Updates `actions/upload-artifact` from 4.6.1 to 4.6.2 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1...ea165f8d65b6e75b540449e92b4886f43607fa02) Updates `golangci/golangci-lint-action` from 6.5.1 to 6.5.2 - [Release notes](https://github.com/golangci/golangci-lint-action/releases) - [Commits](https://github.com/golangci/golangci-lint-action/compare/4696ba8babb6127d732c3c6dde519db15edab9ea...55c2c1448f86e01eaae002a5a3a9624417608d84) Updates `actions/cache` from 4.2.2 to 4.2.3 - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/d4323d4df104b026a6aa633fdb11d772146be0bf...5a3ec84eff668545956fd18022155c47e93e2684) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: actions/setup-go dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: golangci/golangci-lint-action dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

  • dependabot[bot](31 Mar 25)

    chore(deps-dev): bump vite (#1085) Bumps the npm_and_yarn group with 1 update in the /webapp directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite). Updates `vite` from 6.2.2 to 6.2.3 - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v6.2.3/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v6.2.3/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:development dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

  • dependabot[bot](17 Mar 25)

    chore(deps): bump the all group with 5 updates (#1083) Bumps the all group with 5 updates: | Package | From | To | | --- | --- | --- | | [actions/download-artifact](https://github.com/actions/download-artifact) | `4.1.8` | `4.1.9` | | [actions/setup-node](https://github.com/actions/setup-node) | `4.2.0` | `4.3.0` | | [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) | `6.5.0` | `6.5.1` | | [actions/cache](https://github.com/actions/cache) | `4.2.1` | `4.2.2` | | [codecov/codecov-action](https://github.com/codecov/codecov-action) | `5.3.1` | `5.4.0` | Updates `actions/download-artifact` from 4.1.8 to 4.1.9 - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/fa0a91b85d4f404e444e00e005971372dc801d16...cc203385981b70ca67e1cc392babf9cc229d5806) Updates `actions/setup-node` from 4.2.0 to 4.3.0 - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a...cdca7365b2dadb8aad0a33bc7601856ffabcc48e) Updates `golangci/golangci-lint-action` from 6.5.0 to 6.5.1 - [Release notes](https://github.com/golangci/golangci-lint-action/releases) - [Commits](https://github.com/golangci/golangci-lint-action/compare/2226d7cb06a077cd73e56eedd38eecad18e5d837...4696ba8babb6127d732c3c6dde519db15edab9ea) Updates `actions/cache` from 4.2.1 to 4.2.2 - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/0c907a75c2c80ebcb7f088228285e798b750cf8f...d4323d4df104b026a6aa633fdb11d772146be0bf) Updates `codecov/codecov-action` from 5.3.1 to 5.4.0 - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3...0565863a31f2c772f9f0395002a31e3f06189574) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: actions/setup-node dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: golangci/golangci-lint-action dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

  • Felipe Martin(16 Mar 25)

    feat: reverts message in json output and allows configuration (#1082) * feat: allow future deprecated message response with config * tests: middleware * fix: middleware order * fix: frontend using message in body * fix: cors * feat: modify response type with header * fix(webapp): added new headers * dist: updated webapp files * test(e2e): fixes * fix: middleware returning body for 204 requests * fix: frontend apis * tests: cors middleware

  • Felipe Martin(15 Mar 25)

    feat: add apis to handle bookmark tags (#1081) * feat: add tag search api * feat: add apis to add/remove bookmark tags * chore: removed debug logger * docs: updated swagger * test: added tests * test: invalid ids * feat: webapp v2 * chore: updated swagger * fix: route params missing * feat: added cors middleware * feat: built api implementation * feat: implemented login in webapp * feat; dark mode in web app * feat: labels + i18n * refactor: remove custom message output in json apis * docs: updated swagger * chore: make lint * chore: make styles * fix: include new webapp dist files (for now)

  • Felipe Martin(12 Mar 25)

    feat: allow tag filtering and count retrieval via api v1 (#1079) * fix: frontend url to retrieve bookmark count * chore: unneeded type in generic * feat: allow tag filtering and count retrieval * fix: make styles * fix: make swagger * fix: make swag * tests: refactored gettags tests * fix: initialise tags empty slice

  • Felipe Martin(11 Mar 25)

    feat(apiv1): refactor tags api (#1075) * refactor: tags api into v1 api * feat: tags api huge refactor * fix: pg & sqlite tests * tests: added more tests * fix: bug on mysql bookmark and tag creation * test: re-enabled test * tests: slices test * tests: model bookmarks * test: use filepath.Join for path construction in bookmark tests

  • Artem Chernyak(08 Mar 25)

    docs: improve kubernetes deployment docs (#1065) Co-authored-by: Felipe Martin <[email protected]>

  • Felipe Martin(01 Mar 25)

    deps: update to go 1.23.6 with dependencies (#1071) * deps: update to go 1.23.6 with dependencies * chore: updated alpine to 3.21

Shiori Security

4/10

Repo Security Summary

Updated 24 Aug 26

  • Code-Review2/10
  • Maintained4/10
  • Dangerous-Workflow10/10
  • CII-Best-Practices0/10
  • Binary-Artifacts10/10
  • Token-Permissions0/10
  • Security-Policy0/10
  • License10/10
  • Fuzzing0/10
  • Branch-ProtectionN/A
  • Signed-Releases0/10
  • PackagingN/A
  • Pinned-Dependencies7/10
  • SAST2/10

Shiori Docker

Container Info

shiori

Shiori is a simple bookmarks manager written in Go language. Intended as a simple clone of Pocket. You can use it as command line application or as web application.

#Other#Tools

View on DockerHub

nicholaswilde/shiori:latest

Run Command

docker run -d \
  -p 7564:8080/tcp \
  -v /portainer/Files/AppData/Config/Shiori:/srv/shiori \
  --restart=unless-stopped \
  nicholaswilde/shiori:latest

Compose File

version: 3.8
services:
  shiori-container:
    image: "nicholaswilde/shiori:latest"
    ports:
      - "7564:8080/tcp"
    volumes:
      - "/portainer/Files/AppData/Config/Shiori:/srv/shiori"
    restart: unless-stopped

Port List

  • 7564:8080/tcp

Volume Mounting

  • Container PathHost Bind
  • /srv/shiori/portainer/Files/AppData/Config/Shiori

Shiori Reviews

More Browser Sync

About the Data: Shiori

Edit Shiori Data

You can edit Shiori's entry in this section of awesome-privacy.yml by submitting a PR to our GitHub repo.
Note that some of the information shown above has been aggregated from external sources, a list of these can be found data documentation.

Origin Data

Modify Data

API

You can access Shiori's data programmatically via our API. Simply make a GET request to:

https://api.awesome-privacy.xyz/v1/services/shiori

The REST API is free, no-auth and CORS-enabled. To learn more, view the API Docs or read the API Usage Guide.

Share Shiori

Help your friends compare Browser Sync, and pick privacy-respecting software and services.
Share Shiori and Awesome Privacy with your network!