This guide documents all tools in the devbase environment, including devbase-specific configurations and customizations.
For personalizing your installation, see Personalization Guide - includes theme switching, custom aliases, configuration file locations, and how to preserve your customizations across reinstalls.
- Terminal & Shell Tools
- Development Tools
- Container & Kubernetes Tools
- Java Development
- Code Quality & Security
- Build & Version Management
- Programming Languages & Runtimes
- IDEs & Editors
- Web Browsers
- Additional Tools
- Proxy Configuration Reference
Interactive command line shell with autosuggestions that predict commands from your history as you type. Displays syntax highlighting to show valid commands in real-time and provides tab completions without configuration. Designed for interactive use rather than scripting, with simpler syntax than Bash for command-line work. DevBase configures Fish with enhanced keybindings, FZF integration, and automatic tool initialization.
Bash Compatibility Note: Fish syntax differs in a few minor places from Bash, but bash scripts work fine if they have a proper shebang (#!/bin/bash) - which 99.5% of existing scripts have.
For specific Bash commands, simply run bash -c "command" or - just switch to Bash temporarily with bash.
- Accept full autosuggestion:
Alt+y(devbase custom binding - ergonomic)→(Right Arrow) orCtrl+f(Fish defaults)
- Clear screen:
Ctrl+l - Command history:
↑/↓arrows - Completion: Tab
- Exit shell:
Ctrl+dorexit - Search history:
Ctrl+r
-
Config file location:
~/.config/fish/config.fish -
Add to PATH:
fish_add_path /path/to/directory -
Set environment variable:
set -gx VARIABLE value -
Unset environment variable:
set -e VARIABLE -
Create alias:
alias ll='ls -la' -
Create function:
function myfunction echo "Hello from function" end
-
Save function:
funcsave myfunction -
List functions:
functions
- Web-based configuration:
fish_config - Update completions:
fish_update_completions - Key bindings:
fish_key_reader(to identify key codes)
Custom Keybindings:
Alt+y- Accept current autosuggestion (more ergonomic than Right Arrow)
DevBase Commands:
devbase-proxy - Only installed when using custom proxy configuration - see Custom Configuration
Manage corporate proxy settings easily:
devbase-proxy on # Enable proxy settings
devbase-proxy off # Disable proxy settings
devbase-proxy status # Show current proxy status- Configures HTTP_PROXY, HTTPS_PROXY, NO_PROXY
- Automatically configures APT and Snap proxies
- Uses proxy settings from Fish config (set during installation from DEVBASE_PROXY_HOST/PORT)
devbase-theme - Set consistent themes across CLI tools (authoritative list in libs/theme-registry.sh):
# Everforest (default)
devbase-theme everforest-dark
devbase-theme everforest-light
# Catppuccin
devbase-theme catppuccin-mocha # Dark
devbase-theme catppuccin-latte # Light
# Tokyo Night
devbase-theme tokyonight-night # Dark
devbase-theme tokyonight-day # Light
# Gruvbox
devbase-theme gruvbox-dark
devbase-theme gruvbox-lightAffects: bat, delta, btop, eza, FZF, Neovim, vifm, K9s, Lazygit, Zellij, Windows Terminal (WSL), Ghostty (Linux), VSCode
devbase-update - Update DevBase core and re-run setup:
# Update to latest tag
devbase-update
# Update to a specific ref (branch or tag)
devbase-update --ref feat/misc-fixes
# Snooze update prompts for N hours
devbase-update --snooze 24
# Clear update snooze
devbase-update --unsnoozeNote: when --ref is used, the persisted core repo at ~/.local/share/devbase/core is pinned to that ref during the setup run. SHA refs are not supported.
Theme Provenance:
| Tool | Theme Source | Notes |
|---|---|---|
| btop | Official | 10 from btop official repo, 2 from catppuccin/btop |
| k9s | Official | 8 from k9s official skins, 2 from catppuccin/k9s |
| eza | Official + Custom | 14 from eza-community/eza-themes, 2 custom (nord.yml, solarized-light.yml) |
| Windows Terminal | Mixed | Uses built-in Solarized themes, custom JSON for others (Nord, Dracula, Everforest, etc.) |
| Ghostty | Built-in | Uses Ghostty built-in themes via theme names |
| bat/delta | Built-in | Uses bat/delta built-in syntax themes |
| FZF | Custom | Custom color schemes matching theme palettes |
| Neovim | Plugin | Uses official theme plugins (everforest, catppuccin, tokyonight, gruvbox, nord, dracula, solarized) |
| vifm | Community | Uses vifm community themes |
| Lazygit | Built-in | Uses built-in light/dark mode |
| Zellij | Configuration | Theme colors defined in config (no separate theme files) |
| VSCode | Extensions | Requires corresponding theme extensions to be installed |
Note: All custom themes reference official color palettes from their respective projects (Nord, Dracula, Solarized, Everforest, Catppuccin, Tokyo Night, Gruvbox) to ensure visual consistency.
devbase-font - Set fonts for terminals and editors (authoritative list in libs/font-registry.sh):
# Available fonts
devbase-font jetbrains-mono # JetBrains Mono - Excellent readability
devbase-font firacode # Fira Code - Extensive ligatures
devbase-font cascadia-code # Cascadia Code - Microsoft font
devbase-font monaspace # Monaspace - Superfamily (default)Affects: GNOME Terminal, Ghostty, VSCode
devbase-citrix - Download and install Citrix Workspace App (non-WSL only):
devbase-citrix --check # Show available version
devbase-citrix # Download and install
devbase-citrix --help # Show helpInstalls icaclient and ctxusb packages. For smart card support, enable pcscd: sudo systemctl enable --now pcscd
devbase-firefox-opensc - Configure Firefox for smart card support (non-WSL only):
devbase-firefox-opensc # Add OpenSC PKCS#11 module to FirefoxEnables smart card authentication in Firefox. Run after first Firefox launch if profile didn't exist during installation.
Automatic Environment Setup:
- Starship prompt with Git integration
- Mise for version management (Node.js, Python, etc.)
- SSH agent auto-initialization
- Development-friendly PATH configuration
Learn more:
- Documentation: Fish Shell Documentation
- Tutorial: Fish for Bash Users
- Man page:
man fish - Examples:
tldr fish
Terminal emulator that uses GPU acceleration to render text faster than traditional terminals. Handles large amounts of output efficiently and reduces input latency for responsive interaction. Useful when working with logs, build output, or any high-volume terminal activity. DevBase installs via snap and configures with system theme integration.
- Config file:
~/.config/ghostty/config - New tab:
Ctrl+Shift+T - New window:
Ctrl+Shift+N - Reload config:
Ctrl+, - Split pane:
Ctrl+Shift+D - Toggle fullscreen:
F11
Learn more:
- Documentation: Ghostty Documentation
- Man page:
man ghostty
DevBase downloads all 4 supported Nerd Fonts to cache and installs your chosen font on native Ubuntu (not WSL). This provides proper rendering of icons, glyphs, and symbols in terminal applications.
Available Fonts:
- JetBrains Mono - Excellent readability for coding (default)
- Fira Code - Popular with extensive ligatures
- Cascadia Code - Microsoft's font with Powerline support
- Monaspace - Superfamily with multiple styles
What is a Nerd Font?
Nerd Fonts are patched fonts that include 3,600+ glyphs from popular icon sets:
- Font Awesome, Devicons, Octicons (GitHub icons)
- Material Design Icons, Powerline symbols
- Weather icons, and many more...
How Font Installation Works:
- During Setup: All 4 fonts downloaded to
~/.cache/devbase/fonts/v3.4.0/ - Installation: Your chosen font (set via
DEVBASE_FONTvariable) is installed to~/.local/share/fonts/ - Switching: Use
devbase-fontcommand to switch fonts without re-downloading
Switching Fonts: (authoritative list in libs/font-registry.sh)
# Switch to a different font (auto-installs from cache)
devbase-font jetbrains-mono # JetBrains Mono
devbase-font firacode # Fira Code
devbase-font cascadia-code # Cascadia Code
devbase-font monaspace # MonaspaceAuto-Configuration:
DevBase automatically configures the selected Nerd Font for:
- GNOME Terminal: Sets default profile font
- Ghostty: Updates
font-familyin config - VS Code: Updates
editor.fontFamilysetting
Cache Location:
Fonts are cached with version numbers for easy updates:
~/.cache/devbase/fonts/
└── v3.4.0/ # Nerd Fonts version
├── JetBrainsMono.zip
├── FiraCode.zip
├── CascadiaCode.zip
└── Monaspace.zip
WSL Note:
On WSL, fonts must be installed on the Windows side (not in WSL). Install Nerd Fonts on Windows and configure your terminal emulator (Windows Terminal, ConEmu, etc.) to use them.
Manual Font Configuration:
# List installed Nerd Fonts
fc-list | grep -i "nerd"
# Check font is working (should show icons)
echo " " # Various nerd font iconsWhy This Matters:
Modern CLI tools like starship, eza, lf, and lazygit use icons extensively. Without a Nerd Font, you'll see missing character boxes (□) instead of proper icons.
Learn more:
Two-pane file manager for the terminal that uses vim keybindings (hjkl for movement, dd to cut, yy to copy). Lets you browse directories, preview files, and perform bulk operations without leaving the command line. Efficient for managing files when you're already working in the terminal or prefer keyboard navigation.
- Command mode:
: - Create dir:
:mkdir dirname - Delete (cut):
dd - Go to top/bottom:
gg/G - Help:
:help - Navigate:
h/j/k/l(vim keys) - Next/prev match:
n/N - Paste:
p - Quit:
:q - Rename:
cw - Search:
/(forward)?(backward) - Select file:
torSpace - Start:
vifm - Visual mode:
v - Yank (copy):
yy
Configuration: ~/.config/vifm/vifmrc
Learn more:
- Documentation: vifm Documentation
- Man page:
man vifm - Examples:
tldr vifm
Minimalist terminal file manager similar to vifm but lighter and faster. Uses vim-style keybindings for file operations with emphasis on speed and low memory usage. Good alternative when you need quick file navigation without the overhead of a full-featured file manager.
- Copy:
y - Create dir:
:push %mkdir<space> - Cut:
d - Go to top/bottom:
gg/G - Invert selection:
v - Navigate:
h/j/k/l(vim keys) - Next/prev:
n/N - Paste:
p - Quit:
q - Rename:
:rename newname - Search:
/(filter) - Select:
Space - Shell command:
:!commandor$command - Start:
lf
Configuration: ~/.config/lf/lfrc
Learn more:
- Documentation: lf Documentation
- Man page:
man lf - Examples:
tldr lf
Customizable shell prompt that displays relevant context like git branch, language versions, and command duration. Shows information only when relevant (displays Node version only in Node projects, for example). Replaces the default prompt with more useful information while remaining fast and responsive.
- Config file:
~/.config/starship.toml - Create config:
starship config - Explain prompt:
starship explain - Install to shell:
starship init fish | source - Print config:
starship print-config - Test config:
starship timings
Auto-Activation:
- Automatically initialized in Fish
- Shows git status, tool versions, execution time
- Configurable via
~/.config/starship.toml
Learn more:
- Documentation: Starship Documentation
- Examples:
tldr starship
Lists directory contents recursively in a tree structure showing the hierarchy of files and folders. Useful for understanding project organization or documenting folder structure. Shows at a glance what files exist and how they're nested without manually navigating each directory.
- Basic tree:
tree - Directories only:
tree -d - Limit depth:
tree -L 2 - Output to file:
tree > structure.txt - Pattern:
tree -P "*.txt" - Show all:
tree -a - Sizes:
tree -h
Learn more:
- Man page:
man tree - Examples:
tldr tree
Divides a single terminal window into multiple panes and tabs, each running separate commands. Sessions persist even if you close the terminal, letting you resume work exactly where you left off. Eliminates the need for multiple terminal windows and preserves your workspace across reboots or SSH disconnects. DevBase configures auto-start and custom keybindings for quick pane splitting.
- Attach to session:
zellij attach mysessionorzellij a mysession - Delete session:
zellij delete-session mysessionorzellij d mysession - List sessions:
zellij list-sessionsorzellij ls - New session with name:
zellij --session mysessionorzellij -s mysession - Start Zellij:
zellij
- Lock mode:
Ctrl+g(disable accidental input)- Tip: Hold
Shiftto override mouse handling and select text normally
- Tip: Hold
- Pane mode:
Ctrl+p(manage panes)n- New paned- Down splitr- Right splitx- Close panef- Toggle fullscreenw- Toggle floating pane
- Tab mode:
Ctrl+t(manage tabs)n- New tab1-9- Switch to tab numberr- Rename tabx- Close tab
- Resize mode:
Ctrl+nh/j/k/lor arrow keys - Resize panes
- Scroll mode:
Ctrl+sj/kor arrows - Scrolld/u- Page down/up
- Session mode:
Ctrl+od- Detach from session
- Quit Zellij:
Ctrl+q
Custom Keybindings:
- Alt+d: New pane down (quick split)
- Alt+r: New pane right (quick split)
Auto-Start: Controlled by environment variables:
DEVBASE_ZELLIJ_AUTOSTART=true- Auto-start ZellijZELLIJ_AUTO_ATTACH=true- Attach to existing sessionZELLIJ_AUTO_EXIT=true- Exit shell when leaving Zellij- Disabled in SSH sessions and Linux console
Other Customizations:
- Copy: Uses
__smart_copyfunction for clipboard integration - Default shell: Fish
- Mouse mode: Enabled
- Theme: Follows system theme
Learn more:
- Documentation: Zellij Documentation
- Examples:
tldr zellij
Displays file contents with syntax highlighting and line numbers, similar to cat but more readable.
Automatically pipes long files through a pager and shows git diff indicators in the margin.
Makes reviewing code or logs in the terminal significantly easier than plain text output.
DevBase aliases bat to handle Ubuntu/Debian's batcat naming.
- List themes:
bat --list-themes - Paging:
bat --paging=always file.txt - Plain output:
bat -p file.txt - Show line numbers:
bat -n file.txt - Show non-printable:
bat -A file.txt - Specific language:
bat -l python file - Theme:
bat --theme=TwoDark file.txt - View file:
bat file.txt
Alias:
bat→batcat(Ubuntu/Debian package name)
Learn more:
- Documentation: Bat Documentation
- Man page:
man bat - Examples:
tldr bat
System monitor showing CPU, memory, disk, and network usage with graphs and process details. Helps identify what's consuming resources when your system is slow or unresponsive. More detailed and visually informative than traditional top or htop.
- Filter:
f - Kill process:
k - Options menu:
o - Quit:
q - Sort:
s - Start:
btop - Tree view:
t
Alias:
top→btop
Learn more:
- Documentation: btop Documentation
- Man page:
man btop
Renders git diffs with syntax highlighting and improved readability compared to default git output.
Highlights specific character changes within lines, making it easier to spot exact modifications.
Integrates with git automatically to improve the display of git diff and git log -p output.
DevBase pre-configures git to use delta automatically for all diff and log commands.
- Line numbers:
delta --line-numbers - Side-by-side:
delta --side-by-side - Syntax themes:
delta --list-syntax-themes - Themes:
delta --list-themes - Use with git:
git config core.pager delta(pre-configured in devbase)
Learn more:
- Documentation: Delta Documentation
- Man page:
man delta - Examples:
tldr delta
Replacement for ls that adds colors, icons, and git status information to directory listings.
Shows file types, permissions, and modification status at a glance with visual indicators.
Makes browsing directories in the terminal more informative than standard ls output.
DevBase aliases ls to eza --icons for enhanced default listings.
- All files:
eza -a - Basic listing:
eza - Extended attributes:
eza -l@ - Git status:
eza --git -l - Human readable sizes:
eza -lh - Icons:
eza --icons - Long format:
eza -l - Sort by modified:
eza -l --sort=modified - Tree view:
eza --treeoreza -T
Alias:
ls→eza --icons
Learn more:
- Documentation: Eza Documentation
- Man page:
man eza - Examples:
tldr eza
Interactive filter that lets you search through lists (files, command history, processes) by typing partial matches. Narrows down results as you type without needing exact text, using fuzzy matching algorithms. Essential for quickly finding files or recalling commands when you remember only part of the name. DevBase includes fzf.fish plugin with mnemonic keybindings like Ctrl+R for history search.
- Find files:
fzf - Preview files:
fzf --preview 'cat {}' - Select multiple:
fzf -m(use Tab to select) - Search with query:
fzf -q "searchterm"
The fzf.fish plugin provides powerful fuzzy search capabilities with mnemonic keybindings:
- Ctrl+R: Search History - Search command history with syntax-highlighted preview
- Ctrl+Alt+F: Search Directory - Search files/directories recursively with preview (Tab to select multiple)
- Ctrl+Alt+L: Search Git Log - Search git commits with diff preview
- Ctrl+Alt+S: Search Git Status - Search modified/staged files with diff preview
- Ctrl+Alt+P: Search Processes - Search running processes (great for finding PIDs)
- Ctrl+V: Search Variables - Search shell variables with scope info
Tips:
- Press Tab to select multiple items in any search
- If your cursor is on a word when you trigger a search, that word seeds the query
- Selected directories get a trailing
/- select one and hit Enter to cd into it - All searches show helpful previews to find what you need faster
- Note: If using Zellij, press
Ctrl+g(lock mode) first ifCtrl+Alt+Pconflicts with pane switching
Learn more:
- Documentation: FZF documentation
- Plugin docs: fzf.fish documentation
- Man page:
man fzf - Examples:
tldr fzf
Shows practical examples of how to use command-line tools instead of full manual pages. Provides common use cases and actual command syntax you can copy and adapt. Faster than reading man pages when you just need to remember how to use a command.
- Get help for a command:
tldr command - List all pages:
tldr --list - Search in page names:
tldr --search "pattern" - Show raw markdown:
tldr --raw command - Update cache:
tldr --update
tldr tar # Quick examples for tar
tldr git commit # Git commit examples
tldr docker run # Docker run examples
tldr find # Find command examplesNote: TLDR provides practical examples for thousands of commands, making it easier than reading man pages.
Learn more:
- Documentation: TLDR Pages
- Man page:
man tldr
Distributed version control system that tracks changes to files over time through snapshots called commits. Enables multiple developers to work on the same codebase simultaneously through branching and merging. Essential for coordinating team development and maintaining project history. DevBase configures SSH signing, Delta pager, and security-focused git hooks.
- Check status:
git status - Clone repo:
git clone <url> - Commit changes:
git commit -m "message" - Create branch:
git branch <name> - Initialize repo:
git init - Merge branch:
git merge <branch> - Pull changes:
git pull - Push changes:
git push - Show changes:
git diff - Stage changes:
git add <file>orgit add . - Switch branch:
git switch <branch> - View history:
git log
Aliases:
cs→commit --signoffretris→rebase -i --signoff --gpg-signpull-re→pull --rebasepush-force→push --force-with-leasegc-aggressive→ Aggressive garbage collectiondate-now→commit --amend --date=now --no-edit
Features:
- Editor: Neovim as default
- Pager: Delta with syntax highlighting
- Diff: Colored move detection
- Merge: diff3 conflict style
- Signing: SSH key signing (instead of GPG)
- Branch: Default to 'main' instead of 'master'
- Push: Simple push (current branch only)
Delta Integration:
- Side-by-side diffs enabled
- Navigate between sections with n/N
- Theme follows system theme setting
- Interactive diff filtering
Git Hooks:
DevBase provides minimal git hooks focused on security and workflow automation. Project-specific linting (shellcheck, hadolint, etc.) should be configured per-project.
-
pre-commit - Runs before creating commits:
01-secrets-scan.sh- Scans staged files for secrets using gitleaks
-
post-commit - Validates commit policy (non-blocking):
01-conventional-commits.sh- Enforces conventional commits via gommitlint, using built-in defaults and optional.gommitlint.yamloverrides
-
prepare-commit-msg - Prepares commit message:
01-add-issue-ref.sh- Auto-addsRefs:trailer from branch name (e.g.,JIRA-123)
Learn more:
- Documentation: Git Documentation
- Man page:
man git - Examples:
tldr git
Parses git commit messages to automatically generate a changelog file. Organizes commits by type (features, fixes, breaking changes) based on conventional commit format. Eliminates manual changelog maintenance by extracting release notes from commit history.
- Generate changelog:
git cliff - Init config:
git cliff init - Output to file:
git cliff -o CHANGELOG.md - Specific tag range:
git cliff v1.0.0..v2.0.0 - Unreleased changes:
git cliff --unreleased
Learn more:
- Documentation: Git Cliff Documentation
- Man page:
man git-cliff - Examples:
tldr git-cliff
Interacts with GitHub repositories, pull requests, and issues directly from the command line. Lets you create PRs, review code, manage issues, and run workflows without opening a web browser. Integrates GitHub operations into your terminal workflow instead of switching to the web interface.
- Authenticate:
gh auth login - Check out PR:
gh pr checkout 123 - Clone repo:
gh repo clone owner/repo - Create gist:
gh gist create file.txt - Create issue:
gh issue create - Create PR:
gh pr create - Create repo:
gh repo create - List issues:
gh issue list - List PRs:
gh pr list - Run workflow:
gh workflow run - View PR:
gh pr view
Learn more:
- Documentation: GitHub CLI Documentation
- Man page:
man gh - Examples:
tldr gh
Manages GitLab merge requests, issues, and CI/CD pipelines from the command line. Provides the same terminal-based workflow for GitLab that gh provides for GitHub. Keeps you in the terminal for GitLab operations instead of switching to the web UI.
- Authenticate:
glab auth login - CI/CD status:
glab pipeline status - Clone repo:
glab repo clone owner/repo - Create issue:
glab issue create - Create MR:
glab mr create - List MRs:
glab mr list - Run pipeline:
glab pipeline run - View MR:
glab mr view - View pipeline:
glab pipeline view
Learn more:
- Documentation: GitLab CLI Documentation
- Man page:
man glab - Examples:
tldr glab
Parses and manipulates JSON from the command line using a query language. Extracts specific fields, filters arrays, and transforms JSON structure without writing code. Essential for working with API responses, configuration files, or any JSON data in scripts.
- Array element:
jq '.[0]' file.json - Filter:
jq '.[] | select(.age > 30)' file.json - Get field:
jq '.field' file.json - Map:
jq '.[] | {name, age}' file.json - Pretty print:
jq '.' file.json - Raw output:
jq -r '.field' file.json
Learn more:
- Documentation: jq Documentation
- Man page:
man jq - Examples:
tldr jq
Decodes JWT tokens to inspect their payload and verify signatures from the command line. Useful for debugging authentication issues or examining access tokens during API development. Eliminates the need for online JWT decoders when working with token-based authentication.
- Decode token:
jwt decode TOKEN - Encode token:
jwt encode --secret=secret '{"sub": "1234"}' - Verify token:
jwt verify --secret=secret TOKEN
Learn more:
- Documentation: JWT CLI Documentation
- Examples:
tldr jwt
Interactive terminal interface for git that shows branches, commits, and changes in visual panels. Performs git operations through keyboard shortcuts and menus instead of memorizing complex commands. Makes tasks like staging files, viewing diffs, and managing branches faster than command-line git. DevBase configures automatic theme switching to match system preferences.
- Branch:
b - Commit:
c - Pull:
p - Push:
P - Quit:
q - Refresh:
R - Start:
lazygit - Stash:
S - Status:
s(in files panel)
- Theme: Automatically follows system theme (light/dark)
Learn more:
- Documentation: Lazygit Documentation
- In-app help: Press
?for keybindings - Examples:
tldr lazygit
Preconfigured Neovim setup that includes LSP, completion, file navigation, and IDE features out of the box. Turns Neovim into a fully functional code editor without manually configuring dozens of plugins. Provides a modern development environment while keeping Neovim's modal editing and speed. DevBase includes LazyVim as the default Neovim configuration.
- Leader key:
Space - Find files:
<leader>ff - Find in files (grep):
<leader>fg - Recent files:
<leader>fr - File explorer:
<leader>e - Buffers:
<leader>fb - Close buffer:
<leader>bd - Format file:
<leader>cf - LSP info:
<leader>cl - Lazy (plugin manager):
<leader>l - Mason (LSP installer):
<leader>cm - Terminal:
<leader>ftorCtrl+/
Note: If using Zellij, press Ctrl+g (lock mode) first when Ctrl key combinations conflict with Zellij's pane/tab controls
- Navigate windows:
Ctrl+h/j/k/l - Resize windows:
Ctrl+arrows - Split horizontal:
<leader>- - Split vertical:
<leader>|
- Go to definition:
gd - Go to references:
gr - Go to implementation:
gi - Hover documentation:
K - Code actions:
<leader>ca - Rename symbol:
<leader>cr - Next/prev diagnostic:
]d/[d
- Search in buffer:
/pattern - Search & replace:
:%s/old/new/g - Clear search highlight:
<leader>uh
Learn more:
- Documentation: LazyVim Documentation
- In-app help: Press
<leader>?for keybindings
Text editor that extends Vim with built-in LSP support, asynchronous operations, and Lua configuration. Offers modal editing (normal, insert, visual modes) for efficient text manipulation using keyboard only. Highly extensible through plugins and provides the foundation for IDE-like features while staying lightweight. DevBase configures Neovim with LazyVim distribution for immediate productivity.
- Normal mode:
Esc - Insert mode:
i(before cursor),a(after cursor),I(start of line),A(end of line) - Visual mode:
v(character),V(line),Ctrl+v(block) - Command mode:
: - Replace mode:
R
- Character:
h(left),j(down),k(up),l(right) - Word:
w(next word),b(previous word),e(end of word) - Line:
0(start),^(first non-blank),$(end) - Screen:
H(top),M(middle),L(bottom) - File:
gg(start),G(end),{line}G(go to line) - Page:
Ctrl+f(forward),Ctrl+b(backward) - Half-page:
Ctrl+d(down),Ctrl+u(up)
- Delete:
x(character),dd(line),dw(word),d$(to end of line) - Copy (yank):
yy(line),yw(word),y$(to end of line) - Paste:
p(after),P(before) - Undo/Redo:
u(undo),Ctrl+r(redo) - Indent:
>>(indent),<<(outdent),=(auto-indent) - Join lines:
J - Change:
c(change),cc(change line),cw(change word)
- Save:
:w - Save and quit:
:wqorZZ - Quit:
:q - Force quit:
:q! - Save as:
:w filename - Open file:
:e filename - Split open:
:sp filename(horizontal),:vsp filename(vertical)
- Substitute:
:s/old/new/(line),:%s/old/new/g(file) - Execute shell:
:!command - Read command output:
:r !command - Set option:
:set number,:set nonumber - Help:
:help topic - Macros:
qa(record to a),q(stop),@a(play),@@(repeat)
Aliases:
vi→nvimvim→nvimvimbare→nvim -u NONE -N(Neovim without config)
Learn more:
- Documentation: Neovim Documentation
- Man page:
man nvim - Examples:
tldr nvim
Universal document converter that translates between markup formats like Markdown, HTML, LaTeX, DOCX, and PDF. Lets you write documentation in one format (typically Markdown) and convert to whatever format you need. Useful for generating multiple output types from a single source file or converting between formats.
- List formats:
pandoc --list-input-formats - Markdown to HTML:
pandoc file.md -o file.html - Markdown to PDF:
pandoc file.md -o file.pdf - With template:
pandoc file.md --template=template.html -o output.html
Learn more:
- Documentation: Pandoc Documentation
- Man page:
man pandoc - Examples:
tldr pandoc
Runs multiple shell commands simultaneously across CPU cores instead of sequentially. Significantly speeds up batch operations by processing many items at once. Useful for tasks like converting files, processing data, or running tests on multiple inputs.
- Basic usage:
parallel echo ::: A B C - From file:
parallel -a file.txt command - Jobs:
parallel -j 4 command ::: inputs - Multiple inputs:
parallel echo {1} {2} ::: A B ::: 1 2 - Progress:
parallel --progress command ::: inputs
Learn more:
- Documentation: GNU Parallel Documentation
- Man page:
man parallel - Examples:
tldr parallel
Creates random passwords with specified length and complexity requirements. Generates strong passwords that are harder to crack than human-chosen passwords. Quick way to create secure passwords from the command line without using a password manager.
- Generate password:
pwgen - Include symbols:
pwgen -y 16 - No ambiguous chars:
pwgen -B 16 - One per line:
pwgen -1 16 5 - Secure:
pwgen -s 16 - Specific length:
pwgen 16
Learn more:
- Documentation: PWGen Documentation
- Man page:
man pwgen - Examples:
tldr pwgen
Searches directory trees for text patterns, optimized for speed and automatically skipping ignored files. Respects .gitignore rules and binary files by default, focusing on source code. Significantly faster than grep when searching large codebases, with better defaults for development work. DevBase uses ripgrep as the primary search tool across all configurations.
- Search for pattern:
rg "pattern" - Case-insensitive:
rg -i "pattern" - Search specific file type:
rg -t py "pattern" - Search specific files:
rg "pattern" file1.txt file2.txt - Search in directory:
rg "pattern" /path/to/dir
- Show only filenames:
rg -l "pattern" - Show files without matches:
rg --files-without-match "pattern" - Count matches:
rg -c "pattern" - Show context:
rg -C 3 "pattern"(3 lines before/after) - Show only match:
rg -o "pattern" - Fixed string (not regex):
rg -F "exact_string" - Multiline search:
rg -U "pattern.*\n.*continuation"
- Include files:
rg "pattern" -g "*.rs" - Exclude files:
rg "pattern" -g "!*.min.js" - Ignore case in globs:
rg "pattern" --iglob "*.PDF" - Search hidden files:
rg --hidden "pattern" - Search ignored files:
rg --no-ignore "pattern" - List file types:
rg --type-list
- Replace text:
rg "pattern" --replace "replacement" - Replace with regex groups:
rg "(\w+)" --replace '$1_suffix'
Learn more:
- Documentation: Ripgrep User Guide
- Man page:
man rg - Examples:
tldr rg
Finds files and directories with simpler syntax than traditional find command.
Searches quickly while respecting .gitignore rules and displaying colored output.
Easier to use than find for common tasks like searching by filename or extension.
DevBase integrates fd with fzf for interactive file selection.
- Find by name:
fd "pattern" - Find with extension:
fd -e txt(all .txt files) - Find directories only:
fd -t d "pattern" - Find files only:
fd -t f "pattern" - Find executables:
fd -t x - Find empty files:
fd -t e - Find symlinks:
fd -t l
- Case-insensitive:
fd -i "pattern" - Fixed string:
fd -F "exact_name" - Full path search:
fd -p "path/pattern" - Regex mode:
fd "^[0-9]+\.txt$" - Glob mode:
fd -g "*.rs"
- Search hidden files:
fd -H "pattern" - Search ignored files:
fd -I "pattern" - No ignore at all:
fd -u "pattern"(or--unrestricted) - Max depth:
fd --max-depth 3 "pattern" - Specific directory:
fd "pattern" /path/to/dir - Exclude paths:
fd -E "*.min.js" "pattern"
- Absolute paths:
fd -a "pattern" - Execute command:
fd -x command {} "pattern" - Execute in parallel:
fd -X command {} "pattern" - Size filter:
fd --size -1m(files smaller than 1MB) - Changed within:
fd --changed-within 2weeks - Changed before:
fd --changed-before "2023-01-01"
# Open files in editor
fd -e rs | xargs nvim
# Delete all .bak files
fd -e bak -X rm
# Count lines in all Python files
fd -e py -X wc -l
# Interactive file selection with fzf
fd -t f | fzfNote: fd is used by fzf.fish for fast directory searching (Ctrl+Alt+F).
Learn more:
- Documentation: fd Documentation
- Man page:
man fd - Examples:
tldr fd
Text-based web browser for viewing websites and HTML files directly in the terminal. Renders HTML content as formatted text with support for tables, frames, and basic CSS. Useful for reading documentation, checking websites without a GUI, or viewing HTML files in SSH sessions.
- Open URL:
w3m https://example.com - Open local file:
w3m file.html - Quit:
qtheny - Back:
B - Follow link:
Enter(on highlighted link) - Next link:
Tab - Previous link:
Shift+Tab - Scroll down:
Spaceorj - Scroll up:
bork - Search:
/(forward) or?(backward) - Open new URL:
U - View source:
\ - External browser:
M(opens link in GUI browser) - Help:
H
# Quick web lookup
w3m https://example.com
# Read man pages as HTML
man -H bash | w3m -T text/html
# Preview markdown
pandoc README.md | w3m -T text/html
# Check HTTP headers
w3m -dump_head https://example.comLearn more:
- Man page:
man w3m - Examples:
tldr w3m
Tracks dotfiles (configuration files like .bashrc, .gitconfig) in a git repository for synchronization across machines. Works like git but specifically designed for managing home directory configuration files. Keeps your personal settings consistent across multiple computers and lets you version control your configurations.
- Add file:
yadm add ~/.bashrc - Bootstrap:
yadm bootstrap - Clone dotfiles:
yadm clone https://github.com/user/dotfiles - Commit:
yadm commit -m "message" - List files:
yadm list -a - Push:
yadm push - Status:
yadm status
Learn more:
- Documentation: yadm Documentation
- Man page:
man yadm - Examples:
tldr yadm
Parses and manipulates YAML files from the command line, like jq but for YAML format. Extracts values, modifies configuration, and converts between YAML and JSON. Essential for working with Kubernetes configs, CI/CD pipelines, or any YAML-based configuration.
- Convert to JSON:
yq -o json file.yaml - Merge files:
yq eval-all 'select(fileIndex == 0) * select(fileIndex == 1)' file1.yaml file2.yaml - Read value:
yq '.field' file.yaml - Update value:
yq '.field = "value"' file.yaml
Learn more:
- Documentation: yq Documentation
- Man page:
man yq - Examples:
tldr yq
Manages Argo CD applications that deploy Kubernetes resources from Git repositories. Provides command-line access to sync applications, view deployment status, and manage GitOps workflows. Integrates continuous deployment operations into terminal workflows instead of using the web UI.
- Create app:
argocd app create app-name - Delete app:
argocd app delete app-name - Get app:
argocd app get app-name - Get app history:
argocd app history app-name - List apps:
argocd app list - Login:
argocd login argocd.example.com - Sync app:
argocd app sync app-name
Learn more:
- Documentation: Argo CD Documentation
- Examples:
tldr argocd
Builds container images from Dockerfiles or from scratch without needing a running daemon. Gives more control over image layers and can run without root privileges. Alternative to Docker build that works in environments where running a daemon isn't possible.
- Build from Dockerfile:
buildah bud -t myimage . - Commit:
buildah commit container image - From scratch:
buildah from scratch - List containers:
buildah containers - List images:
buildah images - Mount container:
buildah mount container - Run command:
buildah run container -- command
Learn more:
- Documentation: Buildah Documentation
- Man page:
man buildah - Examples:
tldr buildah
Defines multi-container applications in a YAML file and manages them as a single unit. Starts, stops, and connects multiple containers together for development environments. Simplifies running complex applications that need databases, caches, and other services running simultaneously.
- Exec command:
docker compose exec service_name command - List services:
docker compose ps - Rebuild:
docker compose build - Scale service:
docker compose up -d --scale web=3 - Start services:
docker compose up -d - Stop services:
docker compose down - View logs:
docker compose logs -f
Learn more:
- Documentation: Docker Compose Documentation
- Examples:
tldr docker-compose
Lightweight Kubernetes distribution that uses less memory and disk space than full Kubernetes. Designed for resource-constrained environments like development machines, edge devices, or IoT. Provides full Kubernetes functionality with a simpler installation process and smaller footprint.
- Apply manifest:
k3s kubectl apply -f manifest.yaml - Get config:
cat /etc/rancher/k3s/k3s.yaml - Get nodes:
k3s kubectl get nodes - Get pods:
k3s kubectl get pods --all-namespaces - Install:
curl -sfL https://get.k3s.io | sh - - Uninstall:
k3s-uninstall.sh
K3s is disabled by default to avoid consuming system resources. Enable it when needed:
- Enable and start:
sudo systemctl enable --now k3s - Disable and stop:
sudo systemctl disable --now k3s - Check status:
sudo systemctl status k3s - Stop temporarily:
sudo systemctl stop k3s - Start:
sudo systemctl start k3s
Learn more:
- Documentation: K3s Documentation
- Examples:
tldr k3s
Lightweight Kubernetes distribution from Canonical that runs as a snap package. Provides a minimal Kubernetes installation with optional addons for DNS, storage, and ingress. Designed for local development, testing, and edge deployments with easy addon management.
- Add user to group:
sudo usermod -a -G microk8s $USER(then logout/login) - Apply manifest:
microk8s kubectl apply -f manifest.yaml - Enable addon:
microk8s enable dns storage ingress - Get config:
microk8s config - Get nodes:
microk8s kubectl get nodes - Get pods:
microk8s kubectl get pods --all-namespaces - List addons:
microk8s status - Disable addon:
microk8s disable dashboard
MicroK8s is disabled by default to avoid consuming system resources. Enable it when needed:
- Enable and start:
sudo systemctl enable --now snap.microk8s.daemon-kubelite - Disable and stop:
sudo systemctl disable --now snap.microk8s.daemon-kubelite - Check status:
sudo systemctl status snap.microk8s.daemon-kubelite - Stop temporarily:
microk8s stop - Start:
microk8s start
- dns: CoreDNS for cluster DNS resolution
- storage: Default storage class for persistent volumes
- ingress: NGINX ingress controller
- dashboard: Kubernetes web dashboard
- registry: Private container registry
- metrics-server: Resource metrics API
Learn more:
- Documentation: MicroK8s Documentation
- Addons: MicroK8s Addons
Load testing tool that runs performance tests written in JavaScript. Simulates user traffic to measure how your application performs under load. Helps identify performance bottlenecks and verify that systems meet performance requirements.
- Cloud run:
k6 cloud script.js - Output metrics:
k6 run --out json=results.json script.js - Run test:
k6 run script.js - Specify VUs:
k6 run --vus 10 --duration 30s script.js
Learn more:
- Documentation: K6 Documentation
- Examples:
tldr k6
Interactive terminal UI for managing Kubernetes clusters with real-time updates. Navigate pods, deployments, logs, and other resources using keyboard shortcuts instead of kubectl commands. Makes Kubernetes operations faster and more visual than typing kubectl commands repeatedly.
- Delete:
ctrl+d - Deployments:
:dp - Describe:
d - Edit:
e - Logs:
l(on selected pod) - Namespaces:
:ns - Pods:
:po - Quit:
:qorctrl+c - Search:
/ - Services:
:svc - Shell:
s(on selected pod) - Start:
k9s
Learn more:
- Documentation: K9s Documentation
- Examples:
tldr k9s
Encrypts Kubernetes Secret resources so they can be safely stored in version control. Works with Sealed Secrets controller to decrypt secrets only inside the cluster. Enables storing sensitive configuration in Git repositories without exposing credentials.
- Fetch cert:
kubeseal --fetch-cert - Re-encrypt:
kubeseal --re-encrypt < sealed-secret.yaml - Seal secret:
kubeseal < secret.yaml > sealed-secret.yaml - Validate:
kubeseal --validate < sealed-secret.yaml
Learn more:
- Documentation: Sealed Secrets Documentation
- Examples:
tldr kubeseal
Command-line tool for managing OpenShift clusters, extending standard kubectl functionality. Provides access to OpenShift-specific features like routes, builds, and deployments. Works like kubectl but includes additional commands for OpenShift's enterprise features.
- Debug pod:
oc debug pod-name - Deploy app:
oc new-app image - Get pods:
oc get pods - Get projects:
oc get projects - Get routes:
oc get routes - Login:
oc login https://api.cluster.com - New project:
oc new-project myproject - Port forward:
oc port-forward pod 8080:8080 - Switch project:
oc project myproject - View logs:
oc logs pod-name
Learn more:
- Documentation: OpenShift CLI Documentation
- Man page:
man oc - Examples:
tldr oc
Container engine that runs containers without requiring a background daemon or root access.
Compatible with Docker commands and images but with a more secure architecture.
Drop-in replacement for Docker that eliminates the daemon and allows rootless containers.
DevBase aliases docker to podman for seamless transition.
- Build image:
podman build -t name . - Create pod:
podman pod create --name mypod - Exec into container:
podman exec -it container_id /bin/bash - Generate systemd:
podman generate systemd container_name - List containers:
podman ps -a - List images:
podman images - Remove container:
podman rm container_id - Remove image:
podman rmi image_id - Run container:
podman run -it image - View logs:
podman logs container_id
Alias:
docker→podman(Podman as Docker replacement)
Learn more:
- Documentation: Podman Documentation
- Man page:
man podman - Examples:
tldr podman
Inspects and copies container images between registries without downloading them locally. Works directly with registries to move or examine images without needing a daemon running. Useful for migrating images between registries or inspecting remote images without pulling them.
- Copy image:
skopeo copy docker://source docker://dest - Delete image:
skopeo delete docker://registry/image:tag - Inspect image:
skopeo inspect docker://image:tag - List tags:
skopeo list-tags docker://registry/image - Sync images:
skopeo sync --src docker --dest dir registry/image /path
Learn more:
- Documentation: Skopeo Documentation
- Man page:
man skopeo - Examples:
tldr skopeo
Database GUI that connects to any database with a JDBC driver (PostgreSQL, MySQL, Oracle, etc.). Provides visual database browsing, SQL editing, and data export/import capabilities. Universal database client that works with multiple database types from one application.
- Commit:
Ctrl+Alt+C - Execute SQL:
Ctrl+Enter - Format SQL:
Ctrl+Shift+F - New connection:
Ctrl+Shift+N - Open SQL editor:
F3 - Rollback:
Ctrl+Alt+R
Learn more:
- Documentation: DBeaver Documentation
Analyzes Java application performance through low-overhead flight recordings from the JVM. Profiles CPU usage, memory allocation, and thread behavior without significantly impacting running applications. Diagnoses production performance issues that can't be reproduced in development environments.
- Analyze: Open .jfr file
- Connect to JVM: File → Connect → Create New Connection
- Start:
jmc - Start recording: Start Flight Recording
Learn more:
- Documentation: JMC Documentation
GUI for managing Java keystores, certificates, and cryptographic keys. Provides visual interface for operations that would require complex keytool command-line syntax. Makes certificate management easier when working with Java applications requiring SSL/TLS.
- Create keystore: File → New → JKS/PKCS#12
- Generate keypair: Generate → Generate Key Pair
- Import certificate: Tools → Import Trusted Certificate
- Open keystore:
kse keystore.jks
Learn more:
- Documentation: KeyStore Explorer Documentation
Build tool for Java projects that manages dependencies and standardizes the build process. Uses a pom.xml file to declare dependencies which Maven automatically downloads from repositories. Provides consistent project structure and build lifecycle across Java projects.
- Clean:
mvn clean - Compile:
mvn compile - Create project:
mvn archetype:generate - Dependencies:
mvn dependency:tree - Install:
mvn install - Package:
mvn package - Run:
mvn exec:java - Skip tests:
mvn install -DskipTests - Test:
mvn test
Note: For proxy configuration details, see the Proxy Configuration Reference section.
Learn more:
- Documentation: Maven Documentation
- Man page:
man mvn - Examples:
tldr mvn
Monitors and profiles running Java applications to identify performance problems. Shows CPU usage, memory consumption, thread activity, and allows taking heap dumps. Useful for diagnosing memory leaks, identifying slow methods, and understanding JVM behavior.
- Connect to process: File → Add JMX Connection
- CPU profiling: Click "CPU" button when connected
- Heap dump: Click "Heap Dump" button
- Memory profiling: Click "Memory" button
- Start:
visualvm - Thread dump: Click "Thread Dump" button
Learn more:
- Documentation: VisualVM Documentation
Lints GitHub Actions workflow YAML files to find errors before pushing to GitHub. Validates syntax, shell commands, and expression usage in workflow definitions. Catches common mistakes locally instead of discovering them after triggering CI/CD runs.
- Format output:
actionlint -format '{{.message}}' - Lint workflows:
actionlint - Online check:
actionlint -online - Specific file:
actionlint .github/workflows/ci.yml
Learn more:
- Documentation: Actionlint Documentation
- Examples:
tldr actionlint
Checks Java code against a set of coding standards and style rules. Enforces consistent formatting, naming conventions, and best practices across a codebase. Helps maintain code quality by catching style violations before code review.
- Generate report:
java -jar checkstyle.jar -c config.xml -f xml -o report.xml src/ - Run check:
java -jar checkstyle.jar -c config.xml MyClass.java
Learn more:
- Documentation: Checkstyle Documentation
Open-source antivirus engine that scans files for malware and viruses. Detects threats using signature databases that are updated regularly. Provides virus scanning on Linux systems for files, email attachments, and downloads.
- Daemon status:
systemctl status clamav-daemon - Infected only:
clamscan -i /path - Remove infected:
clamscan --remove /path - Scan directory:
clamscan -r /path - Scan file:
clamscan file - Update database:
freshclam
Learn more:
- Documentation: ClamAV Documentation
- Man page:
man clamscan - Examples:
tldr clamscan
Validates git commits against conventional commit format and repository policies. Ensures commit messages follow a consistent structure and verifies required signatures. Supports local validation and CI-friendly output for commit policy enforcement.
- Check latest commit:
gommitlint validate - Check against base branch:
gommitlint validate --base-branch=main - Init config:
gommitlint config init > .gommitlint.yaml - Version:
gommitlint version
Learn more:
- Documentation: Gommitlint Documentation
Collection of DNS query tools (dig, nslookup, host) for troubleshooting name resolution. Looks up IP addresses for domains, queries specific DNS record types, and traces DNS resolution. Essential for diagnosing connectivity issues related to DNS configuration or propagation.
- Dig query:
dig example.com - Host info:
host example.com - Lookup domain:
nslookup example.com - Query specific server:
dig @8.8.8.8 example.com - Reverse lookup:
dig -x 8.8.8.8 - Trace DNS:
dig +trace example.com
Learn more:
- Man page:
man dig,man nslookup,man host - Examples:
tldr dig
Scans git repositories for accidentally committed secrets like API keys, passwords, and tokens. Detects hardcoded credentials in code and commit history using pattern matching. Prevents sensitive data from being pushed to repositories where it could be exposed. DevBase includes gitleaks in pre-commit hooks for automatic secret scanning of staged files.
- Generate report:
gitleaks detect --report=leaks.json - Protect mode:
gitleaks protect - Scan repo:
gitleaks detect - Scan specific commit:
gitleaks detect --commit=abc123 - Use config:
gitleaks detect --config=.gitleaks.toml
Learn more:
- Documentation: Gitleaks Documentation
- Examples:
tldr gitleaks
Analyzes Dockerfiles for best practices, security issues, and common mistakes. Checks for problems like missing version pins, inefficient layer construction, or deprecated commands. Improves container image quality by catching Dockerfile issues before building.
- Format output:
hadolint -f json Dockerfile - Ignore rules:
hadolint --ignore DL3008 Dockerfile - Lint Dockerfile:
hadolint Dockerfile - Use config:
hadolint -c .hadolint.yaml Dockerfile
Learn more:
- Documentation: Hadolint Documentation
- Examples:
tldr hadolint
Audits Linux systems for security vulnerabilities and configuration issues. Scans system settings, services, and configurations to identify security weaknesses. Provides hardening recommendations to improve system security posture.
- Create report:
sudo lynis audit system --report-file /tmp/report.txt - Quick scan:
sudo lynis audit system --quick - Show warnings only:
sudo lynis show warnings - Specific test:
sudo lynis audit system --tests "BOOT-5202" - System audit:
sudo lynis audit system
Learn more:
- Documentation: Lynis Documentation
- Man page:
man lynis - Examples:
tldr lynis
Generates locally-trusted SSL/TLS certificates for development without browser warnings. Installs a local certificate authority on your machine that your browser trusts. Enables testing HTTPS locally without self-signed certificate errors or security warnings.
- Install CA (one-time):
mkcert -install - Create cert (run from
~/development/devcerts/):mkcert localhost 127.0.0.1mkcert example.com "*.example.com"mkcert -pkcs12 localhost(for Java/Spring Boot)
- Note: mkcert creates files in current directory
- Documentation: Mkcert GitHub
- Man page:
man mkcert - Examples:
tldr mkcert
Static analysis tool that finds potential bugs, dead code, and inefficient patterns in source code. Supports multiple languages and detects issues like unused variables, overly complex methods, or copy-paste duplication. Catches code quality issues before they make it into production.
- Generate report:
pmd check -d src/ -f html -r report.html - List rules:
pmd check -d src/ -R rulesets/java/quickstart.xml --show-suppressed - Run analysis:
pmd check -d src/ -R rulesets/java/quickstart.xml
Learn more:
- Documentation: PMD Documentation
Validates publiccode.yml files that describe software projects developed for the public sector. Checks compliance with the publiccode standard used by government agencies to catalog software. Ensures metadata about public software projects is structured correctly for discovery and reuse.
- Check version:
publiccode-parser-go version - Parse and output:
publiccode-parser-go parse publiccode.yml - Validate file:
publiccode-parser-go validate publiccode.yml
Learn more:
- Documentation: Publiccode Parser Documentation
Downloads content from Riksutställningar (Swedish Travelling Exhibitions) museum databases. Retrieves cultural heritage materials and exhibition data in bulk. Specialized tool for accessing Swedish museum digital collections.
- Download:
rumdl download URL - List formats:
rumdl formats - Specify output:
rumdl download -o output.file URL
Learn more:
- Documentation: RumDL Documentation
Evaluates open source projects against security best practices with an automated score. Checks for things like signed releases, security policies, dependency updates, and code review practices. Helps assess the security risk of using a particular open source dependency.
- Local repo:
scorecard --local . - Output format:
scorecard --format=json --repo=url - Run checks:
scorecard --repo=github.com/owner/repo - Specific checks:
scorecard --checks=Branch-Protection,Code-Review
Learn more:
- Documentation: Scorecard Documentation
Analyzes shell scripts for common errors, portability issues, and bad practices. Catches mistakes like unquoted variables, incorrect conditionals, or deprecated syntax. Prevents shell script bugs before execution and improves cross-platform compatibility. DevBase includes ShellCheck in git hooks for automatic script validation.
- Check script:
shellcheck script.sh - Exclude checks:
shellcheck -e SC2086 script.sh - Format output:
shellcheck -f json script.sh - Set shell:
shellcheck -s bash script.sh
Learn more:
- Documentation: ShellCheck Documentation
- Man page:
man shellcheck - Examples:
tldr shellcheck
Automatically formats shell scripts with consistent indentation and style. Standardizes shell script formatting similar to how gofmt works for Go. Ensures readable, consistently formatted shell code without manual formatting effort.
- Check formatting:
shfmt -d script.sh - Format file:
shfmt -w script.sh - Indent with spaces:
shfmt -i 2 script.sh - List files:
shfmt -l .
Learn more:
- Documentation: Shfmt Documentation
- Examples:
tldr shfmt
Verifies that software artifacts were built from expected source code without tampering. Checks cryptographic attestations that prove where and how an artifact was built. Validates supply chain security by ensuring artifacts match their claimed provenance.
- Source repo:
slsa-verifier verify-artifact file --source-uri github.com/owner/repo - Verify artifact:
slsa-verifier verify-artifact file --provenance-path provenance.json - Verify image:
slsa-verifier verify-image image:tag
Learn more:
- Documentation: SLSA Verifier Documentation
Generates a Software Bill of Materials (SBOM) listing all packages and dependencies in an image or directory. Identifies what software components are included, their versions, and licenses. Essential for security audits, vulnerability scanning, and license compliance tracking.
- Generate SBOM:
syft packages dir:. - Include licenses:
syft packages dir:. --license - Output formats:
syft packages dir:. -o json - Scan image:
syft packages docker:image:tag
Learn more:
- Documentation: Syft Documentation
- Examples:
tldr syft
Manages firewall rules with simple commands instead of complex iptables syntax. Controls which network ports are open and which IP addresses can connect. Makes basic firewall configuration accessible without learning iptables internals.
- Allow from IP:
sudo ufw allow from 192.168.1.100 - Allow port:
sudo ufw allow 22/tcp - Delete rule:
sudo ufw delete allow 80 - Deny port:
sudo ufw deny 3306 - Enable:
sudo ufw enable - Reset:
sudo ufw reset - Status:
sudo ufw status verbose
Learn more:
- Documentation: UFW Documentation
- Man page:
man ufw - Examples:
tldr ufw
Graphical interface for UFW firewall that manages rules through a visual application. Provides the same firewall functionality as UFW but with point-and-click rule management. Easier for users who prefer GUI over command-line for configuring firewall settings.
- Start GUFW: Launch from applications menu or run
gufw - Enable/Disable Firewall: Toggle switch in main window
- Add Rule: Click "+" button to add allow/deny rules
- Preconfigured Profiles: Home, Office, Public network profiles
- Rule Management: View, edit, and delete existing rules visually
- Port Configuration: Specify ports and protocols through dialogs
- Advanced Options: Configure logging, default policies, and rule ordering
- Allow a port: Click "+", select "Simple", choose port and protocol
- Allow an application: Click "+", select "Preconfigured", choose app
- Block incoming: Set "Incoming" policy to "Deny" in main window
- View logs: Enable logging in preferences, view system logs
Learn more:
- Documentation: GUFW Documentation
- Homepage: GUFW Homepage
Automatically formats YAML files with consistent indentation and structure. Standardizes YAML formatting across configuration files in a project. Prevents formatting inconsistencies that can make YAML files harder to read or cause parsing issues.
- Check only:
yamlfmt -lint file.yaml - Config file:
yamlfmt -conf .yamlfmt - Format directory:
yamlfmt . - Format file:
yamlfmt file.yaml
Learn more:
- Documentation: YamlFmt Documentation
Task runner that executes commands defined in a justfile, similar to Make but simpler. Provides a way to document and run project-specific commands with dependencies. Eliminates the need to remember complex command sequences by giving them simple names.
- Choose recipe:
just --choose - Evaluate:
just --evaluate - List recipes:
just --list - Run recipe:
just recipe-name - Show recipe:
just --show recipe-name - Variables:
just variable=value recipe
Learn more:
- Documentation: Just Documentation
- Man page:
man just - Examples:
tldr just
Manages different versions of programming languages and tools on a per-project basis. Automatically switches to the correct Node, Python, or other tool version when entering a project directory. Replaces language-specific version managers (nvm, rbenv, pyenv) with a single unified tool. DevBase uses mise as the primary tool version manager across all environments.
- Current versions:
mise current - Install from .mise.toml:
mise install - Install tool:
mise use node@20 - List installed:
mise list - Set global:
mise use -g node@20 - Uninstall:
mise uninstall node@18 - Update tools:
mise upgrade
Auto-Activation:
- Automatically activates mise for version management
- Adds mise shims to PATH
- Manages tool versions per project
Configuration:
- Experimental features: Enabled
- Legacy version files: Disabled (.nvmrc, .python-version)
- ASDF compatibility: Disabled (native mode)
- Parallel jobs: 6 (configurable)
- Auto-yes: Enabled for automated installs
- HTTP timeout: 90s (for corporate proxies)
- Pre-configured tools: All devbase tools managed via mise
- Backend support: aqua, ubi, core plugins
Learn more:
- Documentation: Mise Documentation
- Man page:
man mise - Examples:
tldr mise
Compiled programming language with built-in concurrency support and static typing. Compiles to standalone binaries without runtime dependencies, simplifying deployment. Designed for building network services, CLI tools, and concurrent applications.
- Build binary:
go build - Format code:
go fmt ./... - Get dependencies:
go get package - Install tool:
go install tool@latest - Module init:
go mod init module-name - Run program:
go run main.go - Test:
go test ./... - Tidy modules:
go mod tidy
Learn more:
- Documentation: Go Documentation
- Examples:
tldr go
Object-oriented programming language that runs on the Java Virtual Machine (JVM). Compiles to bytecode that runs on any platform with a JVM installed (write once, run anywhere). Used extensively for enterprise applications, Android development, and backend services. DevBase includes Temurin OpenJDK builds for optimal performance.
- Classpath:
java -cp lib/* Main - Compile:
javac Main.java - Debug:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 Main - Run:
java Main - Run JAR:
java -jar app.jar - Version:
java --version
Learn more:
- Documentation: Java Documentation
- Man page:
man java - Examples:
tldr java
JavaScript runtime built on Chrome's V8 engine that executes JavaScript outside the browser. Enables server-side JavaScript development with access to file systems, networking, and system resources. Powers web servers, build tools, and CLI applications using JavaScript and the npm package ecosystem.
- Check version:
node --version - Interactive shell:
node - NPX runner:
npx package-name - Package manager:
npm install,npm run script - Run script:
node script.js - Run with inspect:
node --inspect script.js
Learn more:
- Documentation: Node.js Documentation
- Man page:
man node - Examples:
tldr node
Interpreted programming language with emphasis on code readability and simplicity. Used for web development, data analysis, automation, scientific computing, and scripting. Features extensive standard library and third-party packages for virtually any domain.
- Activate venv:
source venv/bin/activate(Fish:source venv/bin/activate.fish) - Freeze deps:
pip freeze > requirements.txt - Install package:
pip install package - Interactive shell:
python - Requirements:
pip install -r requirements.txt - Run module:
python -m module - Run script:
python script.py - Virtual environment:
python -m venv venv
Learn more:
- Documentation: Python Documentation
- Man page:
man python3 - Examples:
tldr python
Interpreted programming language designed for simplicity and productivity with elegant syntax. Emphasizes convention over configuration and is widely used for web development via Rails framework. Features powerful metaprogramming capabilities and a rich ecosystem of gems (libraries).
- Check version:
ruby --version - Install gems:
gem install gem_name - Interactive shell:
irb - List installed gems:
gem list - Run script:
ruby script.rb - Update gems:
gem update - Bundle install:
bundle install(install dependencies from Gemfile) - Bundle exec:
bundle exec command(run command with bundled gems)
- Create Gemfile:
bundle init - Install dependencies:
bundle install - Update dependencies:
bundle update - Check outdated:
bundle outdated - Run with bundle:
bundle exec ruby script.rb
Learn more:
- Documentation: Ruby Documentation
- Man page:
man ruby - Examples:
tldr ruby
Systems programming language focused on safety, speed, and concurrency without garbage collection. Prevents memory errors at compile time through ownership system and borrow checker. Used for performance-critical applications, CLI tools, systems programming, and WebAssembly.
- Check version:
rustc --version,cargo --version - Create new project:
cargo new project_name - Create library:
cargo new --lib lib_name - Build project:
cargo build(debug),cargo build --release(optimized) - Run project:
cargo run - Run tests:
cargo test - Check code:
cargo check(faster than build, checks compilation) - Format code:
cargo fmt - Lint code:
cargo clippy - Update dependencies:
cargo update
- Add dependency: Edit
Cargo.tomland runcargo build - Search crates:
cargo search crate_name - Install binary:
cargo install crate_name - List installed:
cargo install --list - Clean build:
cargo clean - Generate docs:
cargo doc --open - Benchmark:
cargo bench
- rustfmt - Code formatter (included with Rust)
- clippy - Linter for catching common mistakes (included)
- rustup - Rust toolchain installer (managed by mise)
- cargo-edit -
cargo install cargo-editforcargo addcommand - cargo-watch -
cargo install cargo-watchfor auto-rebuild on file changes
Learn more:
- Documentation: Rust Documentation
- Cargo Book: The Cargo Book
- Examples:
tldr rustc
Integrated development environment specialized for Java with advanced code analysis and refactoring. Provides intelligent code completion, navigation, and debugging for Java projects.
- Debug:
Shift+F9 - Find action:
Ctrl+Shift+A - Find usages:
Alt+F7 - Generate code:
Alt+Insert - Go to declaration:
Ctrl+B - Open project:
idea . - Refactor:
Ctrl+Alt+Shift+T - Run:
Shift+F10 - Search everywhere:
Shift Shift
Learn more:
- Documentation: IntelliJ IDEA Documentation
Curated set of Visual Studio Code extensions for common development tasks. Adds language support, linting, formatting, and debugging capabilities to VS Code. Pre-selected extensions that work well together for DevBase development workflows.
Extensions are organized by language pack. Core extensions are always installed when VS Code extensions are enabled. Pack-specific extensions are only installed when that language pack is selected.
Core (always installed):
- YAML - YAML language support with schema validation
- SonarLint - Code quality and security analysis
- SARIF Viewer - View static analysis results
- i18n Ally - Internationalization support
- Material Icon Theme - File and folder icons
- AsciiDoctor - AsciiDoc preview and editing
- Neovim - Vim keybindings (optional)
- Everforest - Green-based color theme
- Catppuccin - Pastel color theme
- Tokyo Night - Dark color theme
- Gruvbox - Retro groove color theme
- Nord - Arctic color theme
- Dracula - Dark color theme
- Solarized - Precision color theme
Java pack:
- Extension Pack for Java - Complete Java development environment
- Checkstyle - Java code style checker
Node pack:
- ESLint - JavaScript/TypeScript linting
- Prettier - Code formatter
- Tailwind CSS IntelliSense - Tailwind CSS autocomplete
- Volar - Vue.js language support
Python, Go, Ruby, Rust packs: No additional VS Code extensions.
Note: If you don't select the Node pack, ESLint and Prettier extensions won't be installed since they require Node.js runtime.
Extensions are not installed during DevBase setup. After setup completes, use the convenience function:
# Install extensions based on your selected language packs
devbase-vscode-extensions
# List extensions that would be installed
devbase-vscode-extensions --list
# Preview installation without installing
devbase-vscode-extensions --dry-runThe function reads your preferences from $XDG_CONFIG_HOME/devbase/preferences.yaml (default: ~/.config/devbase/preferences.yaml) and installs:
- Core extensions (always)
- Pack-specific extensions (based on your selected language packs)
On WSL, the function automatically targets your Remote-WSL VS Code instance by using either Windows VS Code with --remote or the VS Code Server remote CLI.
You can run this function anytime to install or update extensions.
Extension Pack for Java (vscjava.vscode-java-pack
- Complete Java development environment including debugging, testing, and Maven/Gradle support.
- Bundles Language Support, Debugger, Test Runner, Maven, Project Manager, and IntelliCode.
- Essential for Java development with syntax highlighting, code completion, and refactoring.
Volar (Vue.volar
- Official Vue.js language support with TypeScript integration.
- Provides template type checking, component intelligence, and auto-imports.
- Required for Vue 3 development, replaces legacy Vetur extension.
YAML (redhat.vscode-yaml
- YAML language support with schema validation and auto-completion.
- Validates Kubernetes manifests, CI/CD configs, and other YAML files.
- Detects common YAML syntax errors like indentation and type mismatches.
ESLint (dbaeumer.vscode-eslint
- Integrates ESLint JavaScript linter into VS Code for real-time error detection.
- Shows linting errors inline and provides automatic fixes for many issues.
- Enforces code style and catches common JavaScript/TypeScript mistakes.
Prettier (esbenp.prettier-vscode
- Opinionated code formatter supporting JavaScript, TypeScript, CSS, JSON, and more.
- Automatically formats code on save to maintain consistent style across projects.
- Works alongside ESLint for comprehensive code quality management.
Checkstyle (shengchen.vscode-checkstyle
- Integrates Checkstyle Java code style checker into VS Code.
- Highlights style violations inline and provides quick fixes.
- Enforces Java coding standards configured in checkstyle.xml files.
SonarLint (SonarSource.sonarlint-vscode
- Detects code quality issues and security vulnerabilities as you write code.
- Supports Java, JavaScript, TypeScript, Python, PHP, and more.
- Provides detailed explanations and fix suggestions for detected issues.
Tailwind CSS IntelliSense (bradlc.vscode-tailwindcss
- Auto-completion, syntax highlighting, and linting for Tailwind CSS classes.
- Shows color previews and CSS definitions on hover.
- Essential for Tailwind CSS development with class validation and suggestions.
Neovim (asvetliakov.vscode-neovim
- Embeds real Neovim instance for native Vim keybindings and modal editing.
- Provides authentic Vim experience with full init.vim/init.lua support.
- Faster and more accurate than VS Code's built-in Vim emulation.
Material Icon Theme (PKief.material-icon-theme
- File and folder icons based on Material Design for better visual navigation.
- Instantly recognize file types by their distinctive icons in the explorer.
- Improves code organization visibility and reduces mental overhead.
SARIF Viewer (MS-SarifVSCode.sarif-viewer
- Views Static Analysis Results Interchange Format (SARIF) files from security scanners.
- Displays results from tools like CodeQL, Semgrep, and other static analyzers.
- Navigates to source locations and provides detailed vulnerability information.
Learn more:
- VS Code Marketplace: Visual Studio Code Marketplace
- Extension Docs: Each extension name above links to its marketplace page
Open-source web browser that forms the basis for Google Chrome, without Google-specific additions. Provides modern web standards support and developer tools for testing web applications. Useful for web development testing or as a privacy-focused alternative to Chrome.
- App mode:
chromium --app=https://example.com - Disable plugins:
chromium --disable-plugins - Incognito:
chromium --incognito - Open:
chromium - User data dir:
chromium --user-data-dir=/path
Learn more:
- Documentation: Chromium Documentation
- Man page:
man chromium - Examples:
tldr chromium
Open-source web browser with strong privacy protections and comprehensive developer tools. Independent rendering engine (not Chromium-based) useful for cross-browser testing. Provides built-in developer tools for debugging, profiling, and testing web applications.
DevBase installs Firefox from Mozilla's official APT repository (not Ubuntu's snap package) for full smart card/PKCS#11 support.
- New instance:
firefox --new-instance - Open:
firefox - Private window:
firefox --private-window - Profile manager:
firefox -P - Safe mode:
firefox --safe-mode
Firefox is configured to use OpenSC for smart card authentication (non-WSL only).
devbase-firefox-opensc - Configure Firefox for smart card support:
devbase-firefox-opensc # Configure OpenSC PKCS#11 moduleThis command:
- Adds OpenSC PKCS#11 module to Firefox's security devices
- Enables smart card authentication for websites requiring client certificates
- Requires
pcscdservice running:sudo systemctl enable --now pcscd
Note: If Firefox was just installed, launch it once to create a profile, then run devbase-firefox-opensc.
To verify smart card is detected:
- Insert your smart card
- Open Firefox → Settings → Privacy & Security → Security Devices
- You should see "OpenSC" with your card reader listed
Learn more:
- Documentation: Firefox Documentation
- Man page:
man firefox - Examples:
tldr firefox
Accesses BitLocker-encrypted Windows drives from Linux. Mounts encrypted Windows partitions by decrypting them with a password or recovery key. Enables reading and writing Windows drives from Ubuntu without booting into Windows. Automatically installed on native Ubuntu only (WSL accesses Windows drives directly).
-
Mount BitLocker volume:
sudo dislocker /dev/sdXN -u -- /mnt/bitlocker sudo mount -o loop /mnt/bitlocker/dislocker-file /mnt/windows
-
Read-only mount: Add
-rflag -
With password:
sudo dislocker /dev/sdXN -uPASSWORD -- /mnt/bitlocker -
With recovery key:
sudo dislocker /dev/sdXN -p RECOVERY-KEY -- /mnt/bitlocker
Learn more:
- Documentation: Dislocker Documentation
- Man page:
man dislocker
Manages laptop power settings to extend battery life on Linux. Automatically adjusts CPU frequency, disk spin-down, screen brightness, and peripheral power based on power source. Optimizes battery usage without requiring manual configuration of power management settings. Automatically installed on native Ubuntu laptops only (not needed in WSL).
- Battery status:
sudo tlp-stat -b - Check status:
sudo tlp-stat -s - Configuration:
sudo tlp-stat -c - Recalibrate battery:
sudo tlp recalibrate - Start TLP:
sudo tlp start
- Config file:
/etc/tlp.conf - Enable at boot: Automatic (systemd service)
- AC vs Battery modes: Auto-switches
Learn more:
- Documentation: TLP Documentation
- Man page:
man tlp - Examples:
tldr tlp
Removes unnecessary files and clears privacy-sensitive data from the system. Frees disk space by deleting cached files, temporary files, cookies, and browser history. Helps maintain privacy by securely wiping traces of computer usage across applications.
- Start GUI: Launch from applications menu or run
bleachbit - Command line:
bleachbit --listto see cleaners,bleachbit --clean <cleaner>to run - Preview deletions:
bleachbit --preview <cleaner>to see what will be deleted - Clean system:
sudo bleachbit --clean system.*for system-wide cleaning - Shred files:
bleachbit --shred file.txtto securely delete files
- Browser data: Cleaners for Firefox, Chrome, Chromium cache and history
- System cache: APT cache, thumbnail cache, temporary files
- Application data: Cache and logs from various Linux applications
- Free space: Overwrite free disk space to prevent file recovery
- Preview mode: Shows what will be deleted before cleaning
- Cleaner selection: Check boxes for different types of data to clean
- Shred files/folders: Right-click context menu integration for secure deletion
- Wipe free space: Overwrite unused disk space for privacy
Learn more:
- Documentation: BleachBit Documentation
- Homepage: BleachBit
Citrix Workspace App provides access to virtual desktops and applications hosted on Citrix infrastructure.
Not installed by default - use the devbase-citrix command to download and install when needed.
Supports smart card authentication when pcscd service is enabled.
# Check available version
devbase-citrix --check
# Download and install
devbase-citrixThis will download and install:
icaclient- Main Citrix Workspace Appctxusb- USB device redirection support
For smart card authentication with Citrix:
# Enable PC/SC smart card daemon
sudo systemctl enable --now pcscd- Check version:
devbase-citrix --check - Install:
devbase-citrix - Show help:
devbase-citrix --help
Learn more:
- Documentation: Citrix Workspace App for Linux
- Downloads: Citrix Downloads
Terminal and editor themes configuration for consistent appearance.
Applies consistent color schemes across all terminal tools with a single command. Changes themes for bat, delta, FZF, Neovim, K9s, Lazygit, Zellij, and terminal emulators simultaneously. Maintains visual consistency across your development environment without configuring each tool separately.
# Switch to a different theme
devbase-theme catppuccin-mocha
devbase-theme everforest-light
devbase-theme gruvbox-dark
# See available themes
devbase-themeAffects: bat, delta, btop, eza, FZF, K9s, Neovim, vifm, Lazygit, Zellij, Ghostty (native Ubuntu), Windows Terminal (WSL)
WSL Users: DevBase now automatically updates Windows Terminal color schemes!
- Run
install-windows-terminal-themesonce to install custom themes (10 themes, Solarized uses built-in) devbase-themeautomatically changes Windows Terminal colors to match- Changes apply immediately (no restart needed)
- Solarized themes use Windows Terminal's built-in versions
SSH keys provide secure, passwordless authentication to remote servers.
Authenticates to remote servers and Git repositories using cryptographic key pairs instead of passwords. Generates public/private key pairs where the private key stays on your machine and public key goes on servers. More secure than passwords because keys can't be guessed or brute-forced, and different keys can be used for different services.
# Generate new SSH key (ED25519 - modern standard, DevBase default)
ssh-keygen -t ed25519 -C "your_email@example.com"
# Or RSA (if ED25519 not supported by legacy systems)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# With specific filename
ssh-keygen -t ed25519 -f ~/.ssh/mykey_ed25519# Start SSH agent
eval "$(ssh-agent -s)"
# Add key to agent (use your key name)
ssh-add ~/.ssh/id_ed25519_devbase
# or for ECDSA: ssh-add ~/.ssh/id_ecdsa_521_mycompany
# List keys in agent
ssh-add -l
# Remove all keys from agent
ssh-add -D
# Copy public key to clipboard (use your key name)
cat ~/.ssh/id_ed25519_devbase.pub | xclip -selection clipboard# Using ssh-copy-id (recommended - automatically uses your default key)
ssh-copy-id user@hostname
# Manual method (use your key name)
cat ~/.ssh/id_ed25519_devbase.pub | ssh user@hostname 'cat >> ~/.ssh/authorized_keys'
# Specific port
ssh-copy-id -p 2222 user@hostnameCreate ~/.ssh/config for connection shortcuts:
Host myserver
HostName example.com
User myuser
Port 22
IdentityFile ~/.ssh/id_ed25519_devbase # Use your key name
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/github_key # Or use a separate key for GitHub
Host *
AddKeysToAgent yes
# Set correct permissions (replace with your key name)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519_devbase # private key
chmod 644 ~/.ssh/id_ed25519_devbase.pub # public key
chmod 600 ~/.ssh/config
chmod 600 ~/.ssh/authorized_keys# Test SSH connection
ssh -T git@github.com
# Verbose mode for debugging
ssh -vvv user@hostname
# Use specific key
ssh -i ~/.ssh/specific_key user@hostnameDifferent tools use different formats for proxy bypass lists. This reference helps configure proxies correctly across your development toolchain, especially important in corporate environments with proxy servers.
| Tool/Language | http_proxy |
HTTP_PROXY |
https_proxy |
HTTPS_PROXY |
Precedence |
|---|---|---|---|---|---|
| curl | ✅ | ❌ (security) | ✅ | ✅ | lowercase |
| wget | ✅ | ❌ | ✅ | ❌ | lowercase only |
| Ruby | ✅ | ✅ (warning) | ✅ | ✅ | lowercase |
| Python | ✅ | ✅ (if REQUEST_METHOD not set) |
✅ | ✅ | lowercase |
| Go | ✅ | ✅ | ✅ | ✅ | UPPERCASE |
| Java | N/A (uses system properties) | N/A | N/A | N/A | N/A |
Always use lowercase http_proxy and https_proxy - they are universally supported. Uppercase forms have inconsistent support and can cause issues.
| Tool/Language | no_proxy |
NO_PROXY |
Suffix Match? | Leading . Stripped? |
* = All? |
CIDR? | Case Precedence |
|---|---|---|---|---|---|---|---|
| curl | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | lowercase |
| wget | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | lowercase only |
| Ruby | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | lowercase |
| Python | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | lowercase |
| Go | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | UPPERCASE |
| Java | N/A | N/A | ❌ (uses http.nonProxyHosts) |
❌ | ✅ | ❌ | N/A |
Maven/Java: Uses http.nonProxyHosts system property with pipe separator
- Format:
localhost|127.0.0.1|*.example.com - Wildcard:
*.example.commatches subdomains, NOT bare domain - Does NOT match suffixes automatically (unlike curl/wget/Ruby/Python/Go)
Different tools interpret domain patterns differently:
| Pattern | curl | wget | Ruby | Python | Go | Java/Maven |
|---|---|---|---|---|---|---|
example.com |
Matches example.com and *.example.com |
Matches example.com and *.example.com |
Matches example.com and *.example.com |
Matches example.com and *.example.com |
Matches example.com and *.example.com |
Exact match only |
.example.com |
Strips ., matches example.com and *.example.com |
Literal match (.example.com only) |
Strips ., matches example.com and *.example.com |
Strips ., matches example.com and *.example.com |
Literal match (.example.com only) |
Not supported |
*.example.com |
Matches sub.example.com but NOT example.com |
Matches sub.example.com but NOT example.com |
Matches sub.example.com but NOT example.com |
Matches sub.example.com but NOT example.com |
Matches sub.example.com but NOT example.com |
Matches sub.example.com but NOT example.com |
- Suffix matching works in all implementations EXCEPT Java/Maven - most tools automatically match subdomains
- Leading dot (
.) behavior varies - curl/Ruby/Python strip it, wget/Go treat it literally - wget is the most restrictive - doesn't strip leading dots, doesn't support
NO_PROXY(uppercase), doesn't support*to match all - Go prefers UPPERCASE - this can cause issues in multi-language applications (see GitLab article below)
- Always use lowercase
http_proxy,https_proxy,no_proxy - For
no_proxyentries:- Use bare domains without leading dot:
example.com(not.example.com) - All tools will match suffixes automatically (except Java)
- Comma-separated list:
localhost,127.0.0.1,example.com,internal.net
- Use bare domains without leading dot:
- For Java/Maven specifically:
- Use pipe-separated:
localhost|127.0.0.1|*.example.com|example.com - Explicitly list both
*.example.comANDexample.comfor full coverage - Java does NOT auto-match suffixes
- Use pipe-separated:
- Avoid:
- Leading dots (
.example.com) - inconsistent behavior - CIDR blocks - only Ruby and Go support them
- IP addresses unless explicitly used by clients
- Uppercase forms unless absolutely necessary (and make them identical to lowercase)
- Leading dots (
For shell tools (curl, wget, etc):
export http_proxy=http://proxy.example.com:8080
export https_proxy=http://proxy.example.com:8080
export no_proxy=localhost,127.0.0.1,example.com,internal.netFor Java/Maven tools:
export JAVA_TOOL_OPTIONS="-Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=8080 -Dhttp.nonProxyHosts=localhost|127.0.0.1|*.example.com|example.com|*.internal.net|internal.net"DevBase automatically configures curl for WSL environments to prevent connection reuse issues commonly encountered with corporate proxies.
On WSL systems, DevBase creates a Fish shell alias that forces curl to use proxy-friendly settings:
alias curl='curl --no-keepalive --no-sessionid -H "Connection: close"'What this does:
--no-keepalive- Disables HTTP keep-alive (prevents connection reuse)--no-sessionid- Prevents SSL/TLS session ID reuse-H "Connection: close"- Explicitly requests connection closure after each request
Why this is needed on WSL: Corporate proxies often have issues with persistent connections, connection pooling, and session reuse. These settings force curl to establish fresh connections for each request, improving reliability when working behind proxies.
Location: ~/.config/fish/conf.d/00-curl-proxy.fish (auto-generated on WSL only)
Note: This alias only affects the Fish shell. If using bash, add the alias manually to ~/.bashrc.
- Maven Proxy Configuration - Official Maven proxy guide
- Java Networking Properties - Java network system properties
- GitLab: Can we standardize NO_PROXY? - Detailed analysis of proxy inconsistencies across languages and real-world troubleshooting case study