···59596060Run your own instance on any machine — works on Mac, Linux, and Windows. Great paired with a [Cloudflare Tunnel](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/) to make it publicly accessible without opening ports.
61616262-### Quick start (one-liner)
6363-6462```bash
6565-docker run -d -p 3010:3010 --restart unless-stopped j4ckxyz/bsky-md:latest
6363+git clone https://tangled.org/j4ck.xyz/bsky-md
6464+cd bsky-md
6565+docker compose up -d
6666```
67676868Your instance is now running at **http://localhost:3010**.
69697070-### Docker Compose (recommended)
7171-7272-Compose makes it easy to configure the port and rate limits.
7373-7474-1. Download the compose file:
7575- ```bash
7676- curl -O https://tangled.org/j4ck.xyz/bsky-md/raw/main/docker-compose.yml
7777- ```
7878-2. (Optional) Edit `docker-compose.yml` to adjust settings — see the table below.
7979-3. Start it:
8080- ```bash
8181- docker compose up -d
8282- ```
8383-4. Stop it:
8484- ```bash
8585- docker compose down
8686- ```
8787-8870### Configuration
89719090-Edit these values directly in `docker-compose.yml`, or pass them as environment variables:
7272+Edit these values in `docker-compose.yml` before starting:
91739274| Variable | Default | Description |
9375|---|---|---|
9494-| `PORT` | `3010` | Host port to expose (e.g. `PORT=8080 docker compose up -d`) |
7676+| `PORT` | `3010` | Host port to expose |
9577| `RATE_LIMIT_MAX` | `10` | Max requests per IP per window |
9696-| `RATE_LIMIT_WINDOW_MS` | `60000` | Window size in milliseconds (default: 1 minute) |
7878+| `RATE_LIMIT_WINDOW_MS` | `60000` | Window size in milliseconds (default: 1 min) |
97799898-**Personal use?** Set `RATE_LIMIT_MAX=100` or remove the limit entirely.
9999-100100-**Public instance?** Keep the defaults or lower `RATE_LIMIT_MAX` to protect Bluesky's API.
8080+**Personal use?** Set `RATE_LIMIT_MAX=100` or higher.
8181+**Public instance?** Keep the defaults to protect Bluesky's API.
1018210283### Updating
1038410485```bash
105105-docker compose pull && docker compose up -d
8686+git pull && docker compose up -d --build
10687```
10788108108-### Building from source
8989+### Stopping
1099011091```bash
111111-git clone https://tangled.org/j4ck.xyz/bsky-md
112112-cd bsky-md
113113-docker compose up --build -d
9292+docker compose down
11493```
1159411695## Stack
11796118118-Next.js 16 · TypeScript · `@atproto/api` · Deployed on Vercel · Docker: `j4ckxyz/bsky-md`
9797+Next.js 16 · TypeScript · `@atproto/api` · Deployed on Vercel