Your self-hosted bookmark archive. Free and open source.

Overview

 

Your self-hosted bookmark archive. Free and open source.

Get support for LinkAce and chat about the project Follow LinkAce on Twitter Docker Repository Latest Release License

 

Contents

 

About LinkAce

Preview Screenshot

LinkAce is a self-hosted archive to collect links of your favorite websites. Save articles to read them later, tools to use them in your next project, or historic content to archive it for the long term. LinkAce comes with a lot of features while keeping a clean and minimal interface.
It provides a long-term archive to store links to websites, media files or anything else with a valid URL. The user is able to categorize the added links to be able to find them later, and share lists of links with friends, family or coworkers. However, LinkAce should not provide a solution to sync your browser bookmarks.

Feature Highlights

  • Save links with automatic title and description generation.
  • Automated link monitoring informs you when any links become unavailable or were moved.
  • Automated backups of saved sites via the Internet Archive.
  • Organize bookmarks with the help of lists and tags.
  • A full REST API offers access to all features of LinkAce from other apps and services.
  • LinkAce ships with a light and dark theme, that can be toggled or changes automatically.
  • A bookmarklet to quickly save links from any browser.
  • Links can be private or public, so friends or internet strangers may see your collection.
  • Both private and public links are accessible via RSS feeds.
  • Add notes to links to add thoughts or other relevant information.
  • An advanced search including different filters and ordering.
  • Import and export of bookmarks from HTML.
  • Support for complete database and application backups to any AWS S3 storage.

More features are already planned. Take a look at the project board for more information.

More screenshots of the app and further details about the features can be found on the LinkAce Website.

 

💡 Support for LinkAce

I built LinkAce to solve my own problem, and I now offer my solution and code without charging any money. I spent a lot of my free time building this application, so I won't offer any free personal support, customization or installation help. If you need help please visit the community forum and post your issue there.

You can get personal and dedicated support by becoming a Patreon or Github Sponsor.

Documentation and Community

Details about all features and advanced configuration can be found in the project documentation.
Additionally, you may visit the community forums to share your ideas, talk with other users or find help for specific problems.

 

⚙️ Setup

LinkAce provides multiple ways of installing it on your server. The complete documentation for all installation methods can be found in the wiki.

  • Setup with Docker (recommended)
    • Simple setup with 1 Docker image
    • Advanced setup with multiple Docker images
  • Setup without Docker

 

🚧 Contribution

Translations Code Climate maintainability Code Climate coverage GitHub Build Status

Please consult the contribution guidelines to start working on LinkAce.

 

Thanks go to these wonderful people for their contributions:

List of contributors

 

LinkAce is a project by Kevin Woblick and Contributors

