Temporary file transfer that deletes itself.
AXIUM is a minimalist web app for temporary file sharing. Upload a file, get a link, share it, and the file is automatically deleted after expiry.
- No accounts
- No permanent storage
- No tracking
- Open source
- Drag & drop file upload
- Direct upload to Amazon S3 (files never touch the server)
- Configurable expiry: 10 min, 1 hour, 2 hours
- Custom shareable links
- Password protection
- One-time download mode
- Download count limits
- Automatic cleanup
- Frontend: Next.js 15, React 19, Tailwind CSS
- Storage: Amazon S3
- Database: In-memory (for demo) / Redis recommended for production
- Design: Neo-Brutalism
- Node.js 20+
- AWS account with S3 access
- Clone the repository:
git clone https://github.com/4shil/axium.git
cd axium- Install dependencies:
npm install- Copy environment variables:
cp .env.example .env- Configure
.envwith your AWS S3 credentials:
AWS_REGION="us-east-1"
AWS_ACCESS_KEY_ID="your_access_key_id"
AWS_SECRET_ACCESS_KEY="your_secret_access_key"
AWS_S3_BUCKET="your-bucket-name"
# AWS_S3_ENDPOINT="(optional, for S3-compatible services)"- Run development server:
npm run dev- Sign in to the AWS Console
- Create a new S3 bucket (private recommended)
- Create an IAM user with S3 read/write permissions for your bucket
- Generate access keys for the IAM user
- Note down: Region, Access Key ID, Secret Access Key, Bucket Name
- Connect your GitHub repository to Render
- Create a new Web Service
- Add environment variables:
AWS_REGIONAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_S3_BUCKETCRON_SECRET(for cleanup endpoint)
- Deploy!
For cleanup, set up a cron job to call /api/cleanup with Authorization: Bearer <CRON_SECRET> every 15 minutes.
| Variable | Description | Default |
|---|---|---|
MAX_FILE_SIZE |
Maximum upload size in bytes | 524288000 (500MB) |
AWS_S3_BUCKET |
Amazon S3 bucket name | axium-files |
CRON_SECRET |
Secret for cleanup endpoint | (none) |
Client (Browser)
│
│ presigned upload URL
▼
Amazon S3 (Object Storage)
│
│ metadata only
▼
AXIUM API (Next.js)
│
▼
In-Memory Store / Redis
Key principle: Files never pass through the backend server. The backend only handles authorization, metadata, and presigned URL generation.
MIT
Built with Neo-Brutalism design principles.