No description
  • TypeScript 93.9%
  • JavaScript 1.6%
  • HTML 1.2%
  • Kotlin 1%
  • Go 0.9%
  • Other 1.2%
Find a file
2026-04-09 16:45:54 +10:00
.forgejo/workflows Just directly run the script - fuck the action LOL 2026-04-09 16:45:54 +10:00
.husky Run lint-staged without concurrency (#8489) 2025-06-14 20:47:05 +03:00
.jscodeshift Create codemod for updating Toast calls to v2 (#10045) 2026-03-12 11:35:58 -07:00
.tangled/workflows fix: finally update logotype to say Witchsky 2025-12-28 22:02:51 -08:00
__e2e__ merge changes from upstream 2026-03-28 20:14:36 -07:00
__mocks__ iOS 26 (#9047) 2026-02-23 22:34:52 -08:00
__tests__/lib bmw drivers when you try to merge 2026-03-01 20:03:21 -08:00
assets merge with upstream (will it wok) 2026-03-28 18:59:01 -07:00
bskyembed merge with upstream (will it wok) 2026-03-28 18:59:01 -07:00
bskylink merge changes from upstream 2026-03-28 20:14:36 -07:00
bskyogcard merge with upstream (will it wok) 2026-03-28 18:59:01 -07:00
bskyweb merge with upstream (will it wok) 2026-03-28 18:59:01 -07:00
code-signing add expo-updates github action (#3270) 2024-03-19 11:18:22 -07:00
dev-env Upgrade TypeScript to 6.0 (#10113) 2026-03-25 00:50:26 -07:00
docs merge changes from upstream 2026-03-28 20:14:36 -07:00
eslint Update typescript-eslint, fix up eslint setup (#10150) 2026-03-31 06:00:56 -07:00
functions/profile Replace Bitchsky with Witchsky 2025-11-21 12:26:48 -08:00
jest Add no-extraneous-dependencies and no-nodejs-modules eslint rules (#10151) 2026-04-02 08:34:12 -07:00
modules merge changes from upstream 2026-03-28 20:14:36 -07:00
patches merge with upstream (1.120.0) 2026-04-08 22:07:38 -07:00
plugins merge with upstream (1.120.0) 2026-04-08 22:07:38 -07:00
scripts Merge branch 'main' of https://github.com/bluesky-social/social-app 2025-06-25 16:48:40 +02:00
src fix: image cdn in LiveStatusDialog & uppercase website in profiles 2026-04-08 23:32:01 -07:00
web Merge with bluesky-social/social-app again 2026-02-13 01:23:19 -08:00
witchsky-static-about change Github mentions to Tangled & add files missing from PR 2025-12-01 16:03:37 -08:00
.buckconfig Initial commit 2022-06-07 17:50:05 -05:00
.easignore fix bad bool check in action (#3885) 2024-05-06 20:13:12 -07:00
.editorconfig Lint native files (#4768) 2024-07-11 18:15:35 -07:00
.env.example [APP-1776] Refactor Live Now config, reorg files (#9871) 2026-02-16 11:44:22 -06:00
.envrc nix devshell support, pages build support 2025-04-20 17:32:42 -05:00
.gitignore bmw drivers when you try to merge 2026-03-01 20:03:21 -08:00
.nvmrc Update Node.js to 20.x in Dockerfile (#6099) 2024-11-11 18:58:22 +00:00
.prettierignore Ignore built files (#5572) 2024-10-02 11:18:15 -05:00
.prettierrc.js Add state management 2022-06-09 13:03:25 -05:00
.ruby-version Bump ruby version 2026-04-09 16:45:40 +10:00
.watchmanconfig Initial commit 2022-06-07 17:50:05 -05:00
app.config.js merge with upstream (1.120.0) 2026-04-08 22:07:38 -07:00
babel.config.js Upgrade Lingui to v5 (#9905) 2026-02-23 20:28:03 +00:00
CLAUDE.md Add some more clarity to the RQ docs (#10120) 2026-04-06 18:45:40 -05:00
conductor.json Set up conductor.json with yarn install and web server configuration (#9676) 2026-01-10 01:52:59 -08:00
crowdin.yml Release 1.103.0 prep (#8434) 2025-05-30 16:58:23 -07:00
default.nix nix devshell support, pages build support 2025-04-20 17:32:42 -05:00
Dockerfile update golang to v1.25 (and some containers do debian bookworm) (#9442) 2025-11-25 10:35:50 -08:00
Dockerfile.bskylink Bsky short link service (#4542) 2024-06-21 12:41:06 -04:00
Dockerfile.bskyogcard edit dockerfile to match 2025-09-22 10:28:17 -07:00
Dockerfile.embedr update golang to v1.25 (and some containers do debian bookworm) (#9442) 2025-11-25 10:35:50 -08:00
eas.json Merge branch 'main' of https://github.com/bluesky-social/social-app 2025-10-22 17:13:56 +02:00
eslint.config.mjs Warn when useState get/set names mismatch (#10166) 2026-04-02 15:47:56 -07:00
flake.lock chore: update nix flake 2026-03-08 21:39:43 -07:00
flake.nix Fix flake devshell wrt. Android SDK 2026-04-06 04:12:42 +00:00
Gemfile Improve lightbox... and update to React Native 0.71.0 (#49) 2023-01-17 20:40:02 -06:00
google-services.json.example Replace Bitchsky with Witchsky 2025-11-21 12:26:48 -08:00
index.js Gate bitdrift integration (#7088) 2024-12-13 17:14:41 +00:00
index.web.js Upgrade API, implement XRPC rework (#4857) 2024-08-12 14:00:15 -07:00
justfile build: copy style.css 2026-03-02 00:37:22 -08:00
LICENSE Merge with social-app upstream (before the big change !) 2026-01-24 21:31:35 -08:00
lingui.config.ts Upgrade Lingui to v5 (#9905) 2026-02-23 20:28:03 +00:00
logo_v0.svg The Bitchsky brand 2025-11-09 03:10:32 -08:00
Makefile Android build (#24) 2025-04-25 11:16:38 -05:00
metro.config.js remove superjson (#9811) 2026-02-03 07:52:19 -08:00
package.json fix: image cdn in LiveStatusDialog & uppercase website in profiles 2026-04-08 23:32:01 -07:00
pages_build.sh add opengraph (#38) 2025-04-30 16:51:05 -05:00
README.md fix: drafting and live now bugs + readme update 2026-02-17 02:36:32 -08:00
svgo.config.mjs Upgrade prettier to 3.6 (#8558) 2025-06-23 07:44:40 -07:00
tsconfig.check.json Typecheck app.config.js (#9771) 2026-01-27 09:09:06 -08:00
tsconfig.json Upgrade TypeScript to 6.0 (#10113) 2026-03-25 00:50:26 -07:00
webpack.config.js Fix webpack dev server freezing after repeated refreshes (#9865) 2026-02-18 11:03:23 -08:00
wrangler.toml add opengraph (#38) 2025-04-30 16:51:05 -05:00
yarn.lock fix: image cdn in LiveStatusDialog & uppercase website in profiles 2026-04-08 23:32:01 -07:00

Witchsky Social App 🧙 (alpha)

Hey, witches! This is the codebase for the Witchsky app, based on social.daniela.lol and prior Bluesky forks.

Get the app itself:

Improvements on Bluesky

  • Cooler name (and kawaii logo)
  • Color scheme options and hue slider (defaults to Witchsky orange)
  • You can change "post" to any phrase you want in the UI
  • Choose between sharing witchsky.app or bsky.app links
  • Embed player works with stream.place links!
  • Open posts in PDSls and original pages of bridged posts
  • You can redraft posts
  • Better defaults (alt text required 😉 autoplay off 🫨)
  • More unique repost icons
  • Can download videos
  • Stay on a page when switching accounts
  • 'Mutuals' in place of 'Following' when relevant
  • No age assurance or blocks based on location
  • No push notifications (hopefully will be added later)
  • Kept as up-to-date as possible (sporadically unstable as a result)

Experiments

These are all available as options in a sub-page of the app's settings.

  • Toggle go.bsky.app link proxying for analytics
  • Toggle to see posts in quotes through blocks and detachments
  • Toggle for buttons to show original fedi posts and in PDSls
  • Toggle to trust your own preferred verifiers (and to operate as one yourself)
  • Toggle to change Constellation instance for custom features
  • Toggle to disable the default app labeler(s)

Tweaks

  • Toggle to turn non-bsky.social handles into clickable links
  • Toggle to combine reposts in horizontal carousels
  • Toggle the following feed fallback to the discover feed
  • Toggle displaying images in higher quality
  • Toggle to only show a single tab if only one feed is pinned
  • Toggle to prevent others from getting notified when you interact with their reposts
  • Toggle similar account recommendations
  • Toggle to make all user avatars square (like labelers)
  • Toggle for more square-ish UI (still slightly rounded)
  • Toggle to remove the composer prompt at the top of the Following & Discover feeds
  • Toggle between handle and DID in URLs and share links
  • Change post translation provider (between Google, Kagi, Papago, and LibreTranslate)
  • Use an OpenRouter API key for generating image alt text when posting

Metrics

You can completely disable the visiblity of all metrics individually, including the number of:

  • likes
  • reposts
  • quotes
  • saves
  • replies
  • followers
  • following
  • & who someone's followed by

Upcoming or wishful features

  • Better OpenGraph support for sharing profiles & posts (including videos & fixing quotes)
  • Selecting a custom AppView
  • Seeing past blocks in threads (the nuclear block in reply chains)
  • Configure the location used to determine regional labelers

TODO: Xan

  • Setup App Linking for Android (.well-known w/ app package fingerprint)
  • Fallback/email addresses to use witchsky.social in Automatic PDS detection
  • Change followed accounts on onboarding
  • Join date & switch accounts in composer from a fork like deer.aylac.top
  • Visual replies indicator like the Firmament userstyle (and likes?)
  • Put RunesSettings into separate subpages
  • After subpages for options, add Outlinks page &
    • ShareMenuItems.tsx, ShareMenuItems.web.tsx
  • For profile meatball button, Open profile in PDSls & Open bridged OG fedi account page
    • ProfileMenu.tsx
  • Witchsky PDS and .social site (list good songs containing 'bitch' in their titles for related site)

Even more wishful or far off

  • Collapse labels past a customizable number (from the same labeler?) into a labeler clip "(+)"
  • Submit releases to the Google Play Store and iOS App Store
  • Move from Cloudflare Pages to wisp.place (needs serverless for embeds)
  • Move TOS and privacy policy to Jollywhoppers website
  • Ignore !no-unauthenticated labels
  • Material 3 Expressive theming on Android (Liquid **ass on iOS)

Development Resources

This is a React Native application, written in the TypeScript programming language. It builds on the atproto TypeScript packages (like @atproto/api), which are also open source, but in a different git repository.

There is vestigial Go language source code (in ./bskyweb/), for a web service that returns the React Native Web application in the social app deployment. However, it is not used in current Witchsky deployments. For Witchsky, the intended deployment is with a webserver that can serve static files, and reroute to index.html as needed. Witchsky is currently hosted on Cloudflare Pages.

The Build Instructions are a good place to get started with the app itself. If you use nix (and especially direnv) then flake.nix will get you a working environment for the web version of the app.

The Authenticated Transfer Protocol ("AT Protocol" or "atproto") is a decentralized social media protocol. You don't need to understand AT Protocol to work with this application, but it can help. You may wish to reference resources linked in social-app. However, please don't harass the Bluesky team with issues or questions pertaining to Witchsky.

Witchsky is a fork of the official Bluesky client, social-app. It encompasses a set of schemas and APIs built in the overall AT Protocol framework. The namespace for these "Lexicons" is app.bsky.*.

Contributions

Witchsky is a community fork, and we'd love to merge your PR!

As a rule of thumb, the best features for Witchsky are those that have a disproportionately positive impact on the user experience compared to the maintenance overhead. Unlike some open source projects, since Witchsky is a soft fork, any features (patches) we add on top of upstream social-app need to be maintained. For example, a change to the way posts are composed may be very invasive, touching lots of code across the codebase. If upstream refactors this component, we will need to rewrite this feature to be compatible or drop it from the client.

For this reason, only features that require changing only a small amount of code from upstream should be considered.

Without an overriding motivation, opinionated features should exist behind a toggle that is not enabled by default. This allows Witchsky to cater to as many users as possible.

Guidelines

  • Check for existing issues before filing a new one please.
  • Open an issue and give some time for discussion before submitting a PR.
    • This isn't strictly necessary, but the lead developers would love to give their thoughts and scope out your willingness to maintain the feature before you write it.
  • Stay away from PRs like...
    • Changing "Quote" to "Bitch."
    • Refactoring the codebase, e.g., to replace React Query with Redux Toolkit, etc.
  • Include a new toggle and preference for your feature.

If we don't merge your PR for whatever reason, you are welcome to fork and/or self-host:

Forking guidelines

Just like social-app, you have our blessing 🪄 to fork this application! However, it's very important to make it clear to users when you're giving them a fork.

Please be sure to:

  • Change all branding in the repository and UI to clearly differentiate from Witchsky.
  • Change any support links (feedback, email, terms of service, issue tracker, etc) to your own systems.

Self hosting & personal builds

Self hosting is great! It is our intention that Witchsky is easy to self host and build on your own. If you host your own instance of Witchsky, or make your own builds, please make some level of effort to clarify that it is not an "official" build or instance. This can be in the form of a different domain or branding, but can also be as simple as not advertising your hosted instance or builds as "official" releases.

Security disclosures

If you discover any security issues, please privately disclose them to xan.lol. If the issue pertains to infastructure, code, or systems outside the scope of Witchsky, please refer to the disclosure guidelines on social-app if it is hosted by Bluesky PBC. Otherwise, reference the security policy of that system as applicable <3

License (MIT)

See ./LICENSE for the full license.

Bluesky Social PBC has committed to a software patent non-aggression pledge. For details see the original announcement.

P.S.

We ❤️ you and all of the ways you support us. Thank you for making Bluesky & Witchsky so great! ^.^