{"id":46624321,"url":"https://github.com/mcass19/ash_tui","last_synced_at":"2026-03-12T02:00:53.978Z","repository":{"id":342536605,"uuid":"1174289467","full_name":"mcass19/ash_tui","owner":"mcass19","description":"Terminal-based interactive explorer for Ash Framework applications","archived":false,"fork":false,"pushed_at":"2026-03-09T08:37:14.000Z","size":187,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-11T04:32:24.821Z","etag":null,"topics":["ash","elixir","ratatui","rust","terminal-user-interface","tui"],"latest_commit_sha":null,"homepage":"","language":"Elixir","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/mcass19.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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":"2026-03-06T09:20:15.000Z","updated_at":"2026-03-10T08:31:08.000Z","dependencies_parsed_at":"2026-03-11T01:00:50.885Z","dependency_job_id":null,"html_url":"https://github.com/mcass19/ash_tui","commit_stats":null,"previous_names":["mcass19/ash_tui"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/mcass19/ash_tui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcass19%2Fash_tui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcass19%2Fash_tui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcass19%2Fash_tui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcass19%2Fash_tui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mcass19","download_url":"https://codeload.github.com/mcass19/ash_tui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcass19%2Fash_tui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30412217,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T00:40:14.898Z","status":"online","status_checked_at":"2026-03-12T02:00:07.260Z","response_time":114,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["ash","elixir","ratatui","rust","terminal-user-interface","tui"],"created_at":"2026-03-07T22:11:58.169Z","updated_at":"2026-03-12T02:00:53.972Z","avatar_url":"https://github.com/mcass19.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AshTui\n\n[![Hex.pm](https://img.shields.io/hexpm/v/ash_tui.svg)](https://hex.pm/packages/ash_tui)\n[![Docs](https://img.shields.io/badge/hex-docs-blue)](https://hexdocs.pm/ash_tui)\n[![CI](https://github.com/mcass19/ash_tui/actions/workflows/ci.yml/badge.svg)](https://github.com/mcass19/ash_tui/actions/workflows/ci.yml)\n[![License](https://img.shields.io/hexpm/l/ash_tui.svg)](https://github.com/mcass19/ash_tui/blob/main/LICENSE)\n\nTerminal-based interactive explorer for [Ash Framework](https://ash-hq.org) applications, built on [ExRatatui](https://github.com/mcass19/ex_ratatui).\n\nNavigate your domains, resources, attributes, actions, and relationships — without leaving the terminal.\n\n![AshTui Explorer](https://raw.githubusercontent.com/mcass19/ash_tui/main/assets/demo.png)\n\n## Features\n\n- Two-panel navigable interface with domain/resource tree\n- Three detail tabs: Attributes, Actions, Relationships\n- Attribute detail overlay — press Enter for full details including constraints\n- Relationship navigation with breadcrumb trail and back stack\n- Vim keybindings (`j`/`k`/`h`/`l`) and arrow key support\n- Tab switching with `Tab` or `1`/`2`/`3`\n- Help overlay\n- No database connection needed — reads compile-time metadata only\n- `mix ash.tui` task for instant launch\n\n## UI Layout\n\n```\n┌─ Navigation ─────────┐ ┌─ Accounts.User ─────────────────────┐\n│                       │ │                                      │\n│  Accounts             │ │  [1:Attributes]  2:Actions  3:Rels   │\n│    \u003e User             │ │ ┌──────────────────────────────────┐ │\n│      Token            │ │ │ Name        Type       Required? │ │\n│  Blog                 │ │ │ ────        ────       ────────  │ │\n│                       │ │ │ :id         :uuid      auto      │ │\n│                       │ │ │ :email      :ci_string yes       │ │\n│                       │ │ │ :name       :string    no        │ │\n│                       │ │ │ :role       :atom      no        │ │\n│                       │ │ └──────────────────────────────────┘ │\n│ q:quit  ?:help        │ │ j/k:navigate  Enter:drill in  q:quit│\n└───────────────────────┘ └──────────────────────────────────────┘\n```\n\n## Installation\n\nAdd `ash_tui` to your dependencies (`:dev` only recommended):\n\n```elixir\ndef deps do\n  [\n    {:ash_tui, \"~\u003e 0.1\", only: :dev}\n  ]\nend\n```\n\n## Usage\n\nLaunch the explorer from your Ash project:\n\n```bash\nmix ash.tui\n```\n\nThe OTP app is auto-detected from your `mix.exs`. To specify it explicitly:\n\n```bash\nmix ash.tui --otp-app my_app\n```\n\nYou can also launch programmatically:\n\n```elixir\nAshTui.explore(:my_app)\n```\n\n## How It Works\n\nAshTui uses Ash's compile-time introspection API to load your domain model:\n\n```\nmix ash.tui\n  → Mix.Task.run(\"app.start\")\n  → Ash.Info.domains(otp_app)\n  → Ash.Domain.Info.resources(domain)\n  → Ash.Resource.Info.attributes/actions/relationships(resource)\n  → Pre-loaded into navigable state struct\n  → ExRatatui.App renders it\n```\n\nNo database connection is needed. The tool reads the *shape* of your app, not its data.\n\n## Keybindings\n\n### Navigation\n\n| Key | Action |\n|-----|--------|\n| `j` / `Down` | Move selection down |\n| `k` / `Up` | Move selection up |\n| `h` / `Left` | Focus navigation panel |\n| `l` / `Right` | Focus detail panel |\n| `Enter` | Select item / drill into relationship / show attribute detail |\n| `Esc` | Go back / close overlay |\n\n### Tabs\n\n| Key | Action |\n|-----|--------|\n| `Tab` | Cycle through tabs |\n| `1` | Attributes tab |\n| `2` | Actions tab |\n| `3` | Relationships tab |\n\n### Other\n\n| Key | Action |\n|-----|--------|\n| `?` | Toggle help overlay |\n| `q` | Quit |\n\n## Example App\n\nThe `examples/ash_demo` directory contains a small Ash application with two domains (Accounts and Blog) for trying out the explorer:\n\n```bash\ncd examples/ash_demo\nmix deps.get\nmix ash.tui\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.\n\nAshTui is built on [ExRatatui](https://github.com/mcass19/ex_ratatui), a general-purpose terminal UI library for Elixir. If you're interested in improving the underlying rendering, widgets, or layout engine, contributions to ExRatatui are very welcome as well.\n\n## License\n\nMIT — see [LICENSE](https://github.com/mcass19/ash_tui/blob/main/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcass19%2Fash_tui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmcass19%2Fash_tui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcass19%2Fash_tui/lists"}