Script Standard
# Code Style
# General Guidelines
- Be consistent!
 - Avoid using deprecated features.
 - Avoid modifying 
yarn.lockandpackage.json, unless you are adding a new dependency. - Conbine repetitive code into functions.
 - Prefer higher ECMAScript Standard features over lower ones.
 - Sort the entries alphabetically (uppercase first) to make it easier to find an entry.
 - Use HTTPS instead of HTTP whenever possible.
 - Use WebP format instead of JPG whenever possible since it offers better compression.
 
# Formatting
# Indentation
- Use 4 spaces for indentation for consistent and easy-to-read code.
 
# Semicolons
- Add a semicolon at the end of each statement for improved readability and consistency.
 
# String
- Use single quotes instead of double quotes whenever possible for consistency and readability.
 - Use template literals (opens new window) over complex string concatenation.
 - Use template literals (opens new window) for GraphQL queries as they make the code more concise and easy to read.
 
# Whitespace
- Add an empty line at the end of each file.
 - Avoid trailing whitespace for a clean and readable codebase.
 
# Language Features
# Casting
- Avoid re-casting the same type.
 
# Functions
- Prefer arrow functions (opens new window) over the 
functionkeyword. 
# Loops
- Use 
for-ofinstead offorfor arrays (javascript:S4138 (opens new window)). 
# Variables
- Use 
constandletinstead ofvar. - Declare one variable per declaration.
 
# Naming
- Use 
lowerCamelCasefor variables and functions to adhere to standard naming conventions. - Use 
kebab-casefor files and folders.snake_caseis also acceptable. - Use 
CONSTANT_CASEfor constants. 
# v2 Route Standard
When creating a new route in RSSHub, you need to organize your files in a specific way. Your namespace folder should be stored in the lib/v2 directory and should include three mandatory files:
router.jsRegisters the routesmaintainer.jsProvides information about the route maintainerradar.jsProvide a RSSHub Radar (opens new window) rule for each route
Your namespace folder structure should look like this:
โโโโlib/v2
โ   โโโโfurstar
โ       โโโโ templates
โ           โโโโ description.art
โ       โโโโ router.js
โ       โโโโ maintainer.js
โ       โโโโ radar.js
โ       โโโโ someOtherJs.js
โ   โโโโtest
โ   โโโโsomeOtherNamespaces
...
 2
3
4
5
6
7
8
9
10
11
All eligible routes under the lib/v2 path will be automatically loaded without the need for updating the lib/router.js.
# Namespace
RSSHub appends the name of all route namespace folders in front of the actual route. Route maintainers should think of the namespace as the root.
# Naming Standard
- Use the second-level domain (SLD) as your namespace. You can find more information about URL structure here.
 - Do not create variations of the same namespace. For more information, see this page
 
# Registering a Route
To register a route, the router.js file should export a method that provides a @koa/router object when initializing the route.
# Maintainer List
The maintainer.js file should export an object that provides maintainer information related to the route, including:
- Key: Corresponding path in the 
@koa/routerobject - Value: Array of string, including all maintainers' GitHub ID.
 
To generate a list of maintainers, use the following command: yarn build:maintainer, which will create the list under assets/build/.
Warning
The path in the @koa/router object should be the same as the path in the corresponding documentation before the namespace appended in front of it.
# Radar Rules
All routes are required to include the radar.js file, which includes the corresponding domain name. The minimum requirement for a successful match is for the rule to show up on the corresponding site which requires filling in the title and docs fields.
To generate a complete radar-rules.js file, use the following command: yarn build:radar, which will create the file under assets/build/.
Tips
Remember to remove all build artifacts in assets/build/ before committing.
# Rendering Templates
When rendering custom content with HTML, such as item.description, using art-template (opens new window) for layout is mandatory.
All templates should be placed in the namespace's templates folder with the .art file extension.
# Example
Here's an example taken from the furstar (opens new window) namespace:
<div>
    <img src="{{ avatar }}" />
    {{ if link !== null }}
    <a href="{{ link }}">{{name}}</a>
    {{ else }}
    <a href="#">{{name}}</a>
    {{ /if }}
</div> 2
3
4
5
6
7
const path = require('path');
const { art } = require('@/utils/render');
const renderAuthor = (author) => art(path.join(__dirname, 'templates/author.art'), author);
 2
3
# v1 Route Standard
Warning
The v1 Route Standard is deprecated. All new routes should be following the v2 Route Standard.