Comments
  • Filesystem permission issues while trying to import

    Filesystem permission issues while trying to import

    I was struggling with the setup instructions for some time:

    4. Run the Setup
    After you started the Docker containers, you are almost ready to run the setup. Before the setup, we have to generate a secret key. Please note that linkace_php_1 is the name of your PHP container here. It may differ from your name. You will find the name of your container in the output of the previous command, but will most likely end with _php_1.
    
    docker-compose run php php artisan key:generate
    

    Eventually I found that the working command should be

    docker exec -it linkace_app_1 php artisan key:generate

    Providing this to help others in the same situation, but it would probably be an idea to fix the instructions - both here an on the website.

    Support 
    opened by dokbua 21
  • Could not open input file: artisan

    Could not open input file: artisan

    Hi, I can't even get started on this docker compose setup, following https://www.linkace.org/docs/v1/setup/setup-with-docker/advanced/

    pi@raspberrypi:~/Projects/Docker/my-cloud-infrastructure $ sudo docker exec linkace-app php artisan key:generate
    Could not open input file: artisan
    

    Any ideas as to whats going on?

    Thanks

    Bug 
    opened by aashish108 17
  • Clarification of Backup Strategy

    Clarification of Backup Strategy

    Describe the bug

    This may or may not be a bug. Looking at config/backup.php I see there appears to be a default backup strategy at the bottom of file, however this configuration does not seem to be obeyed as I currently have 23 backups.

    To Reproduce

    1. Setup LinkAce, I am currently using the "advanced" Docker deployment.
    2. Configure backups w/ S3.
    3. Let the backup process take place, and see it continue to occur.
    4. Does it ever remove older backups?

    Expected behavior

    At this point I am not sure what to expect since nothing appears to be documented, except for looking at the backup.php file.

    Screenshots

    N/A

    LinkAce setup (please complete the following information):

    • Version: v1.2.2 (though I see there is a new version - not sure if anything in regards to backups was touched in that version)
    • Installed via: Docker
    • OS: Ubuntu 20.04.x

    Desktop (please complete the following information if applicable):

    N/A

    Smartphone (please complete the following information if applicable):

    N/A

    Additional context

    N/A

    Bug 
    opened by jimmybrancaccio 16
  • Update to 1.4.0 with docker-compose.production.yml configuration file ends in 500 - Server Error

    Update to 1.4.0 with docker-compose.production.yml configuration file ends in 500 - Server Error

    Hello, i use the service containrrr/watchtower to automatic update my docker apps. ( https://containrrr.dev/watchtower/ )

    Today it runs an update and i get after the login i get the 500 server error.

    I'm not sure if the problem is this recent change:

    https://github.com/Kovah/LinkAce/commit/b0058663975f1916e43a643ecdcbf006f9fdf163#diff-939173f100b9faaec94fb740138ad0f6376d79e4317974d4dc28a5b489bab7b8

    LinkAce setup (please complete the following information):

    • Version: 1.3.1 update to 1.4
    • Installed via: Docker
    • OS: Debian

    Desktop (please complete the following information if applicable):

    • OS: Windows
    • Browser Firefox
    • Version 87

    Additional context watchtower update log. watchtower log.txt

    Bug 
    opened by steffenweb 13
  • Make app less depended on .env

    Make app less depended on .env

    Is your feature request related to a problem? Please describe.

    Using that kind of flag to check if the setup is complete or not is making automated installs harder.

    e.g. I'm maintain an app catalog (TrueCharts) based on helm charts for TrueNAS Scale. I'm in the process of adding this app on the said catalog. We aim to have apps with automated setup, which SETUP_COMPLETE, makes it a bit harder than usual.

    So with this flag, after a user deploys the app and finish installation, the user must go change the flag to true in order to make installer not run again on next app startup. While this is easy on TN Scale as there is a GUI for all those, it's not "ok". As most users won't read any notices in the GUI. This will lead to bug reports to both our catalog and your repo.

    I don't know how you handle an instance with initiallized db and setup_complete set to false, but if its not handled users might aswell lose data.!

    Don't get me wrong, there are ways to get around that in Helm, like mounting a volume with the .env file inside with the SETUP_COMPLETE in there, so the app can modify it. But that feels "hacky".

    I don't really know your app's codebase, but one thing I could recommend is to add a db entry when the init setup is run. and on each app startup check the DB for that entry. If it's missing, then the setup must run.

    Describe the solution you'd like Get rid of the SETUP_COMPLETE flag.

    Describe alternatives you've considered Write init scripts and init containers to detect if app has setup run and change env.

    Additional context Add any other context or screenshots about the feature request here.

    Enhancement 
    opened by stavros-k 12
  • Unable to import in 1.7.0 (both HTML and CVS) saved bookmarks from 1.4.1

    Unable to import in 1.7.0 (both HTML and CVS) saved bookmarks from 1.4.1

    Describe the bug A clear and concise description of what the bug is.

    To Reproduce Steps to reproduce the behavior:

    1. Go to '...'
    2. Click on '....'
    3. Scroll down to '....'
    4. See error

    Expected behavior A clear and concise description of what you expected to happen.

    Screenshots If applicable, add screenshots to help explain your problem.

    LinkAce setup (please complete the following information):

    • Version: [e.g. 0.0.43]
    • Installed via: [e.g. PHP, Docker]
    • OS: [e.g. Ubuntu, CentOS, Windows]

    Desktop (please complete the following information if applicable):

    • OS: [e.g. iOS]
    • Browser [e.g. chrome, safari]
    • Version [e.g. 22]

    Smartphone (please complete the following information if applicable):

    • Device: [e.g. iPhone6]
    • OS: [e.g. iOS8.1]
    • Browser [e.g. stock browser, safari]
    • Version [e.g. 22]

    Additional context Add any other context about the problem here.

    Bug awaiting Response 
    opened by gianter962 12
  • Import exception:

    Import exception: "Undefined variable: time"

    This call throws an error: "Undefined variable: time" https://github.com/Kovah/LinkAce/blob/3987f5ddbf4bb9bc46a9c388f49307a21dbb85b9/app/Http/Controllers/App/ImportController.php#L46

    because in this commit, the author replaced the time() with an $time variable

    https://github.com/shaarli/netscape-bookmark-parser/commit/78b316f1a0154873e9621889ba495e607896eb28#diff-4a59dbd62a2dae2500f43e35fb7d51ceR232

    Bug 
    opened by newpdv 12
  • Problem importing bookmarks

    Problem importing bookmarks

    I installed Linkace in docker/ubuntu and I have no experience in tuning Linux. When importing I get an error: Something went wrong while trying to import the bookmarks. Please consult the application logs. In the log I see several such messages production.ERROR: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'linkace.settings' doesn't exist (SQL: select * from settings where user_id is null)

    And what should I do with it now?

    Support 
    opened by mike2003 11
  • Epoch doesn't fit in a PHP integer, date and time issues

    Epoch doesn't fit in a PHP integer, date and time issues

    but now I'm getting a 500 with this error:

    [2071-05-12 03:41:52] production.ERROR: Epoch doesn't fit in a PHP integer {"exception":"[object] (ValueError(code: 0): Epoch doesn't fit in a PHP integer at /app/vendor/nesbot/c
    arbon/src/Carbon/Traits/Units.php:136)
    

    this is what I get for date in the app container:

    /app/storage/logs # date
    Sun Jan  0 00:100:4174038  1900
    

    it seems the date/time is way misconfigured on the app container. I tried some suggestions from stack overflow like mounting some timezone/localtime directories but it didn't seem to help. any ideas?

    Originally posted by @galonsky in https://github.com/Kovah/LinkAce/issues/175#issuecomment-808761741

    ToDo 
    opened by Kovah 11
  • All new links are private

    All new links are private

    Describe the bug A clear and concise description of what the bug is. All links are created as private, even though settings are set to no. To Reproduce Steps to reproduce the behavior:

    1. Go to the website you want to create a link from
    2. Click on the browser add-on for LinkAce, fill in what you need and save.
    3. Go to LinkAce web interface and find the new link has a lock to it. Check your settings again to find out, it clearly says 'no' for private links.
    4. See error

    Expected behavior A clear and concise description of what you expected to happen. I expect links to not be private as st in the settings. Screenshots If applicable, add screenshots to help explain your problem.

    LinkAce setup (please complete the following information):

    • Version: v1.10.1
    • Installed via: Docker
    • OS: Ubuntu

    Desktop (please complete the following information if applicable):

    • OS: siduction (Debian Sid)
    • Browser: Chrome
    • Version: 102.0.5005.115

    Smartphone (please complete the following information if applicable):

    • Device: [e.g. iPhone6]
    • OS: [e.g. iOS8.1]
    • Browser [e.g. stock browser, safari]
    • Version [e.g. 22]

    Additional context Add any other context about the problem here. linkace2 linkace1

    Bug 
    opened by fethomm 10
  • 500 - Server Error when adding one specific link

    500 - Server Error when adding one specific link

    Describe the bug A clear and concise description of what the bug is. Getting an error stating: 500 - Server Error An internal server error occured. If you are the administrator, consult the application logs for details.

    When attempting to add link: https://www.grc.com/passwords.htm

    Have tried Quick Add and Add via Firefox extension with same result.

    To Reproduce Steps to reproduce the behavior:

    1. Go to main screen, in Quick Add Link enter 'https://www.grc.com/passwords.htm'
    2. Click on Add button
    3. See error: 500 - Server Error An internal server error occured. If you are the administrator, consult the application logs for details.

    In docker log I see the following:

    127.0.0.1 - 02/Mar/2022:21:04:05 +0000 "POST /index.php" 500 172.20.0.4 - - [02/Mar/2022:21:04:07 +0000] "POST /links HTTP/1.1" 500 5456 "https://linkace.local.REDACTED.co.uk/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0" "192.168.1.98"

    Expected behavior Link should add correctly, dont have an issue adding another other links.

    Screenshots NA

    LinkAce setup (please complete the following information):

    • Version:1.9.1
    • Installed via:Docker Simple
    • OS: Raspbian GNU/Linux 11 (bullseye)

    Desktop (please complete the following information if applicable):

    • OS:Windows 10
    • Browser Firefox
    • Version 97.0.1

    Additional context NA

    Support 
    opened by mmozzano 9
  • Import: imported tags are public by default

    Import: imported tags are public by default

    Bug Description

    I was watching the #577 issue because I wanted to import all my bookmarks as private. I updated LinkAce today and it works correctly. I think that the same issue applies to tags too, which wasn't mentioned. In my case the tags were folders from a Chrome bookmark export.

    How to reproduce

    1. Make new tags private by default
    2. Import some bookmarks that include tags
    3. Check the tags

    Expected behavior

    The default setting for new tags should be respected

    Logs

    No response

    Screenshots

    No response

    LinkAce version

    v1.11.0

    Setup Method

    Docker

    Operating System

    Linux (Ubuntu, CentOS,...)

    Client details

    No response

    Bug 
    opened by nonmaterialistically 1
  • Use tag & lists name for HTML title

    Use tag & lists name for HTML title

    Bug Description

    When creating a bookmark, they are all labelled as My Bookmarks in Firefox.

    How to reproduce

    • Create a bookmark
    • Drag from url bar

    Expected behavior

    The should inherit the name of list or tag.

    Logs

    No response

    Screenshots

    Screenshot 2022-12-08 at 09 51 18

    LinkAce version

    latest

    Setup Method

    Docker

    Operating System

    macOS

    Client details

    No response

    Enhancement 
    opened by Drallas 0
  • Import: check the content before importing, maybe ask for confirmation

    Import: check the content before importing, maybe ask for confirmation

    Bug Description

    I just misclicked while trying to import bookmarks, and thus imported a standard HTML file. It took a long time, and obviously gave very weird results, and also took a lot of time afterwards.

    How to reproduce

    1. Save some website to html file
    2. Import it
    3. Enjoy

    Expected behavior

    To avoid this, one could maybe check that the file to be imported a) is actually valid HTML and b) starts with <!DOCTYPE NETSCAPE-Bookmark-file-1>. Moreover, showing the number of links or maybe even a preview of the raw URLs + then asking for confirmation beforehand would be really helpful.

    Logs

    No response

    Screenshots

    No response

    LinkAce version

    v1.10.5

    Setup Method

    PHP

    Operating System

    Linux (Ubuntu, CentOS,...)

    Client details

    Arch Linux, Chromium

    Bug 
    opened by piegamesde 1
  • Import: Tags get messed up

    Import: Tags get messed up

    Bug Description

    I just tried to import a bookmarks file and it went fairly well, it even recognized the tags properly. However there seems to be a bug: some links got tags that were not present in the HTML file. For example, the bookmarks tag got added to almost all or all bookmarks. I did a few checks and could not find any missing tags, only added ones.

    How to reproduce

    TODO. I'll try to create a small reproducer file soon

    Expected behavior

    Tags are properly imported. (Alternatively, tags are not imported at all.)

    Logs

    No response

    Screenshots

    No response

    LinkAce version

    v10.5

    Setup Method

    PHP

    Operating System

    Linux (Ubuntu, CentOS,...)

    Client details

    Arch Linux, Chromium

    Bug 
    opened by piegamesde 2
  • Postgresql no unix socket connection

    Postgresql no unix socket connection

    Bug Description

    It looks like that there is no way to connect to the postgresql server via unix socket. This is important because it allows using peer authentication instead of having to deal with passwords. I found that there is a DATABASE_URL environment variable in the configuration but it does not seem to be used (tbh I'm not sure what it exactly does).

    How to reproduce

    Set the following environment:

    DB_CONNECTION=pgsql
    DB_DATABASE=linkace
    DATABASE_URL=/run/postgresql
    

    php artisan migrate --force --no-interaction

    Expected behavior

    It works

    Logs

    `SQLSTATE[08006] [7] connection to server at "127.0.0.1", port 5432 failed`
    

    Screenshots

    No response

    LinkAce version

    1.10.5

    Setup Method

    PHP

    Operating System

    Linux (Ubuntu, CentOS,...)

    Client details

    No response

    Bug 
    opened by piegamesde 0
  • Bump loader-utils from 1.4.0 to 1.4.2

    Bump loader-utils from 1.4.0 to 1.4.2

    Bumps loader-utils from 1.4.0 to 1.4.2.

    Release notes

    Sourced from loader-utils's releases.

    v1.4.2

    1.4.2 (2022-11-11)

    Bug Fixes

    v1.4.1

    1.4.1 (2022-11-07)

    Bug Fixes

    Changelog

    Sourced from loader-utils's changelog.

    1.4.2 (2022-11-11)

    Bug Fixes

    1.4.1 (2022-11-07)

    Bug Fixes

    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)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    Dependencies Javascript 
    opened by dependabot[bot] 0
