Simple bookmark manager built with Go

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.

Owner
Shiori
Simple bookmark manager built with Go
Shiori
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

  • 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).

  • 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?

  • 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?

  • 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.

  • "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?

  • 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?

  • 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,

  • 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

  • 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
    
    SystemCallFilter=~@clock
    SystemCallFilter=~@debug
    SystemCallFilter=~@module
    SystemCallFilter=~@mount
    SystemCallFilter=~@raw-io
    SystemCallFilter=~@reboot
    SystemCallFilter=~@privileged
    SystemCallFilter=~@resources
    
    SystemCallFilter=~@cpu-emulation
    SystemCallFilter=~@obsolete
    
    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.

  • 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?

  • 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)
  • 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

  • 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)
  • 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)
  • 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.

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

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

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 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.

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

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

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

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

Dec 7, 2022
📚 Task Manager App for CVWO Application (Backend)
📚 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

Jan 3, 2023
Televarr - A Manager for IPTV Playlists
Televarr - A Manager for IPTV Playlists

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

Oct 26, 2022
urlsh is URL shortener application built on Go language.
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

Dec 11, 2022
A web forum built in Golang and SQLite and designed in SCSS
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

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

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

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.

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

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

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.

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

Jan 6, 2023
Go-watchdog - a web application observability tool built for Go
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.

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

Feb 15, 2022
Consul Load-Balancing made simple
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

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

Oct 4, 2022