sissbruecker / linkding Goto Github PK
View Code? Open in Web Editor NEWSelf-hosted bookmark manager that is designed be to be minimal, fast, and easy to set up using Docker.
License: MIT License
Self-hosted bookmark manager that is designed be to be minimal, fast, and easy to set up using Docker.
License: MIT License
Firstly I want to thank you for this wonderful bookmark manager. It is just what I'm looking for.
Two suggestions you may consider:
1). Pagination. If someone happens to manage many bookmarks, that would be diserable.
2). Category. In addition to tags, category is still an effective way to organise bookmarks.
Thanks again!
I've just installed Linkding for Docker with permanent storage, but I can create user, or login, I get the following error :
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 240, in _commit
return self.connection.commit()
sqlite3.OperationalError: database is locked
I am running linkding behind a Traefik reverse proxy and the stylesheets won't load over https because:
The stylesheet https://linkding.url.tld/static/index.css was not loaded because its MIME type, “text/plain”, is not “text/css”.
I installed linkding manually and accessed top page, then linkding responded Server Error (500)
.
It seems to happen it when accessing https://example.com/bookmarks
. When trying /bookmarks/new
, /settings
, /bookmarklet
and /logout
, linkding showed pages normally.
How can I fix this?
Currently linkding provides no management UI of its own, however it comes with the default Django Admin which is quite powerful and could solve quite a few use cases. As such the admin panel should be linked from settings and be improved:
I think a really interesting feature for linkding to adapt would be an integration with Internet Archive (IA). I've looked into this myself, and got an almost working prototype, but run into an issue with response time and rate limiting of the IA API.
In short, I added an archive_url
variable to each Bookmark
and queried the https://web.archive.org/save/{bookmark.url}
endpoint on creation. This would create a backup, and link to it in the response's Location
header. However, as mentioned above, there were two issues:
/save
, there appears to be some sort of rate limiting and not very much information on how it works (that I could find).Regardless, I think this is a really cool feature that I would definitely be interested in (implementing and using).
Currently the import only imports bookmark titles, but ignores the optional description. I think the issue is that the loose Netscape HTML format makes it difficult to relate link elements (<a>
) with description elements (<dd>
) using the current HTML parser (BeautifulSoup).
Hi, first of all thank you for making linkding! I've been looking for a while for a selfhosted alternative to pinboard.in and I think I finally found one.
I just wanted to comment on two minor issues:
Thanks!
Version: 1.3.1
Architecture: Docker
When I attempt to omit the description
request body parameter in the POST /api/bookmarks/
API call, I get a 500 response. The API should either instruct me to include this field or gracefully handle its absence.
I don't quite know if this is intended behavior (it might be?) but the suggest box when editing bookmarks suggests every tag ever used rather than just tags that are currently in use. This is kind of a pain if you accidentally saved something with a tag that had a typo, or imported a batch of bookmarks that had tags you don't wish to use.
Version: 1.3.1
Architecture: Docker
I'm hosting linkding behind Traefik. I've confirmed that all API endpoints work with my host/token. The exceptions are POST /api/bookmarks/<id>/archive/
and POST /api/bookmarks/<id>/unarchive/
, both of which return 404
responses when I query them:
Archive
Request:
POST /api/bookmarks/1/archive/ HTTP/1.1
Authorization: Token REDACTED
Host: REDACTED
Connection: close
User-Agent: Paw/3.2.2 (Macintosh; OS X/11.2.1) GCDHTTPRequest
Content-Length: 0
Response:
HTTP/1.1 404 Not Found
Content-Length: 77
Content-Type: text/html
X-Frame-Options: SAMEORIGIN
Date: Thu, 18 Feb 2021 01:06:19 GMT
Connection: close
<h1>Not Found</h1><p>The requested resource was not found on this server.</p>
Unarchive
Request:
POST /api/bookmarks/1/unarchive/ HTTP/1.1
Authorization: Token REDACTED
Host: REDACTED
Connection: close
User-Agent: Paw/3.2.2 (Macintosh; OS X/11.2.1) GCDHTTPRequest
Content-Length: 0
Response:
HTTP/1.1 404 Not Found
Content-Length: 77
Content-Type: text/html
X-Frame-Options: SAMEORIGIN
Date: Thu, 18 Feb 2021 01:06:19 GMT
Connection: close
<h1>Not Found</h1><p>The requested resource was not found on this server.</p>
Running in a docker from hub.docker.com:
sissbruecker/linkding:latest | pulled on 2020-04-07 15:16:52
I can't seem to get the import to work. I've tried exporting from Firefox and Chrome, but always the same error:
An error occurred during bookmark import.
Any pointers to enabling error logs on the docker instance? If I was running the dev setup, I would enable the debug logs in django settings, but want to avoid that, if possible and keep it within docker.
Don't know if you are aware of this list: https://github.com/awesome-selfhosted/awesome-selfhosted
I checked out the requirements for PRing your app into the repo and I think you meet all of those applicable check-boxes.
I thought about doing it for you but didn't feel right.
Sorry for creating an issue, only way I can see to get a hold of you.
Thanks for this great app. Perfect for managing a bunch of bookmarks.
What do you think about a warning/message when trying to bookmark a page that's already bookmarked? If that sounds good, give me a couple pointers and I'll give you a PR.
When navigating between different pages, the navigation bar active link stays on Add Bookmark.
The navigation bar should show the current page as active
Add an auto-complete component that provides suggestions for searches:
when i put a short url from LAN e.g. http://localserver/app1, I get error:
Enter a valid URL.
running as docker container
what I'm asking is. can I enter URL that not start with www
or not ending as http(s)://{hostnmae}.local.domain
?
I just discovered linkding, and think it may be what I've been hoping for, except for one issue.
Is there a way to get it to turn bookmark folder names into tags when importing?
That is, if I have a bookmark like this stored three folders deep...
Cars > Restoration > Paint > http://example.com/howtopaintcars
...I'd like to have it automatically tagged Cars
, Restoration
and Paint
.
I have a couple thousand bookmarks to import, so bringing them in without tags is unworkable, as is manual tagging.
This approach wouldn't be perfect in all cases, but would retain much of the organization I've already established.
Currently the admin page shows only the bookmarks.
It would be nice for admins to be able to search or filter by owners
hi,
it would be cool if links could be archived an therefore not being shown in the main list.
use case
i like adding links which are
after finishing my task the links on my todo list should disappear from the main list while not being deleted. i still want to find them if i have to check on them later on.
behaviour
links can only be removed from the list. once removed, they are deleted and can never be found again
feature request
Add an button to archive a link. Archived links are shown in a seperate list. the tag list should remain the same but filter only on the archived links.
Bookmark view
Archive
viewArchive
dArchive view
Bookmarks
viewRestore
d to the main bookmark listI tried to add a URL but got:
Ensure this value has at most 200 characters (it has 265).
This seems pretty low as clean URLs even without tracking/marketing parameters can often go beyond 200 chars. No such complaint was made for any link at the time of import so it does seem to work (or does it trim such URLs while importing?)
Would request for an increased limit on bookmark URL length.
How does one leave the description field empty when creating a new bookmark? Currently, leaving it empty just fills it up using the website's content.
Currently bookmarks automatically use the title + description from the website when added manually.
The same should also work when importing bookmarks. This would be easy to add, but might slow down the import immensely due to the high number or requests that need to be executed. Would have to check if that is acceptable or if this can be solved through async jobs/tasks or similar.
Is there any mobile application for Android?
When some bookmarks have tag 'freebsd' and another has a tag 'FreeBSD', than adding new bookmarks with either the tag 'freebsd' or 'FreeBSD' returns a Server Error (500)
Forbidden (403)
CSRF verification failed. Request aborted.
More information is available with DEBUG=True.
I love this app.
If you can support archive, it would be even nice.
The motivation is obvious, cleanup interesting but not oftenly used stuffs.
Though bookmarks can be recovered by tag filtering or searching.
hi,
first of all, i really like your service and get used to it.
behaviour
tags are case-sensitive. but due to the highlight/capitalization the first letter is uppercase while the tag itself maybe not. having the same tag lower-case and capitalized shows the tag also twice.
expected behaviour
tags should be case-insensitive. this would
PostgreSQL supports full text search by creating tsvectors
. The search on tags and description field can be improved if we make use of those index.
Some references:
I'd like to dig in this if you'd like to :)
I am retrospectively trying to add tags to all my bookmarks. Once I reached page 2, edited a bookmark, and saved it, I was redirected back to the homepage (page 1). I'm having to manually go back to page 2 and edit the next bookmark.
A good UX would be to go back to the same page we were on before hitting the edit button.
Hi,
the /api/check_url?url=
API works only with the cookie authentification and not with the token.
Can you make it public? I´m working on a browser addon and could need it.
It would be nice if this included a dark mode.
I will likely PR this at some point (since it's the one thing between now and me using linkding), though I'm not familiar with Django so we'll see~
Otherwise I could skip making it a config setting and just do it in CSS (using prefers-color-scheme
)... what would be preferred here?
Hello, I am a novice, how to deploy linkding to heroku, I tried several times, but failed, I hope the boss can provide a tutorial, thank you very much!
It's nice that you considered the backups which is one of the very important component for a service.
But I have to idea for you to improve the user experience for backups.
I looked into creating a PR for this one, but I'm not sure how to go about it. The current project logo appears to be a Spectre link icon made in CSS, and I couldn't find any .svg
or raster image version to make into a favicon.
This is a bit of a convenience feature, but it would definitely improve the overall look as I have mine pinned in the Bookmarks bar.
My use-case: I use my linkding site as the default new tab page. I would like to quickly search and open a link in the same tab.
Currently, clicking a link opens a new tab and I'm left with the new tab that I had opened with linkding, as well as the actual link I wanted to open in another new tab.
This actually involves two facets once a user configures these:
autofocus
on the linkding search barThank you for your great work. I found linkding was missing tag edit function. Could you can it. tks.
Would it be possible to implement an option to have the bookmark display in a public list?
Say if you were to do to /public at the end of the url it would display a list of URLs that users have set as public when creating the bookmark. Probably not high on the todo list, but would be nice to see if possible 👍
Great bookmark software. Been using it for over a week now!
Hello @sissbruecker, wanted to let you know I love linkding and I use it every day.
I put together a little Chromium extension for my preferred way of using Linkding, thought you'd might like to know about it. And possibly it will be of use to someone besides me :)
Keep up the great work!
The grayed scraped entries should be editable at "new bookmark" dialog.
Currently there is no UI workflow to add new users to the system. The only options are creating new super-users using the Django script or enabling registration for a limited time. For self-hosted scenarios, it would make sense if the application would support invites. That would make it simple to add specific users (such as family members, friends, colleagues) without setting a password for them.
The workflow would look something like this:
Would need to consider if this needs to be behind a config flag or if the invite feature can be active all the time (for super users).
If you search the archive for a word which is used as Tag
but not in the Title
or Description
the Tag
is shown in the Tags
list but not in the results.
Before search: There is an entry where the search term matches a Tag
.
No results but an entry in the Tags
list.
As in the normal (unarchived) bookmarks list the result should be shown if a searchterm matches a Tag
.
Currently linkding uses the beautiful-soup library to parse import files. Since the format is missing closing tags in many places this leads to a high number of nested tags / recursion when parsing the files. This leads to errors when parsing files with a large number of bookmarks.
I plan to replace beautiful-soup with a custom parser that does not have the nesting issue.
Can you add an Archive
button to the edit bookmark
page?
i just bought an article on my todo list. while changing the tags from todo
to bought
i had to to Save
my entry and Archive
it afterwards. An Archive
or Save and archive
button would be useful.
Vice versa there should be an button to Restore
the link from the archive if the entry is already archived.
You may want to change the title from Edit bookmark
to Edit archived bookmark
if you edit an archived bookmark,
Are there plans to add a plan for broken links
Installed at Unraid but can't open WebUI. This is the log:
Operations to perform:
Apply all migrations: admin, auth, bookmarks, contenttypes, sessions
Running migrations:
No migrations to apply.
There is already a secret key in `secretkey.txt`
[uWSGI] getting INI configuration from uwsgi.ini
[uwsgi-static] added mapping for /static => static
*** Starting uWSGI 2.0.18 (64bit) on [Sun Sep 6 07:36:41 2020] ***
compiled with version: 6.3.0 20170516 on 07 June 2020 12:18:45
os: Linux-4.19.107-Unraid #1 SMP Sun Mar 8 14:34:03 CDT 2020
nodename: 86ee98549238
machine: x86_64
clock source: unix
detected number of CPU cores: 8
current working directory: /etc/linkding
writing pidfile to /tmp/linkding.pid
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
setgid() to 33
setuid() to 33
chdir() to /etc/linkding
your processes number limit is 123542
your memory page size is 4096 bytes
detected max file descriptor number: 40960
building mime-types dictionary from file /etc/mime.types...554 entry found
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uWSGI http bound on :9090 fd 4
uwsgi socket 0 bound to TCP address 127.0.0.1:34187 (port auto-assigned) fd 3
Python version: 3.7.7 (default, May 20 2020, 21:22:20) [GCC 6.3.0 20170516]
Python main interpreter initialized at 0x55a85049e140
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 416720 bytes (406 KB) for 8 cores
*** Operational MODE: preforking+threaded ***
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x55a85049e140 pid: 10 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 10)
spawned uWSGI worker 1 (pid: 11, cores: 2)
spawned uWSGI worker 2 (pid: 12, cores: 2)
spawned uWSGI worker 3 (pid: 14, cores: 2)
spawned uWSGI worker 4 (pid: 16, cores: 2)
*** Stats server enabled on 127.0.0.1:9191 fd: 18 ***
spawned uWSGI http 1 (pid: 18)
invalid request block size: 4211 (max 4096)...skip
[uwsgi-http key: 10.1.0.10:9090 client_addr: 10.1.0.100 client_port: 3026] hr_instance_read(): Connection reset by peer [plugins/http/http.c line 647]
Hello,
I am trying to setup linkding to use it with Lotus Notes.
I want to add Lotus Notes Document links as bookmarks.
Unfortunately its not possible.
A notes url/link looks like this:
notes://NOTESSERVER.SUBDMAIN.DOMAIN.COM/C12H9BF2F0261BDA/7B18866DH/THGUJZC1257D330032D158/0807E72E8A1D1B52C12585G/HFZ&RUZG
If you open this link, it redirects you to the document in Lotus Notes.
Would that be possible to add?
Hello,
Does linkding have API for developing browser extensions, desktop application etc. ?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.