Releases(v1.11.0)
Owner
Kevin Woblick
Full Stack Web Engineer and Open Source Creator.
Kevin Woblick
Bookmarkarchiver - Python script that archives all of your bookmarks on the Internet Archive

bookmarkarchiver Python script that archives all of your bookmarks on the Internet Archive. Supports all major browsers. bookmarkarchiver uses the off

Anthony Chen 3 Oct 9, 2022
A free and open-source chess improvement app that combines the power of Lichess and Anki.

A free and open-source chess improvement app that combines the power of Lichess and Anki. Chessli Project Activity & Issue Tracking PyPI Build & Healt

null 93 Nov 23, 2022
Bionic is Python Framework for crafting beautiful, fast user experiences for web and is free and open source.

Bionic is Python Framework for crafting beautiful, fast user experiences for web and is free and open source. Getting Started This is an example of ho

null 14 Apr 10, 2022
World's best free and open source ERP.

World's best free and open source ERP.

Frappe 12.5k Jan 7, 2023
Fisherman is a free open source fishing bot written in python.

Fisherman is a free open source fishing bot written in python.

Pure | Cody 33 Jan 29, 2022
Download and process GOES-16 and GOES-17 data from NOAA's archive on AWS using Python.

Download and display GOES-East and GOES-West data GOES-East and GOES-West satellite data are made available on Amazon Web Services through NOAA's Big

