an attempt to make a lightweight, easily self-hostable, scoped bluesky appview

updated readme

rimar1337 32d1df0a d7f447ba

Changed files
+51 -34
+51 -34
readme.md
··· 1 - # (wip)(not done)(pre alpha) skylite (temporary name probably)(test thing) 2 - an attempt to make a lightweight, easily self-hostable, scoped appview (kinda like fedi instances, so that means users need to register to an instance to have the content they should see be indexed) using: 3 - - live sync systems: 4 - - [jetstream](https://github.com/bluesky-social/jetstream) 5 - - [spacedust](https://spacedust.microcosm.blue/) 6 - - backfill: 7 - - [listRecords](https://docs.bsky.app/docs/api/com-atproto-repo-list-records) 8 - - [constellation](https://constellation.microcosm.blue/) 9 - - the server stuff: 10 - - [sqlite](https://jsr.io/@db/sqlite) 11 - - the usage of [typescript](https://www.npmjs.com/package/@atproto/lex-cli) 12 - - [deno](https://deno.com/) 1 + # skylite (pre alpha) 2 + an attempt to make a lightweight, easily self-hostable, scoped appview 13 3 14 - this uses XRPC server tooling and codegen so the repo is kinda large despite not being functional at all 4 + this project uses: 5 + - live sync systems: [jetstream](https://github.com/bluesky-social/jetstream) and [spacedust](https://spacedust.microcosm.blue/) 6 + - backfill: [listRecords](https://docs.bsky.app/docs/api/com-atproto-repo-list-records) and [constellation](https://constellation.microcosm.blue/) 7 + - the server stuff: [sqlite](https://jsr.io/@db/sqlite) db, typescript with [codegen](https://www.npmjs.com/package/@atproto/lex-cli), and [deno](https://deno.com/) 15 8 9 + ## Status 10 + (as of 25 aug 2025) 16 11 currently the state of the project is: 17 - - db: 18 - - is not ready but ive started working on it 19 - - db schema is kinda there but still iffy on the insertion (kysely with better-sqlite3 or just use raw sql queries with deno jsr:@db/sqlite ?) (or maybe should it not use sqlite at all?) 20 - - indexing: 21 - - the meta framework of the parsing incoming data is kinda done (good enough for MVP but i would like more indexing provenance) 22 - - but the actual logic for index handling to the db is not done 23 - - registration: 24 - - user registration is not there yet, the wrapper around listRecords exists though (for onboarding/backfill) 25 - - XRPC Server: 26 - - setup is done, just need to actually implement all 80+ routes 27 - - got auth working recently but havent hooked up the validator to the xrpc method/route handler so it can access who requested it 12 + ### Index Server 13 + - Database: 14 + - Works, though it still needs some more tuning and iteration 15 + - Registration: 16 + - not there yet. currently manually adding users 17 + - onboarding backfill is probably next maybe 18 + - Indexing: 19 + - Jetstream: 20 + - its there, i just need to actually handle each and every record type and insert it to the db (like currently 2 out of 12 or so record collections are being inserted into the db) 21 + - Spacedust: 22 + - its a backlink index so i only needed one table, and so it is complete 23 + - Server: 24 + - Initial implementation is done 25 + - uses per-user instantiaion thing so it can add or remove users as needed 26 + - pagination is not a thing yet \:\( 27 + - does not implement the Ref / Partial routes yet (currently strips undefineds) (fixing this soon) 28 + - also implements the entirety of the Constellation API routes as a bonus (under `/links/`) 29 + - Lexicon: 30 + - unsure about PostViewRef's optional fields 31 + - theres 3 remaining profile-related routes thats still not defined yet 32 + - some routes need more tweaks 33 + - considering adding optional query params to request either skeleton only, partials, or full hydrated (might not be respected by the server though lol) 34 + - considering making all of the api routes custom instead of the current situation of having some of the Index server routes be the original unmodified bsky.app routes 28 35 36 + ### View Server 37 + - pratically unimplemented 38 + - currently mostly just proxies api.bsky.app 39 + - i havent split the DB between the Index server and View server yet 40 + - hydration (resolving `Ref`s, handling partials) will be implemented soon i think 41 + - it should (but not yet) have a ranking system to decide which index server to be prioritized if multiple index servers indexes the same user account. (and also should support both api sets (Bluesky AppView API (legacy/fallback) and Bluesky Index Server API )) 29 42 30 - there is still a lot of design work i havent done regarding stuff like: 31 - - moderation 32 - - indexing provenance 33 - - registration/unregistration APIs 34 - - cross instance backfills/viewing 35 - - also im pretty sure im not listening to all of the app.bsky.* records that i should be listening to but i havent re checked it even though i already imported the entire lexicon directory from the bsky atproto git repo but i just havent checked yet 36 - - and more 43 + ## Running 44 + this project is pre-alpha and not intended for general use yet. you are welcome to experiment if you dont mind errors or breaking changes. 45 + 46 + the project is split into two, the "Index Server" and the "View Server". 47 + these currently run in a single process and share the same HTTP server and port. 48 + 49 + configuration is in the `.env` file 50 + 51 + expose your localhost to the web using a tunnel or something and use that url as the custom appview url 52 + 53 + this should work on any bluesky client that supports changing the appview URL (im using an unreleased custom fork for development) 37 54 38 - still very early 39 - this does not run on any bsky clients yet 40 - practically none of the api routes have been implemented yet 55 + there is no way to register users to be indexed by the server yet (either Index nor View servers) so you can just manually add your account to the `system.db` file for now 56 + 57 + id say this project is like uhh ~20% done so not a lot of things you can do with this right now