akiomik/nostui

A TUI client for Nostr

71

stars

1,062

commits

Rust

primary language

Sep 8, 2026

updated

nostr
ratatui
social-media-app
tui
Browse cluster: Rust TUI applications and frameworks

README

nostui

crates.io CI codecov

A TUI client for Nostr

screenshot

Current Features

  • Timeline
  • Mention timeline
  • Post, reply, react and repost
  • Open per-user timelines as tabs
  • Broadcast the currently playing track as a music status (NIP-38)

Getting Started

Dowonload binaries from the release page.

Or, install manually via crates.io:

cargo install nostui

On NetBSD, a package is available from the official repositories. To install it, simply run:

pkgin install nostui

Setup

[!NOTE] Other extensions supported are .json5, .yaml, .toml and .ini.

  1. Create a config.json to the following path:
  • Linux: ~/.config/nostui/config.json
  • Windows: ~\AppData\Roaming\0m1\nostui\config.json
  • macOS: ~/Library/Application Support/io.0m1.nostui/config.json
  1. Add your key to the config.json:
{
    "key": "nsec1...", // or "npub..." for readonly mode
    "relays": ["wss://nos.lol"], // optional
    "nip-38": { "enabled": true } // optional, broadcasts the currently playing track as a status (default: false)
}

Usage

Commands

nostui [OPTIONS]

Options:
  -t, --tick-rate <FLOAT>   Tick rate, i.e. number of ticks per second [default: 16]
  -f, --frame-rate <FLOAT>  Frame rate, i.e. number of frames per second [default: 16]
  -h, --help                Print help
  -V, --version             Print version

Default Keybindings

KeybindingDescription
k upScroll up
j downScroll down (load more at bottom)
home gScroll to top
end Shift-gScroll to bottom
escUnselect
nNew text note
Ctrl-pSubmit text note
rReply to the selected note
fSend reaction
tRepost
iOpen the author's timeline as a tab
mOpen the mention timeline as a tab
h leftSwitch to the previous tab
l rightSwitch to the next tab
Ctrl-wClose the current tab
q Ctrl-c Ctrl-dQuit

Customizing Keybindings

You can override or add keybindings in your config file under keybindings.Home. Your settings are merged on top of the defaults, so you only need to list the keys you want to change.

{
    "keybindings": {
        "Home": {
            "<Ctrl-r>": "Repost",  // bind an additional key to an action
            "<t>": "ScrollToTop"   // override an existing default
        }
    }
}

Each key is written between < and >. Modifiers are joined with - (e.g. <Ctrl-p>, <Shift-g>, <Alt-Enter>). Special keys such as up, down, home, end, esc, enter, tab and space are also supported.

[!NOTE] Because your settings are merged on top of the defaults, default keybindings cannot be removed. You can only add new keys or rebind a key to a different action.

The following actions are available:

ActionDescription
ScrollUpScroll up
ScrollDownScroll down (load more at bottom)
ScrollToTopScroll to top
ScrollToBottomScroll to bottom
UnselectUnselect the selected note
NewTextNoteShow the text note input form
ReplyTextNoteReply to the selected note
SubmitTextNoteSubmit the text note on input form
ReactSend a reaction to the selected note
RepostRepost the selected note
OpenAuthorTimelineOpen the author's timeline as a tab
OpenMentionTabOpen the mention timeline as a tab
CloseCurrentTabClose the current tab
PrevTabSwitch to the previous tab
NextTabSwitch to the next tab
QuitQuit the application

Architecture

For how the codebase is organised — the layers, their dependency direction, and the contracts between them — see docs/architecture.md.

Contributors

akiomik

907 commits

dependabot[bot]

153 commits

0323pin

1 commits

Hakkadaikon

1 commits

akiomik/nostui

A TUI client for Nostr

71

stars

1,062

commits

Rust

primary language

Sep 8, 2026

updated

nostr
ratatui
social-media-app
tui
Browse cluster: Rust TUI applications and frameworks

README

nostui

crates.io CI codecov

A TUI client for Nostr

screenshot

Current Features

  • Timeline
  • Mention timeline
  • Post, reply, react and repost
  • Open per-user timelines as tabs
  • Broadcast the currently playing track as a music status (NIP-38)

Getting Started

Dowonload binaries from the release page.

Or, install manually via crates.io:

cargo install nostui

On NetBSD, a package is available from the official repositories. To install it, simply run:

pkgin install nostui

Setup

[!NOTE] Other extensions supported are .json5, .yaml, .toml and .ini.

  1. Create a config.json to the following path:
  • Linux: ~/.config/nostui/config.json
  • Windows: ~\AppData\Roaming\0m1\nostui\config.json
  • macOS: ~/Library/Application Support/io.0m1.nostui/config.json
  1. Add your key to the config.json:
{
    "key": "nsec1...", // or "npub..." for readonly mode
    "relays": ["wss://nos.lol"], // optional
    "nip-38": { "enabled": true } // optional, broadcasts the currently playing track as a status (default: false)
}

Usage

Commands

nostui [OPTIONS]

Options:
  -t, --tick-rate <FLOAT>   Tick rate, i.e. number of ticks per second [default: 16]
  -f, --frame-rate <FLOAT>  Frame rate, i.e. number of frames per second [default: 16]
  -h, --help                Print help
  -V, --version             Print version

Default Keybindings

KeybindingDescription
k upScroll up
j downScroll down (load more at bottom)
home gScroll to top
end Shift-gScroll to bottom
escUnselect
nNew text note
Ctrl-pSubmit text note
rReply to the selected note
fSend reaction
tRepost
iOpen the author's timeline as a tab
mOpen the mention timeline as a tab
h leftSwitch to the previous tab
l rightSwitch to the next tab
Ctrl-wClose the current tab
q Ctrl-c Ctrl-dQuit

Customizing Keybindings

You can override or add keybindings in your config file under keybindings.Home. Your settings are merged on top of the defaults, so you only need to list the keys you want to change.

{
    "keybindings": {
        "Home": {
            "<Ctrl-r>": "Repost",  // bind an additional key to an action
            "<t>": "ScrollToTop"   // override an existing default
        }
    }
}

Each key is written between < and >. Modifiers are joined with - (e.g. <Ctrl-p>, <Shift-g>, <Alt-Enter>). Special keys such as up, down, home, end, esc, enter, tab and space are also supported.

[!NOTE] Because your settings are merged on top of the defaults, default keybindings cannot be removed. You can only add new keys or rebind a key to a different action.

The following actions are available:

ActionDescription
ScrollUpScroll up
ScrollDownScroll down (load more at bottom)
ScrollToTopScroll to top
ScrollToBottomScroll to bottom
UnselectUnselect the selected note
NewTextNoteShow the text note input form
ReplyTextNoteReply to the selected note
SubmitTextNoteSubmit the text note on input form
ReactSend a reaction to the selected note
RepostRepost the selected note
OpenAuthorTimelineOpen the author's timeline as a tab
OpenMentionTabOpen the mention timeline as a tab
CloseCurrentTabClose the current tab
PrevTabSwitch to the previous tab
NextTabSwitch to the next tab
QuitQuit the application

Architecture

For how the codebase is organised — the layers, their dependency direction, and the contracts between them — see docs/architecture.md.

Contributors

akiomik

907 commits

dependabot[bot]

153 commits

0323pin

1 commits

Hakkadaikon

1 commits

Languages

Rust

99.8%