Brian Blaylock 88 Dec 16, 2022
UdemyPy is a bot that hourly looks for Udemy free courses and post them in my Telegram Channel: Free Courses.

UdemyPy UdemyPy is a bot that hourly looks for Udemy free courses and post them in my Telegram Channel: Free Courses. How does it work? For publishing

null 88 Dec 25, 2022
an opensourced roblox group finder writen in python 100% free and virus-free

Roblox-Group-Finder an opensourced roblox group finder writen in python 100% free and virus-free note : if you don't want install python or just use w

mollomm1 1 Nov 11, 2021
Graphene Metanode is a locally hosted node for one account and several trading pairs, which uses minimal RAM resources.

Graphene Metanode is a locally hosted node for one account and several trading pairs, which uses minimal RAM resources. It provides the necessary user stream data and order book data for trading in a format one would expect from a centralized exchange API.

litepresence 5 May 8, 2022
Download and archive entire usenet newsgroups over NNTP.

Usenet Archiving Tool This code is for archiving Usenet discussions, not downloading files. Newsgroup posts are saved under the authors name and email

Corey White 2 Dec 23, 2021
Python for downloading model data (HRRR, RAP, GFS, NBM, etc.) from NOMADS, NOAA's Big Data Program partners (Amazon, Google, Microsoft), and the University of Utah Pando Archive System.

