Features
Ten areas, with the boundaries written down
Each section below describes behaviour that exists in the source, plus the limits of that behaviour. Where something is untested on Windows, it is marked as untested rather than described as working.
01Editor
Editor
Exact pixel geometry. Every control updates the preview on the same frame, at 1:1 physical pixels.
- Per-axis arm lengths, so a horizontal/vertical asymmetry is a setting, not a trick
- Separate gaps per axis: open the centre vertically while keeping the sides tight
- Any arm can be switched off independently
- Centre dot in square or round, with its own colour if you want one
- Centre ring with its own diameter and thickness
- Rotation and horizontal/vertical offset for crosshairs that deliberately sit off-centre
- Undo and redo, with a slider drag counted as one step
02Styles
Styles
Seven starting points that write element flags into the configuration. Nothing is locked: every element stays editable.
- Classic, Cross + dot, Dot, Circle, Ring + dot, Compact, Cross + ring
- Applying a style never touches colour, opacity, outline colour, glow colour or placement
- A geometry reset returns values to the current style's defaults without changing which elements are visible
03Overlay
Overlay
A real desktop window: borderless, transparent, always on top, and click-through.
- No taskbar button and no Alt-Tab entry for the overlay itself
- Live update while it runs: change thickness and the desktop crosshair changes with the editor
- Positioned from real monitor rectangles, including negative virtual-desktop coordinates
- Repositions when a display is added, removed, moved or resized
- Nothing renders while the crosshair and display state are unchanged
04Input transparency
Input transparency
The overlay never takes your mouse or your keyboard focus, and it never becomes the active window.
- Extended window styles plus hit-testing, chosen for a window that must not be hit at all
- Click, double-click, right-click and drag pass through to whatever is underneath
- The cursor shape is never changed by the overlay
- Verified against ordinary desktop windows; game verification is on the manual matrix and is not yet done
Verified against desktop windows; not yet against games
Click-through is implemented with extended window styles plus hit-testing, and was reasoned about rather than observed in this environment. Testing it against a running game is on the manual matrix and has not been performed.
05Dynamic crosshair switching
Dynamic crosshair switching
Assign your own keys to saved crosshairs and swap the overlay mid-game. No game mapping is assumed and no weapon is ever detected.
- Bare keys such as 1 or 2 are supported, which a global hotkey cannot do
- A low-level keyboard observer that always passes the key on: never swallowed, remapped, delayed or synthesised
- Auto-repeat suppressed, so holding a key does not storm through switches
- Exact modifier matching: a bare 1 never fires for Ctrl+1, and Ctrl+1 never fires for a bare 1
- Ignored while the feature is off, while the overlay is stopped, while crshX has focus, and while a key is being recorded
- Optional restriction to one foreground application, by process name
- Nothing is written to disk when you press a key
| Situation | Why |
|---|---|
| The feature is off | Nothing can run globally unless you asked for it. |
| No bindings exist | The listener is not installed at all. |
| The overlay is stopped | Switching has nothing to change, and the overlay is never started implicitly. |
| crshX has focus | Typing a preset name must never swap your crosshair. |
| A key is being recorded | The key you are assigning must not also fire. |
| The foreground filter is on and another application is in front | Optional restriction; the ignition is deliberate. |
| The key has a modifier set you did not configure | A bare 1 never fires for Ctrl+1, and Ctrl+1 never fires for 1. |
| The assigned crosshair was deleted | The row is flagged and skipped instead of silently following a different crosshair. |
| Rule | What happens |
|---|---|
| Duplicate keys are refused | The new assignment is rejected with the name of the crosshair that owns the key. The existing binding is not overwritten. |
| Keys owned by a crshX shortcut are refused | By default Ctrl+Alt+X, Ctrl+Alt+C and Ctrl+Alt+E. Change the shortcut first if you want the combination for switching. |
| Modifier-only keys cannot be bound | Shift, Ctrl, Alt and the Windows key are ignored as bindings because they are used as modifiers. |
| Movement keys technically work but are a bad idea | W, A, S, D and Space would switch crosshair every time you walk. Bare number keys and function keys are the practical choice. |
06Preset library
Preset library
Eight original presets ship with the application, and your own save, duplicate, rename, favourite, search and filter.
- Built-in presets can be restored after editing or deleting them
- Search matches name, description and style; filter by style or favourites
- Names collide safely: a duplicate gets a suffix rather than overwriting an existing crosshair
07Profiles
Profiles
Bind a crosshair and a display to a profile, with optional per-game associations.
- Manual activation at any time
- Optional foreground detection using only the process name and window title of the application in front
- Automatic detection is opt-in, and its limits are documented rather than guessed at
08Import, export and files
Import, export and files
A documented, versioned JSON format with strict validation, and files you can read and fix by hand.
- Export a single crosshair or a whole library
- Import validates schema version, ranges, string lengths, colour formats and identifiers
- A malformed file is refused with a readable reason and changes nothing
- Imported crosshairs always receive new identifiers, so an import can never overwrite your work
- A previous-good backup of every data file is kept, and an unreadable file is quarantined rather than silently replaced
09Settings and shortcuts
Settings and shortcuts
Theme, reduced motion, overlay startup behaviour, launch at sign-in, shortcuts, logs and a diagnostics report.
- Dark, light, or follow Windows
- Shortcuts require at least one modifier, report conflicts instead of taking them, and are released on exit
- Launch at sign-in is off until you ask for it
- A one-click diagnostics report with versions, displays, overlay state and recent log lines
10Resource use
Resource use
No polling loops, no per-frame timer, and no rendering when nothing has changed.
- The overlay redraws when the crosshair or the display configuration changes, and at no other time
- No network activity at all, so no background calls, retries or update checks
- Idle CPU and memory figures are on the manual test matrix and have not been measured yet on Windows
11Reference
Every configurable value
The editor's ranges, exactly as the application enforces them. A value outside its range is clamped on load rather than rejected, so a hand-edited preset file cannot produce an unrenderable crosshair.
| Setting | Range | Step | Unit |
|---|---|---|---|
| Arm length, horizontal | 0 – 200 | 1 | px |
| Arm length, vertical | 0 – 200 | 1 | px |
| Line thickness | 1 – 20 | 1 | px |
| Gap, horizontal | 0 – 80 | 1 | px |
| Gap, vertical | 0 – 80 | 1 | px |
| Setting | Range | Step | Unit |
|---|---|---|---|
| Dot size | 1 – 40 | 1 | px |
| Ring diameter | 4 – 256 | 1 | px |
| Ring thickness | 1 – 20 | 1 | px |
| Setting | Range | Step | Unit |
|---|---|---|---|
| Opacity | 0.05 – 1 | 0.05 | — |
| Outline thickness | 1 – 12 | 1 | px |
| Glow radius | 1 – 24 | 1 | px |
| Setting | Range | Step | Unit |
|---|---|---|---|
| Rotation | -180 – 180 | 1 | ° |
| Horizontal offset | -600 – 600 | 1 | px |
| Vertical offset | -600 – 600 | 1 | px |
Element toggles — top, bottom, left and right arms, centre dot, centre ring, outline and glow — are switches rather than ranges, and are not listed above.
12Files
Where your data lives
Under your own application data folder, never in the install directory, and never on a server. Ordinary JSON you can read, diff and fix by hand.
| File | Contains | Notes |
|---|---|---|
settings.json | Preferences, shortcuts, overlay behaviour, dynamic switching bindings | Repaired on load if hand-edited into an invalid state; the original is kept as .bak |
presets.json | Your crosshair library | Built-in presets are re-seedable at any time |
profiles.json | Profiles, their crosshairs, displays and game associations | A broken entry is repaired rather than dropped where possible |
*.json.bak | The last known good copy of each file above | Used automatically when the primary file cannot be read |
logs/ | Rolling logs, one file per day | 1 MB per file, five files kept. No credentials exist to log. |
exports/ | Default location for exported crosshairs and libraries | Ordinary JSON you can read, diff and edit |