What Is Snipe-IT? Why You Need It
Snipe-IT is a free, open-source IT Asset Management (ITAM) system built on Laravel 12 (PHP) and licensed under AGPL-3.0. With over 10,000 stars on GitHub, it's the most popular open-source asset management tool in the world.
💡 The core problem it solves: Your team has 10 laptops, 5 monitors, and 20 software licenses — who's using which device? Which license is about to expire? When should you write something off as depreciated? Managing this in Excel will turn into a mess sooner or later. That's exactly why Snipe-IT exists.
Feature Overview
| Feature | Description |
|---|---|
| 📦 Hardware Asset Management | Full lifecycle tracking for laptops, servers, phones, monitors, and more |
| 🔑 License Management | Track purchase dates, expiration alerts, and seat counts for software licenses |
| 🖱️ Accessory Management | Track inventory of consumables like mice, keyboards, and cables |
| 📋 Check-Out / Check-In | Check out assets to employees, record condition and notes on check-in |
| 📊 Depreciation Calculation | Automatically calculate asset depreciation by year or month |
| 🔌 REST API | Full JSON API — integrate with Jenkins, Ansible, Jamf, and more |
| 🌐 Multi-Language | Supports 40+ languages (including Chinese) |
| 📱 Mobile-Friendly | Responsive web UI — manage assets from your phone too |
Snipe-IT vs. Commercial Alternatives
| Comparison | Snipe-IT (Self-Hosted) | Snipe-IT Cloud | JAMF Pro | Freshservice |
|---|---|---|---|---|
| Cost | Completely free | From $399/year | ~$100/device/year | ~$49/user/month |
| Data Sovereignty | Your server, your control | Cloud-hosted | Cloud-hosted | Cloud-hosted |
| Customization | Fully customizable | Limited | High | Medium |
| Deployment Effort | One-click Docker deploy | No deployment needed | Requires MDM setup | SaaS, ready to go |
| Ideal Scale | 10–1,000+ devices | 10–500 devices | 50+ Apple devices | 50+ person teams |
One-Click Docker Deployment
Snipe-IT provides an official Docker image. With Docker Compose, you can have it running in under 5 minutes.
Prerequisites
- Docker 20+ and Docker Compose 2+
- At least 2 GB RAM (4 GB recommended)
- 10 GB of free disk space
Step 1: Create the Project Directory
mkdir -p ~/snipe-it && cd ~/snipe-it
Step 2: Write the Docker Compose File
Create docker-compose.yml:
version: '3.8'
services:
snipeit-db:
image: mysql:8.0
container_name: snipeit-db
environment:
MYSQL_ROOT_PASSWORD: rootpassword123
MYSQL_DATABASE: snipeit
MYSQL_USER: snipeit
MYSQL_PASSWORD: snipeit_password_456
volumes:
- db-data:/var/lib/mysql
restart: always
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
snipeit:
image: snipe/snipe-it:latest
container_name: snipe-it
ports:
- "8080:80"
environment:
# Database config
DB_HOST: snipeit-db
DB_DATABASE: snipeit
DB_USERNAME: snipeit
DB_PASSWORD: snipeit_password_456
# App config
APP_KEY: base64:CHANGE_ME_GENERATE_KEY
APP_ENV: production
APP_DEBUG: false
APP_URL: http://localhost:8080
APP_TIMEZONE: Asia/Shanghai
APP_LOCALE: en
# Email config (optional)
MAIL_PORT_587_TCP_ADDR: smtp.example.com
MAIL_PORT_587_TCP_PORT: 587
MAIL_ENV_FROM_ADDR: admin@yourcompany.com
MAIL_ENV_FROM_NAME: Snipe-IT Admin
MAIL_ENV_ENCRYPTION: tls
MAIL_ENV_USERNAME: admin@yourcompany.com
MAIL_ENV_PASSWORD: your-email-password
depends_on:
snipeit-db:
condition: service_healthy
volumes:
- snipeit-images:/var/lib/snipeit
restart: always
volumes:
db-data:
snipeit-images:
⚠️ Important: Don't just leave
APP_KEYas-is — you need to generate it first.
Step 3: Generate the APP_KEY
# Spin up a temporary container to generate the key
docker run --rm snipe/snipe-it:latest php artisan key:generate --show
# Output looks like: base64:abcdef1234567890...
# Replace the APP_KEY value in docker-compose.yml with this output
Step 4: Start the Services
docker compose up -d
# Check the logs to confirm everything started
docker compose logs -f snipeit
Step 5: Access the Web UI
Open http://localhost:8080 in your browser. You'll see the setup wizard:
- Environment check (everything should be green ✓)
- Create an admin account (username, email, password)
- Done! You're in the dashboard.
🔒 For production: Set up Nginx as a reverse proxy with a Let's Encrypt HTTPS cert — change
http://localhost:8080to something likehttps://snipeit.yourcompany.com.
Getting Started: 5 Steps to Managing Assets
Once installed, follow these steps to enter your first batch of assets.
Step 1: Set Up Company Info & Branding
Go to Admin → Settings → Branding. Upload your company logo, set the site name, and configure the default timezone.
Step 2: Create Asset Categories
Snipe-IT organizes assets by category. Go to Admin → Categories and create:
| Category Name | Type | Use Case |
|---|---|---|
| Laptops | Asset | MacBooks, ThinkPads, etc. |
| Monitors | Asset | External displays |
| Software Licenses | License | Office, Adobe, etc. |
| Accessories | Accessory | Mice, keyboards, cables |
| Consumables | Consumable | Printer paper, ink cartridges |
Step 3: Add a Hardware Asset
Go to Assets → New Asset and fill in:
Asset Name: MacBook Pro 14" M3
Asset Tag: MBP-2026-001 ← This is the unique identifier; use a consistent naming scheme
Category: Laptops
Status: Ready to Deploy
Location: HQ Office
Purchase Date: 2026-03-15
Purchase Cost: $1,999
Supplier: Apple Store
Warranty Expires: 2029-03-15
Model: MacBook Pro 14-inch M3 Pro
Serial Number: C02XXXXX
Step 4: Assign It to an Employee (Check-Out)
On the asset detail page, click Check Out:
Assign to: User (must be created in People first)
Expected Check-In Date: 2027-03-15 (optional)
Note: For the new R&D project
Send notification email: ✓
The employee confirms receipt via email, and the asset status changes to Deployed.
Step 5: Bulk Import
Got a spreadsheet? Snipe-IT supports CSV bulk import:
- Admin → Import → Download CSV Template
- Fill in your asset data using the template
- Upload the CSV file
- Preview and confirm field mappings
- Click Import
Advanced Features in Action
1. Automatic Asset Depreciation
Snipe-IT supports multiple depreciation models so you always know the current value of your assets.
Go to Admin → Depreciations to create a depreciation rule:
Name: 3-Year Straight-Line (Computers)
Months: 36 (3 years)
Depreciation Type: Straight-Line
Then associate this rule with your assets. The system will auto-calculate:
| Date | Original Value | Depreciated Value | Note |
|---|---|---|---|
| 2026-03 | $1,999 | $1,999 | Just purchased |
| 2027-03 | $1,999 | $1,333 | 1 year in |
| 2028-03 | $1,999 | $666 | 2 years in |
| 2029-03 | $1,999 | $0 | Fully depreciated |
2. License Management & Expiration Alerts
Software license expired and nobody noticed? Snipe-IT keeps watch for you.
Add a license:
Name: Microsoft 365 Business
License Key: XXXX-XXXX-XXXX-XXXX
Total Seats: 25
Assigned: 18
Purchase Date: 2026-01-01
Expiration Date: 2027-01-01
Supplier: Microsoft
Purchase Cost: $149/user/year
When a license is about to expire, the system will: - 📧 Send an email alert to admins - 🔴 Show a red warning on the dashboard - 📊 Highlight it in reports
3. Custom Fields — Track Whatever You Need
Snipe-IT lets you add custom fields to any category:
# Via Admin → Custom Fields
Field Name Type Format
CPU Model Text
RAM Size Text
Operating System Dropdown macOS, Windows, Linux
Department Dropdown Engineering, Product, Design
LAN IP Address Text ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
4. Reports & Auditing
Snipe-IT comes with several built-in reports:
- Asset Inventory Report — Full list of all assets, filterable by status/location/category
- Depreciation Report — Asset depreciation over a given time period
- Unassigned Assets Report — Idle assets at a glance, so nothing sits unused
- License Expiration Report — Software licenses about to expire
- Audit Report — Asset check history: who confirmed what, and when
5. API Integration in Practice
Snipe-IT provides a full REST API you can call with curl or any HTTP client.
Get an API Token: Go to Profile → Generate API Token
Query all assets:
curl -X GET "https://snipeit.yourcompany.com/api/v1/hardware" \
-H "Accept: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Create a new asset:
curl -X POST "https://snipeit.yourcompany.com/api/v1/hardware" \
-H "Accept: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Dell XPS 15",
"asset_tag": "DELL-2026-001",
"model_id": 3,
"status_id": 1,
"rtd_location_id": 1,
"purchase_date": "2026-07-30",
"purchase_cost": "9999.00",
"serial": "SN123456789"
}'
Integrate into your CI/CD pipeline — for example, auto-create an asset record when onboarding a new employee:
#!/usr/bin/env python3
"""Auto-create IT asset records for new employee onboarding"""
import requests
SNIPE_URL = "https://snipeit.yourcompany.com/api/v1"
API_TOKEN = "YOUR_API_TOKEN"
def onboard_employee(name, email, asset_tag, model_id=1):
"""Assign a laptop to a new employee"""
headers = {
"Accept": "application/json",
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json",
}
# 1. Create user
user = requests.post(f"{SNIPE_URL}/users", headers=headers, json={
"first_name": name.split()[0],
"last_name": name.split()[-1],
"username": email.split("@")[0],
"email": email,
})
if user.status_code != 200:
print(f"Failed to create user: {user.text}")
return
user_id = user.json()["payload"]["id"]
# 2. Check out asset
checkout = requests.post(
f"{SNIPE_URL}/hardware/{asset_tag}/checkout",
headers=headers,
json={"assigned_user": user_id}
)
if checkout.status_code == 200:
print(f"✅ {name} has been assigned asset {asset_tag}")
else:
print(f"❌ Asset assignment failed: {checkout.text}")
# Usage example
onboard_employee("John Doe", "john@company.com", "MBP-2026-015")
Day-to-Day Operations
Back Up the Database
# Export the database
docker exec snipeit-db mysqldump -u snipeit -psnipeit_password_456 snipeit > \
~/backup/snipeit-$(date +%Y%m%d).sql
# Export the persistent data volume
tar czf ~/backup/snipeit-images-$(date +%Y%m%d).tar.gz \
/var/lib/docker/volumes/snipe-it_snipeit-images/
Upgrade Snipe-IT
cd ~/snipe-it
# Pull the latest image
docker compose pull snipeit
# Recreate the container
docker compose up -d snipeit
# Check the version
docker exec snipe-it php artisan snipeit:version
Troubleshooting Common Issues
| Problem | Solution |
|---|---|
| Page 500 error | Check docker compose logs snipeit for Laravel error logs |
| Database connection failed | Confirm DB_HOST is snipeit-db (the container name) and the DB is ready |
| Emails not sending | Check SMTP config; make sure the firewall isn't blocking port 587 |
| APP_KEY error | Regenerate the key; make sure the format is base64:xxxx |
| File upload fails | Check the mount permissions on the snipeit-images volume |
Why Snipe-IT Is Worth the Long-Term Investment
Snipe-IT has been actively developed for 13 years since its open-source release in 2013, with over 500 contributors on GitHub. Compared to spreadsheets or commercial SaaS solutions, here's what makes it stand out:
- Zero licensing costs — Spin up your own server and go; no per-user limits
- Full data sovereignty — All your asset data stays on your own infrastructure
- Active community — The Discord community and forums are full of users sharing tips and tricks
- Rich integration ecosystem — Official and third-party integration scripts for JAMF, Kandji, Jira, Google Workspace, and more
- Highly scalable — Handles everything from 10 devices to 10,000
If you're still managing company assets in Excel, or you think commercial ITAM tools are too expensive, Snipe-IT is the most practical choice.
- 🌐 Website: snipeitapp.com
- 📦 GitHub: grokability/snipe-it
- 📖 Docs: snipe-it.readme.io
- 💬 Community: Discord
- 🐳 Docker Hub: snipe/snipe-it