Python for downloading model data (HRRR, RAP, GFS, NBM, etc.) from NOMADS, NOAA's Big Data Program partners (Amazon, Google, Microsoft), and the University of Utah Pando Archive System.

Brian Blaylock 194 Jan 2, 2023
Archive, organize, and watch for changes to publicly available information.

0. Overview The Trapper Keeper is a collection of scripts that support archiving information from around the web to make it easier to study and use. I

Bill Fitzgerald 9 Oct 26, 2022
Gba-free-fonts - Free font resources for GBA game development

gba-free-fonts Free font resources for GBA game development This repo contains m

null 28 Dec 30, 2022
A Kodi add-on for watching content hosted on PeerTube.

A Kodi add-on for watching content hosted on PeerTube. This add-on is under development so only basic features work, and you're welcome to improve it.

null 1 Dec 18, 2021
Purge your likes and wall comments from VKontakte. Set yourself free from your digital footprint.

vk_liberator Regain liberty in the cruel social media world. This program assists you with purging your metadata from Russian social network VKontakte

null 20 Jun 11, 2021
This repository is an archive of emails that are sent by the awesome Quincy Larson every week.

Awesome Quincy Larson Email Archive This repository is an archive of emails that are sent by the awesome Quincy Larson every week. If you fi

Sourabh Joshi 912 Jan 5, 2023
Metal Gear Rising: Revengeance's DAT archive (un)packer

DOOMP Metal Gear Rising: Revengeance's DAT archive (un)packer

Christopher Holzmann Pérez 5 Sep 2, 2022
chiarose(XCR) based on chia(XCH) source code fork, open source public chain

chia-rosechain 一个无耻的小活动 | A shameless little event 如果您喜欢这个项目,请点击star 将赠送您520朵玫瑰,可以去 facebook 留下您的(xcr)地址,和github用户名。 If you like this project, please

ddou123 376 Dec 14, 2022
Source-o-grapher is a tool built with the aim to investigate software resilience aspects of Open Source Software (OSS) projects.

Source-o-grapher is a tool built with the aim to investigate software resilience aspects of Open Source Software (OSS) projects.

Aristotle University 5 Jun 28, 2022