Your experiments deserve a home. π
C implementation of try - blazing fast, zero dependencies, same philosophy
Prefer Ruby? Use the original Ruby version - it's excellent!
Ever find yourself with 50 directories named test, test2, new-test, actually-working-test, scattered across your filesystem? Or worse, just coding in /tmp and losing everything?
try is here for your beautifully chaotic mind.
Instantly navigate through all your experiment directories with:
- Fuzzy search that just works
- Smart sorting - recently used stuff bubbles to the top
- Auto-dating - creates directories like
2025-11-30-redis-experiment - Native speed - C binary, starts in milliseconds
- Zero dependencies - single statically-linked binary
# Linux x86_64
curl -sL https://github.com/tobi/try-cli/releases/latest/download/try-linux-x86_64.tar.gz | tar xz
sudo mv try /usr/local/bin/
# macOS (Intel)
curl -sL https://github.com/tobi/try-cli/releases/latest/download/try-darwin-x86_64.tar.gz | tar xz
sudo mv try /usr/local/bin/
# macOS (Apple Silicon)
curl -sL https://github.com/tobi/try-cli/releases/latest/download/try-darwin-aarch64.tar.gz | tar xz
sudo mv try /usr/local/bin/# Add to your shell (bash/zsh)
echo 'eval "$(try init ~/src/tries)"' >> ~/.zshrc
# For fish shell users
echo 'eval (try init ~/src/tries | string collect)' >> ~/.config/fish/config.fishgit clone https://github.com/tobi/try-cli.git
cd try-cli
make
sudo make install
# Then add shell integration (see above)You're learning Redis. You create /tmp/redis-test. Then ~/Desktop/redis-actually. Then ~/projects/testing-redis-again. Three weeks later you can't find that brilliant connection pooling solution you wrote at 2am.
All your experiments in one place, with instant fuzzy search:
$ try pool
β 2025-11-28-redis-connection-pool 2h ago, 18.5
2025-11-03-thread-pool 3d ago, 12.1
2025-10-22-db-pooling 2w ago, 8.3
+ Create new: poolType, arrow down, enter. You're there.
Not just substring matching - it's smart:
rdsmatchesredis-serverconnpoolmatchesconnection-pool- Recent stuff scores higher
- Shorter names win on equal matches
- Shows how long ago you touched each project
- Recently accessed directories float to the top
- Perfect for "what was I working on yesterday?"
- Clean, minimal interface
- Highlights matches as you type
- Shows scores so you know why things are ranked
- Dark mode by default (because obviously)
- Everything lives in
~/src/tries(configurable via--pathorTRY_PATH) - Auto-prefixes with dates:
2025-11-30-your-idea - Skip the date prompt if you already typed a name
-
Bash/Zsh:
# Default is ~/src/tries eval "$(try init)" # Or pick a path eval "$(try init ~/code/experiments)"
-
Fish:
eval (try init | string collect) # Or pick a path eval (try init ~/code/experiments | string collect)
Notes:
- The runtime commands printed by
tryare shell-neutral (absolute paths, quoted). Only the small wrapper function differs per shell.
try # Browse all experiments
try redis # Jump to redis experiment or create new
try clone https://github.com/user/repo.git # Clone repo into date-prefixed directory
try https://github.com/user/repo.git # Shorthand for clone (same as above)
try --help # See all optionstry can automatically clone git repositories into properly named experiment directories:
# Clone with auto-generated directory name
try clone https://github.com/tobi/try.git
# Creates: 2025-11-30-try
# Clone with custom name
try clone https://github.com/tobi/try.git my-fork
# Creates: 2025-11-30-my-fork
# Shorthand syntax (no need to type 'clone')
try https://github.com/tobi/try.git
# Creates: 2025-11-30-trySupported git URI formats:
https://github.com/user/repo.git(HTTPS GitHub)git@github.com:user/repo.git(SSH GitHub)https://gitlab.com/user/repo.git(GitLab)git@host.com:user/repo.git(SSH other hosts)
The .git suffix is automatically removed from URLs when generating directory names.
β/β- NavigateEnter- Select or createBackspace- Delete characterESC- Cancel- Just type to filter
Set TRY_PATH to change where experiments are stored:
export TRY_PATH=~/code/sketchesOr use the --path flag:
eval "$(try init ~/code/sketches)"Default: ~/src/tries
Install from the AUR using your preferred helper:
yay -S try-cli
# or
paru -S try-cliThen add shell integration to your config (see Shell Integration above).
nix run github:tobi/try-cli
nix run github:tobi/try-cli -- --help
nix run github:tobi/try-cli -- init ~/my-triesnix profile install github:tobi/try-cli{
inputs.try-cli.url = "github:tobi/try-cli";
# Add to your home.nix or wherever you configure packages
home.packages = [ inputs.try-cli.packages.${system}.default ];
# Shell integration will be handled by your shell config
}The Ruby version is excellent and perfectly usable. This C port exists for:
- Speed - Instant startup, even on slow hardware
- Portability - Single binary, no runtime dependencies
- Systems without Ruby - Works anywhere there's a C compiler
- Fun - Sometimes it's nice to write C
If you have Ruby installed and working, the original is totally fine. This version matches it feature-for-feature.
Your brain doesn't work in neat folders. You have ideas, you try things, you context-switch like a caffeinated squirrel. This tool embraces that.
Every experiment gets a home. Every home is instantly findable. Your 2am coding sessions are no longer lost to the void.
Q: Why not just use cd and ls?
A: Because you have 200 directories and can't remember if you called it test-redis, redis-test, or new-redis-thing.
Q: Why not use fzf?
A: fzf is great for files. This is specifically for project directories, with time-awareness and auto-creation built in.
Q: Can I use this for real projects? A: You can, but it's designed for experiments. Real projects deserve real names in real locations.
Q: What if I have thousands of experiments? A: First, welcome to the club. Second, it handles it fine - the scoring algorithm ensures relevant stuff stays on top.
Q: Ruby version or C version? A: Both are maintained and feature-complete. Use Ruby if you have it. Use C if you want speed or don't have Ruby. Can't go wrong either way.
- Startup time: < 5ms (vs ~100ms for Ruby)
- Memory usage: ~2MB (vs ~20MB for Ruby)
- Binary size: ~100KB (vs Ruby + stdlib)
- Fuzzy search: Same algorithm, same results
Both versions are plenty fast for interactive use. The C version just happens to be really fast.
Pull requests welcome! This is a pretty straightforward C codebase:
git clone https://github.com/tobi/try-cli.git
cd try-cli
make # Build
make test # Run tests
./dist/try # Try it outSee CLAUDE.md for architecture details and development guidelines.
MIT - Do whatever you want with it.
- Original concept and Ruby implementation: Tobias LΓΌtke
- C port maintains feature parity with the Ruby version
- Uses z-libs for safe string/vector handling
Built for developers with ADHD by developers with ADHD.
Your experiments deserve a home. π
