A terminal-based user interface client for Hulunote, an outliner note-taking application. Built with Rust using the Ratatui framework.
- Full Hulunote Integration: Login, manage databases, notes, and outline navigation
- Vim-style Navigation: Use
j/kfor movement,gg/Gfor jumping,h/lfor expand/collapse - Outline Editing: Create, edit, delete, and reorganize outline nodes
- Command Palette: Quick access to all actions via
Ctrl+P - Search: Find notes across all databases with
Ctrl+Sor/ - Persistent Login: Automatically saves your session token
- Monokai Pro Theme: Beautiful dark theme optimized for black terminal backgrounds
Hulunote TUI uses the Monokai Pro color scheme, featuring:
| Color | Hex | Usage |
|---|---|---|
| π‘ Yellow | #ffd866 |
Active/selected items, highlights |
| π΅ Cyan | #78dce8 |
Borders, info, keyboard shortcuts |
| π’ Green | #a9dc76 |
Success, create actions |
| π΄ Red | #ff6188 |
Errors, delete actions |
| π Orange | #fc9867 |
Loading states, warnings |
| π£ Purple | #ab9df2 |
Tree markers, special elements |
Background: #2d2a2e (dark gray)
- Rust toolchain (1.70+)
- A running Hulunote server
- Terminal with Nerd Font support (for icons)
git clone https://github.com/your-repo/hulunote-tui.git
cd hulunote-tui
cargo build --release- or cargo run
cargo run -- --server https://www.hulunote.top/
The binary will be located at target/release/hulunote-tui.
cargo install --path .# Connect to default server (localhost:6689)
hulunote-tui
# Connect to a specific server
hulunote-tui --server http://your-server:6689
# or
hulunote-tui -s http://your-server:6689| Option | Description | Default |
|---|---|---|
-s, --server <URL> |
Hulunote server URL | http://localhost:6689 |
-h, --help |
Show help information | - |
-V, --version |
Show version | - |
| Key | Action |
|---|---|
Ctrl+C / Ctrl+Q |
Quit application |
Ctrl+P |
Open command palette |
Ctrl+D |
Go to databases |
Ctrl+S |
Open search |
Ctrl+H |
Toggle help |
Ctrl+L |
Logout |
Ctrl+R |
Refresh current view |
Ctrl+N |
Create new item |
| Key | Action |
|---|---|
j / β |
Move down |
k / β |
Move up |
gg |
Go to first item |
G |
Go to last item |
Enter |
Select / Open |
q / Esc |
Go back |
? |
Toggle help |
/ |
Open search |
| Key | Action |
|---|---|
n |
Create new database |
d |
Delete selected database |
r |
Refresh list |
| Key | Action |
|---|---|
n |
Create new note |
d |
Delete selected note |
s |
Toggle shortcut |
r |
Refresh list |
| Key | Action |
|---|---|
h / β |
Collapse node |
l / β |
Expand node |
Space |
Toggle expand/collapse |
Enter / e |
Edit current node |
a |
Add child node |
o |
Add sibling node |
d |
Delete current node |
J |
Move node down |
K |
Move node up |
Tab |
Indent (make child of previous sibling) |
Shift+Tab |
Outdent (make sibling of parent) |
r |
Refresh outline |
The command palette (Ctrl+P) supports the following commands:
| Command | Aliases | Description |
|---|---|---|
login |
signin |
Go to login screen |
logout |
signout, exit |
Logout and return to login |
databases |
db, dbs |
Go to databases list |
notes |
n |
Go to notes list |
search |
s, find |
Open search |
help |
?, h |
Show help |
quit |
q, close |
Quit application |
refresh |
r, reload |
Refresh current view |
new |
create, add |
Create new item |
delete |
del, rm, remove |
Delete selected item |
Configuration files are stored in ~/.hulunote/:
| File | Description |
|---|---|
config.json |
Application configuration (server URL, etc.) |
token |
Saved authentication token for persistent login |
{
"server_url": "http://localhost:6689"
}Enter your Hulunote email and password to authenticate. Use Tab to switch between email and password fields.
View and manage your Hulunote databases. Select a database to view its notes.
Browse notes within the selected database. Notes marked as shortcuts are highlighted with a star icon.
The main editing interface. View and edit the hierarchical outline structure of your notes with full tree navigation and manipulation.
Search across all notes in all databases. Results show matching note titles.
src/
βββ main.rs # Application entry point and event loop
βββ app.rs # Application state and business logic
βββ config.rs # Configuration management
βββ event.rs # Keyboard event handling and text input
βββ api/ # API client modules
β βββ client.rs # HTTP client wrapper
β βββ auth.rs # Authentication endpoints
β βββ database.rs # Database management endpoints
β βββ note.rs # Note management endpoints
β βββ nav.rs # Outline navigation endpoints
βββ models/ # Data structures
βββ ui/ # UI rendering modules
βββ mod.rs # Main UI renderer
βββ theme.rs # Monokai Pro color theme
βββ login.rs # Login screen
βββ database_list.rs # Database list screen
βββ note_list.rs # Note list screen
βββ outline.rs # Outline editor screen
βββ search.rs # Search screen
βββ help.rs # Help overlay
βββ command.rs # Command palette
- ratatui: Terminal UI framework
- crossterm: Cross-platform terminal manipulation
- tokio: Async runtime
- reqwest: HTTP client
- serde/serde_json: JSON serialization
- clap: Command line argument parsing
- anyhow: Error handling
If you see connection errors:
- Verify the Hulunote server is running
- Check the server URL is correct (avoid using
0.0.0.0as client address) - Ensure no proxy software (like ClashX) is intercepting local connections
If login fails or you get "Authentication failed":
- Clear the saved token:
rm ~/.hulunote/token - Try logging in again with correct credentials
If the UI doesn't render correctly:
- Ensure your terminal supports 256 colors or True Color (24-bit)
- Use a terminal with Nerd Font installed for proper icon display
- Try resizing your terminal window
- Recommended terminals: iTerm2, Alacritty, Kitty, WezTerm
This app uses Nerd Font icons. If you see boxes or question marks:
- Install a Nerd Font
- Set your terminal to use the Nerd Font
- Popular choices: JetBrainsMono Nerd Font, FiraCode Nerd Font, Hack Nerd Font
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.


