Warning
This release is not fully stable and may subject to major changes in the future.
Neutron is not ready for usage due to uncompleted features.
Requirements
node >= 16
postgresql >= 14
yarn >= 3
Installation / Deployment
git clone https://github.com/AlphaNecron/Void.git --branch=v1
cd Void
yarn install # or npm install
cp config.example.json config.json
nano config.json # edit the config file
yarn prod # to build and start the production server
# or
yarn dev # to start the development server
Docker
git clone https://github.com/AlphaNecron/Void.git --branch=v1
cd Void
cp config.example.json config.json
nano config.json # edit the config file
docker pull alphanecron/void:v1
docker run -p 3000:3000 -v $PWD/config.json:/void/config.json -d alphanecron/void:v1
Docker compose
git clone https://github.com/AlphaNecron/Void.git --branch=v1
cd Void
cp config.example.json config.json
nano config.json # edit the config file
docker-compose up --build -d
nginx
)
Reverse proxy (with server {
listen 443 ssl;
server_name your.domain;
ssl_certificate /path/to/cert;
ssl_certificate_key /path/to/key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
client_max_body_size 100M;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Config schema
{
"void": {
"useHttps": false,
// Whether to enable HTTPS for URLs created returned by API.
"host": "0.0.0.0",
// The host Void should run on.
"port": 3000,
// The port Void should run on.
"secret": "secretmin32characters",
// The secret key used to hash cookies. (*)
"rateLimit": 1200,
// Rate limit for users per hour. (**)
"defaultDomain": "http://localhost:3000",
// The base domain used for multiple purposes.
"databaseUrl": "postgres://postgres:postgres@postgres/postgres",
// The Postgres database URL.
"url": {
"allowVanityUrl": true,
// Whether to allow users to shorten with vanity URLs.
"length": 6
// The maximum length for URLs generated with shortener and uploader.
},
"discordProvider": {
"clientId": "YOUR DISCORD CLIENT ID",
// Discord client id, you can grab one in the Application dashboard.
"clientSecret": "YOUR DISCORD CLIENT SECRET"
// Discord client secret, you can grab one in the Application dashboard as well.
},
"upload": {
"outputDirectory": "./uploads",
// The directory to save uploaded files.
"blacklistedExtensions": [
".zip",
".exe"
]
// Prevent users from uploading files with certain extensions. (**)
}
},
"neutron": {
"enabled": false,
// Whether to enable the Discord bot
"token": "YOUR_DISCORD_BOT_TOKEN",
// Your Discord bot token
"clientId": "YOUR_DISCORD_APP_CLIENT_ID"
// Your Discord bot client id
}
}
(*): If it is empty, a random key will be generated, otherwise, it must be at least 32 characters.
(**) Users with ADMINISTRATION
permission or higher will not be affected by this.
Features
- Configurable
- Fast with eye-catching UI
- Easy to install
- Embed customization
- Custom file viewer for texts, videos, images and audio files
- Multiple URL charsets (
alphanumeric
,emoji
andinvisible
) - Comes with prebuilt Docker images
- Discord integration (Login with Discord)
- Open registration with referral codes
- Web upload with progress
- Dedicated Discord bot, mobile application as well as desktop application (WIP).
and more...
Techstack
- NextJS (Framework)
- ReactJS (Front-end)
- NodeJS (Back-end runtime)
- Mantine (UI library)
- Iron Session (Authentication)
- Prisma (ORM)
- PostgreSQL (Database)
- Yarn (Package manager)
- TypeScript (Programming language)
Credits
- v0 codebase from
diced/zipline
- Logo and favicon from
icons8
Contributors
Default credentials
- Username:
void
- Password:
voiduser