TypeType is a self-hosted, privacy-respecting video platform frontend.
It is a clean TypeScript rewrite and runs as a SPA served by nginx.
Current focus is a reliable desktop-first UX with responsive support for mobile layouts.
- Watch experience (video playback, subtitles, audio language selection, history/progress).
- Shorts experience (vertical navigation, subscriptions feed, blended discovery support).
- Import and restore tools (YouTube Takeout import and PipePipe backup restore).
- User controls (settings, recommendation privacy, playlists, favorites, watch later).
TypeType frontend depends on:
- TypeType-Server (API, auth, extraction):
http://localhost:8080 - TypeType-Token (PO token helper):
http://localhost:8081
The easiest setup is Docker Compose at repository root.
- Create
.envin repo root:
ALLOWED_ORIGINS=http://localhost:80
DATABASE_URL=jdbc:postgresql://postgres:5432/typetype
DATABASE_USER=typetype
DATABASE_PASSWORD=typetype
DRAGONFLY_URL=redis://dragonfly:6379- Start stack:
docker compose up -dThe frontend container mounts local nginx.conf by default, so proxy and upload-limit updates are applied from this repository file.
- Check services:
docker compose ps- Open:
- Frontend:
http://localhost:80 - Server API:
http://localhost:8080 - Token service:
http://localhost:8081
- Use Container Manager > Project and point it to this
docker-compose.yml. - Put the
.envfile next todocker-compose.ymlbefore starting the project. - If port
80is already used, changedocker-compose.ymlto another host port, for example8088:80, and setALLOWED_ORIGINS=http://localhost:8088. - First start can take a few minutes while images are pulled.
.env not found: create.envin repository root (same folder asdocker-compose.yml).- Frontend not loading: run
docker compose logs typetype. - Backend API not responding: run
docker compose logs typetype-server. - Port already in use: change host ports in
docker-compose.ymland restart withdocker compose up -d. - After updating
nginx.conf: restart frontend withdocker compose up -d typetype.
- Bun >= 1.0
- Running TypeType-Server
bun installcp apps/web/.env.example apps/web/.envSet API base URL in apps/web/.env:
VITE_API_URL=http://localhost:8080bun run devOpen http://localhost:5173.
bun run build
bun run checkPublished tags:
lateston default branchsha-<short-sha>on every build- branch tags (for example
main) - release tags from git tags like
v1.2.3(1.2.3,1.2)
- Architecture and API boundary:
Architecture.md - Agent operating rules:
AGENTS.md
- Frontend runtime uses
/apiproxy in production container mode. - Authenticated endpoints require
Authorization: Bearer <token>. - Recommendation personalization is controlled through
/settings.
- Continue stabilizing desktop watch experience
- Add dedicated mobile UX and layout support
- Keep API compatibility with TypeType-Server
A huge thanks to the projects that made this possible. TypeType is a clean rewrite, and this frontend would not exist without the work these teams published first.
- TeamPiped/Piped-Frontend - UX and API pattern reference
- FreeTubeApp/FreeTube - video player behavior reference
- InfinityLoop1308/PipePipe - multi-service behavior reference
- InfinityLoop1308/PipePipeExtractor - extraction engine used by the backend API
MIT