No description
  • TypeScript 92.4%
  • Go 2.1%
  • JavaScript 1.7%
  • Kotlin 1.2%
  • Swift 1%
  • Other 1.4%
Find a file
Violet Heague 88a803dae3
fix(ios): avoid GNU mv prompt hang in fmt patch; document platform component
The fmt consteval->constexpr patch wrote base.h via 'sed > tmp && mv tmp
base.h'. CocoaPods installs fmt/base.h read-only (0444); the nix .#ios
devShell puts GNU coreutils mv on PATH, which prompts before clobbering a
read-only file when stdin is a TTY -- freezing interactive builds forever
after 'Patching fmt' with no compiler ever starting. chmod u+w + overwrite
in place instead: no mv, no prompt, identical on BSD/GNU, all stdin modes.

Also document that Xcode 26+ needs the iOS device platform installed
separately (xcodebuild -downloadPlatform iOS) or archive fails with
'Found no destinations'.
2026-07-10 09:51:39 +10:00
.claude fix blur on image alt text background (#10658) 2026-06-02 16:01:16 -05:00
.forgejo/workflows ci: tag iOS releases as ios-build-<run>, not the branch name 2026-07-06 12:57:55 +10:00
.husky Update GitHub Actions to Node.js v24-compatible versions (#10539) 2026-05-19 11:06:46 -07:00
.jscodeshift Run codemod for replacing BskyAgent with AtpAgent (#10862) 2026-06-11 08:46:01 -07:00
.tangled/workflows chore: deploy-web attempt x67 (revert) 2026-06-03 16:14:38 -07:00
__e2e__ merge with upstream for 1.127 2026-07-04 02:38:06 -07:00
__mocks__ iOS 26 (#9047) 2026-02-23 22:34:52 -08:00
__tests__/lib actual merge for 1.123.0 2026-06-08 18:23:55 -07:00
assets merge with upstream for 1.126 2026-06-19 01:08:43 -07:00
bskyembed merge with upstream for 1.126 2026-06-19 01:08:43 -07:00
bskylink merge: with da upstream 2026-05-30 03:22:39 -07:00
bskyogcard merge with upstream for 1.126 2026-06-19 01:08:43 -07:00
bskyweb merge with upstream for 1.127 2026-07-04 02:38:06 -07:00
code-signing add expo-updates github action (#3270) 2024-03-19 11:18:22 -07:00
dev-env Release Prep 1.126.0 (#11015) 2026-06-29 12:42:23 -05:00
docs merge with upstream for 1.126 2026-06-19 01:08:43 -07:00
eslint Update typescript-eslint, fix up eslint setup (#10150) 2026-03-31 06:00:56 -07:00
functions/profile chore: oops add back missing patches for native oauth 2026-05-30 19:09:07 -07:00
jest Remove FontAwesome (#10528) 2026-05-25 16:29:46 -05:00
modules merge with upstream for 1.127 2026-07-04 02:38:06 -07:00
patches merge with upstream for 1.127 2026-07-04 02:38:06 -07:00
plugins merge with upstream! 💫 (1.121.0) 2026-04-17 17:29:35 -07:00
scripts fix(ios): avoid GNU mv prompt hang in fmt patch; document platform component 2026-07-10 09:51:39 +10:00
src custom post TID suffix setting 2026-07-04 04:58:11 -07:00
web merge with upstream 👁️ (1.122.0) 2026-04-23 22:14:34 -07: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 fix: metrics, scroll state management, style-related console warning 2026-04-29 21:27:20 -07:00
.envrc nix devshell support, pages build support 2025-04-20 17:32:42 -05:00
.gitignore merge with social-app upstream (1.123.0) 2026-06-06 22:31:41 -07:00
.npmrc chore: switch to pnpm 2026-04-23 00:49:38 -07:00
.nvmrc Update to Node.js v24 (#10419) 2026-05-05 11:51:42 -07:00
.prettierignore Fix up prettier config, apply to more files (#10542) 2026-05-20 03:53:19 -07:00
.ruby-version Improve lightbox... and update to React Native 0.71.0 (#49) 2023-01-17 20:40:02 -06:00
.watchmanconfig Initial commit 2022-06-07 17:50:05 -05:00
app.config.js fix: default appleTeamId to B3LX46C5HS so prebuild emits valid pbxproj 2026-07-06 13:12:36 +10:00
babel.config.js Remove react-native-dotenv (#10706) 2026-06-30 19:42:44 +03:00
CLAUDE.md merge with upstream for 1.127 2026-07-04 02:38:06 -07:00
conductor.json Migrate from Yarn 1 to pnpm (#10465) 2026-05-18 09:51:04 -07: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 merge(upstream): 1.123.0! yippee! 2026-05-30 18:48:52 -07:00
Dockerfile.bskylink merge: with da upstream 2026-05-30 03:22:39 -07:00
Dockerfile.bskyogcard [Chat] Update bskyogcard lexicon version (#10871) 2026-06-11 09:34:18 -07:00
Dockerfile.embedr Upgrade pnpm to 11.9.0 (#10952) 2026-06-25 13:43:33 -05:00
eas.json merge with upstream for 1.126 2026-06-19 01:08:43 -07:00
eslint-suppressions.json Reduce Sentry noise from logger transport and expected-failure call sites (#10893) 2026-07-01 10:43:01 -04:00
eslint.config.mjs merge with social-app upstream (1.123.0) 2026-06-06 22:31:41 -07:00
flake.lock add nix iOS build shell, unsigned-ipa script, and forgejo CI 2026-07-06 11:55:03 +10:00
flake.nix fix(ios): make the unsigned build complete on Xcode 26 under nix 2026-07-06 18:08:18 +10:00
Gemfile Improve lightbox... and update to React Native 0.71.0 (#49) 2023-01-17 20:40:02 -06:00
git-patch-1293127517.patch Unset atproto-proxy header when fetching/updating AI Preferences 2026-06-23 19:42:22 +03:00
git-patch-3466705278.patch make deer.social link support actually work 2026-06-23 19:42:41 +03:00
google-services.json.example Replace Bitchsky with Witchsky 2025-11-21 12:26:48 -08:00
index.ts Rename root file from js to ts, improve platform splitting (#11012) 2026-06-30 14:25:16 -05:00
index.web.ts Rename root file from js to ts, improve platform splitting (#11012) 2026-06-30 14:25:16 -05:00
justfile add nix iOS build shell, unsigned-ipa script, and forgejo CI 2026-07-06 11:55:03 +10:00
LICENSE Merge with social-app upstream (before the big change !) 2026-01-24 21:31:35 -08:00
lingui.config.ts Add app language: Czech (cs) (#10994) 2026-06-26 16:04:48 -05:00
logo_v0.svg The Bitchsky brand 2025-11-09 03:10:32 -08:00
Makefile Migrate from Yarn 1 to pnpm (#10465) 2026-05-18 09:51:04 -07:00
metro.config.js ESM atproto packages (#10543) 2026-05-21 16:41:04 -05:00
package.json merge with upstream for 1.127 2026-07-04 02:38:06 -07:00
pages_build.sh add opengraph (#38) 2025-04-30 16:51:05 -05:00
pnpm-lock.yaml merge with upstream for 1.127 2026-07-04 02:38:06 -07:00
pnpm-workspace.yaml merge with upstream for 1.127 2026-07-04 02:38:06 -07:00
prettier.config.ts Fix up prettier config, apply to more files (#10542) 2026-05-20 03:53:19 -07:00
README.md fix/chore: deploy web, enableSquareButtons, middle/right click on embeds 2026-06-03 02:07:31 -07:00
rspack.config.ts merge with upstream for 1.127 2026-07-04 02:38:06 -07:00
svgo.config.mjs Upgrade prettier to 3.6 (#8558) 2025-06-23 07:44:40 -07:00
tsconfig.check.json Clean up type/lint errors in modules (#10996) 2026-06-26 07:41:09 -07:00
tsconfig.json Update Intl polyfills (#10587) 2026-06-01 15:03:53 -07:00
webpack.config.js merge with social-app upstream (1.123.0) 2026-06-06 22:31:41 -07:00
wrangler.toml chore: update web build script 2026-04-14 21:09:54 -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)
  • Themes, hue slider, and Material You support
  • OAuth login option
  • Sort/filter accounts in account switchers
  • Hold/right click on interaction buttons to use another account
  • 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 bridged fedi instances
  • You can delete and redraft (basically edit!) posts
  • Better defaults (alt text required 😉 autoplay off 🫨)
  • Read your chat threads with deleted/deactivated accounts
  • Unique repost icons in notifications
  • Repost carousels in following feed
  • Can download videos
  • Stay on a page when switching accounts
  • 'Mutuals' in place of 'Following' when relevant
  • Pet label (option to toggle, & visibility for everyone else)
  • Account AI preferences screen
  • No unread notifications badge limit (✗30+)
  • 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)

Runes

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

  • Menus
    • Use handles in profile links instead of DIDs
    • Show "Open original post" and "Open post in PDSls" buttons
    • On non-bsky.social handles, show a link to that URL
    • Only show URL on handles with working links
  • Badges
    • Trusted verifiers
      • Use own selection of trusted verifiers
      • Trust verifiers from current AppView
    • PDS badges
      • Show a PDS badge next to the display name on profiles
      • Hide PDS badge for Bluesky-hosted accounts
      • Change favicon service
  • Impressions
    • Set visibility (Hidden, Lite, Visible, or Exact) of
      • Post like, repost, quote, save, and reply counts
      • Profile follower, following, and post counts
      • "Followed by" avatars on profiles
      • Extra "Follows you" label
  • Usability
    • Feeds
      • Do not fall back to discover feed
      • Hide "Feeds " tab when only one feed is selected
      • Disable composer prompt
      • Disable top-of-feed button
      • Show plus icon on unfollowed feed avatars
      • Hide posts that cannot be replied to from feeds
    • Redirect through go.bsky.app
    • Disable similar accounts recommendations
    • Hide follow button on posts and scrolled profile header
    • Confirm before following or unfollowing
    • Disable verify email reminder
  • Display
    • Also liked
      • Show "Also liked" recommendations under post replies
      • Collapse "Also liked" by default
    • Density
      • Account switcher
        • Use compact account switcher
        • Automatically use compact account switcher with more than 6 accounts
      • Anything else
        • Compact posts
    • Show client used to post
    • Change custom post phrase
    • Images
      • Thumbnail format
      • Full-size format
      • Download format
      • Load especially small images as PNGs
  • Infrastructure
    • Post translation provider
      • Google Translate
      • Kagi Translate
      • Naver Papago
      • LibreTranslate
      • Change LibreTranslate instance
    • Change image CDN
    • Change PLC directory
    • Change Constellation instance
    • Set custom AppView DID
  • Settings sync
    • Sync settings between devices
    • Include OpenRouter API key in synced settings
    • Push settings to cloud
    • Load settings from cloud
  • Extra
    • Fetch records directly from PDS to fix broken quotes
    • Auto-like what you repost
    • Disable via repost notifications
    • Show debug context for posts in Discover feed
    • Don't include the 'via' field in own posts
    • Developer mode
    • Feature gates

TODO: Xan

  • Setup App Linking for Android (.well-known w/ app package fingerprint)
  • Change followed accounts on onboarding
  • Visual replies indicator like the Firmament userstyle
  • Permit editing Menu options in Runes > Menus (remember Outlinks page?)
    • ShareMenuItems.tsx, ShareMenuItems.web.tsx
  • Add Open bridged OG fedi account page option to ProfileMenu.tsx
  • Witchsky PDS and .social site (list good songs containing 'bitch' in their titles on related site)

Upcoming or wishful features

  • 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 Terms and Privacy policy to Jollywhoppers.com
  • Ignore !no-unauthenticated labels
  • Better OpenGraph support for sharing profiles & posts (including videos & fixing quotes)
  • Seeing past blocks in threads (the nuclear block in reply chains)

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 Witchsky so great! ^.^