# XPost documentation ## Installation The recommended approach is to use the official container image from `ghcr.io/zenfyrdev/xpost:next` or for unsupported architectures, such as `armv7` and `riscv`, from `atcr.io/zenfyr.dev/xpost:weird` (may be out of date). ### Podman Quadlets Example Rootful Quadlet. Make sure the data dir exists on the host and is owned by `1000:1000`! ``` [Unit] Description=XPost [Container] Image=ghcr.io/zenfyrdev/xpost:next EnvironmentFile=/etc/containers/systemd/xpost/.env Volume=/var/containers/xpost/data:/app/data:Z [Service] Restart=always RestartSec=10s [Install] WantedBy=default.target ``` ### Docker Compose Make sure the data dir exists on the host and is owned by `1000:1000`! ``` services: xpost: image: ghcr.io/zenfyrdev/xpost:next restart: unless-stopped env_file: ./.env volumes: - ./data:/app/data ``` ### Native Install The project uses uv, so a native install using a `.venv` is pretty simple. 1. Make sure that `ffmpeg` and `libmagic` are installed. 2. Download and install [uv](https://github.com/astral-sh/uv) 3. Clone the project `https://tangled.org/zenfyr.dev/xpost` 4. Run `uv sync --locked` ## Quickstart Upon first launch, XPost will create a folder `./data` with an example `settings.json` Edit the file, and then start XPost again. ## Features - Based on streaming APIs to instantly crosspost new posts. - Splitting large posts into multiple smaller ones to fit into character limits. - Supports quotes and reposts. ## Configuration XPost config accepts an array of input -> outputs pairs. find all services and example configs in [services.md](./services.md). All `"key": "value"` options can be set to `env:VARIABLE` to read envvars instead of storing things directly in the settings file. Additionally XPost accepts some envvars. | Key | Description | |-----------------|---------------------------------------------------------------------------------------------------------------| | `DATA_DIR` | Base data directory. | | `SETTINGS_DIR` | `settings.json` file location. | | `DATABASE_DIR` | `data.db` file location. | | `SLINGSHOT_URL` | URL of the [microcosm](https://www.microcosm.blue/) slingshot service for resolving identities. | | `JETSTREAM_URL` | URL of the [Jetstream](https://github.com/bluesky-social/jetstream) service for listening for incoming posts. | ## Advanced Features ### bi-directional crossposting **This is experimental and unstable.** XPost supports pointing to services directly at each other, posts crossposted from other services are marked as so, and are skipped to avoid creating infinite loops. This was tested quite a bit, and it *should* work fine, but here be dragons. Some stuff is not yet on par for bi-directional e.g. during start-up XPost might make multiple unnecessary APIs calls to check credentials. If any bugs happen to happen, please report them.