A clean, fast, and privacy-focused anime streaming site.
Built with vanilla HTML/CSS/JS and a Python Flask backend.
Anivexa is a self-hosted anime streaming platform. No ads, no clutter. Just anime.
It proxies episode data through your own backend so nothing leaks your API source. All API traffic is encrypted end-to-end using AES-256-GCM — requests and responses are both encrypted blobs, un[...]
Note: Due to constant updates, Anivexa has been made closed-source and wont be maintained properly on template version. It will get updated once in a few months. The hosted version will be maintained Properly
- Spotlight & Trending — dynamically loaded hero section and trending/popular grids
- Episode Player — multi-source player with sub/dub toggle
- Browse & Search — filter by genre, format, season, year
- Airing Schedule — weekly anime schedule with countdown
- User Accounts — register, login, JWT sessions, profile customization
- AniList Sync — link your AniList account, track watch progress, sync lists
- Profile Customization — Crunchyroll avatar and banner selection
- End-to-End Encryption — all API calls go through
/api/secure/pipeas encrypted payloads - Changelog Modal — shows users what's new on each update
Episodes are sourced through the connected anime API. Anivexa is built to work with the Miruro API — a self-hostable anime data + streaming A[...]
Supported providers (via the API):
| Provider | Type |
|---|---|
| AnimePahe | Sub |
| Zoro / AniWave | Sub + Dub |
| Anime Kai | Sub + Dub |
| Gogoanime | Sub + Dub |
Source availability depends on the anime API you configure. See Setup.
| Layer | Tech |
|---|---|
| Frontend | HTML, CSS, JavaScript |
| Backend | Python, Flask |
| Database | Turso (SQLite edge DB) |
| Auth | JWT + bcrypt |
| Anime Data | Your configured anime API |
| AniList | OAuth 2.0 + GraphQL |
| Encryption | AES-256-GCM (Web Crypto API) |
| Hosting | Vercel |
git clone https://github.com/walterwhite-69/Anivexa.git
cd Anivexapip install -r requirements.txtCopy .env.example to .env and fill in your values:
TURSO_URL=YOUR_TURSO_DATABASE_URL
TURSO_TOKEN=YOUR_TURSO_AUTH_TOKEN
JWT_SECRET=YOUR_STRONG_JWT_SECRET_HERE
ANILIST_CLIENT_ID=YOUR_ANILIST_CLIENT_ID
ANILIST_CLIENT_SECRET=YOUR_ANILIST_CLIENT_SECRET
ANILIST_REDIRECT_URI=http://localhost:5500/api/auth/anilist/callback
RECAPTCHA_SECRET=YOUR_RECAPTCHA_V3_SECRET
ANIME_API_URL=YOUR_DEPLOYED_ANIME_API_URLWhere to get these:
- Turso — turso.tech — free SQLite edge DB, get URL + token from dashboard
- AniList OAuth — anilist.co/settings/developer — create an API client
- reCAPTCHA v3 — google.com/recaptcha — v3 site + secret keys
- Anime API — deploy your own instance of Miruro API and use its URL here
python server.pyvercel --prodAdd all your .env variables to Vercel → Project Settings → Environment Variables.
All anime API calls are encrypted in transit. Here's how it works:
- The server generates a session key from your
JWT_SECRETand injects it as a hidden<meta>tag in the HTML - The browser reads the key from the DOM (no network request)
- Every API call is encrypted with AES-256-GCM and sent to
/api/secure/pipe?e=... - The server decrypts, proxies the real request, compresses + re-encrypts the response
- The browser decrypts and renders the data
Nobody looking at the network tab sees raw API endpoints or responses.
Anivexa/
├── server.py # Flask backend
├── vercel.json # Vercel deployment config
├── requirements.txt
├── .env.example
├── index.html # Home page
├── anime.html # Anime details + player
├── browse.html # Browse & search
├── schedule.html # Airing schedule
├── profile.html # User profile
├── js/
│ ├── api.js # API layer + AES-GCM crypto
│ ├── home.js
│ ├── anime.js
│ ├── browse.js
│ └── profile.js
├── css/
│ ├── style.css
│ └── profile.css
└── assets/
Connect your AniList account from the profile page. Once linked:
- Your watching/completed/planned lists sync with Anivexa
- Episode progress is tracked and saved back to AniList automatically
- Stats (total episodes watched, mean score, etc.) show on your profile
MIT — do whatever you want with it. Credit appreciated but not required.
Made with too much free time and too many anime hours.