Thanks for taking the time to contribute! 💜 Jellyfin is an entirely volunteer-driven project, so without contributors like you it could not exist!
Below are some general guidelines and information about this project. If you have any questions, please join one of our development chat rooms to discuss them!
- New files MUST be written in TypeScript.
- API interactions MUST be made using the Jellyfin TypeScript SDK.
- SHOULD be covered by unit tests when possible.
- SHOULD avoid whitespace only changes in unchanged sections of code.
- All files MUST include the following MPL-2.0 license header (with
YYYYreplaced with the year that the code was written):/** * Copyright (c) YYYY Jellyfin Contributors * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
- Translation changes or additions MUST be made via the Jellyfin Weblate instance except for the source language (
en). - Existing translation keys SHOULD NOT be renamed without a significant reason. Weblate cannot track key name changes so a key name change requires retranslation in ALL languages.
- MUST follow project guidelines.
- SHOULD NOT use "Conventional Commits" for titles or commit messages.
- SHOULD NOT rebase once reviews are in progress.
- MUST follow the LLM development policy.
- MUST test that the change works as expected before marking a PR as ready for review.
- SHOULD represent a singular focus (i.e. a PR to fix a bug should not include unrelated refactoring).
- SHOULD NOT update from
masterneedlessly once opened (only update if conflicts exist).
- Expo — Mobile development framework
- TypeScript — Programming language
- React Navigation — Navigation library
- React Native Elements — UI component library
- Zustand — State management library
- Jest — Test library
.
├── assets # Static assets
│ └── js # JavaScript files that are injected into the webview
├── components # React UI components
├── constants # Constants used throughout the application
├── fastlane # Fastlane scripts for building and releasing the app
├── features # Feature-specific code
│ └── downloads # All code related to the downloads feature
├── hooks # Custom React hooks
├── ios # Expo prebuild for iOS
├── langs # Translation files (only commit changes to en.json)
├── models # Data models
├── navigation # React Navigation navigators
├── patches # Patch files to fix React Native issues
├── screens # React screen components
├── scripts # Maintenance scripts
├── stores # Data stores
├── themes # Combined React Navigation and React Native Elements themes
├── types # TypeScript types
└── utils # Utility functions