forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 💫
1# Witchsky Social App 🧙 (alpha)
2
3Hey, witches! This is the codebase for the Witchsky app, based on [social.daniela.lol](https://github.com/kittibytess/deer-social) and prior [Bluesky](https://github.com/bluesky-social/social-app) forks.
4
5## Team
6
7Witchsky is built by [Jollywhoppers](https://jollywhoppers.com), a coding group founded by Xan.
8
9**Core Developers:**
10
11- [Xan](https://xan.lol) (founder)
12- [Ewan Croft](https://ewancroft.uk)
13
14Get the app itself:
15
16- **Web: [witchsky.app](https://witchsky.app)**
17- **iOS: App Store [Soon™](https://cat-bounce.com/)?**
18- **Android: Play Store Soon! ([F-Droid repo](https://app.jolly.you/fdroid/repo)?)**
19
20<!-- <a href="https://apps.obtainium.imranr.dev/redirect?r=obtainium://add/https://tangled.org/jollywhoppers.com/witchsky.app/">
21<img src="https://github.com/ImranR98/Obtainium/blob/main/assets/graphics/badge_obtainium.png?raw=true"
22alt="Get it on Obtainium" height="54" /></a> -->
23
24## Improvements on Bluesky
25
26- Cooler name (and kawaii logo)
27- Color scheme options and hue slider (defaults to Witchsky orange)
28- Posts are called Skeets (may let you choose in the future)
29- Choose between sharing witchsky.app or bsky.app links
30- Embed player works with [stream.place](https://stream.place/) links!
31- Open skeets in PDSls and original pages of bridged posts
32- You can redraft skeets
33- Better defaults (alt text required 😉)
34- More unique repost icons
35- Can download videos
36- 'Mutuals' in place of 'Following' when relevant
37- No push notifications (hopefully will be added later)
38- Kept as up-to-date as possible (sporadically unstable as a result)
39
40### Experiments
41
42These are all available as options in a sub-page of the app's settings.
43
44- Toggle go.bsky.app link proxying for analytics
45- Toggle to see skeets in quotes through blocks and detachments
46- Toggle for buttons to show original fedi posts and in PDSls
47- Toggle to trust your own preferred verifiers (and to operate as one yourself)
48- Toggle to change Constellation instance for custom features
49- Toggle to disable the default app labeler(s)
50
51#### Tweaks
52
53- Toggle to turn non-bsky.social handles into clickable links
54- Toggle to combine reskeets in horizontal carousels
55- Toggle the following feed fallback to the discover feed
56- Toggle displaying images in higher quality
57- Toggle to only show a single tab if only one feed is pinned
58- Toggle to prevent others from getting notified when you interact with their reskeets
59- Toggle similar account recommendations
60- Toggle to make all user avatars square (like labelers)
61- Toggle for more square-ish UI (still slightly rounded)
62
63#### Metrics
64
65You can completely disable the visiblity of all metrics individually, including the number of:
66
67- likes
68- reskeets
69- quotes
70- saves
71- replies
72- followers
73- following
74- & who someone's followed by
75
76#### Gates
77
78- Toggle for an alternate share icon
79- Toggle to show feed context for debugging
80- Toggle to hide the 'show latest' button
81- Toggle to make reply button open thread from feeds
82- More may be available in developer mode? Often less 🤷
83 - (Accessible by holding the version in the About settings screen)
84
85## Upcoming or wishful features
86
87- Better OpenGraph support for sharing profiles & skeets (including videos & fixing quotes)
88- Selecting a custom AppView
89- Seeing past blocks in threads (the nuclear block in reply chains)
90- Configure the location used to determine regional labelers
91
92### TODO: Xan
93
94- [ ] Setup App Linking for Android (.well-known w/ app package fingerprint)
95- [ ] Automatic PDS detection like other social-app forks (fallback/email addresses to use witchsky.social)
96- [ ] Change followed accounts [on onboarding](https://github.com/blacksky-algorithms/blacksky.community/commit/e36ee43efb4999f070860d7f70122e45b28c1e2b)
97- [ ] Join date & switch accounts from composer from a fork like [deer.aylac.top](https://github.com/ayla6/deer-social-test)
98- [ ] Visual replies indicator like the [Firmament userstyle](https://witchsky.app/profile/did:plc:jwhxcrf5uvl3vyw7nurecgt5/post/3m4rr3vzmak2a) (and likes?)
99- [ ] Additional translation service providers + setting (Deepl, Kagi)
100- [ ] Put DeerSettings into separate subpages
101- [ ] After subpages for options, add [Outlinks page](https://witchsky.app/profile/did:plc:q7suwaz53ztc4mbiqyygbn43/post/3m5zjhhshic2g) &
102 - [ ] ShareMenuItems.tsx, ShareMenuItems.web.tsx
103- [ ] For profile meatball button, Open profile in PDSls & Open bridged OG fedi account page
104 - [ ] ProfileMenu.tsx
105- [ ] Witchsky PDS and .social site (list good songs containing 'bitch' in their titles)
106
107### Even more wishful or far off
108
109- [ ] Collapse labels past a customizable number (from the same labeler?) into a labeler clip "(+)"
110- [ ] Submit releases to the Google Play Store and iOS App Store
111- [ ] Move from [Cloudflare Pages](https://pages.cloudflare.com/) to [wisp.place](https://wisp.place/) (needs serverless for embeds)
112- [ ] Toggle between handle and DID in share links
113- [ ] Move TOS and privacy policy to Jollywhoppers website?
114- [ ] Ignore `!no-unauthenticated` labels
115- [ ] Material 3 Expressive theming on Android (Liquid **ass on iOS)
116
117## Development Resources
118
119This is a [React Native](https://reactnative.dev/) application, written in the TypeScript programming language. It builds on the `atproto` TypeScript packages (like [`@atproto/api`](https://www.npmjs.com/package/@atproto/api)), which are also open source, but in [a different git repository](https://github.com/bluesky-social/atproto).
120
121There 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.
122For Witchsky, the intended deployment is with a webserver that can serve static files, and reroute to `index.html` as needed. [Witchsky](https://witchsky.app) is currently hosted on [Cloudflare Pages](https://pages.cloudflare.com/).
123
124The [Build Instructions](./docs/build.md) 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.
125
126The 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.
127You may wish to reference [resources linked in social-app](https://github.com/bluesky-social/social-app#development-resources). However, please don't harass the Bluesky team with issues or questions pertaining to Witchsky.
128
129Witchsky 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.*`.
130
131## Contributions
132
133> Witchsky is a community fork, and we'd love to merge your PR!
134
135As 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 skeets 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.
136
137For this reason, only features that require changing only a small amount of code from upstream should be considered.
138
139Without 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.
140
141### Guidelines
142
143- Check for existing issues before filing a new one please.
144- Open an issue and give some time for discussion before submitting a PR.
145 - 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.
146- Stay away from PRs like...
147 - Changing "Quote" to "Bitch."
148 - Refactoring the codebase, e.g., to replace React Query with Redux Toolkit, etc.
149- Include a new toggle and preference for your feature.
150
151If we don't merge your PR for whatever reason, you are welcome to fork and/or self-host:
152
153## Forking guidelines
154
155Just 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.
156
157Please be sure to:
158
159- Change all branding in the repository and UI to clearly differentiate from Witchsky.
160- Change any support links (feedback, email, terms of service, issue tracker, etc) to your own systems.
161
162## Self hosting & personal builds
163
164Self 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.
165
166## Security disclosures
167
168If you discover any security issues, please privately disclose them to [xan.lol](https://xan.lol/).
169If the issue pertains to infastructure, code, or systems outside the scope of Witchsky, please refer to the [disclosure guidelines on social-app](https://github.com/bluesky-social/social-app#security-disclosures) if it is hosted by Bluesky PBC. Otherwise, reference the security policy of that system as applicable <3
170
171## License (MIT)
172
173See [./LICENSE](./LICENSE) for the full license.
174
175Bluesky Social PBC has committed to a software patent non-aggression pledge. For details see [the original announcement](https://bsky.social/about/blog/10-01-2025-patent-pledge).
176
177## P.S.
178
179We ❤️ you and all of the ways you support us. Thank you for making Bluesky & Witchsky so great! ^.^