Intent-driven desktop code navigation for large projects.
CodeJump is a compact desktop overlay for Linux and macOS built with Python and Flet. It is not an editor, not an IDE, and not a replacement for VS Code or Cursor. Its job is narrow and fast: index a project, understand short developer intent queries, rank likely files, folders and symbols, and jump you straight into your configured editor.
This project is a desktop utility first.
- The main product is the windowed overlay app.
filejumpis only a convenience launcher for opening that desktop app.- The terminal is part of installation and launch, not the core UX.
git clone <your-repo-url>
cd FileJumpOverlay
bash init.shIf init.sh is not executable:
chmod +x init.sh
./init.shThen open the app with either:
filejumpor:
python -m codejump.maininit.sh will:
- create
.venvif it does not exist - install or refresh dependencies inside that virtualenv
- install a
filejumplauncher - start the desktop app
Launcher install target order:
/usr/local/binif writable~/.local/binif writable./.local/bininside the project as a safe fallback
CodeJump is optimized for queries like:
payment summary
activity controller
login page
firestore user model
campcash stripe
It indexes:
- files
- folders
- lightweight symbols
It then scores results using explicit lexical logic:
- exact file name matches get strong priority
- symbol matches get strong priority
- path token matches matter
- preview token matches help
- recent opens and recent queries add a small boost
- weak/noisy matches are penalized
Modern codebases are large, deeply nested, and inconsistent in naming style. Exact-match file search is useful, but it breaks down when the developer only remembers intent or concept.
CodeJump closes that gap by normalizing:
- natural language
snake_casecamelCasekebab-case- slash-separated paths
and then ranking candidates that feel semantically close without adding AI, embeddings, AST-heavy parsing, or a heavyweight runtime.
Recommended from source:
git clone <your-repo-url>
cd FileJumpOverlay
bash init.shManual setup:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtRequirements:
- Python 3.11+
- Linux or macOS
- one supported editor CLI if you want jump-to-editor behavior:
codecursorzed
Primary launch options:
filejumpor:
python -m codejump.mainfilejump is not a separate CLI product. It simply opens the CodeJump desktop app after init.sh installs the launcher.
Typical flow inside the app:
- Add a project from the header.
- Set name, root path, and editor command.
- Reindex the project.
- Type a short intent query.
- Move with arrow keys.
- Press
Enterto open the selected result.
Keyboard behavior:
Arrow Up/Arrow Down: move selectionEnter: open selected resultEsc: clear query, or minimize when query is emptyCtrl+C/Cmd+C: copy selected path
Each project stores:
nameroot_patheditor_commandpriority_extensionsignored_dirsaliases
Notes:
priority_extensionsis a comma-separated list like.ts, .tsx, .dartignored_dirsis a comma-separated list of extra ignored foldersaliasesis persisted now and reserved for future ranking improvements
If a project path no longer exists, CodeJump keeps the project entry but marks it as missing in the UI.
CodeJump uses explicit tokenization and scoring, not opaque ranking.
The tokenizer normalizes:
- lowercase text
snake_casecamelCasekebab-case- dotted names
- route/path segments
So a query like:
payment modes activity
can still surface candidates such as:
activity_edit_controller.dartgetTurnPaymentModes.jspayment_summary_entity.dart
Ranking is handled in dedicated core modules, not in the UI.
Signals currently used:
- exact file-name match
- exact or fuzzy symbol-name token match
- token coverage across name/path/preview
- ordered token matches
- preferred extension boost
- recent open boost
- recent query boost
- short path bonus
- weak coverage penalty
The UI also shows a short explanation for why a result matched.
V1 indexes:
filefoldersymbol
Symbol detection is regex-based and intentionally lightweight.
Supported languages in V1:
- Dart
- Python
- JavaScript
- TypeScript
Examples detected:
class Xenum Xextension Xtypedef Xdef x(...)async def x(...)function x(...)const x =exports.x =module.exportsrouter.get(...)app.post(...)
File opening is implemented in codejump/core/opener.py.
Supported commands:
codecursorzed
Line-aware behavior:
code -g path:linecursor -g path:linezed path:line
If the editor command is missing or fails, the app shows a visible message instead of crashing.
CodeJump is designed as a desktop overlay:
- resizable
- minimizable
- usable in narrow vertical layouts
- usable in wider desktop layouts
- supports always-on-top
Defaults:
- dark theme
- geometry remembered by default
- start with last project enabled
- start with last query disabled
Geometry persistence includes:
- width
- height
- left
- top
- always-on-top state
- selected project
- last query
If saved geometry is invalid, CodeJump falls back to a safe default overlay position.
CodeJump uses plain JSON files. No database is required for V1.
Tracked runtime files:
codejump/config/settings.jsoncodejump/config/projects.jsoncodejump/data/history.json
Per-project index cache:
codejump/data/index_cache/<project_id>.json
init.sh is intentionally idempotent.
You can run it repeatedly:
./init.shThat will:
- reuse the local virtualenv if present
- reinstall dependencies into that same environment
- refresh the
filejumplauncher - launch the desktop app
This is useful when:
- you pulled new changes
- dependencies changed
- your shell launcher was not created before
Project layout:
codejump/
main.py
app/
ui/
main_view.py
header.py
search_bar.py
results_list.py
preview_panel.py
settings_dialog.py
project_dialog.py
theme.py
controllers/
app_controller.py
search_controller.py
settings_controller.py
project_controller.py
core/
models.py
enums.py
search_engine.py
scorer.py
tokenizer.py
symbol_extractors.py
project_indexer.py
opener.py
geometry.py
storage/
settings_store.py
projects_store.py
history_store.py
index_store.py
utils/
paths.py
validators.py
platform_helpers.py
logging_setup.py
assets/
Layer responsibilities:
core: search/index/open logicstorage: JSON persistencecontrollers: application state orchestrationui: Flet controls and view compositionutils: platform, validation, paths, logging
Each result can expose:
- display name
- item type
- relative path
- short preview
- line number
- match explanation
The preview panel shows:
- full path
- type / symbol metadata
- line if available
- preview excerpt
- quick actions
Default ignored paths:
.gitnode_modulesbuilddist.dart_tool.nextcoverage.venvvenv__pycache__ios/Podsandroid/.gradle
You can add more ignored directories per project.
Use short, intent-heavy phrases:
payment summary
user firestore model
login page
activity controller
stripe campcash
window geometryThe engine is better with concept words than with full sentences.
Useful commands:
python3 -m compileall codejump
bash -n init.shRebuild environment and relaunch:
./init.shV1 intentionally does not include:
- AI search
- embeddings
- AST-heavy parsing
- filesystem watchers
- cloud sync
- login
- analytics
- editor features
Known boundaries:
- symbol extraction is regex-based
- search quality depends on naming quality and token overlap
- only a small set of editor CLIs are supported
Natural next extensions without changing the product shape:
- alias-aware ranking
- file watchers for automatic reindex hints
- more editor adapters
- result filters by type
- smarter path preference heuristics
- project groups / workspaces
CodeJump is meant to feel like a utility you keep open beside the editor, not a destination product. It should stay compact, direct, and technical.