+16
-16
Gemfile.lock
+16
-16
Gemfile.lock
···
7
7
GEM
8
8
remote: https://rubygems.org/
9
9
specs:
10
-
activemodel (7.2.2.2)
11
-
activesupport (= 7.2.2.2)
12
-
activerecord (7.2.2.2)
13
-
activemodel (= 7.2.2.2)
14
-
activesupport (= 7.2.2.2)
10
+
activemodel (7.2.3)
11
+
activesupport (= 7.2.3)
12
+
activerecord (7.2.3)
13
+
activemodel (= 7.2.3)
14
+
activesupport (= 7.2.3)
15
15
timeout (>= 0.4.0)
16
-
activesupport (7.2.2.2)
16
+
activesupport (7.2.3)
17
17
base64
18
18
benchmark (>= 0.3)
19
19
bigdecimal
···
41
41
concurrent-ruby (1.3.5)
42
42
connection_pool (2.5.4)
43
43
daemons (1.4.1)
44
-
date (3.4.1)
44
+
date (3.5.0)
45
45
dotenv (3.1.8)
46
46
drb (2.2.3)
47
47
ed25519 (1.4.0)
48
-
erb (5.1.1)
48
+
erb (6.0.0)
49
49
eventmachine (1.2.7)
50
50
faye-websocket (0.12.0)
51
51
eventmachine (>= 0.12.0)
···
55
55
i18n (1.14.7)
56
56
concurrent-ruby (~> 1.0)
57
57
io-console (0.8.1)
58
-
irb (1.15.2)
58
+
irb (1.15.3)
59
59
pp (>= 0.6.0)
60
60
rdoc (>= 4.0.0)
61
61
reline (>= 0.4.2)
···
64
64
logger (1.7.0)
65
65
minisky (0.5.0)
66
66
base64 (~> 0.1)
67
-
minitest (5.26.0)
67
+
minitest (5.26.1)
68
68
mustermann (3.0.4)
69
69
ruby2_keywords (~> 0.0.1)
70
70
net-scp (4.1.0)
···
87
87
psych (5.2.6)
88
88
date
89
89
stringio
90
-
rack (3.2.3)
90
+
rack (3.2.4)
91
91
rack-protection (4.2.1)
92
92
base64 (>= 0.1.0)
93
93
logger (>= 1.6.0)
···
98
98
rackup (2.2.1)
99
99
rack (>= 3)
100
100
rainbow (3.1.1)
101
-
rake (13.3.0)
102
-
rdoc (6.15.0)
101
+
rake (13.3.1)
102
+
rdoc (6.15.1)
103
103
erb
104
104
psych (>= 4.0.0)
105
105
tsort
106
-
reline (0.6.2)
106
+
reline (0.6.3)
107
107
io-console (~> 0.5)
108
108
ruby2_keywords (0.0.5)
109
109
securerandom (0.4.1)
···
123
123
cbor (~> 0.5, >= 0.5.9.6)
124
124
eventmachine (~> 1.2, >= 1.2.7)
125
125
faye-websocket (~> 0.12)
126
-
stringio (3.1.7)
126
+
stringio (3.1.8)
127
127
thin (2.0.1)
128
128
daemons (~> 1.0, >= 1.0.9)
129
129
eventmachine (~> 1.0, >= 1.0.4)
130
130
logger
131
131
rack (>= 1, < 4)
132
132
tilt (2.6.1)
133
-
timeout (0.4.3)
133
+
timeout (0.4.4)
134
134
tsort (0.2.0)
135
135
tzinfo (2.0.6)
136
136
concurrent-ruby (~> 1.0)
+4
-4
README.md
+4
-4
README.md
···
16
16
17
17
New bookmarks are private data, so at the moment they can't be imported until support for OAuth is added.
18
18
19
-
Lycan is written in Ruby, using Sinatra and ActiveRecord, with Postgres as the database. The official instance runs at [lycan.feeds.blue](https://lycan.feeds.blue) (this service only implements an XRPC API – the UI is implemented as part of [Skythread](https://blue.mackuba.eu/skythread/)).
19
+
Lycan is written in Ruby, using Sinatra and ActiveRecord, with Postgres as the database. The official instance runs at [lycan.feeds.blue](https://lycan.feeds.blue) (this service only implements an XRPC API – the UI is implemented as part of [Skythread](https://skythread.mackuba.eu)).
20
20
21
21
The service consists of three separate components:
22
22
···
27
27
28
28
## Setting up on localhost
29
29
30
-
This app should run on any somewhat recent version of Ruby, but of course it's recommended to run one that's still maintained, ideally the latest one. It's also recommended to install it with [YJIT support](https://shopify.engineering/ruby-yjit-is-production-ready), and on Linux also with [jemalloc](https://scalingo.com/blog/improve-ruby-application-memory-jemalloc). You will probably need to have some familiarity with the Ruby ecosystem in order to set it up and run it.
30
+
This app should run on any somewhat recent version of Ruby, though of course it's recommended to run one that's still getting maintenance updates, ideally the latest one. It's also recommended to install it with [YJIT support](https://shopify.engineering/ruby-yjit-is-production-ready), and on Linux also with [jemalloc](https://scalingo.com/blog/improve-ruby-application-memory-jemalloc). You will probably need to have some familiarity with the Ruby ecosystem in order to set it up and run it.
31
31
32
32
A Postgres database is also required (again, any non-ancient version should work).
33
33
···
55
55
2) the background worker, [`bin/worker`](bin/worker)
56
56
3) the Sinatra HTTP server, [`bin/server`](bin/server)
57
57
58
-
The UI can be accessed through Skythread, either on the official site on [blue.mackuba.eu](https://blue.mackuba.eu/skythread/), or a copy you can download [from the repo](https://tangled.org/@mackuba.eu/skythread). Log in and open "[Archive search](https://blue.mackuba.eu/skythread/?page=search&mode=likes)" from the account menu – but importantly, to use the `localhost` Lycan instance, add `&lycan=local` to the URL.
58
+
The UI can be accessed through Skythread, either on the official site on [skythread.mackuba.eu](https://skythread.mackuba.eu), or a copy you can download [from the repo](https://tangled.org/mackuba.eu/skythread). Log in and open "[Archive search](https://skythread.mackuba.eu/?page=search&mode=likes)" from the account menu – but importantly, to use the `localhost` Lycan instance, add `&lycan=local` to the URL.
59
59
60
60
You should then be able to start an import from there, and see the worker process printing some logs as it starts to download the data. (The firehose process needs to be running too, because the import job needs to pass through it first.)
61
61
···
103
103
104
104
## Credits
105
105
106
-
Copyright © 2025 Kuba Suder ([@mackuba.eu](https://bsky.app/profile/mackuba.eu)).
106
+
Copyright © 2025 Kuba Suder ([@mackuba.eu](https://bsky.app/profile/did:plc:oio4hkxaop4ao4wz2pp3f4cr)).
107
107
108
108
The code is available under the terms of the [zlib license](https://choosealicense.com/licenses/zlib/) (permissive, similar to MIT).
109
109