Simple bookmark manager built with Go

Overview

Shiori

CI Go Report Card Docker Image Deploy Heroku

This project is now maintained by Dean Jackson (@deanishe). The awesome original author, @RadhiFadlillah, unfortunately no longer has the time (see #256), and I am honoured to take over stewardship of such a fantastic application.

Shiori is a simple bookmarks manager written in the Go language. Intended as a simple clone of Pocket. You can use it as a command line application or as a web application. This application is distributed as a single binary, which means it can be installed and used easily.

Screenshot

Features

  • Basic bookmarks management i.e. add, edit, delete and search.
  • Import and export bookmarks from and to Netscape Bookmark file.
  • Import bookmarks from Pocket.
  • Simple and clean command line interface.
  • Simple and pretty web interface for those who don't want to use a command line app.
  • Portable, thanks to its single binary format.
  • Support for sqlite3, PostgreSQL and MySQL as its database.
  • Where possible, by default shiori will parse the readable content and create an offline archive of the webpage.
  • [BETA] web extension support for Firefox and Chrome.

Comparison of reader mode and archive mode

Documentation

All documentation is available in the wiki. If you think there is incomplete or incorrect information, feel free to edit it.

License

Shiori is distributed under the terms of the MIT license, which means you can use it and modify it however you want. However, if you make an enhancement for it, if possible, please send a pull request.

Comments
  • CI/CD and Dockerfile updates

    CI/CD and Dockerfile updates

    • Dockerfile changes

      • Added .dockerignore so unneded files aren't copied over
      • Smaller docker image using scratch image
      • Binaries are statically linked and build with cgo so that they can run on a scratch image.
      • docker image does run as root (could be a security issue) this could be easily changed but may also be harder to setup for some
    • Releases

      • When a tag is created github actions will create a release and upload binaries.
      • Binaries for linux and windows are statically linked and built with cgo, so they should have no dependencies.
      • Built with -extldflags -s -w flags for a smaller binary this strips dwarf tables used in debuggers and doesn't affect stack traces.
        • Release Targets:
          • linux-amd64 (tested)
          • linux-arm64 (untested)
          • linux-armv7 (untested)
          • win-amd64 (tested)
          • darwin-amd64 (untested)
      • Docker files will be created and uploaded to docker hub.
      • Tagged latest and with tag
        • linux-amd64 (tested)
        • linux-arm64 (untested)
        • linux-armv7 (untested)
    • Continous Integration

      • uses v1.x for latest version of golang
      • added go vet in linting stage
      • go build is run for all release targets as well(maintainers will have access to build artifacts).
      • added docker build and upload to docker hub for push to master, images tagged with commit sha1.
    • A go-shiori account will need to be made on docker hub

    • A personal access token will need to be created on docker hub

    • The following gihub actions secrets will need to be set in github

      • DOCKER_HUB_USERNAME
      • DOCKER_HUB_ACCESS_TOKEN

    -Examples: https://github.com/n8225/shiori/actions https://github.com/n8225/shiori/releases https://hub.docker.com/r/nrew225/shiori

    Related Issues: #263 #260

    Closes #254 #267 #238 #273

    opened by n8225 22
  • Unable to host under subpath

    Unable to host under subpath

    I'm trying to host shiori on port 7777 and then proxy pass https://localhost/shiori/ to that port, but when I do using this nginx config:

      location /shiori/ {
        rewrite ^/shiori/(.*)$ /$1 break;
        proxy_pass http://localhost:7777;
        proxy_redirect http://localhost:7777/ $scheme://$host/shiori/;
      }
    

    I get this result:

    This page isn’t working

    And the URL shows:

    https://localhost/login

    Any ideas? Seems like shiori redirects to / (root).

    Manually going to localhost/shiori/login brings up a broken login page, seemingly without both css, images, etc (can't click on anything).

    type:bug priority:low component:backend 
    opened by Necklaces 18
  • How to setup Shiori on a Raspberry Pi

    How to setup Shiori on a Raspberry Pi

    How can I install in a Raspberry Pi? I've tried building from source using Go. No luck. I also tried building the dockerfile provided, as well as this modification by 5hay. Neither worked.

    Does anyone know how to install it on Raspbian?

    tag:help-wanted 
    opened by szethh 17
  • Lost bookmarks since upgrade to 1.5.0

    Lost bookmarks since upgrade to 1.5.0

    Hello,

    I upgraded shiori from 1.0-1 to 1.5.0-2 on my computer on Arch Linux. I couldn't login with my previous credentials so I logged in with the default as described here. However, the list of bookmarks was empty. I recreated an account with the same username, but a different password and still no bookmarks were listed.

    When I check the file at ~/.local/share/shiori/shiori.db I see the data is still here. I did a backup and then tried to add a new bookmark with the new account. The file at ~/.local/share/shiori/shiori.db has not been modified, but the new bookmark seems to be saved somewhere.

    It looks like the storage location has changed, but if I read the documentation, the default data directory seems to be this.

    Do you have an idea of the reason of the lost bookmarks?

    tag:more-info component:backend 
    opened by KillianKemps 13
  • First start creates an empty database with no tables

    First start creates an empty database with no tables

    I run:

    ./shiori --portable serve
    

    And I see a zero size file shiori.db in the shiori-data directory:

    ls -l shiori-data
    -rw-r--r-- 1 user users 0 aug 23 21:57 shiori.db
    

    Open in browser, try to login shiori/gopher and see:

    failed to fetch accounts: SQL logic error: no such table: account (1) (500)
    

    It works only if before the first start run:

    ./shiori --portable migrate
    

    I use shiori v1.5.3.

    component:backend database type:discussion priority:high 
    opened by Katarn 11
  • "failed to save bookmark"

    Shiori Docker with Postgresql database, on Ubuntu Server 19.10.

    My compose:

    shiori:
        image: radhifadlillah/shiori
        container_name: shiori
        depends_on:
          - shioridb
        restart: unless-stopped
        ports:
          - "8989:8080"
        volumes:
         - ${USERDIR}/docker/shiori:~/.local/share/shiori
        environment:
          - PUID=${PUID}
          - PGID=${PGID}
          - TZ=${TZ}
          # - SHIORI_DIR=${USERDIR}/docker/shiori
          - SHIORI_DBMS=postgresql
          - SHIORI_PG_USER=shiori
          - SHIORI_PG_PASS=shioripass
          - SHIORI_PG_NAME=shioridb
          - SHIORI_PG_HOST=shioridb
          - SHIORI_PG_PORT=5432
      shioridb:
        image: postgres:12-alpine
        container_name: shioridb
        restart: always
        environment:
          - POSTGRES_USER=shiori
          - POSTGRES_PASSWORD=shioripass
          - POSTGRES_DB=shioridb
        volumes:
          - ${USERDIR}/docker/shiori/db:/var/lib/postgresql/data
    

    It was working fine at first but now, while trying to add bookmarks through gui I'm getting this error:

    failed to save bookmark: pq: current transaction is aborted, commands ignored until end of transaction block (500)
    

    I'm also seeing this in the shioridb logs:

    
    2019-11-22 12:52:27.773 UTC [589] ERROR:  insert or update on table "bookmark_tag" violates foreign key constraint "bookmark_tag_bookmark_id_fk"
    
    
    2019-11-22 12:52:27.773 UTC [589] DETAIL:  Key (bookmark_id)=(5) is not present in table "bookmark".
    
    
    2019-11-22 12:52:27.773 UTC [589] STATEMENT:  INSERT INTO bookmark_tag
    
    
    			(tag_id, bookmark_id) VALUES ($1, $2) ON CONFLICT DO NOTHING
    
    
    2019-11-22 13:15:00.325 UTC [589] ERROR:  insert or update on table "bookmark_tag" violates foreign key constraint "bookmark_tag_bookmark_id_fk"
    
    
    2019-11-22 13:15:00.325 UTC [589] DETAIL:  Key (bookmark_id)=(15) is not present in table "bookmark".
    
    
    2019-11-22 13:15:00.325 UTC [589] STATEMENT:  INSERT INTO bookmark_tag
    
    
    			(tag_id, bookmark_id) VALUES ($1, $2) ON CONFLICT DO NOTHING
    
    
    2019-11-22 13:15:00.326 UTC [589] ERROR:  current transaction is aborted, commands ignored until end of transaction block
    
    
    2019-11-22 13:15:00.326 UTC [589] STATEMENT:  SELECT id FROM tag WHERE name = $1
    
    
    2019-11-22 13:17:25.315 UTC [589] ERROR:  insert or update on table "bookmark_tag" violates foreign key constraint "bookmark_tag_bookmark_id_fk"
    
    
    2019-11-22 13:17:25.315 UTC [589] DETAIL:  Key (bookmark_id)=(22) is not present in table "bookmark".
    
    
    2019-11-22 13:17:25.315 UTC [589] STATEMENT:  INSERT INTO bookmark_tag
    
    
    			(tag_id, bookmark_id) VALUES ($1, $2) ON CONFLICT DO NOTHING
    
    
    2019-11-22 13:17:25.316 UTC [589] ERROR:  current transaction is aborted, commands ignored until end of transaction block
    
    
    2019-11-22 13:17:25.316 UTC [589] STATEMENT:  SELECT id FROM tag WHERE name = $1
    
    
    2019-11-22 13:18:19.518 UTC [589] ERROR:  insert or update on table "bookmark_tag" violates foreign key constraint "bookmark_tag_bookmark_id_fk"
    
    
    2019-11-22 13:18:19.518 UTC [589] DETAIL:  Key (bookmark_id)=(23) is not present in table "bookmark".
    
    
    2019-11-22 13:18:19.518 UTC [589] STATEMENT:  INSERT INTO bookmark_tag
    
    
    			(tag_id, bookmark_id) VALUES ($1, $2) ON CONFLICT DO NOTHING
    
    
    2019-11-22 13:18:19.519 UTC [589] ERROR:  current transaction is aborted, commands ignored until end of transaction block
    
    
    2019-11-22 13:18:19.519 UTC [589] STATEMENT:  SELECT id FROM tag WHERE name = $1
    
    
    2019-11-22 13:19:51.411 UTC [589] ERROR:  insert or update on table "bookmark_tag" violates foreign key constraint "bookmark_tag_bookmark_id_fk"
    
    
    2019-11-22 13:19:51.411 UTC [589] DETAIL:  Key (bookmark_id)=(24) is not present in table "bookmark".
    
    
    2019-11-22 13:19:51.411 UTC [589] STATEMENT:  INSERT INTO bookmark_tag
    
    
    			(tag_id, bookmark_id) VALUES ($1, $2) ON CONFLICT DO NOTHING
    
    
    2019-11-22 13:19:51.412 UTC [589] ERROR:  current transaction is aborted, commands ignored until end of transaction block
    
    
    2019-11-22 13:19:51.412 UTC [589] STATEMENT:  SELECT id FROM tag WHERE name = $1
    

    What am I doing wrong?

    type:bug component:backend database:sqlite 
    opened by watson387 11
  • Can't find the bookmarklet

    Can't find the bookmarklet

    The last issue I see about finding the bookmarklet is #100 . Since then the UI has changed and the about screen is no longer shown. Where is the bookmarklet now or has it been superseded by the chrome extension?

    opened by 8bitgentleman 11
  • Add LDAP Authentication

    Add LDAP Authentication

    Hello,

    Here a new PR for ldap authentication on your latest branch and without the config part.

    All settings are given via environment vars.

    I also added a docker-compose as an example with all env vars and a postgresql.

    Regards,

    opened by ynsta 10
  • Add LDAP auth support

    Add LDAP auth support

    Hello,

    I would like to contribute to add ldap auth support in your project.

    @RadhiFadlillah do you plan to merge soon your ramadhan branch, if not I'll do a PR into this branch ?

    I'll need to add a some config options (ldap server, port, tls, search string, ...) I think a shiori.toml file should be a fine solution.

    Regards

    type:enhancement note:out-of-scope? 
    opened by ynsta 10
  • better systemd service file

    better systemd service file

    I've created my own systemd service file with the following security settings in the [service] section:

    CapabilityBoundingSet=CAP_NET_BIND_SERVICE
    RestrictNamespaces=true
    NoNewPrivileges=true
    PrivateTmp=true
    ProtectClock=true
    ProtectKernelModules=true
    ProtectProc=noaccess
    ProtectHostname=true
    RestrictRealtime=true
    SystemCallArchitectures=native
    
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    
    [email protected]
    [email protected]
    
    LockPersonality=true
    
    MemoryDenyWriteExecute=true
    
    UMask=0077
    
    PrivateDevices=true
    ProtectControlGroups=true
    ProtectKernelTunables=true
    ProtectSystem=full
    RestrictSUIDSGID=true
    

    I'm using the binary directly (so no docker). I am also not using --portable (not on purpose, just forgot to add it).

    I think when using --portable, ProtectHome=true can be added as well.

    I did not found a .service file in the code, just a snippet in the wiki. I created this issue, because I didn't want to add any changes in the wiki without prior discussion.

    opened by beac0n 9
  • Low-res images for sites that use progressive enhancement?

    Low-res images for sites that use progressive enhancement?

    I just tried adding a bookmark for a Medium article and noticed the images were imported into Shiori at an atrocious quality:

    Screen Shot 2020-01-20 at 8 58 11 PM

    I'm guessing this is because Medium will lazy-load the higher-resolution copies with JS, but the Shiori importer doesn't wait around for that. That's my best guess anyways. Inspecting the Medium page source, I see that the images have a noscript tag near 'em with he full-quality version of the image... perhaps that could be useful when importing?

    Think this is fixable?

    type:bug component:backend component:readability 
    opened by neezer 9
  • chore(deps): bump goreleaser/goreleaser-action from 3 to 4

    chore(deps): bump goreleaser/goreleaser-action from 3 to 4

    Bumps goreleaser/goreleaser-action from 3 to 4.

    Release notes

    Sourced from goreleaser/goreleaser-action's releases.

    v4.0.0

    What's Changed

    Full Changelog: https://github.com/goreleaser/goreleaser-action/compare/v3...v4.0.0

    v3.2.0

    What's Changed

    • chore: remove workaround for setOutput by @​crazy-max (#374)
    • chore(deps): bump @​actions/core from 1.9.1 to 1.10.0 (#372)
    • chore(deps): bump yargs from 17.5.1 to 17.6.0 (#373)

    Full Changelog: https://github.com/goreleaser/goreleaser-action/compare/v3.1.0...v3.2.0

    v3.1.0

    What's Changed

    • fix: dist resolution from config file by @​crazy-max (#369)
    • ci: fix workflow by @​crazy-max (#357)
    • docs: bump actions to latest major by @​crazy-max (#356)
    • chore(deps): bump crazy-max/ghaction-import-gpg from 4 to 5 (#360)
    • chore(deps): bump ghaction-import-gpg to v5 (#359)
    • chore(deps): bump @​actions/core from 1.6.0 to 1.8.2 (#358)
    • chore(deps): bump @​actions/core from 1.8.2 to 1.9.1 (#367)

    Full Changelog: https://github.com/goreleaser/goreleaser-action/compare/v3.0.0...v3.1.0

    Commits
    • 8f67e59 chore: regenerate
    • 78df308 chore(deps): bump minimatch from 3.0.4 to 3.1.2 (#383)
    • 66134d9 Merge remote-tracking branch 'origin/master' into flarco/master
    • 3c08cfd chore(deps): bump yargs from 17.6.0 to 17.6.2
    • 5dc579b docs: add example when using workdir along with upload-artifact (#366)
    • 3b7d1ba feat!: remove auto-snapshot on dirty tag (#382)
    • 23e0ed5 fix: do not override GORELEASER_CURRENT_TAG (#370)
    • 1315dab update build
    • b60ea88 improve install
    • 4d25ab4 Update goreleaser.ts
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
  • Loglevel adjustable via parameter/config

    Loglevel adjustable via parameter/config

    Starting shiori like shiori serve -a 127.0.0.1 --log true i can specify what is logged but not which level (info,warn,debug....) It would be nice to reduce the loglevel to eg. warn by having a possibility like shiori serve -a 127.0.0.1 --log true --loglevel warn

    opened by 6UzoTE 0
  • chore(deps): bump modernc.org/sqlite from 1.19.5 to 1.20.0

    chore(deps): bump modernc.org/sqlite from 1.19.5 to 1.20.0

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies go 
    opened by dependabot[bot] 0
  • chore(deps): bump github.com/go-sql-driver/mysql from 1.6.0 to 1.7.0

    chore(deps): bump github.com/go-sql-driver/mysql from 1.6.0 to 1.7.0

    Bumps github.com/go-sql-driver/mysql from 1.6.0 to 1.7.0.

    Release notes

    Sourced from github.com/go-sql-driver/mysql's releases.

    Version 1.7

    Changes:

    • Drop support of Go 1.12 (#1211)
    • Refactoring (*textRows).readRow in a more clear way (#1230)
    • util: Reduce boundary check in escape functions. (#1316)
    • enhancement for mysqlConn handleAuthResult (#1250)

    New Features:

    • support Is comparison on MySQLError (#1210)
    • return unsigned in database type name when necessary (#1238)
    • Add API to express like a --ssl-mode=PREFERRED MySQL client (#1370)
    • Add SQLState to MySQLError (#1321)

    Bugfixes:

    • Fix parsing 0 year. (#1257)
    Changelog

    Sourced from github.com/go-sql-driver/mysql's changelog.

    Version 1.7 (2022-11-29)

    Changes:

    • Drop support of Go 1.12 (#1211)
    • Refactoring (*textRows).readRow in a more clear way (#1230)
    • util: Reduce boundary check in escape functions. (#1316)
    • enhancement for mysqlConn handleAuthResult (#1250)

    New Features:

    • support Is comparison on MySQLError (#1210)
    • return unsigned in database type name when necessary (#1238)
    • Add API to express like a --ssl-mode=PREFERRED MySQL client (#1370)
    • Add SQLState to MySQLError (#1321)

    Bugfixes:

    • Fix parsing 0 year. (#1257)

    Version 1.6 (2021-04-01)

    Changes:

    • Migrate the CI service from travis-ci to GitHub Actions (#1176, #1183, #1190)
    • NullTime is deprecated (#960, #1144)
    • Reduce allocations when building SET command (#1111)
    • Performance improvement for time formatting (#1118)
    • Performance improvement for time parsing (#1098, #1113)

    New Features:

    • Implement driver.Validator interface (#1106, #1174)
    • Support returning uint64 from Valuer in ConvertValue (#1143)
    • Add json.RawMessage for converter and prepared statement (#1059)
    • Interpolate json.RawMessage as string (#1058)
    • Implements CheckNamedValue (#1090)

    Bugfixes:

    • Stop rounding times (#1121, #1172)
    • Put zero filler into the SSL handshake packet (#1066)
    • Fix checking cancelled connections back into the connection pool (#1095)
    • Fix remove last 0 byte for mysql_old_password when password is empty (#1133)

    Version 1.5 (2020-01-07)

    Changes:

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies go 
    opened by dependabot[bot] 0
  • Use font with wide scripts support

    Use font with wide scripts support

    Shiori 1.5.3 on Windows 7 x64.

    At present the app uses custom font with Latin script support only. To be specific: /css/fonts/source-sans-pro-v13-latin-700.woff2 And what do others see when they use letters out of Latin scope? The eyesore.

    image

    Either use font with wide scripts support (e.g. Noto Sans) or let system/user decide.

    type:bug 
    opened by sergeevabc 0
Releases(v1.5.3)
  • v1.5.3(Jun 23, 2022)

    Breaking changes

    • Migrations: Migrations are now implemented in a manual and separate CLI command called migrate. Users need to perform database migrations previous to any other Shiori command in order for the database schema to be created:

      $ shiori add https://github.com
      Failed to create ID: SQL logic error: no such table: bookmark (1)
      exit status 1
      
      $ shiori migrate                  
      
      $ shiori add https://github.com   
      Downloading article...
      
      2. GitHub: Where the world builds software
         > https://github.com
         + GitHub is where over 83 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and feat...
      

    Changelog

    • b68092c Heroku buildpack support in go.mod (#388)
    • f000f11 Update Usage.md (#435)
    • 7394b10 chore: update go dependencies (#424)
    • 81d52a2 feat: sqlite migrations (#398)
    • 9397832 fix: amd64 build paths (#429)
    • ce8a172 fix: bookmark content download (#413)
    • 0fe24d2 fix: url modification when query param is empty (#411)
    • 8732fd7 implement migration for mysql & postgres (#422)
    • 2b1ddd0 replace assets generation with embed (#423)
    • ca3cc11 sqlite: remove unneeded LEFT JOIN to improve performance (#387)
    Source code(tar.gz)
    Source code(zip)
    checksums.txt(599 bytes)
    shiori_1.5.3_Darwin_aarch64.tar.gz(7.47 MB)
    shiori_1.5.3_Darwin_x86_64.tar.gz(7.62 MB)
    shiori_1.5.3_Linux_aarch64.tar.gz(6.92 MB)
    shiori_1.5.3_Linux_armv7.tar.gz(6.96 MB)
    shiori_1.5.3_Linux_x86_64.tar.gz(7.40 MB)
    shiori_1.5.3_Windows_x86_64.tar.gz(7.49 MB)
  • v1.5.2(Feb 24, 2022)

    What's Changed

    • Web Server Improvements by @efrecon in https://github.com/go-shiori/shiori/pull/374
    • fix: trying to mkdir over an incorrect data path by @fmartingr in https://github.com/go-shiori/shiori/pull/378

    New Contributors

    • @efrecon made their first contribution in https://github.com/go-shiori/shiori/pull/374

    Full Changelog: https://github.com/go-shiori/shiori/compare/v1.5.1...v1.5.2

    Changelog

    • e1e2c7b Web Server and CI Improvements (#374)
    • 560a677 fix: trying to mkdir over an incorrect data path (#378)
    Source code(tar.gz)
    Source code(zip)
    checksums.txt(599 bytes)
    shiori_1.5.2_Darwin_aarch64.tar.gz(7.38 MB)
    shiori_1.5.2_Darwin_x86_64.tar.gz(7.54 MB)
    shiori_1.5.2_Linux_aarch64.tar.gz(6.85 MB)
    shiori_1.5.2_Linux_armv7.tar.gz(6.88 MB)
    shiori_1.5.2_Linux_x86_64.tar.gz(7.33 MB)
    shiori_1.5.2_Windows_x86_64.tar.gz(7.42 MB)
  • v1.5.1(Feb 18, 2022)

    Breaking changes

    • SQLite users: The SQLite driver has been modified to a non-CGO driver to ease the maintenance and builds of the project, but it came at the cost of replacing the full-text search implementation module for a newer one, each other incompatible with each driver, so we couldn't perform the migration easily directly in shiori. In order for shiori to continue working properly for you, please go to this page that explain what you need to do (and more explaining over why the change). The process is very easy and the binary of the migration tool for x86_64 systems is attached in this release as well.

    Changelog

    • c5fd200 Add GitHub Action for tests & coverage
    • bf974fa Add border around table in content view
    • 5903214 Add code of conduct
    • 5bf02d8 Add notice about project archival
    • bccc70b Add option to hide thumbnail image #166
    • a82b882 Add options to hide excerpt #166
    • 76a7856 Add specific size to bookmark_url key
    • 793901c Added Heroku deploy. Fixed go-shiori/shiori#45
    • 72f1a22 Create FUNDING.yml
    • c55b1a3 Default to webpage title, not URL, if user specifies no title
    • a0ce725 Exit with non-zero status when add fails
    • acc86d7 Exit with non-zero status when add fails
    • 32f9d26 Explicit charset for MySQL connection
    • ddf7c37 Fix MySQL column definitions
    • b315c48 Fix content with double braces not rendered #171
    • fbd4e37 Fix custom title and excerpt doesn't saved
    • 018f332 Fix import skipped when title missing #153
    • a5cb2c6 Fix login autofill
    • 28ee496 Fix title is empty when adding bookmark
    • 1d83468 Fix when using extension bookmark doesn't archived
    • d2906b1 Fix wrong cookie path
    • ef248c8 Fix: Bookmark content displays Invalid Date if database is PostgreSQL #201
    • e41cea6 Fix: Safari does not accept document.baseURI for cookie path
    • 7a2bcac Fix: hasArchive icon gone after update bookmark
    • 7d938f3 Fix: checkbox in dialog doesn't work
    • 9835336 Fix: grid layout on dialog
    • 9e962f0 Fix: now cookie set per subpath #39
    • 9ba9d1e Fix: wrong query in PostgreSQL
    • 59a0594 Fixed some typos
    • 752d1ba In no-thumbnail mode, make margin more consistent
    • 4eb86d6 Initial PostgreSQL support
    • 99d2793 Initial support for subpath #39
    • 3a9e53c Initial unit test..
    • df98c28 Make MySQL address changeable #156
    • 0bc1b4a Make sure archive use UTF-8 encoding
    • 5601ac7 Merge branch 'master' into patch-1
    • 6b16943 Merge branch 'master' of github.com:go-shiori/shiori
    • 4d11e35 Merge pull request #158 from disposedtrolley/api-documentation
    • 2cd1b6a Merge pull request #162 from deanishe/default-title-from-page
    • 7d3f8d7 Merge pull request #164 from deanishe/fix-mysql-schema
    • d3d4cc0 Merge pull request #167 from ReekyMarko/patch-1
    • c2eee1d Merge pull request #170 from bvp/master
    • a7b41ae Merge pull request #177 from bvp/master
    • 8146d3a Merge pull request #192 from agorf/patch-1
    • 599afea Merge pull request #199 from nfam/master
    • 243a88c Merge pull request #202 from nfam/master
    • a0d727b Merge pull request #205 from nfam/master
    • 9f7c8bf Merge pull request #206 from khoanguyen96/fix-js-mimetype
    • 60b7f29 Merge pull request #221 from deanishe/fix/autofill
    • b7a5a61 Merge pull request #223 from deanishe/fix/mysql-charset
    • 4ff6ddd Merge pull request #246 from Midek/master
    • 7124dc2 Merge pull request #258 from go-shiori/ci
    • ff5c464 Merge pull request #259 from go-shiori/fix/exit-status
    • a950bfe Merge pull request #264 from lapwat/master
    • cf88489 Merge pull request #341 from n8225/updateDockerfile
    • 1338dc6 Minor improvements and typo fixes in the README text
    • 035658d Move heroku button to badge for consistency
    • a3e1563 Move warc to another package
    • 52bb4d9 Prevent browser doing MIME sniffing #182
    • ee877b8 Remove Radhi's accounts from GitHub Sponsors
    • 748b306 Remove golang from final image
    • 2b4fd9f Remove unneeded alter table transactions from sqlite (#372)
    • f316cb8 Restructure build files
    • 7688990 Revert "Restructure build files"
    • d05d1ad Setup new CI/CD workflows (#365)
    • a4dd1c8 Specify character set when creating MySQL table #188
    • 9f145e2 Tidy up code for opening database
    • b137fe4 Tidy up docs files
    • f1c98a8 Update Dependencies and Replace mattn/go-sqlite with modernc.org/sqlite (#345)
    • 3d74038 Update links and email addresses
    • ff94c36 Update notice about maintainership
    • c77b17c Use formatter in LESS files
    • 988f2d6 Use single quotes for better compatibility
    • 3077c7f Use tab instead of spaces
    • 83e3621 bug: Docker build
    • d70a8f2 chore: configuration for stale bot
    • 91e1bc8 chore: stalebot for pull requests
    • 3c8a66f chore: updated readme
    • feb150f ci: github action to notify releases via irc
    • 92adfa6 feat: add postman collection
    • fb0bf38 feat: async content download when creating via api (#368)
    • a76b121 fix: golangci-lint errors (#366)
    • d569932 fix: remember me session duration (#346)
    • 0bd297d fix: update bookmark on sqlite database (#367)
    • 2ca628b hotfix: fixes session duration from #346
    • 3fe593d update url also when offline mode
    • d1d48ad wrap mime.TypeByExtension with preset mimetypes

    What's Changed

    • Default to webpage title, not URL, if user specifies no title by @deanishe in https://github.com/go-shiori/shiori/pull/162
    • Fix MySQL schema by @deanishe in https://github.com/go-shiori/shiori/pull/164
    • Fixed some typos by @FunctionalHacker in https://github.com/go-shiori/shiori/pull/167
    • Adds Postman Collection for /api/ endpoints by @disposedtrolley in https://github.com/go-shiori/shiori/pull/158
    • Initial PostgreSQL support by @bvp in https://github.com/go-shiori/shiori/pull/170
    • Added Heroku deploy. Fixed go-shiori/shiori#45 by @bvp in https://github.com/go-shiori/shiori/pull/177
    • Fix: Safari does not accept document.baseURI for cookie path by @nfam in https://github.com/go-shiori/shiori/pull/199
    • Fix: Bookmark content displays Invalid Date if database is PostgreSQL by @nfam in https://github.com/go-shiori/shiori/pull/202
    • Fix: grid layout on dialog by @nfam in https://github.com/go-shiori/shiori/pull/205
    • wrap mime.TypeByExtension with preset mimetypes by @cocoastorm in https://github.com/go-shiori/shiori/pull/206
    • Fix login autofill by @deanishe in https://github.com/go-shiori/shiori/pull/221
    • Specify charset for MySQL connection by @deanishe in https://github.com/go-shiori/shiori/pull/223
    • Minor improvements and typo fixes in the README text by @agorf in https://github.com/go-shiori/shiori/pull/192
    • Continuous integration by @deanishe in https://github.com/go-shiori/shiori/pull/258
    • Exit with non-zero status when commands fail by @deanishe in https://github.com/go-shiori/shiori/pull/259
    • update url also when offline mode by @Midek in https://github.com/go-shiori/shiori/pull/246
    • bug: Docker build by @lapwat in https://github.com/go-shiori/shiori/pull/264
    • Remove golang from final docker image by @n8225 in https://github.com/go-shiori/shiori/pull/341
    • Update Dependencies and Replace mattn/go-sqlite with modernc.org/sqlite by @n8225 in https://github.com/go-shiori/shiori/pull/345
    • fix: remember me session duration by @fmartingr in https://github.com/go-shiori/shiori/pull/346
    • fix: lint errors by @fmartingr in https://github.com/go-shiori/shiori/pull/366
    • Setup CI/CD workflows by @n8225 in https://github.com/go-shiori/shiori/pull/365
    • feat: async content download when creating via api by @fmartingr in https://github.com/go-shiori/shiori/pull/368
    • fix: update bookmark on sqlite database by @fmartingr in https://github.com/go-shiori/shiori/pull/367
    • Remove unneeded alter table transactions from sqlite by @n8225 in https://github.com/go-shiori/shiori/pull/372

    New Contributors

    • @deanishe made their first contribution in https://github.com/go-shiori/shiori/pull/162
    • @FunctionalHacker made their first contribution in https://github.com/go-shiori/shiori/pull/167
    • @disposedtrolley made their first contribution in https://github.com/go-shiori/shiori/pull/158
    • @bvp made their first contribution in https://github.com/go-shiori/shiori/pull/170
    • @nfam made their first contribution in https://github.com/go-shiori/shiori/pull/199
    • @cocoastorm made their first contribution in https://github.com/go-shiori/shiori/pull/206
    • @agorf made their first contribution in https://github.com/go-shiori/shiori/pull/192
    • @Midek made their first contribution in https://github.com/go-shiori/shiori/pull/246
    • @lapwat made their first contribution in https://github.com/go-shiori/shiori/pull/264
    • @n8225 made their first contribution in https://github.com/go-shiori/shiori/pull/341
    • @fmartingr made their first contribution in https://github.com/go-shiori/shiori/pull/346

    Full Changelog: https://github.com/go-shiori/shiori/compare/v1.5.0...v1.5.1

    Source code(tar.gz)
    Source code(zip)
    checksums.txt(599 bytes)
    shiori-sqlite-fts4-to-fts5_linux-x86_64.gz(4.87 MB)
    shiori_1.5.1_Darwin_aarch64.tar.gz(7.38 MB)
    shiori_1.5.1_Darwin_x86_64.tar.gz(7.54 MB)
    shiori_1.5.1_Linux_aarch64.tar.gz(6.85 MB)
    shiori_1.5.1_Linux_armv7.tar.gz(6.88 MB)
    shiori_1.5.1_Linux_x86_64.tar.gz(7.32 MB)
    shiori_1.5.1_Windows_x86_64.tar.gz(7.41 MB)
  • v1.5.0(Sep 21, 2019)

    Today Shiori v1.5.0 is released after almost five months of development (with several long breaks between). This release is quite huge with many changes and improvement from older version. Granted there are still some rough edges, but I think it's still usable enough to release.

    Back-End

    • Use Go modules. Thanks to this, we don't need to use Git submodules anymore to include go-readability.
    • Restructure code following Go Project Layout.
    • Huge update in go-readability. Now it closely follows code in Readability.js, which means it now as accurate as Firefox reader mode.
    • Removed account command. Before, on fresh install, to access web interface we need to manually register account. This is quite annoying, especially if we are using Docker. Now, on fresh install we can just login using default password and account (shiori with password gopher).
    • Replace JWT with simple session for login. Before, if an account already login then admin removed that account, the account can still access the web interface as long its JWT key is still valid. Now, thanks to session, if an account got removed we can do mass log out for that account.
    • Use favicon as alternative if hero image doesn't exists.
    • Resized thumbnail image to 4:3 aspect ratio. This is done to make all image looks consistent. If the thumbnail image doesn't have that ratio, it will be padded by color that matches with the image.
    • Add support for MySQL database (#81, thanks to @peteretelej for the groundwork).
    • Add initial support for archiving the entire web page. Before, Shiori only saves the output of go-readability which sometimes not really good (for example is Stack Overflow). Now, when requested Shiori will archive the web page with its entire resource.
    • When a bookmark is archived, the reader mode will uses images and other resources from the archive instead of the one from original site (#108).
    • Add support for bookmarking non HTML URL (#77).
    • Add support for bookmarking non reachable URL (#128).
    • Fix failed to delete many bookmarks at once (#104).
    • Add option to specify address and port number while serving web interface (#101, thanks to @contradictioned).
    • Add portable mode (#126).
    • Set user agent for downloading and archiving an URL (#127).
    • Add support for searching in bookmark's excerpt (#134).
    • Add check command to find bookmarks that no longer available online, thanks to @sascha-andres.
    • Other minor improvements in CLI, which I forgot the detail.

    Front-End

    • Use ES6 feature like modules and arrow function. Thanks to modules, I can (kind of) imitate the Vue's single file component without using JS bundler.
    • Use fetch instead of third party library like axios.
    • Increase font size to make it more readable.
    • Move actions from sidebar to header.
    • Revamped the mobile view.
    • Revamped options page and add account management.
    • Uses history state so back and forward button works properly. Thanks to this, now search result can be shared via its URL (#111).
    • Add icons which shows if bookmark has archive or readable content.
    • In list mode, make layout tighter to give space for more visible content.
    • Now bookmarks is sorted by last created instead of last modified.
    • Add initial support for web extension to replace bookmarklet.
    • In Firefox for Android, make the address bar gone while scrolling.
    • Display creation and modified time in local timezone instead of UTC (#103).
    • Make Vue.js doesn't uses development mode in production (#106).
    • Add rel=noopener on link that open in new tab (#105, thanks to @sascha-andres).
    • Group bookmarks that tagged or untagged (#109).
    • Add support to flag whether a bookmark is public or private (#112).
    • Add support for account's level. Now, we can specify whether an account is the owner (i.e. can add and edit data) or only a visitor (i.e can only read the data) (#137).
    • Add tag's auto completion in edit dialog (#135).
    • Add menu to rename the existing tags (#136).

    Future Plans

    There are still several issues and feature that I want to be implemented in the future :

    • If you look at the source code, you will realize that there are no unit tests. None, at all.
    • Some feature is available in web interface but not in CLI. For example: renaming tags and flagging a bookmark as private or public.
    • I haven't extensively tested the import feature. The issues about importing bookmarks (#121, #125) mention that they have a lot of bookmarks to import. Meanwhile my bookmarks at most only has several hundred entries which is not near enough to what they have. Thanks to this, I haven't been able to reproduce their issues. If any of you willing to submit your bookmarks, feels free to email me.

    If you like this project please consider donating to me either via PayPal or Ko-Fi.

    Source code(tar.gz)
    Source code(zip)
    shiori-linux-386(17.43 MB)
    shiori-linux-386-stretch(17.01 MB)
    shiori-linux-amd64(19.22 MB)
    shiori-linux-amd64-stretch(18.82 MB)
    shiori-windows-386.exe(25.71 MB)
    shiori-windows-amd64.exe(31.13 MB)
  • v1.0(Jul 16, 2018)

    This is the first stable version of shiori. The stable here means two things :

    • It doesn't crash or error as often as before, so it can be used for daily use.
    • The database and directory structure has been fixed, so future update should be backward compatible with this release.

    There are several changes compared to initial release, but (IMHO) the most important are :

    • Huge UI redesign
    • Add import from Pocket
    • Implement bookmarklet for faster bookmarking
    Source code(tar.gz)
    Source code(zip)
    shiori_linux_amd64(23.85 MB)
    shiori_windows_386.exe(19.50 MB)
    shiori_windows_amd64.exe(23.72 MB)
  • v0.9(Mar 1, 2018)

Owner
Shiori
Simple bookmark manager built with Go
Shiori
Self-hosted video-hosting website and video archival manager for Niconico, Bilibili, and Youtube

Self-hosted video-hosting website and video archival manager for Niconico, Bilibili, and Youtube

null 793 Jan 1, 2023
listmonk is a standalone high performance, self-hosted newsletter and mailing list manager with a modern dashboard. Single binary app.

listmonk is a standalone, self-hosted, newsletter and mailing list manager. It is fast, feature-rich, and packed into a single binary. It uses a PostgreSQL database as its data store.

Kailash Nadh 9.2k Jan 1, 2023
listmonk is a standalone, self-hosted, newsletter and mailing list manager

listmonk is a standalone, self-hosted, newsletter and mailing list manager. It is fast, feature-rich, and packed into a single binary. It uses a Postg

Super-Smile 16 Aug 15, 2022
This is a cert-manager webhook solver for DNSPod.

cert-manager-webhook-dnspod This is a cert-manager webhook solver for DNSPod. Prerequisites cert-manager >= 1.6.0 Installation Generate SecretId and S

roc 22 Jan 6, 2023
staticfiles is an asset manager for a web applications written in Go.

Overview staticfiles is an asset manager for a web applications written in Go. It collects asset files (CSS, JS, images, etc.) from a different locati

null 11 Dec 7, 2022
📚 Task Manager App for CVWO Application (Backend)

Task Manager App for CVWO Application 2022 Task The task for this project is to build a fullstack task manager app, and was done over the winter break

Ryan Cheung 0 Jan 3, 2023
Televarr - A Manager for IPTV Playlists

Televarr BETA VERSION HAS BEEN RELEASED! A Manager for IPTV Playlists Televarr c

null 11 Oct 26, 2022
urlsh is URL shortener application built on Go language.

GOlang URL shortener service with UI, API, Cache, Hits Counter and forwarder using postgres and redis in backend, bulma in frontend

Jitendra Adhikari 125 Dec 11, 2022
A web forum built in Golang and SQLite and designed in SCSS

Forum "Fairfax" ?? What is it? A web forum built in Golang and SQLite and designed in SCSS. Members of the forum can take a personality test and be so

null 2 Nov 10, 2021
GoogleBookAPI is built on top of flogo, a flow based application.

GoogleBookAPI Example GoogleBookAPI is built on top of flogo, a flow based application. Upon launch for first time, the application creates a topic go

Abhishek K 0 Nov 19, 2021
Go-gin-mongo-api - A backend RESTful API built using golang, gin and mongoDB

go-gin-mongo-API This is a RESTful backend API which is developed using the gola

Humbe Jeffrey 6 Jul 19, 2022
Built a causally consistent, replicated and sharded key value store with a REST API.

A causally consistent, replicated and sharded key value store built in Golang with a RESTful API. Runs through the use of a Docker container.

Dennis Pang 0 Feb 2, 2022
notion-md-gen allows you to use Notion as a CMS for pages built with any static site generators

notion-md-gen allows you to use Notion as a CMS for pages built with any static site generators

Bonaysoft 69 Dec 12, 2022
BotHub is a web-based robot editor built in go with support for go and python.

Robot Simulator This is an application to simulate toy robot moving on a square tabletop, The robot is free to roam around the surface of the table, b

null 1 May 16, 2022
This codebase was created to demonstrate a fully fledged fullstack application built with Golang/Echo including CRUD operations, authentication, routing, pagination, and more.

This codebase was created to demonstrate a fully fledged fullstack application built with Golang/Echo including CRUD operations, authentication, routing, pagination, and more.

Nayef Haidir 3 Jan 6, 2023
Go-watchdog - a web application observability tool built for Go

Go-watchdog is a web application observability tool built for Go, it exposes a status endpoint for application services like databases, caches, message-brokers, mails and storages.

salem ododa 4 Jul 11, 2022
Simple Bank is a simple REST API that allows users to perform transferences with each other.

Simple Bank is a simple REST API that allows users to perform transferences with each other. ?? Technologies Golang Docker PostgreSQ

Matheus Mosca 12 Feb 15, 2022
Consul Load-Balancing made simple

Notes From release 1.5.15 onward, fabio changes the default GOGC from 800 back to the golang default of 100. Apparently this made some sense back in t

fabio 7.1k Jan 5, 2023
goof is a woof written in go - share files via a simple httpd

#goof - share files through HTTP protocol goof (Go Offer One File) is a very simple tool to send and receive files on your local LAN. Features include

Fredrik Steen 14 Oct 4, 2022