Kimai: Time Tracking Application
Professional time tracking with reporting. Projects, clients, and invoice generation.
Introduction
Kimai is a professional time tracking application designed for freelancers, agencies, and organizations. Built with Symfony and PHP, it provides comprehensive time tracking, project management, client billing, and detailed reporting capabilities. With Kimai, you can track work hours, generate invoices, manage teams, and gain insights into project profitability.
By the end of this guide, you’ll have a production-ready Kimai installation that:
- Tracks time across multiple projects and clients
- Supports unlimited users and teams
- Generates professional invoices and reports
- Provides detailed analytics and profitability insights
- Offers mobile-friendly interface with timer controls
- Includes API access for integrations
- Features customizable rates and billing periods
Prerequisites
Before starting, ensure you have:
- A Linux server with at least 1GB RAM (2GB recommended)
- Docker and Docker Compose installed
- A domain name or subdomain (e.g., time.yourdomain.com)
- Basic understanding of Docker and web servers
- At least 5GB free disk space
- Root or sudo access
Why Use Kimai?
Professional Time Tracking
Kimai offers enterprise-level features:
- Multiple timers running simultaneously
- Start/stop tracking with one click
- Manual time entry and corrections
- Lock completed timesheets
- Approval workflows for team time
- Time rounding rules
- Break time tracking
Project and Client Management
Organize work effectively:
- Unlimited projects and clients
- Project budgets and time limits
- Hierarchical project structure
- Activity-based time tracking
- Color coding and tags
- Project templates
- Archived project management
Invoicing and Billing
Generate professional invoices:
- Multiple rate types (hourly, fixed, daily)
- Client-specific rates
- User-specific rates
- Project-based rates
- Activity-based rates
- Invoice templates
- Export to PDF
- Multi-currency support
Reporting and Analytics
Gain insights into your business:
- Time reports by project, user, client
- Profitability analysis
- Budget tracking
- Export to Excel, PDF, HTML
- Custom report templates
- Dashboard widgets
- Weekly and monthly summaries
Architecture Overview
Our deployment consists of:
- Kimai Application: PHP-based web application
- MariaDB Database: Stores all time tracking data
- Nginx/Apache: Web server (included in container)
- Redis (Optional): Session and cache storage
- Reverse Proxy: For HTTPS and domain routing
Data flow:
- Users access Kimai via web browser or mobile
- Kimai processes requests and stores data in MariaDB
- Time entries, projects, and clients stored in database
- Reports generated on-demand
- API endpoints for integrations
Directory Structure Setup
Create the necessary directory structure:
mkdir -p ~/kimai/{data,database,nginx,backups}
cd ~/kimai Create subdirectories:
mkdir -p data/{public,var,plugins}
mkdir -p database/mysql Docker Compose Configuration
Create a docker-compose.yml file:
version: '3.8'
services:
database:
image: mariadb:10.11
container_name: kimai_db
restart: unless-stopped
environment:
MYSQL_DATABASE: kimai
MYSQL_USER: kimaiuser
MYSQL_PASSWORD: changeme_secure_password
MYSQL_ROOT_PASSWORD: changeme_root_password
volumes:
- ./database/mysql:/var/lib/mysql
networks:
- kimai_net
command: --default-storage-engine=innodb --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 30s
timeout: 10s
retries: 3
kimai:
image: kimai/kimai2:apache
container_name: kimai
restart: unless-stopped
depends_on:
- database
environment:
DATABASE_URL: mysql://kimaiuser:changeme_secure_password@database/kimai?charset=utf8mb4&serverVersion=10.11.0-MariaDB
TRUSTED_HOSTS: localhost,127.0.0.1,time.yourdomain.com
APP_ENV: prod
APP_SECRET: change_this_to_something_unique_and_secret
MAILER_FROM: [email protected]
MAILER_URL: smtp://smtp.gmail.com:587?encryption=tls&auth_mode=login&[email protected]&password=your-app-password
ADMINMAIL: [email protected]
ADMINPASS: changeme_admin_password
volumes:
- ./data/var:/opt/kimai/var
- ./data/public:/opt/kimai/public
- ./data/plugins:/opt/kimai/var/plugins
ports:
- "8001:8001"
networks:
- kimai_net
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:8001/health"]
interval: 30s
timeout: 10s
retries: 3
networks:
kimai_net:
driver: bridge Important Configuration Notes:
Change all passwords to secure values:
# Generate secure passwords openssl rand -base64 32Generate APP_SECRET:
openssl rand -hex 32Update
TRUSTED_HOSTSwith your actual domainConfigure MAILER_URL for email notifications (optional)
Set strong ADMINPASS for initial admin account
Environment Configuration
Create a .env file for easier configuration:
# Database Configuration
MYSQL_DATABASE=kimai
MYSQL_USER=kimaiuser
MYSQL_PASSWORD=your_secure_db_password
MYSQL_ROOT_PASSWORD=your_secure_root_password
# Kimai Configuration
KIMAI_DOMAIN=time.yourdomain.com
APP_SECRET=your_generated_app_secret
[email protected]
ADMIN_PASSWORD=your_secure_admin_password
# Email Configuration
[email protected]
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
[email protected]
SMTP_PASSWORD=your-app-password Starting Kimai
Start all services:
docker-compose up -d Wait for containers to be healthy (may take 1-2 minutes):
docker-compose ps Check logs:
docker-compose logs -f kimai Watch for:
- “Database migration completed”
- “Admin user created”
- “Apache started”
Initial Setup and Configuration
Access Kimai
Navigate to http://YOUR-SERVER-IP:8001 or http://time.yourdomain.com:8001
You should see the Kimai login page.
First Login
Login with default credentials:
- Username: [email protected] (from ADMINMAIL)
- Password: The password you set in ADMINPASS
Change Admin Password
- Click your username (top right) → Profile
- Edit → Password tab
- Enter current password
- Enter new strong password (min 8 chars)
- Save changes
Configure System Settings
Navigate to System → Settings:
General Settings:
- Application Title: “Your Company Time Tracking”
- Default Currency: USD (or your currency)
- Default Country: Your country
- Default Language: English
Time Tracking Settings:
- Default Begin Time: 09:00 (or your typical start)
- Rounding: Enable if needed (e.g., round to 15-minute intervals)
- Allow future times: Disable for accuracy
- Time tracking mode: Duration (recommended for most users)
Calendar Settings:
- First day of week: Monday (or Sunday)
- Working days: Monday-Friday
- Business hours: 09:00-17:00
Configure Email Settings
System → Settings → Email:
SMTP Configuration:
- From Address: [email protected]
- From Name: Kimai Time Tracker
- Test by sending a test email
Setting Up Reverse Proxy with Caddy
Create a Caddyfile for HTTPS access:
mkdir -p ~/kimai/caddy Create caddy/Caddyfile:
time.yourdomain.com {
encode gzip
reverse_proxy kimai:8001 {
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
}
# Security headers
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains"
X-Content-Type-Options "nosniff"
X-Frame-Options "SAMEORIGIN"
X-XSS-Protection "1; mode=block"
Referrer-Policy "strict-origin-when-cross-origin"
}
log {
output file /data/access.log
format json
}
} Add Caddy to docker-compose.yml:
caddy:
image: caddy:latest
container_name: kimai_caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./caddy/Caddyfile:/etc/caddy/Caddyfile:ro
- ./caddy/config:/config
- ./caddy/data:/data
networks:
- kimai_net
depends_on:
- kimai Restart services:
docker-compose up -d Access Kimai at https://time.yourdomain.com
Client Management
Adding Clients
Navigate to Clients → Create Client:
Client Details:
- Name: Client Company Name
- Number: Client ID (e.g., CL-001)
- Address: Full address
- Country: Client country
- Currency: Billing currency
- Phone: Contact number
- Email: Billing email
- Homepage: Client website
- Time budget: Monthly hours limit (optional)
- Budget: Monthly budget amount (optional)
- Color: Visual identifier
Client Settings:
- Visible: Yes (active client)
- Billable: Yes (for invoicing)
- Comment: Internal notes
Client Organization
Group clients by:
- Industry type
- Project size
- Billing frequency
- Geographic location
Use color coding for quick identification:
- Green: Active, on-budget
- Yellow: Approaching budget limit
- Red: Over budget or past due
Project Setup
Creating Projects
Navigate to Projects → Create Project:
Project Basics:
- Name: Project name
- Customer: Select client
- Project Number: Unique ID (e.g., PRJ-2025-001)
- Order Number: Client’s PO number
- Color: Visual identifier
Project Details:
- Project Start: Start date
- Project End: Deadline (optional)
- Comment: Project description
- Time budget: Total hours allocated
- Budget: Total cost budget
- Order date: When project was approved
Project Settings:
- Visible: Yes (active)
- Billable: Yes (for invoicing)
- Global activities: Allow or restrict
- Time budget type: Total, monthly, yearly
Project Templates
Create templates for recurring projects:
- Create a project with standard activities
- Set default rates
- Configure budget templates
- Use as template for new projects
Project Activities
Add activities to projects:
Navigate to Activities → Create Activity:
Activity Types:
- Development
- Design
- Meeting
- Research
- Documentation
- Testing
- Support
- Administration
Activity Configuration:
- Name: Activity name
- Comment: Description
- Color: Visual identifier
- Visible: Yes
- Billable: Yes/No
- Fixed rate: Override project rate (optional)
- Budget: Activity-specific budget
Time Tracking
Start Tracking Time
Method 1: Quick Timer:
- Dashboard → Start button
- Select Project
- Select Activity
- Timer starts automatically
- Work on task
- Click Stop when done
Method 2: Manual Entry:
- Timesheets → Create Entry
- Select Date
- Select Project and Activity
- Enter Start Time
- Enter End Time (or Duration)
- Add Description
- Save
Method 3: Restart Previous:
- Timesheets → Recent entries
- Click Restart icon
- Timer starts with same project/activity
Time Entry Details
Add detailed information:
Required Fields:
- Project
- Activity
- Date
- Duration or Start/End time
Optional Fields:
- Description: What you worked on
- Tags: Categorize entries
- Billable: Override project setting
- Hourly rate: Override default rate
- Fixed rate: Use fixed amount instead
Multiple Timers
Run multiple timers simultaneously:
- Start timer for Project A
- Switch to Project B → Start new timer
- Project A continues in background
- Stop Project B timer
- Return to Project A timer
View all active timers in dashboard widget.
Editing Time Entries
Modify existing entries:
- Timesheets → Find entry
- Click Edit icon
- Modify fields
- Save changes
Locked Entries:
- Cannot be edited without unlocking
- Admins can unlock via System → Timesheets
Rate Configuration
Hourly Rates
Set up billing rates at multiple levels:
User-Level Rates:
- Users → Edit User → Rates
- Add hourly rate
- Optional: Date range for rate changes
Project-Level Rates:
- Projects → Edit Project → Rates
- Add hourly rate (overrides user rate)
Activity-Level Rates:
- Activities → Edit Activity → Fixed Rate
- Set specific rate for this activity
Client-Level Rates:
- Clients → Edit Client → Rates
- Set default rate for all projects
Rate Priority:
- Activity fixed rate (highest)
- Activity hourly rate
- Project rate
- Customer rate
- User rate (lowest)
Fixed Rates
Use fixed rates for:
- Flat-fee tasks
- Package deals
- Specific deliverables
Configure in Activity settings.
Rate Changes
Handle rate increases:
- Edit existing rate → Set end date
- Create new rate → Set start date
- Historical entries maintain original rates
- New entries use current rate
Team Management
Adding Team Members
Navigate to Users → Create User:
User Details:
- Username: unique login
- Email: for notifications
- Alias: Display name
- Title: Job title
- Password: Initial password
- Enabled: Yes
User Roles:
- ROLE_SUPER_ADMIN: Full system access
- ROLE_ADMIN: Manage users and settings
- ROLE_TEAMLEAD: Approve team timesheets
- ROLE_USER: Regular time tracking
User Settings:
- Language: Interface language
- Timezone: User’s timezone
- Hourly rate: Default billing rate
- Color: Visual identifier
Team Permissions
Configure access control:
Project Permissions:
- Assign users to specific projects
- Set visibility per project
- Control who can see project data
Team Visibility:
- Users see only their projects
- Team leads see their team
- Admins see everything
Team Workflows
Set up approval workflows:
- Users submit timesheets
- Team lead reviews entries
- Approve or request changes
- Lock approved timesheets
- Generate invoices from approved time
Reporting and Analytics
Time Reports
Generate comprehensive reports:
Navigate to Reports → Time Reports:
Report Filters:
- Date range: Custom, This week, This month, Last month
- Users: All or specific users
- Clients: All or specific clients
- Projects: All or specific projects
- Activities: Filter by activity type
- Tags: Filter by tags
- Billable: Billable, Non-billable, or All
Report Views:
- Summary: Total hours and revenue
- By user: Time per team member
- By customer: Time per client
- By project: Time per project
- By activity: Time per activity type
- Daily: Daily breakdown
- Monthly: Monthly aggregates
Export Formats:
- Excel (.xlsx)
- PDF document
- CSV data
- HTML page
- JSON data
Budget Tracking
Monitor project budgets:
Dashboard → Budget widgets:
Budget Types:
- Time budget: Hours allocated vs. used
- Money budget: Budget vs. actual cost
- Customer budget: Client spending limits
Budget Alerts:
- Yellow: 75% budget consumed
- Red: 90% budget consumed
- Alert: Budget exceeded
Budget Reports:
- Reports → Budget Report
- Select date range
- Filter by client/project
- View utilization percentages
- Identify over-budget projects
Profitability Analysis
Analyze project profitability:
Calculate profit margins:
- Revenue: Billable hours × rates
- Costs: Actual hours × internal costs
- Profit: Revenue - Costs
- Margin: (Profit / Revenue) × 100
Profitability Report:
- Configure internal cost rates
- Set billing rates
- Generate profitability report
- Identify most/least profitable projects
- Adjust rates or scope accordingly
Dashboard Widgets
Customize your dashboard:
Available widgets:
- Active timers
- Recent activities
- Working time
- Budget stats
- Project stats
- User stats
- Calendar
- My team
Configure:
- Dashboard → Add Widget
- Select widget type
- Configure filters
- Arrange layout
Invoicing
Invoice Templates
Configure invoice templates:
System → Invoice Templates:
Template Settings:
- Template name
- Number format: INV-YYYY-MM-001
- Company details
- Payment terms: Net 30, Net 15, Due on receipt
- Tax settings
- Footer text
Invoice Content:
- Company logo
- Invoice number
- Invoice date
- Due date
- Client details
- Line items (time entries)
- Subtotal
- Tax amount
- Total amount
- Payment instructions
Creating Invoices
Generate invoices from time entries:
Navigate to Invoices → Create Invoice:
- Select date range
- Select client
- Select projects (optional)
- Select template
- Preview invoice
- Adjust line items if needed
- Generate PDF
- Mark as sent
- Track payment status
Invoice Statuses:
- New: Just created
- Pending: Sent to client
- Paid: Payment received
- Canceled: Voided invoice
Invoice Management
Track and manage invoices:
Invoice List:
- Filter by status, client, date
- Search by invoice number
- Sort by due date
- View aging report
Payment Tracking:
- Receive payment
- Open invoice
- Mark as paid
- Record payment date
- Add payment notes
Recurring Invoices
Set up automatic billing:
- Create invoice template
- Set recurrence: Weekly, Monthly, Quarterly, Yearly
- Define start and end dates
- System generates invoices automatically
- Review and send
API Integration
Enable API Access
Navigate to User Profile → API:
Generate API Token:
- Profile → API
- Click “Generate API Password”
- Copy token securely
- Use for authentication
API Token Security:
- Treat like a password
- Store securely
- Rotate regularly
- Revoke if compromised
API Endpoints
Kimai provides REST API for:
Time Entries:
- GET /api/timesheets - List entries
- POST /api/timesheets - Create entry
- PATCH /api/timesheets/ID - Update entry
- DELETE /api/timesheets/ID - Delete entry
Projects:
- GET /api/projects - List projects
- POST /api/projects - Create project
- GET /api/projects/ID - Get details
Customers:
- GET /api/customers - List clients
- POST /api/customers - Create client
Activities:
- GET /api/activities - List activities
API Authentication:
curl -X GET "https://time.yourdomain.com/api/timesheets" -H "X-AUTH-USER: [email protected]" -H "X-AUTH-TOKEN: your_api_token" Integration Examples
Start Timer via API:
curl -X POST "https://time.yourdomain.com/api/timesheets" -H "X-AUTH-USER: [email protected]" -H "X-AUTH-TOKEN: your_api_token" -H "Content-Type: application/json" -d '{
"project": 1,
"activity": 2,
"begin": "2025-01-15T09:00:00"
}' Stop Timer:
curl -X PATCH "https://time.yourdomain.com/api/timesheets/123" -H "X-AUTH-USER: [email protected]" -H "X-AUTH-TOKEN: your_api_token" -H "Content-Type: application/json" -d '{
"end": "2025-01-15T17:00:00"
}' Get Today’s Entries:
curl -X GET "https://time.yourdomain.com/api/timesheets?begin=2025-01-15&end=2025-01-15" -H "X-AUTH-USER: [email protected]" -H "X-AUTH-TOKEN: your_api_token" Backup and Restore
Backup Strategy
Create automated backups:
Create scripts/backup-kimai.sh:
#!/bin/bash
BACKUP_DIR="./backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="kimai_backup_$TIMESTAMP"
mkdir -p "$BACKUP_DIR"
echo "Backing up Kimai database..."
docker exec kimai_db mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" kimai > "$BACKUP_DIR/$BACKUP_NAME.sql"
echo "Backing up Kimai data..."
tar -czf "$BACKUP_DIR/$BACKUP_NAME.tar.gz" -C ./data .
echo "Backing up configuration..."
cp docker-compose.yml "$BACKUP_DIR/docker-compose_$TIMESTAMP.yml"
# Keep only last 30 backups
ls -t "$BACKUP_DIR"/kimai_backup_*.sql | tail -n +31 | xargs -r rm
ls -t "$BACKUP_DIR"/kimai_backup_*.tar.gz | tail -n +31 | xargs -r rm
echo "Backup completed: $BACKUP_DIR/$BACKUP_NAME.*" Make executable:
chmod +x scripts/backup-kimai.sh Automated Backups
Schedule with cron:
crontab -e Add daily backup at 2 AM:
0 2 * * * cd /path/to/kimai && ./scripts/backup-kimai.sh >> ./backups/backup.log 2>&1 Restore Procedure
Create scripts/restore-kimai.sh:
#!/bin/bash
if [ -z "$1" ]; then
echo "Usage: $0 backup_name (without extension)"
exit 1
fi
BACKUP_NAME="$1"
echo "Stopping Kimai..."
docker-compose down
echo "Restoring database..."
docker-compose up -d database
sleep 10
cat "./backups/$BACKUP_NAME.sql" | docker exec -i kimai_db mysql -u root -p"$MYSQL_ROOT_PASSWORD" kimai
echo "Restoring data files..."
rm -rf ./data/*
tar -xzf "./backups/$BACKUP_NAME.tar.gz" -C ./data
echo "Starting Kimai..."
docker-compose up -d
echo "Restore completed!" Make executable:
chmod +x scripts/restore-kimai.sh Troubleshooting
Common Issues
Issue: Cannot access Kimai web interface
# Check container status
docker-compose ps
# Check logs
docker-compose logs kimai
docker-compose logs database
# Verify port is accessible
curl http://localhost:8001/health
# Check database connection
docker exec kimai_db mysql -u root -p -e "SHOW DATABASES;" Issue: Database connection errors
- Verify DATABASE_URL in docker-compose.yml
- Ensure database container is healthy
- Check database credentials
- Wait for database initialization (1-2 minutes)
# Test database connectivity
docker exec kimai php bin/console doctrine:query:sql "SELECT 1" Issue: Timer not starting
- Clear browser cache
- Check JavaScript console for errors
- Verify user has permissions
- Ensure project and activity are active
# Check Kimai logs
docker-compose logs kimai | grep -i error Issue: Email not sending
- Verify MAILER_URL in environment
- Test SMTP credentials
- Check spam folder
- Review email logs
# Test email configuration
docker exec kimai php bin/console swiftmailer:email:send [email protected] Database Maintenance
Check database size:
docker exec kimai_db mysql -u root -p -e "SELECT table_schema AS 'Database', ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)' FROM information_schema.tables WHERE table_schema='kimai' GROUP BY table_schema;" Optimize database:
docker exec kimai_db mysqlcheck -u root -p --optimize --all-databases Clear cache:
docker exec kimai php bin/console cache:clear --env=prod
docker exec kimai php bin/console cache:warmup --env=prod Performance Optimization
Enable opcache: Already enabled in Docker image.
Database indexing: Automatically handled by Kimai migrations.
Increase PHP memory: Add to docker-compose.yml under kimai environment:
PHP_MEMORY_LIMIT: 256M Logs and Debugging
View application logs:
docker exec kimai tail -f /opt/kimai/var/log/prod.log View Apache logs:
docker-compose logs -f kimai View database logs:
docker-compose logs -f database Enable debug mode (not recommended for production):
APP_ENV: dev Security Best Practices
User Security
- Enforce strong passwords
- Enable two-factor authentication (if plugin available)
- Regular password changes
- Limit failed login attempts
- Review user access regularly
Application Security
- Keep Kimai updated
- Use HTTPS only
- Disable public registration
- Implement IP whitelisting if needed
- Regular security audits
Database Security
- Use strong database passwords
- Disable remote database access
- Regular database backups
- Encrypt backups
- Test restore procedures
Network Security
Configure firewall:
# Allow only HTTPS
sudo ufw allow 443/tcp
sudo ufw allow 80/tcp
# Block direct access to application port
sudo ufw deny 8001/tcp
# Enable firewall
sudo ufw enable Plugins and Extensions
Available Plugins
Kimai supports various plugins:
Popular Plugins:
- Expenses: Track project expenses
- Budgets: Enhanced budget management
- Custom CSS: Customize appearance
- Audit Trail: Track all changes
- Invoice: Extended invoicing features
Installing Plugins
- Download plugin to
data/plugins/directory - Extract if necessary
- Clear cache:
docker exec kimai php bin/console cache:clear docker exec kimai php bin/console kimai:reload --env=prod - Navigate to System → Plugins
- Activate plugin
Custom Branding
Customize Kimai appearance:
- Add logo: Place in
data/public/images/ - Configure in System → Settings → Branding
- Upload logo file
- Set company colors
- Custom CSS for advanced styling
Mobile Access
Mobile Browser
Kimai is mobile-responsive:
- Access via mobile browser
- Full timer functionality
- Quick time entry
- View reports
- Mobile-optimized interface
Progressive Web App
Install as PWA:
iOS:
- Open in Safari
- Tap Share button
- Add to Home Screen
- Launch as app
Android:
- Open in Chrome
- Tap menu
- Add to Home Screen
- Launch as app
Advanced Configuration
Custom Fields
Add custom fields to time entries:
System → Custom Fields:
- Create custom field
- Field name: e.g., “Ticket Number”
- Field type: Text, Number, Date, etc.
- Entity: Timesheet
- Visible: Yes
- Required: Optional
- Save
Users can now add ticket numbers to time entries.
Time Rounding
Configure time rounding rules:
System → Settings → Time Rounding:
Options:
- No rounding
- Round to 5 minutes
- Round to 15 minutes
- Round to 30 minutes
- Round to 1 hour
Rounding Modes:
- Round up (begin down, end up)
- Round down (begin down, end down)
- Round nearest
Lockdown Times
Prevent editing of old time entries:
System → Settings → Lockdown:
- Enable lockdown
- Set lockdown period: e.g., 7 days
- Entries older than 7 days cannot be edited
- Exceptions for admins
Export Formats
Customize export templates:
System → Export:
- Create custom export template
- Define columns
- Set formatting
- Save template
- Use in reports
Conclusion
You now have a fully functional time tracking system with:
- Professional time tracking capabilities
- Comprehensive project and client management
- Team collaboration features
- Invoicing and billing automation
- Detailed reporting and analytics
- API access for integrations
- Secure, self-hosted solution
Kimai provides all the tools needed for effective time management, whether you’re a freelancer, small team, or growing agency.
Next Steps
Consider these enhancements:
- Install additional plugins for extended functionality
- Set up integrations with project management tools
- Configure automated reports via email
- Implement single sign-on with LDAP/OAuth
- Set up high availability with load balancing
- Configure monitoring with Prometheus
- Customize invoice templates with company branding
- Explore mobile app alternatives for offline tracking
For support and updates, visit:
- Kimai Website: https://www.kimai.org
- Kimai Documentation: https://www.kimai.org/documentation/
- Kimai GitHub: https://github.com/kimai/kimai
- Community Forum: https://github.com/kimai/kimai/discussions