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/

    [email protected]:~/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
A bot to use in a pump & dump event

A bot to use in a pump & dump event on Binance.com. Please note the bot is in heavy devleopment currently so be aware of errors. If you experience err

Freddie Jonas 189 Dec 24, 2022
This repo will have a small amount of Chrome tools that can be used for DFIR, Hacking, Deception, whatever your heart desires.

Chrome-Tools Overview Welcome to the repo. This repo will have a small amount of Chrome tools that can be used for DFIR, Hacking, Deception, whatever

5 Jun 08, 2022
Direct Multi-view Multi-person 3D Human Pose Estimation

Implementation of NeurIPS-2021 paper: Direct Multi-view Multi-person 3D Human Pose Estimation [paper] [video-YouTube, video-Bilibili] [slides] This is

Sea AI Lab 253 Jan 05, 2023
Um Script De Mensagem anonimas Para linux e Termux Feito em python

Um Script De Mensagem anonimas Para linux e Termux Feito em python feito em um celular

6 Sep 09, 2021
Курс про техническое совершенство для нетехнарей

Technical Excellence 101 Курс про техническое совершенство для нетехнарей. Этот курс представлят из себя серию воркшопов, при помощи которых можно объ

Anton Bevzuk 11 Nov 13, 2022
Your copilot to studies and work (Pomodoro-timer, Translate and Notes app)

Copylot Your copilot to studies and work (Pomodoro-timer, Translate and Notes app) Copylot are three applications in one: Pomodoro Translate Notes Cop

Eduardo Mendes 20 Dec 16, 2022
p5 is a Python package based on the core ideas of Processing.

p5 p5 is a Python library that provides high level drawing functionality to help you quickly create simulations and interactive art using Python. It c

p5py 645 Jan 04, 2023
The LiberaPay archive module for the SeanPM life archive project.

By: Top README.md Read this article in a different language Sorted by: A-Z Sorting options unavailable ( af Afrikaans Afrikaans | sq Shqiptare Albania

Sean P. Myrick V19.1.7.2 1 Aug 26, 2022
Hook and simulate global keyboard events on Windows and Linux.

keyboard Take full control of your keyboard with this small Python library. Hook global events, register hotkeys, simulate key presses and much more.

BoppreH 3.2k Jan 01, 2023
Un script en python qui permet d'automatique bumpée (disboard.org) tout les 2h

auto-bumper Un script en python qui permet d'automatique bumpée (disboard.org) tout les 2h Pour la première utilisation, 1.Lancer Install.bat 2.(faire

!! 1 Jan 09, 2022
Python library for converting Python calculations into rendered latex.

Covert art by Joshua Hoiberg handcalcs: Python calculations in Jupyter, as though you wrote them by hand. handcalcs is a library to render Python calc

Connor Ferster 5.1k Jan 07, 2023
Software for visualization of RTStruct structures on CT images

This script is responsible for the operation of the program, it is responsible for both creating the GUI and the process of processing images from dicom files. The program is based on the use of the

Adam Piszczek 0 Jun 29, 2022
Basic Clojure REPL for Sublime Text

Basic Clojure REPL for Sublime Text Goals: Decomplected: just REPL, nothing more Zero dependencies: works directly with pREPL Compact: Display code ev

Nikita Prokopov 23 Dec 24, 2021
A basic animation modding workflow for FFXIV

AnimAssist Provides a quick and easy way to mod animations in FFXIV. You will need: Before anything, the VC++2012 32-bit Redist from here. Havok will

liam 37 Dec 16, 2022
CPLib is the abbreviation of Competitive Programming Library.

CPLib CPLib is the abbreviation of Competitive Programming Library. It aims to be a general template and optimization library for competitive programm

12 Oct 16, 2021
A simple service that allows you to run commands on the server using text

Server Text A simple flask service that allows you to run commands on the server/computer over sms. Think of it as a shell where you run commands over

MT Devs 49 Nov 09, 2021
Some ideas and tools to develop Python 3.8 plugins for GIMP 2.99.4

gimp-python-development Some ideas and tools to develop Python 3.8 plugins for GIMP 2.99.4. GIMP 2.99.4 is the latest unstable pre-release of GIMP 3.

Ismael Benito 53 Sep 25, 2022
Slotscheck - Find mistakes in your slots definitions

🎰 Slotscheck Adding __slots__ to a class in Python is a great way to reduce mem

Arie Bovenberg 67 Dec 31, 2022
Developer guide for Hivecoin project

Hivecoin-developer Developer guide for Hivecoin project. Install Content are writen in reStructuredText (RST) and rendered with Sphinx. Much of the co

tweetyf 1 Nov 22, 2021
A hackerank problems, solution repository

This is a repository for all hackerank challenges kindly note this is for learning purposes and if you wish to contribute, dont hesitate all submision

Tyler Mwalo Kenneth's 1 Dec 20, 2021