{"id":40805322,"url":"https://github.com/dd86k/ddhx","last_synced_at":"2026-01-24T16:06:50.469Z","repository":{"id":37382251,"uuid":"85242167","full_name":"dd86k/ddhx","owner":"dd86k","description":"🪄 dd's hex editor","archived":false,"fork":false,"pushed_at":"2026-01-22T01:32:19.000Z","size":3346,"stargazers_count":29,"open_issues_count":2,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-01-22T07:39:39.773Z","etag":null,"topics":["console","hex-editor","terminal","terminal-app"],"latest_commit_sha":null,"homepage":"","language":"D","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dd86k.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-03-16T21:13:45.000Z","updated_at":"2026-01-22T01:32:23.000Z","dependencies_parsed_at":"2024-05-17T20:40:20.618Z","dependency_job_id":"a13fe37d-a3f1-42f8-af6e-638aa20c0f93","html_url":"https://github.com/dd86k/ddhx","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"purl":"pkg:github/dd86k/ddhx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dd86k%2Fddhx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dd86k%2Fddhx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dd86k%2Fddhx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dd86k%2Fddhx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dd86k","download_url":"https://codeload.github.com/dd86k/ddhx/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dd86k%2Fddhx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28730924,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T10:24:43.181Z","status":"ssl_error","status_checked_at":"2026-01-24T10:24:36.112Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["console","hex-editor","terminal","terminal-app"],"created_at":"2026-01-21T21:01:57.641Z","updated_at":"2026-01-24T16:06:50.445Z","avatar_url":"https://github.com/dd86k.png","language":"D","funding_links":[],"categories":["Hex Editors"],"sub_categories":[],"readme":"                    ░       ░░░       ░░░  ░░░░  ░░  ░░░░  ░\n                    ▒  ▒▒▒▒  ▒▒  ▒▒▒▒  ▒▒  ▒▒▒▒  ▒▒▒  ▒▒  ▒▒\n                    ▓  ▓▓▓▓  ▓▓  ▓▓▓▓  ▓▓        ▓▓▓▓    ▓▓▓\n                    █  ████  ██  ████  ██  ████  ███  ██  ██\n                    █       ███       ███  ████  ██  ████  █\n\n+------------------------------------------------------------------------------+\n        hex   0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f                   \n          0  4d 5a 90 00 03 00 00 00 04 00 00 00 ff ff 00 00  MZ..............  \n         10  b8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00  ........@.......  \n         20  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................  \n         30  00 00 00 00 00 00 00 00 00 00 00 00 f0 00 00 00  ................  \n         40  0e 1f ba 0e 00 b4 09 cd 21 b8 01 4c cd 21 54 68  ........!..L.!Th  \n         50  69 73 20 70 72 6f 67 72 61 6d 20 63 61 6e 6e 6f  is program canno  \n         60  74 20 62 65 20 72 75 6e 20 69 6e 20 44 4f 53 20  t be run in DOS   \n         70  6d 6f 64 65 2e 0d 0d 0a 24 00 00 00 00 00 00 00  mode....$.......  \n         80  41 b8 1d c5 05 d9 73 96 05 d9 73 96 05 d9 73 96  A.....s...s...s.  \n         90  11 b2 77 97 09 d9 73 96 11 b2 70 97 03 d9 73 96  ..w...s...p...s.  \n         a0  11 b2 76 97 c4 d9 73 96 11 b2 72 97 02 d9 73 96  ..v...s...r...s.  \n         b0  05 d9 72 96 ad d9 73 96 63 b6 8e 96 0d d9 73 96  ..r...s.c.....s.  \n         c0  57 ac 77 97 14 d9 73 96 57 ac 70 97 0f d9 73 96  W.w...s.W.p...s.  \n         d0  57 ac 76 97 2c d9 73 96 05 d9 73 96 e0 df 73 96  W.v.,.s...s...s.  \n         e0  ca ac 71 97 04 d9 73 96 52 69 63 68 05 d9 73 96  ..q...s.Rich..s.  \n         f0  50 45 00 00 64 86 0d 00 02 7c bc 68 00 00 00 00  PE..d....|.h....  \n        100  00 00 00 00 f0 00 22 00 0b 02 0e 1d 00 c8 21 00  ......\".......!.  \n        110  00 9e 0b 00 00 00 00 00 e2 7d 00 00 00 10 00 00  .........}......  \n        120  00 00 00 40 01 00 00 00 00 10 00 00 00 02 00 00  ...@............  \n        130  06 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00  ................  \n        140  00 e0 2d 00 00 04 00 00 00 00 00 00 03 00 60 81  ..-...........`.  \n        150  00 00 10 00 00 00 00 00 00 10 00 00 00 00 00 00  ................  \n        160  00 00 10 00 00 00 00 00 00 10 00 00 00 00 00 00  ................  \n  OVR |  x8 |    ascii |       6c\n+------------------------------------------------------------------------------+\n\nddhx is a simple byte-oriented multi-platform modal TUI hex editor.\n\nCurrently available for Windows, macOS, Linux, and BSDs.\n\nLicense: MIT\nTitle font: Shaded Blocky (FIGlet)\n\n// FEATURES\n\n  * Supports insert, overwrite, and delete operations\n  * Unlimited undo/redo\n  * Large file support: up to 8 EiB\n  * Visual selection and range commands\n  * Multiple charset representations: ascii, mac, cp437, ebcdic\n  * Search data with a powerful pattern syntax\n  * Skip identical data or repeating patterns by selection\n  * Customizable with configuration file\n\n////////////////////////////////////////////////////////////////////////////////\n// Limitations\n\n// Output\n\nIt currently only outputs UTF-8. You might want to stick to the ASCII charset\nif your terminal/console lacks UTF-8 capabilities. On Windows, the editor will\nattempt to use the 65001 (UTF-8) codepage automatically.\n\n// Input\n\nOn POSIX platforms, the editor supports most xterm, vt100, and vt220 sequences.\nIt assumes UTF-8 for input.\n\nThe app assumes these keys:\n- ^H (\\010) for Ctrl+Backspace;\n- DEL (0x7f) for Backspace;\n- \"\\033[3~\" for Delete.\n\nNot all key combinations can be detected by terminal applications. Your \nterminal emulator or framebuffer may intercept certain shortcuts for its own\nfeatures. For example, VTE-based terminals (GNOME Terminal, Terminator, Tilix)\noften capture Ctrl+Shift+Arrow keys for tab/pane navigation. Most framebuffers\nwill capture Shift+PageUp for scrolling the buffer upward.\n\nIf a shortcut doesn't work, the \"bind\" command allows binding a command to a\nshortcut. For example, `bind alt+e select-end` binds Alt+E to extend the\nselection to the end of the line. Commands can still be executed from the\ncommand prompt (also known as the menu).\n\n////////////////////////////////////////////////////////////////////////////////\n// Roadmap\n\nThis list may change at any given time without notice.\n\n0.5: Released!\n- [x] Overwrite data\n- [x] Append data\n- [x] Save new buffer to file\n- [x] Save existing file\n- [x] History undo/redo\n- [x] Command prompt\n- [x] Standard input (stdin) support as new buffer\n- [x] Skip to different element (or byte) (Ctrl+Left/Right)\n\n0.6: Released!\n- [x] Selection support\n- [x] Config file\n- [x] \"bind\" command: map command to shortcut\n- [x] Searching (\"find\" command)\n\n0.7: Released!\n- [x] Insert data\n- [x] Delete data\n- [x] \"export-range\" command\n- [x] Insert/replace using file\n- [x] Insert/replace using pattern\n- [x] Range expressions\n\n0.8: Released!\n- [x] Custom Readline implementation (handle ^C)\n- [x] Show header/status configurations\n- [x] Dual highlighters setting (data and text)\n\n0.9:\n- TBD\n\nWishlist:\n- [ ] Bookmarks / Annotations (\"bookmark-{save|load}\")\n- [ ] Charset-specific pattern prefixes (e.g., ebcdic:)\n- [ ] Copy-Paste: \"copy\", \"cut, \"paste\" commands (modal)\n- [ ] Document: Disk\n- [ ] Document: Process memory\n- [ ] Endian-specific pattern prefixes (e.g., u32le:)\n- [ ] Inspect data panel (replaces text panel when toggled)\n- [ ] Patch system (maybe with an ed(1) front-end?)\n- [ ] Pattern layout overlay system (needs a nicer name)\n- [ ] Snapshot tree system (explore different edit branches)\n- [ ] View: Other data types (d8, o8, d16, f32, etc.)\n\n////////////////////////////////////////////////////////////////////////////////\n// Usage\n\nddhx aims to be a small and easy-to-use visual hexadecimal editor. For that\npurpose, there are multiple ways of using the editor.\n\nSynopsis:\n  ddhx [OPTIONS] [FILE|-]\n  ddhx {-h|--help|--version|--ver}\n\nTo view available start options, execute `ddhx --help`. The command-line\ninterface matches POSIX guidelines on all platforms.\n\nCreate a new empty document:\n  $ ddhx\nOpen an existing or create a new file at this location:\n  $ ddhx FILENAME\nCreate a new document from stream data:\n  $ echo test | ddhx -\n\nTo quit the editor, use Ctrl+Q, or use the \"quit\" command.\n\nMinimum recommended terminal size is 80x24 characters.\n\n////////////////////////////////////////////////////////////////////////////////\n// Navigation\n\nLeft/Right Arrow Keys   Move cursor by one element\nUp/Down Arrow Keys      Move cursor by a row\nPage Up/Down            Move cursor across the screen\nHome/End                Move cursor to start or end of line\nCtrl+Home/End           Move cursor to start of end of document\nCtrl+Left/Right         Skip over repeated bytes or patterns\nCtrl+Up/Down            Scroll view without moving cursor\nShift+Navigation        Extend selection while navigating\n\nNavigation should resemble most text editors.\n\nTo view all default keybindings, run: ddhx --help-keys\n\n////////////////////////////////////////////////////////////////////////////////\n// Editing\n\na-f, 0-9                Insert or replace data at cursor position\nCtrl+U                  Undo change\nCtrl+R                  Redo previous change\nCtrl+S                  Save document\nCtrl+O                  Save As another name and set new target\nTab                     Change between data and text columns\n\nEdit single elements using a-f/0-9 keys. It's also possible to use a command\nover a selection, like \"replace x:00\" to replace a selection with zeros.\n\nTo insert a file into the document at the current cursor position, use the\n\"insert-file PATH\" command, where PATH is a path to the file. The same can be\ndone using \"replace-file PATH\", where the file replaces content instead.\n\nSome commands support selection. Selection makes certain commands work\ndifferently. For example, with an active selection, the \"replace\" command\ndoesn't need a range expression, only patterns.\n\nCommands:\n  insert RANGE PATTERNS...         - Insert data\n  insert-file RANGE PATTERNS...    - Insert file\n  replace RANGE PATTERNS...        - Replace data\n  replace-file RANGE PATTERNS...   - Replace data using a file\n\n////////////////////////////////////////////////////////////////////////////////\n// Commands\n\nAll actions in the editor are backed by commands. Commands can be executed via\nkeyboard shortcuts or by typing them directly into the command prompt.\n\nPress Enter to open the command prompt, type your command, then press Enter\nagain to execute it.\n\nTo cancel a prompt input, give it an empty line or hit Ctrl+C.\n\n// Command Arguments\n\nCommands may require arguments. If you omit them, the editor will prompt you\nfor the missing values.\n\nExample - jumping forward 32 bytes:\n  \u003egoto +0x20\n\nTyping \"goto\" alone will prompt for an offset. This command can also be\ntriggered with Ctrl+G and accepts decimal, octal, and hexadecimal values.\n\n// Using \"goto\"\n\n  \u003egoto 0x10        Jump to position 16 (hexadecimal)\n  \u003egoto +020        Jump forward 16 bytes (octal)\n  \u003egoto -5          Jump backward 5 bytes (decimal)\n  \u003egoto %45.1       Jump to 45.1% through the document\n\nTo view all available commands, run: ddhx --help-commands\n\n////////////////////////////////////////////////////////////////////////////////\n// Patterns\n\nA pattern consists of one or more prefixed patterns, where they can be matched\nin order (left to right).\n\nFor example, \"x:00 01\" will yield a pattern of [ 0x00, 0x01 ], and\n\"s:hi x:ffff\" a pattern of [ 0x68, 0x69, 0xff, 0xff ].\n\nSupported prefixes:\n  x: and 0x - Hexadecimal unsigned integer\n  d:        - Decimal signed integer\n  o:        - Octal signed integer\n  s: and \"  - String (currently ASCII only)\n              Quotes need a terminator: \"example\"\n\nSupported commands: find, find-back, insert, and replace.\n\n////////////////////////////////////////////////////////////////////////////////\n// Ranges\n\nA range expression represents a start and end position inclusively, typically\nin the START:END format.\n\nWithout a separator, it only denotes a length, starting at the cursor\nposition.\n\nSpecial markers:\n  . - Current cursor position.\n  $ - End Of File (document size minus one)\n  + - (End only) End is not a position, but an addition to start position\n\nExamples:\n  \"select 0x10:0x19\"       - Selects positions 0x10 to 0x19\n  \"select 0x10:+9\"         - Selects positions 0x10 to 0x19 (0x10+9=0x19)\n  \"replace 200:$ x:00\"     - Replace bytes from address 200 to EOF with zeros\n  \"replace 200:. x:00\"     - Replace from 200 to current position with zeros\n  \"insert 100 x:90\"        - Insert 100 0x90 bytes at current position *\n\nSupported commands: insert, replace, select, and delete.\n\n////////////////////////////////////////////////////////////////////////////////\n// Searching\n\nFinding data uses the \"find\" (Ctrl+F) and \"find-back\" (Ctrl+B) commands.\n\nOnce a search needle is defined, it can be re-used using \"find-next\" (Ctrl+N)\nand \"find-prev\" (Shift+N).\n\nThe search command uses the pattern system.\n\nFor example, looking for `hi\\0\\0` (these are equivalent):\n  \u003efind s:hi x:00 00\n  \u003efind \\\"hi\\\" 0x0000\n  \u003efind x:68 69 00 00\n\nPractical example: PDF\n\nUse the \"find s:endstream\" comand to search for string \"endstream\", then hit\nCtrl+N (\"find-next\") to go to next result or Shift+N (\"find-prev\") to go to\nthe previous result.\n\nLIMITATION: Search does not wrap and depends on cursor position.\n\n////////////////////////////////////////////////////////////////////////////////\n// Configuration\n\nSettings can be changed at runtime using the \"set\" command.\n\nExample - changing the character set:\n  \u003eset charset mac\n\nMost settings can also be configured via command-line flags. For example, both\n\"-c\" and \"--columns=\" correspond to the \"columns\" setting.\n\nRuntime changes do not persist across sessions. To make settings permanent,\nadd them to your configuration file at.\n\nExample configuration file:\n  charset mac\n  columns 32\n\nTo view configuration options and path, run: ddhx --help-config\n\n////////////////////////////////////////////////////////////////////////////////\n// Key binding\n\nKeys can be bound to commands using the \"bind\" command.\n\nThe bind command also works in configuration files.\n\nUsage: bind KEY COMMAND [PARAMS...]\n\nVim-style navigation example:\n  \u003ebind h left\n  \u003ebind j down\n  \u003ebind k up\n  \u003ebind l right\n  \u003ebind : menu\n\nThis makes the right arrow jump 32 bytes ahead.\n  \u003ebind right-arrow goto +32\n\nTo remove bindings:\n  \u003eunbind right-arrow       Remove a specific binding\n  \u003ereset-keys               Reset all bindings to defaults\n\nKey bounds in a session are not saved. The configuration file is recommended.\n\n////////////////////////////////////////////////////////////////////////////////\n// Compiling\n\nTo compile this project, you'll need a D compiler and DUB.\n\nAll major compilers are supported (DMD, GDC, and LDC).\n\nDUB is used for project management and building. It is typically available in\nsystem repositories as 'dub'.\n\nDMD is typically available in system repositories and on https://dlang.org/.\n\nGDC is typically available in system repositories as 'gdc', 'gdc-*', 'gcc-gdc',\n'gcc*-gdc', 'gcc-d', or 'gcc-d-*'. For example, on Ubuntu 24.04, 'gdc-9' to\n'gdc-14' are available. This project doesn't use 'gdmd', the dmd wrapper.\n\nLDC is typically available in system repositories as 'ldc', and is typically\ninvoked using 'ldc2'. This project doesn't use 'ldmd2', the dmd wrapper.\n\nMinimum version should be a compiler with DMD front-end version 2.081 and\nlater. Project successfully compiles on Ubuntu 16.04 using dmd-2.082.0,\nusing the deb package from dlang.org.\n\nCompile a debug build:\n  $ dub build\nCompile a release build using a specified compiler:\n  $ dub build -b release --compiler=ldc2\n\n////////////////////////////////////////////////////////////////////////////////\n// Debugging\n\nSince things might break, there are unit testing and logging facilities.\n\nRun unit tests (useful for new platforms):\n  $ dub test\nRun unit tests with log traces:\n  $ dub test --d-version=Trace\n\nEnvironment variables:\n- DDHX_LOG=PATH\n  - Version: Since 0.7\n  - Logs to PATH.\n- DDHX_BACKEND=BACKEND\n  - Version: Since 0.7\n  - Forces BACKEND to be selected.\n  - Backends: \"piecev2\" (\u003e=0.8), \"piece\" (\u003e=0.7), \"chunk\" (\u003e=0.5 \u003c0.9)\n- DDHX_CHUNKSIZE=SIZE\n  - Version: Since 0.7, removed in 0.9\n  - Sets buffer size to SIZE (with binary suffix) for the \"chunk\" backend.\n\n********************************************************************************\n*                                    NOTICE                                    *\n********************************************************************************\n\nThis software is provided with NO WARRANTY as it is marked as EXPERIMENTAL.\n\nALWAYS make backups of your files before editing them.\n\nThis is a Work In Progress (WIP). Everything was rewritten from scratch\nin version 0.5 to have editing features. It will be buggy!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdd86k%2Fddhx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdd86k%2Fddhx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdd86k%2Fddhx/lists"}