Shionlib Development Overview
Shionlib development overview: React Router/React frontend and Go/ent/PostgreSQL backend, with Redis, the River job queue, S3-compatible storage, and i18n.

Repository
The repository is a monorepo: apps/web is the web client, apps/api is the backend, and apps/download-worker and apps/og are the download proxy and the share image service that run at the edge.
Tech stack
Frontend
Core stack: React Router 8, React 19, TypeScript, Vite, Tailwind CSS, hina-ui, use-intl, valibot, MDX, Tiptap, pnpm
- Framework:
React Router 8(framework mode, server-side rendering) - Language & runtime:
React 19+TypeScript - Styles & UI:
Tailwind CSS 4,@hina-ui/react,Lucide - i18n:
use-intl(route-based multilingual support with locale negotiation) - API types: generated from the backend's OpenAPI document with
openapi-typescript - Forms & validation:
valibot - Content/Docs: MDX (
@mdx-js/rollup), with frontmatter parsed byremark-frontmatter - Rich text editing:
Tiptap - Testing:
Vitest,Playwright - Deployment: Docker images, deployed by Dokploy
Backend
Core stack: Go, chi, Huma, ent, PostgreSQL, Redis, River, AWS S3 SDK, Backblaze B2 (S3-compatible), ClamAV, 7-Zip, OpenTelemetry
- Language:
Go - HTTP:
chirouter +Huma(generates the OpenAPI document from code) - Data layer:
ent,PostgreSQL; migrations are generated byAtlasand run bygolang-migrate - Cache & rate limiting:
Redis - Job queue:
River(based on PostgreSQL) - Storage & uploads:
AWS S3 SDK,Backblaze B2(game files), S3-compatible storage (images) - File checks:
7-Zip(integrity testing and reading of contents),ClamAV(virus scanning) - Auth:
JWT, passkeys (WebAuthn), Hikarinagi ID (OIDC) - i18n: multilingual error messages and notifications, resolved from the Cookie / Accept-Language
- Observability:
OpenTelemetry - Deployment: Docker images, deployed by Dokploy
Contributing
If you’re able, come build Shionlib with us! 👏
Please read the Contributing Guide before submitting your Pull Request. If you have any questions, open an Issue/Discussion, or ping the maintainers in your PR.
