A command-line application written in Rust for tracking your investment portfolios including stocks, mutual funds, and fixed deposits.
Features
- Track multiple portfolios using a simple YAML-based configuration
- Support for multiple investment types:
- Stocks (using Yahoo Finance tickers)
- Mutual funds (using ISIN codes for Indian mutual funds)
- Fixed deposits (manually updated values)
- Multiple data backends:
- Yahoo Finance API for stock prices
- AMFI (Association of Mutual Funds in India) for Indian mutual fund data
- Portfolio analytics:
- Current portfolio value and allocation
- Price change tracking over different periods
- CAGR (Compound Annual Growth Rate) calculations
- Expense ratio tracking for mutual funds and ETFs
- Asset allocation breakdown by category
Installation
From Source
-
Clone this repository:
git clone https://github.com/codito/xmf.git cd xmf -
Build and install using Cargo:
cargo install --path .
Pre-built Binaries
Pre-built binaries for Linux, Windows, and macOS are available with each release.
Download script for Linux, MacOS and WindowsDownload on Linux
# Linux wget https://github.com/codito/xmf/releases/latest/download/xmf-x86_64-linux.tar.gz \ && tar xvzf xmf-x86_64-linux.tar.gz && mv xmf-x86_64-linux xmf ./xmf
Download on MacOS
# MacOS curl -L https://github.com/codito/xmf/releases/latest/download/xmf-x86_64-macos.tar.gz \ -o xmf.tar.gz && tar xvzf xmf.tar.gz && mv xmf-x86_64-macos xmf ./xmf
Download on Windows
# Windows (PowerShell) Invoke-WebRequest -Uri "https://github.com/codito/xmf/releases/latest/download/xmf-x86_64-windows.exe.zip" -OutFile "xmf.zip" Expand-Archive -Path "xmf.zip" -DestinationPath "." Rename-Item -Path "xmf-x86_64-windows.exe" -NewName "xmf.exe" xmf.exe
Quick Start
-
Initialize the configuration:
xmf setup
This creates a default configuration file at the appropriate location for your system.
-
Edit the configuration file to add your investments:
# Location varies by OS: # Linux: ~/.config/xmf/config.yaml # macOS: ~/Library/Application Support/in.codito.xmf/config.yaml # Windows: %APPDATA%\codito\xmf\config.yaml
-
View your portfolio summary:
xmf summary
Configuration
The configuration file uses YAML format and supports multiple portfolios. You
can find a complete example configuration in
docs/example_config.yaml.
After running xmf setup, you'll get a configuration file with detailed
comments explaining each section. Here's a minimal example:
portfolios: - name: "My Stocks" investments: - symbol: "AAPL" units: 10 - symbol: "MSFT" units: 5 - name: "Indian Mutual Funds" investments: - isin: "INF109K01VD2" units: 100 - name: "Fixed Deposits" investments: - name: "Bank FD" value: 50000 currency: "INR" # will get converted to global currency currency: "USD" # global currency is used for all reporting
xmf supports multiple investment profiles with named configuration files.
E.g., xmf summary -n <config_name will use the configuration ~/.config/xmf/config_name.yml.
Investment Types
- Stocks: Use the
symbolfield with a Yahoo Finance ticker symbol - Mutual Funds: Use the
isinfield with the fund's ISIN code - Fixed Deposits: Use
name,value, and optionallycurrency
Stock/ETF investments can optionally specify an annual expense_ratio (in
percent) which is included in the xmf fees report:
- symbol: "VOO" # Vanguard S&P 500 ETF units: 4 expense_ratio: 0.03
Providers Configuration
You can customize the API endpoints used by the application:
providers: yahoo: base_url: "https://query1.finance.yahoo.com" amfi: base_url: "https://mf.captnemo.in"
Commands
xmf setup: Create a default configuration filexmf summary: Display portfolio summary with current valuesxmf change: Show price changes over different periodsxmf returns: Calculate CAGR (Compound Annual Growth Rate) for investments, or rolling returns with--rolling <period>xmf fees: Display expense ratios for mutual fundsxmf alloc: Show asset allocation breakdown by category
Global Options
-v, --verbose: Enable verbose logging-r, --refresh: Force refresh of cached data-n, --config-name <NAME>: Use a named configuration file--config-path <FILE>: Use a custom configuration file path
Data Sources
- Yahoo Finance for stock prices
- AMFI for Indian mutual fund data (via captnemo's API)
License
MIT
