A command-line tool for searching and discovering Steam games using boolean query expressions with tags. Find games that match complex criteria like "indie AND souls-like AND OPTIONAL difficult AND NOT roguelike".
- Boolean Queries: Search using
AND,OR,NOT, andOPTIONALoperators - Steam Tag Support: Filter by any Steam tag (action, indie, RPG, etc.)
- Result Ranking: Results sorted by tag relevance and review count
- Caching: Automatic caching with TTL to minimize API calls (default: 1 day)
- Multiple Output Format: Results can be displayed with panels and formatting, or dumped in JSON
This project requires Python 3.14+ and uses uv for dependency management.
# Clone the repository
git clone <repository-url>
cd steamilar
# Install dependencies
uv syncuv run steamilar.py "indie AND souls-like"The tool supports sophisticated boolean expressions:
- AND (or
&&): Both tags must be present - OR (or
||): Either tag can be present - NOT (or
!): Tag must not be present - OPTIONAL (or
?): Tag is preferred but not required - Parentheses: Group expressions for complex logic
- Quotes: Use quotes for multi-word tags like
"story rich"
Find indie souls-like with a top down view:
uv run steamilar "indie AND souls-like AND OPTIONAL singleplayer AND OPTIONAL difficult AND (action OR action-adventure OR combat) AND (top-down OR isometric)"Find singleplayer story-rich atmospheric games:
uv run steamilar "singleplayer AND dark AND atmospheric AND OPTIONAL psychological AND (horror OR surreal) AND ('story rich' OR narrative)"Find singleplayer investigation games:
uv run steamilar "singleplayer AND exploration AND mystery AND atmospheric AND OPTIONAL nonlinear AND (puzzle OR investigation)"| Option | Default | Description |
|---|---|---|
-f/--format |
rich |
Output format: rich or json |
--per-pages |
100 | Maximum results per page to fetch per search query |
--max-pages |
2 | Maximum pages to fetch per search query |
--exclude |
["free", "low_reviews"] | Exclude games: free (f2p), no_reviews (0 reviews), low_reviews (less than 50 reviews), none (no exclusion) |
Examples:
# Get more results
uv run steamilar.py "indie AND puzzle" -p 5
# Export as JSON
uv run steamilar.py "action AND rpg" -f json > results.json
# Exclude games with no reviews (upcoming or non-reviewed games)
uv run steamilar.py "survival AND horror" --exclude no_reviews# Install dev dependencies
uv sync --dev
# Run linter
uvx ruff check .
# Format code
uvx ruff format .- Steam tag database adapted from xad1561/xad1562
Contributions are welcome! Please feel free to submit issues or pull requests.