{"id":16310669,"url":"https://github.com/nkh/p5-app-asciio","last_synced_at":"2026-03-04T02:03:34.350Z","repository":{"id":71454301,"uuid":"2618709","full_name":"nkh/P5-App-Asciio","owner":"nkh","description":"Plain ASCII diagram","archived":false,"fork":false,"pushed_at":"2023-12-08T13:48:03.000Z","size":20874,"stargazers_count":55,"open_issues_count":33,"forks_count":4,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-10-11T21:43:06.731Z","etag":null,"topics":["ascii","ascii-art","diagram","flowchart","graph","gui","interactive","terminal","tui"],"latest_commit_sha":null,"homepage":"https://nkh.github.io/P5-App-Asciio/","language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nkh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2011-10-21T07:25:05.000Z","updated_at":"2024-09-27T10:44:06.000Z","dependencies_parsed_at":"2023-11-02T00:38:11.334Z","dependency_job_id":"d2c13234-abe6-4e1f-a64a-f1634c72f0e3","html_url":"https://github.com/nkh/P5-App-Asciio","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nkh%2FP5-App-Asciio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nkh%2FP5-App-Asciio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nkh%2FP5-App-Asciio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nkh%2FP5-App-Asciio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nkh","download_url":"https://codeload.github.com/nkh/P5-App-Asciio/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221809060,"owners_count":16883846,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["ascii","ascii-art","diagram","flowchart","graph","gui","interactive","terminal","tui"],"created_at":"2024-10-10T21:42:43.262Z","updated_at":"2026-03-04T02:03:34.342Z","avatar_url":"https://github.com/nkh.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"# On-line comprehensive documentation\n\n[📚 Asciio's documentation](https://nkh.github.io/P5-App-Asciio/)\n\n# GUI\n\n![GUI](https://github.com/nkh/P5-App-Asciio/blob/main/screencasts/asciio.png)\n\n# TUI\n\n![TUI](https://github.com/nkh/P5-App-Asciio/blob/main/screencasts/tasciio.png)\n\n# SYNOPSIS\n\n         ___                     \n        /   |  __________________\n       / /| | / ___/ ___/ / / __ \\\n      / ___ |(__  ) /__/ / / /_/ /\n     /_/  |_/____/\\___/_/_/\\____/\n\n    $\u003e asciio [file.asciio]       # GUI application using Gtk3\n\n    $\u003e tasciio [file.asciio]      # TUI application\n\n    $\u003e asciio_to_text file.asciio # converts asciio files to ASCII\n\n    $\u003e text_to_asciio ...         # makes an asciio file from text\n\n# DESCRIPTION\n\nAsciio allows you to draw ASCII (or Unicode) diagrams in a Gtk3 GUI or TUI. The diagrams\ncan be saved as ASCII text or in a format that allows you to modify them later.\n\nAsciio is especially useful if you want diagrams under version control with \nthe rest of your code and prefer keyboard editing over mouse-heavy drawing tools.\n\nBoth GUI and TUI have vim-like bindings (shortcuts), bindings can be customized.\n\nDiagrams consist of boxes and text elements connected by arrows. Boxes stay\nconnected when moved around.\n\nAsciio works well for software architecture sketches, network layouts, or any diagrams\nthat must remain readable in monospaced text environments like terminals or\ncode comments.\n \nAsciio can also be scripted if you want to generate your diagrams.\n\n# DOCUMENTATION\n\nFull documentation, including installation and OCI image, are found at [Online Documentation](https://nkh.github.io/P5-App-Asciio/)\n\n## Asciio in 10 points\n\n- Asciio is an open-source app for creating ASCII diagrams with a GUI.\n- You can design flowcharts, and diagrams to place in your code\n- It generates plain text output for easy embedding.\n- It replaces manual text alignment with drag-and-drop editing.\n- A grid canvas keeps elements aligned to character boundaries.\n- It offers built-in shapes like boxes, ellipses, and arrows.\n- It supports undo/redo, grouping, and multi-selection.\n- Connected lines auto-adjust when shapes are moved.\n- You can create custom stencils and shape libraries.\n- It manages ASCII line crossings automatically in *cross mode*.\n- Text can be inserted and edited directly inside shapes.\n\n## Interface\n\n          .-------------------------------------------------------------.\n          | ........................................................... |\n          | ........................................................... |\n          | ........................................................... |\n          | ..........-------------..------------..--------------...... |\n          | .........| stencils  \u003e || asciio   \u003e || box          |..... |\n          | .........| Rulers    \u003e || computer \u003e || text         |..... |\n          | .........| File      \u003e || people   \u003e || wirl_arrow   |..... |\n     grid-----\u003e......'-------------'| divers   \u003e || axis         |..... |\n          | ..................^.....'------------'| ...          |..... |\n          | ..................|...................'--------------'..... |\n          | ........................................................... |\n          | ........................................................... |\n          | ..................|........................................ |\n          '-------------------|-----------------------------------------'\n                              |\n               context menu access some commands\n               but most are accessed through the keyboard\n\n## **Exporting to ASCII**\n\nYou can export to a file in ASCII by using a **'.txt'** file extension.\n\nYou can also export the selection, in ASCII, to the Primary clipboard:\n\n**Binding:** «y» «Y»\n\n## Elements\n   \n### boxes and text\n                    .----------.\n                    |  title   |\n     .----------.   |----------|   ************\n     |          |   | body 1   |   *          *\n     '----------'   | body 2   |   ************\n                    '----------'\n                                          any text\n                                (\\_/)         |\n            text                (O.o)  \u003c------'\n                                (\u003e \u003c)\n\n### if-box and process-box\n\n       .--------------.    \n      / a == b         \\     __________\n     (    \u0026\u0026            )    \\         \\\n      \\ 'string' ne '' /      ) process )\n       '--------------'      /_________/\n\n### rhombus and ellipse\n\n```txt\n      ,',              _..---.._\n    ,'   ',         .''         ''.\n  ,'       ',      /               \\\n :  edit me  :    |     edit me     |\n  ',       ,'      \\               /\n    ',   ,'         '..         ..'\n      ','              '--...--'\n```\n\n### user boxes and exec-boxes\n\nFor simple elements, put your design in a box, with or without a frame.\n\nThe \"exec-box\" element lets you put the output of an external application\nin a box, in the example below the table is generated, if\nyou already have text in a file you can use 'cat your_file' as the\ncommand.\n\n      +------------+------------+------------+------------+\n      | input_size ‖ algorithmA | algorithmB | algorithmC |\n      +============+============+============+============+\n      |     1      ‖ 206.4 sec. | 206.4 sec. | 0.02 sec.  |\n      +------------+------------+------------+------------+\n      |    250     ‖     -      |  80 min.   | 2.27 sec.  |\n      +------------+------------+------------+------------+\n\n### wirl-arrow\n\nRotating the end clockwise or counter-clockwise changes its direction.\n\n          ^            ^          \n          |    -----.   \\         \n          |         |    \\           \n          '----     |     '------- \n    ------\u003e         |             \n                    v             \n\n### multi section wirl-arrow\n\nA set of whirl arrows connected to each other.\n\n     .----------.                     .\n     |          |                \\   / \\\n        .-------'           ^     \\ /   \\\n        |   .-----------\u003e    \\     '     .\n        |   '----.            \\          /\n        |        |             \\        /\n        '--------'              '------'\n\n### angled-arrow and axis\n\n    -------.       .-------\n            \\     /\n             \\   /            ^         \n                              |   ^     \n             /   \\            |  /      \n            /     \\           | /       \n     ------'       '-------    --------\u003e\n\n## Examples\n\n              .---.  .---. .---.  .---.    .---.  .---.\n     OS API   '---'  '---' '---'  '---'    '---'  '---'\n                |      |     |      |        |      |\n                v      v     |      v        |      v\n              .------------. | .-----------. |  .-----.\n              | Filesystem | | | Scheduler | |  | MMU |\n              '------------' | '-----------' |  '-----'\n                     |       |      |        |\n                     v       |      |        v\n                  .----.     |      |    .---------.\n                  | IO |\u003c----'      |    | Network |\n                  '----'            |    '---------'\n                     |              |         |\n                     v              v         v\n              .---------------------------------------.\n              |                  HAL                  |\n              '---------------------------------------'\n\n\n                                 .-Base::Class::Derived_B\n                                /\n     Something::Else           /\n             \\                .----Base::Class::Derived_C \n              \\              /\n               '----Base::Class\n                     '       \\\n                    /         '----Latest::Greatest\n      Some::Thing--'                                           \n\n      _____ \n     | ___ |\n     ||___|| load\n     | ooo |--.------------------.------------------------.\n     '_____'  |                  |                        |\n              v                  v                        v\n      .----------.  .--------------------------.  .----------------.\n      | module C |  |         module A         |  |    module B    |\n      '----------'  |--------------------------|  | (instrumented) |\n           |        |        .-----.           |  '----------------'\n           '----------------\u003e| A.o |           |          |\n                    |        '-----'           |          |\n                    |   .------------------.   |          |\n                    |   | A.instrumented.o |\u003c-------------'\n                    |   '------------------'   |\n                    '--------------------------'\n\n## Unicode example\n\n![Unicode](https://github.com/nkh/P5-App-Asciio/blob/main/screencasts/asciio_unicode.png)\n\n## Export to SVG example\n\n![SVG source](https://github.com/nkh/P5-App-Asciio/blob/main/screencasts/asciio_svg_source.png)\n\n![SVG](https://github.com/nkh/P5-App-Asciio/blob/main/screencasts/asciio_svg.png)\n\nThe \"goat\" project (https://github.com/blampe/goat) must be installed.\n\n# Asciio and Vim\n\nYou can call Asciio from vim and insert your diagram.\n\n        map  \u003cleader\u003e\u003cleader\u003ea :call TAsciio()\u003ccr\u003e\n\n        function! TAsciio()\n            let line = getline('.')\n\n            let tempn = tempname()\n            let tempnt = tempn . '.txt'\n            let temp = shellescape(tempn)\n            let tempt = shellescape(tempnt)\n\n            exec \"normal i Asciio_file:\" . tempn . \"\\\u003cEsc\u003e\"\n\n            if ! has(\"gui_running\")\n            exec \"silent !mkdir -p $(dirname \" . temp . \")\" \n            exec \"silent !cp ~/.config/Asciio/templates/empty.asciio \". temp . \"; tasciio \" . temp . \"; asciio_to_text \" . temp . \" \u003e\" . tempt \n            exec \"read \" . tempnt\n            endif\n\n            redraw!\n        endfunction\n\n# OTHER PROJECTS\n\nSVG conversion:\n[goat](https://github.com/blampe/goat)\n\nTree generation:\n[ascii_tree](https://github.com/yzhong52/ascii_tree)\n\nASCII Math and other:\n[Diagon](https://github.com/ArthurSonzogni/Diagon)\n\nSend me links to your favorites tools (only command line, no libs) and I'll add them if they integrate will in Asciio.\n\n# INSTALL\n\n## local build on debian based distribution\n\nThe **OCI** directory contains a build file [Containerfile](OCI/Containerfile), you can use the same commands to install locally.\n\n## Container image\n\nRead the [Installation guide](documentation/mdbook_asciio/src/guide/installation.md) for more information.\n\n\n# AUTHORS\n\n    Khemir Nadim ibn Hamouda\n    https://github.com/nkh\n    CPAN ID: NKH\n    \n    Qin Qing\n    northisland2017@gmail.com\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnkh%2Fp5-app-asciio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnkh%2Fp5-app-asciio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnkh%2Fp5-app-asciio/lists"}