Vito is a secure, self-hosted secret sharing application built with Laravel. It allows users to share sensitive information like passwords, API keys, and confidential text through encrypted, single-use links that automatically expire.

Vito includes a production-ready Docker setup using the pre-built image.
Download or copy/paste the production compose file
wget https://raw.githubusercontent.com/GlobusGroup/vito/main/docker-compose.prod.yml -O docker-compose.yml
services:
app:
image: globusgroup/vito:latest
restart: unless-stopped
volumes:
- ./storage:/var/www/html/storage
ports:
- "9998:80"
Create storage directory
mkdir -p storage
Deploy with Docker Compose
docker compose up -d
Configure your reverse proxy
The application will be available on port 9998. Important: Vito MUST be run behind a reverse proxy that provides HTTPS support (such as Nginx, Caddy, or Traefik).
Example Caddy configuration (Caddyfile):
your-domain.com {
reverse_proxy localhost:9998
}
Caddy automatically handles HTTPS certificates via Let's Encrypt, making it the simplest option for deployment.
Clone the repository
git clone [email protected]:GlobusGroup/vito.git
cd vito
Start the development environment
docker compose up -d
Access the application
The Docker development setup includes:
Clone the repository
git clone [email protected]:GlobusGroup/vito.git
cd vito
Install PHP dependencies
composer install
Install Node.js dependencies
npm install
Set up environment
cp .env.example .env
php artisan key:generate
Set up database
touch database/database.sqlite
php artisan migrate
Build frontend assets
npm run build
Start the development server
php artisan serve
Or use the convenient development script that starts all services:
composer run dev
This starts:
Access the application
For traditional server deployment:
Clone and set up the application
git clone [email protected]:GlobusGroup/vito.git
cd vito
composer install --no-dev --optimize-autoloader
Configure environment
cp .env.example .env
# Edit .env with your production settings
php artisan key:generate
Set up database and permissions
php artisan migrate --force
chown -R www-data:www-data storage bootstrap/cache
chmod -R 775 storage bootstrap/cache
Key configuration options in .env:
APP_NAME=Vito
APP_ENV=production
APP_DEBUG=false
APP_URL=https://your-domain.com
# Secret lifetime in minutes (default: 60)
SECRETS_LIFETIME_IN_MINUTES=60
# Database configuration
DB_CONNECTION=sqlite
DB_DATABASE=/path/to/database.sqlite
# For MySQL/PostgreSQL
# DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=vito
# DB_USERNAME=vito
# DB_PASSWORD=password
APP_DEBUG=false in productionAPP_KEYSECRETS_LIFETIME_IN_MINUTES for highly sensitive environmentsphp artisan test
./vendor/bin/pint
Vito provides a REST API for programmatic secret creation.
Endpoint: POST /api/v1/secrets
Headers:
Content-Type: application/jsonAccept: application/jsonRequest Body:
{
"content": "Your secret content here",
"password": "optional_password",
"expires_in_minutes": 120
}
Parameters:
content (required): The secret content to encrypt (max 200,000 characters)password (optional): Additional password protection (max 100 characters)expires_in_minutes (optional): Custom expiry time in minutes (1-10080, default: 60)Response:
{
"success": true,
"data": {
"share_url": "https://your-domain.com/secrets/show?d=encrypted_data",
"expires_at": "2025-06-02T12:00:00.000000Z",
"expires_on": "02/06/2025 12:00",
"expires_in_minutes": 120,
"requires_password": true
}
}
Example:
curl -X POST https://your-domain.com/api/v1/secrets \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"content": "My secret API key: sk-1234567890",
"password": "mypassword",
"expires_in_minutes": 30
}'
Rate Limiting: 60 requests per minute per IP address.
This project is licensed under the MIT License.
For issues, questions, or contributions, please visit the GitHub repository.
Content type
Image
Digest
sha256:ed8cb9155…
Size
119.2 MB
Last updated
about 1 year ago
docker pull globusgroup/vito