A greatly enhanced fork of Misskey with better UI/UX, security, features, and more!
Go to file
Johann150 5a691f7e98 server: avoid adding suspended instances to deliver queue
This should reduce the performance hit when adding large numbers of
instances to the deliver queue by making the check for suspended and
dead instances a bulk operation.

Changelog: Changed
Reviewed-on: https://akkoma.dev/FoundKeyGang/FoundKey/pulls/215
2022-11-09 17:19:29 -08:00
.config update example 2022-11-02 09:14:42 -07:00
.github Move title svg location 2022-08-08 15:10:31 -07:00
.okteto ok-to-test with okteto (#8799) 2022-06-09 00:50:23 +09:00
.vscode Update extensions.json 2022-05-14 18:50:16 +09:00
.yarn/plugins/@yarnpkg 🙏 2022-05-31 00:13:41 -07:00
chart Always `signToActivityPubGet` 2022-08-22 23:44:25 -07:00
custom feat: custom css/assets 2022-08-09 13:09:54 -07:00
cypress Obliteration of Ai-chan 🐱🔫 2022-08-08 14:58:27 -07:00
locales finalize tutorial 2022-11-09 11:09:15 -08:00
packages server: avoid adding suspended instances to deliver queue 2022-11-09 17:19:29 -08:00
scripts wip 2022-06-04 08:01:02 +00:00
.dockerignore Update .dockerignore 2022-05-31 08:33:03 -07:00
.editorconfig Use tabs in json 2017-05-24 20:27:39 +09:00
.gitattributes MisskeyRoom (#5267) 2019-08-18 14:41:33 +09:00
.gitignore feat: Managed hosting complete 2022-11-01 18:41:59 -07:00
.node-version Update .node-version 2022-06-06 21:01:00 +09:00
.vsls.json Add .vsls.json 2018-08-13 00:24:45 +09:00
.yarnrc.yml fix 2022-11-08 16:50:33 -08:00
CALCKEY.md server: avoid adding suspended instances to deliver queue 2022-11-09 17:19:29 -08:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2017-06-17 10:01:05 +09:00
CONTRIBUTING.md b3 2022-07-21 12:48:23 -07:00
COPYING feat: auto nsfw detection (#8840) 2022-07-07 21:06:37 +09:00
Dockerfile Docker: patch Docker build 2022-10-26 08:04:19 +03:00
LICENSE Use AGPLv3 2018-03-28 22:56:28 +09:00
Procfile Create Procfile 2019-04-05 18:17:30 +09:00
README.md 3000 2022-11-09 22:39:03 +01:00
SECURITY.md Create SECURITY.md 2021-05-24 05:50:45 +09:00
cypress.config.ts update cypress 2022-06-11 15:53:45 +09:00
docker-compose.yml change links to depends_on in docker-compose.yml 2022-11-06 19:04:57 -08:00
gulpfile.js oopsie 2022-11-06 19:44:26 -08:00
package.json MkSpacer for chat room 2022-11-09 13:21:13 -08:00

README.md

Calckey logo

🌎 Calckey is an open source, decentralized social media platform that's free forever! 🚀

About Calckey

  • Calckey is based off of Misskey, a powerful microblogging server on ActivityPub with features such as emoji reactions, a customizable web ui, rich chatting, and much more!
  • Calckey adds many quality of life changes and bug fixes for users and instance admins alike.
  • Read this document all for current and future differences.
  • Notable differences:
    • Improved UI/UX (especially on mobile)
    • Improved notifications
    • Improved instance security
    • Recommended Instances timeline
    • OCR image captioning
    • New and improved Groups
    • Better intro tutorial
    • Many more user and admin settings
    • So much more!

🥂 Links

🌠 Getting started

This guide will work for both starting from scratch and migrating from Misskey.

📦 Dependencies

  • At least 🐢 NodeJS v16.15.0 (v18.12.1 recommended)

⚠️ NodeJS v19 is not supported as of right now because of this issue.

  • 🐘 At least PostgreSQL v12

  • 🍱 At least Redis v6 (v7 recommended)

  • 🛰️ (Optional, for non-Docker) pm2

👀 Get folder ready

git clone https://codeberg.org/thatonecalculator/calckey.git
cd calckey/
# git checkout main # if you want only stable versions

📩 Install dependencies

# nvm install 18 && nvm alias default 18 && nvm use 18
corepack enable

💅 Customize

  • To add custom CSS for all users, edit ./custom/instance.css.
  • To add static assets (such as images for the splash screen), place them in the ./custom/ directory. They'll then be avaliable on https://yourinstance.tld/static-assets/filename.ext.

🚚 Migrating from Misskey to Calckey

⚠️ Because of their changes, migrating from Foundkey is not supported.

cp ../misskey/.config/default.yml ./.config/default.yml # replace `../misskey/` with misskey path, replace `default.yml` with `docker.yml` if you use docker
cp -r ../misskey/files . # if you don't use object storage

🍀 NGINX

Click to see an example NGINX config:
# Replace example.tld with your domain

# For WebSocket
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache1:16m max_size=1g inactive=720m use_temp_path=off;

server {
    listen 80;
    listen [::]:80;
    server_name example.tld;

    # For SSL domain validation
    root /var/www/html;
    location /.well-known/acme-challenge/ { allow all; }
    location /.well-known/pki-validation/ { allow all; }
    location / { return 301 https://$server_name$request_uri; }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.tld;

    ssl_session_timeout 1d;
    ssl_session_cache shared:ssl_session_cache:10m;
    ssl_session_tickets off;

    # To use Let's Encrypt certificate
    ssl_certificate     /etc/letsencrypt/live/example.tld/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.tld/privkey.pem;

    # To use Debian/Ubuntu's self-signed certificate (For testing or before issuing a certificate)
    #ssl_certificate     /etc/ssl/certs/ssl-cert-snakeoil.pem;
    #ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;

    # SSL protocol settings
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_stapling on;
    ssl_stapling_verify on;

    # Change to your upload limit
    client_max_body_size 80m;

    # Proxy to Node
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_redirect off;

        # If it's behind another reverse proxy or CDN, remove the following.
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;

        # For WebSocket
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;

        # Cache settings
        proxy_cache cache1;
        proxy_cache_lock on;
        proxy_cache_use_stale updating;
        add_header X-Cache $upstream_cache_status;
    }
}

🚀 Build and launch!

🐢 NodeJS

git pull and run these steps to update Calckey in the future!

# git pull
yarn install
NODE_ENV=production yarn run build && yarn run migrate
pm2 start "NODE_ENV=production yarn start" --name Calckey

🐋 Prebuilt Docker image

docker pull thatonecalculator:calckey
docker up -d

🐳 Docker Compose

sudo docker compose build
sudo docker-compose run --rm web yarn run init
sudo docker compose up -d

😉 Tips & Tricks

  • I'd strongly recommend against using CloudFlare, but if you do, make sure to turn code minification off.
  • For push notifications, run npx web-push generate-vapid-keys, the put the public and private keys into Control Panel > General > ServiceWorker.
  • For translations, make a DeepL account and generate an API key, then put it into Control Panel > General > DeepL Translation.
  • For link previews, go to Control Panel > Security > Summaly Proxy and put in https://summaly.arkjp.net.