AD
Boost Your Brand on BlueSky—Exclusive banner space to amplify your reach within the BlueSky community.
BSkyInfo LogoBskyInfo
All ToolsCategoriesCollectionsFeed DirectoryLabeler DirectoryArticlesGuidesGlossaryBluesky SDKsSponsor
Submit
All ToolsCategoriesCollectionsFeed DirectoryLabeler DirectoryGuidesGlossaryArticlesBluesky SDKsSponsorSubmit
  1. SDKs
  2. /C#
  3. /PinkSea
shinolabs

PinkSea

A C# SDK for Bluesky and AT Protocol by shinolabs

An oekaki BBS board running on top of the AT Protocol.

GitHub Stats

77stars
13forks
12contributors
21open issues

Dates

Created:October 26, 2024
Last updated:May 6, 2025

README

The following content is from PinkSea's GitHub repository. All rights reserved by the original author.



A decentralized oekaki (お絵描き, jp. drawing) BBS running as an AT Protocol AppView.

It allows you to log in with your AT Protocol account and draw right in the browser using a modified variant of the tegaki.js editor! Your images are stored on your ATProto Personal Data Server, meaning that no PinkSea instance actually controls them. If one goes down, another one can take its place. You are in full control of everything you draw.

Other than just drawing, PinkSea allows you to tag your oekaki, grouping them together like in sites akin to Pixiv. PinkSea also permits responding with oekaki to other oekaki!

An image of PinkSea's frontend displaying an oekaki post.

Running (Docker)

In order to run PinkSea as a Docker container, you need to have the Docker runtime installed.

  1. Clone this repository by doing git clone https://github.com/shinolabs/PinkSea

  2. Navigate to the cloned repository.

  3. Copy .env.example to .env and modify the settings according to your setup.

ENV Config NameDescriptionDefault Value
POSTGRES_USERNAMEThe username used for the PostgreSQL database loginpinksea
POSTGRES_PASSWORDThe password used for the PostgreSQL database loginpinksea
POSTGRES_PORTThe port used to connect to PostgreSQL5432
POSTGRES_DATABASEThe name of the database used for PinkSeaPinkSea
APPVIEW_URLThe URL used by the AppView APIhttps://api.your.tld
FRONTEND_URLThe URL used by the frontend. (Can be the same as the AppView)https://your.tld
BACKFILL_SOURCEThe source used for backfilling the local instance. (Can be either a relay or another PinkSea instance)https://relay1.us-west.bsky.network
BACKFILL_SKIP_DIMENSIONS_VERIFICATIONWhether to skip verifying dimensions for each oekaki post while backfilling. Will speed it up sacrificing full validity.false
JETSTREAM_ENDPOINTThe ATProto JetStream endpoint used by this PinkSea instance.jetstream1.us-east.bsky.network
PLC_DIRECTORYThe PLC directory endpoint used by this PinkSea instance.https://plc.directory
IMAGE_PROXY_TEMPLATEThe image proxy endpoint used by this PinkSea instance. {0} will be populated with the author's DID, while {1} will be populated with the CID of the blob.https://cdn.bsky.app/img/feed_fullsize/plain/{0}/{1}
  1. Run docker compose up -d to start the containers and detach from them.

  2. (Initial run only) Wait for PinkSea to finish backfilling all the oekaki posts.

Your PinkSea instance will now be accessible at the FRONTEND_URL endpoint you've specified for it, fully connected with the entire ATProto network! Simple as that!

Updating

  1. Run docker compose down to shut down the containers.

  2. Run git pull to fetch the latest changes to the repository.

  3. Run docker compose up -d --build to force rebuild all the PinkSea dockerfiles.

Your PinkSea instance should now be up-to-date!

Running (Manual)

Backend (AppView)

In order to run the AppView, you need the .NET 8 SDK and the Entity Framework tools package, which you can install through dotnet tools -g install dotnet-ef.

