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
  • Bump json5 from 1.0.1 to 1.0.2

    Bump json5 from 1.0.1 to 1.0.2

    Bumps json5 from 1.0.1 to 1.0.2.

    Release notes

    Sourced from json5's releases.

    v1.0.2

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295). This has been backported to v1. (#298)
    Changelog

    Sourced from json5's changelog.

    Unreleased [code, diff]

    v2.2.3 [code, diff]

    v2.2.2 [code, diff]

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295).

    v2.2.1 [code, diff]

    • Fix: Removed dependence on minimist to patch CVE-2021-44906. (#266)

    v2.2.0 [code, diff]

    • New: Accurate and documented TypeScript declarations are now included. There is no need to install @types/json5. (#236, #244)

    v2.1.3 [code, diff]

    • Fix: An out of memory bug when parsing numbers has been fixed. (#228, #229)

    v2.1.2 [code, diff]

    ... (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)
    • @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
  • MySQL Passwords ending in '#' are not working - leads to ISE 500 errors

    MySQL Passwords ending in '#' are not working - leads to ISE 500 errors

    Hi,

    I tried to setup LinkAce using a generated password for my MariaDB database ending in #. Setup guide works up until the last page where you setup your password for the user. After hitting submit at that stage, I would get ISE 500 errors. I went through the laravel logs and found that LinkAce is getting SQL access denied errors, and the password it is trying to use is truncated at the #.

    Not sure if this is a know bug, but took me a while to figure it out! Hope not many people are having this issue.

    Thanks!

    opened by ranasats 1
  • 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
Releases(v1.11.0)
Owner
Kevin Woblick
Full Stack Web Engineer and Open Source Creator.
Kevin Woblick
It is an open-source and free project, which is faced with the drawing lovers, providing a free and simple Gallery service

It is an open-source and free project, which is faced with the drawing lovers, providing a free and simple Gallery service

WeepingDogel 5 Dec 15, 2022
Minimalistic bookmark manager for your own server written in PHP. Bookmarks are stored in a sqlite database.

b - Bookmark manager b is a minimalistic bookmark manager for your own server. Written in PHP. Bookmarks are stored in a sqlite database. Features: fi

Sebastian Volland 48 Jan 6, 2023
Your visual bookmark manager

Colllect Introduction Colllect is your new bookmark manager! With it, you can manage your inspiration and resources into colllections. Go to Colllect

Colllect 336 Jan 4, 2023
Jump is yet another self-hosted startpage for your server designed to be simple, stylish, fast and secure.

Jump Jump is yet another self-hosted startpage for your server designed to be simple, stylish, fast and secure. Features Fast, easy to deploy, secure

Dale Davies 309 Dec 27, 2022
Your private self hosted composer repository with user management

Devliver Your private self-hosted composer repository. Requirements Docker MariaDB/MySQL the running docker container has access to private git reposi

Nikita Loges 53 Dec 30, 2022
Your personal Self-hosted or offline YoutTube Kids!

New Tube You have a problem with youtube kids and need online youtube? This is yours. NewTube! Simply clone the project and put your mp4 video & cover

Javad Adib 7 Dec 28, 2022
A self-hosted alternative to putting your code snippets on Gist.

WP-Gistpen Contributors: JamesDiGioia Donate link: http://jamesdigioia.com/ Tags: gist, code snippets, codepen Requires at least: 5.2 Requires PHP: 5.

Intraxia 71 Nov 15, 2022
Sample application to bookmark links, where interface build with Angular.js + Twitter Bootstrap and server powered by PHP with Slim Framework

RESTful Bookmarks PHP Slim TODO: review and update FrontEnd Sample application to bookmark links, where interface build with Angular.js + Twitter Boot

Erko Bridee 50 Dec 15, 2021
🔖 Bookmark app for Nextcloud

Nextcloud Bookmarks Bookmarks app for Nextcloud This app provides you with a web interface for collecting and organizing bookmarks to the places on th

Nextcloud 803 Jan 8, 2023
FreshRSS is a self-hosted RSS feed aggregator like Leed or Kriss Feed.

Read this document on github.com/FreshRSS/FreshRSS/ to get the correct links and pictures. Version française FreshRSS FreshRSS is a self-hosted RSS fe

FreshRSS 5.3k Jan 4, 2023
Raspberry Pi Self Hosted Server Based on Docker / Portainer.io

Pi-Hosted Portainer Template V2 This repository is a collection of tutorials for hosting a variety of server applications using Docker and Portainer.

don 776 Jan 8, 2023
CodeFever Community Edition (A Self-hosted Git Services)

CodeFever Community Edition (A Self-hosted Git Services)

PGYER 2.3k Jan 7, 2023
Yclas Self Hosted is a powerful script that can transform any domain into a fully customizable classifieds site within a few seconds.

Yclas 4.4.0. Description Yclas self-hosted is a powerful script that can transform any domain into a fully customizable classifieds site within a few

Yclas 299 May 29, 2022
Self-hosted game library.

A self-hosted game browser. About Cartridge is a convenient browser for your game collection with easy file downloads and automatically imported metad

null 111 Dec 25, 2022
A very simple way to handle self-hosted WordPress plugin updates

Simple WP Plugin Update handling A very simple way to handle self-hosted WordPress plugin updates This uses the "update_plugins_{$hostname}" filter in

Peter Viszt 5 Jun 13, 2023
Admidio is a free open source user management system for websites of organizations and groups. The system has a flexible role model so that it’s possible to reflect the structure and permissions of your organization.

Admidio Admidio is a free open source user management system for websites of organizations and groups. The system has a flexible role model so that it

Admidio 212 Dec 30, 2022
Orangescrum is a simple yet powerful free and open source project management software that helps team to organize their tasks, projects and deliver more.

Free, open source Project Management software Introduction Orangescrum is the simple yet powerful free and open source project management software tha

Orangescrum 110 Dec 30, 2022
Cadre is a free and open-source PHP staff management system that is built on Bootstrap and Core Boxx.

CADRE Cadre is a free and open-source PHP Staff Management System. Not the best in the world, but this simple portal has the basic features to help sm

Code Boxx 3 Sep 26, 2022
Free ZIP Code API - Free Access to Worldwide Postal Code Data

About Zipcodebase - Free Zip Code API Zipcodebase is a zip code API that was founded in 2019 to solve common issues with postal code data. As we have

SaaS Industries 2 Nov 26, 2022