Track your coding time and productivity across projects with ShellTime. Automatic language detection, project analytics, and detailed activity insights.
- Automatic Time Tracking - Tracks your coding activity in the background without interrupting your workflow
- Language Detection - Automatically detects and categorizes time by programming language
- Project Analytics - View time spent per project and workspace
This plugin requires the ShellTime CLI and daemon to be running. Follow the steps below to set up.
Run this command in your terminal:
curl -sSL https://shelltime.xyz/i | bashAfter installation, reload your shell configuration:
# For zsh
source ~/.zshrc
# For fish
source ~/.config/fish/config.fish
# For bash
source ~/.bashrcRun the initialization command:
shelltime initThis command will:
- Open your browser for authentication
- Install shell hooks for your shell (zsh/fish/bash)
- Start the background daemon service
Ensure your daemon config at ~/.shelltime/config.yaml has code tracking enabled:
codeTracking:
enabled: trueOr if using ~/.shelltime/config.toml:
[codeTracking]
enabled = trueCheck that the daemon is running:
shelltime daemon status- Open your JetBrains IDE (IntelliJ IDEA, WebStorm, PyCharm, etc.)
- Go to Settings/Preferences → Plugins → Marketplace
- Search for "ShellTime"
- Click Install and restart your IDE
- Download the latest release from GitHub Releases
- Go to Settings/Preferences → Plugins → ⚙️ → Install Plugin from Disk...
- Select the downloaded ZIP file
- Restart your IDE
Configure the plugin at Settings/Preferences → Tools → ShellTime:
- Enable ShellTime tracking - Enable/disable tracking (default: enabled)
- Enable debug logging - Log debug information to IDE logs (default: disabled)
- Socket path - Path to the ShellTime daemon socket (default:
/tmp/shelltime.sock) - Heartbeat flush interval - Interval in milliseconds between heartbeat flushes (default:
120000)
Access commands from Tools → ShellTime:
- Show Status - Display daemon connection status and version info
- Flush Heartbeats - Manually flush pending heartbeats to the daemon
The plugin monitors your IDE activity and sends heartbeats to a local daemon:
- Event Monitoring - Tracks file opens, edits, saves, and cursor movements
- Debouncing - Batches events to reduce overhead (max 1 heartbeat per file per 30 seconds)
- Periodic Flush - Sends collected heartbeats to the daemon every 2 minutes
- Offline Support - Queues heartbeats when daemon is unavailable
The plugin shows its status in the IDE status bar:
- ShellTime - Connected and tracking
- ShellTime (offline) - Daemon not running (heartbeats queued)
Click the status bar item to view daemon status.
This plugin supports all JetBrains IDEs based on IntelliJ Platform 2024.1+:
- IntelliJ IDEA (Community & Ultimate)
- WebStorm
- PyCharm (Community & Professional)
- GoLand
- PhpStorm
- RubyMine
- CLion
- Rider
- DataGrip
- Android Studio
The plugin communicates only with the local ShellTime daemon via Unix socket. The daemon syncs your coding activity to the ShellTime server for analytics and cross-device access.
# Clone the repository
git clone https://github.com/shelltime/coding-extension-jetbrains.git
cd coding-extension-jetbrains
# Build the plugin
./gradlew buildPlugin
# Run tests
./gradlew test
# Run IDE with plugin for testing
./gradlew runIdesrc/main/kotlin/xyz/shelltime/jetbrains/
├── config/ # Configuration loading and settings
├── heartbeat/ # Heartbeat data models and collection
├── socket/ # Unix socket communication
├── listeners/ # IDE event listeners
├── services/ # Application and project services
├── actions/ # Menu actions
├── ui/ # Status bar widget
└── utils/ # Utility functions
See LICENSE for details.