First-time run

  1. Open the PinkSea folder

  2. Copy the sample appsettings.example.json file to appsettings.json

    1. Modify the PostgresConfig to point to your PostgreSQL settings.
    2. Point the AppViewConfig URL to where your AppView will reside, this is the URL that will be used to identify your PinkSea instance. (As an example, for the official PinkSea instance, it's https://api.pinksea.art)
    3. (OPTIONAL) Point the FrontendConfig to point to where your PinkSea frontend resides. This is used for BlueSky cross-posting with a link. Leaving it blank will disallow cross-posting. (Again, as an example, for the official PinkSea instance it's https://pinksea.art)
  3. Run dotnet run --configuration Release to start the PinkSea AppView. PinkSea will automatically perform migrations.

That's it! Your server now is connected to the ATmosphere and is ready to start cooperating with other PinkSea AppViews.

Updating

  1. Navigate to the PinkSea folder.
  2. Run dotnet ef database update to run the migrations.
  3. Once again, run dotnet run --configuration Release to start the server in Release mode.

Frontend (Client app)

In order to run the client app locally, you need a fairly modern Node.js version. Anything above Node 20 works, but I personally recommend the latest LTS version.

Configuration

  1. Navigate to PinkSea.Frontend.
  2. Run npm i to download the required packages.
  3. Copy the .env.example file to .env.
  4. Set VITE_PINKSEA_API_URL to your AppView instance. (For example, for the official PinkSea instance, the endpoint is https://api.pinksea.art)

Running a local server

  1. Navigate to PinkSea.Frontend
  2. Run npm i to update the packages.
  3. Finally, execute npm run dev, to start a local development server with code reloading.

Building

  1. Navigate to PinkSea.Frontend
  2. Run npm i to update the packages.
  3. Finally, execute npm run build, to build and minify the client app.

The built app will be inside of the dist folder.

Gateway (SSR helpers for the frontend)

Configuration

  1. Open the PinkSea.Gateway folder.

  2. Copy the sample appsettings.example.json file to appsettings.json

  3. Edit the values inside of it

    1. Point AppViewEndpoint URL to where your AppView resides. (As an example, for the official PinkSea instance, it's https://api.pinksea.art).
    2. Point FrontEndEndpoint URL to where your frontend will reside. (As an example, for the official PinkSea instance, it's https://pinksea.art).
  4. Create the wwwroot folder.

  5. Copy the built frontend from PinkSea.Frontend/dist to wwwroot

  6. Run dotnet run --configuration Release to start the PinkSea gateway helper.

Acknowledgments

PinkSea was built by these wonderful people, I'd like to extend a massive thank you to everyone involved with the project!

  • GlitchyPSI for drawing the "post is missing" image visible whenever we see a post that does not exist! Thank you so much!!!
  • yazuto for designing our lovely mascot PinkSea-tan! She's the cutest being ever!!

contributors badge

Thank you to everyone who participated in the GitHub drawing thread as well to make this README this much nicer!! All of the images in this README have been drawn by PinkSea users inside of PinkSea!

Page screenshot

Top to bottom:

  • bye.omg.lol
  • fatty2can.bsky.social
  • sako.works

Header

Clockwise from the top left:

  • reileky.com
  • fluff.im
  • domatoxi.bsky.social
  • lyrinne.bsky.social
  • aikoyori.xyz
  • chimpbeef.bsky.social

Footer

Clockwise from the top left:

  • alyxia.dev
  • murrax.dev
  • ofplayers.net
  • thememesniper.dev
  • docshoebox.bsky.social
  • vescien.bsky.social

Click here to visit the original thread!

License

PinkSea's licensing is split across projects in this monorepo.

The following projects are licensed under the European Union Public License-1.2:

  • PinkSea
  • PinkSea.Frontend
  • PinkSea.Gateway

The following libraries that PinkSea is built on top of are licensed under the Creative Commons Zero license:

  • PinkSea.AtProto
  • PinkSea.AtProto.Shared
  • PinkSea.AtProto.Server

Please use them to build your own projects!


made with love by

Topics

atprotoatprotocolblueskydecentralizedoekaki

Related SDKs

drasticactionsFishyFlip

Fishyflip - a .NET ATProtocol/Bluesky Library

101•C#
a-gubskiyX.Bluesky

Client for Bluesky

46•C#
electricduckbooski

Bluesky cross-poster for inferior services (and a .NET library for ATProto and Bluesky)

4•C#
blowdartidunno.Bluesky

A .NET class library for the Bluesky social network.

70•C#
PassiveModdingatompds

An atproto PDS implementation in .NET (C#)

25•C#
alnkesqAppViewLite

A Bluesky appview focused on low resource consumption

131•C#

Resources

GitHub RepositoryProject Website

License

Unknown

Author

shinolabs
shinolabs
did:plc:3vjz7behkko4oxk5cun2jebo

Activity

Last commit: May 6, 2025
Commit frequency: Unknown

Our Sponsors

Your Brand Here!

50K+ engaged viewers every month

Limited spots available!

📧 Contact us via email🦋 Contact us on Bluesky
BSkyInfo LogoBskyInfo

The Most Comprehensive Bluesky Tools Directory

Stay updated with the latest Bluesky tools and ecosystem news 🦋

Bluesky butterfly logo
Quick LinksSubmit a ToolSponsorAboutLegal Information
ToolsFeed DirectoryLabeler DirectorySchedulingAnalyticsAll ToolsCategoriesCollectionsTags
ResourcesArticlesBluesky GuidesBluesky GlossaryBluesky SDKsBluesky ResourcesSkyRaffleMeida Coverage
Our ProductsRaffleBlueAiTeach ToolsLaiewAI affiliate listFirsto

This website may contain affiliate links

© 2025 BskyInfo. All rights reserved.