TNJ - Tasks, Notes, Journal
A lightweight, terminal-based application for managing tasks, notes, and journal entries. Built with Rust and featuring an intuitive TUI (Text User Interface), TNJ helps you stay organized without leaving your terminal.
Installation • Usage • Contributing • License

Features
- Task Management - Create, organize, and track tasks with due dates, status, and tags
- Note Taking - Capture and organize notes with rich content and tagging
- Journal Entries - Maintain a daily journal with date-based organization
- Tagging System - Organize items with tags and filter by them
- Notebooks - Group related tasks, notes, and journal entries into notebooks
- Advanced Filtering - Filter by tags, status, archive state, and more
- SQLite Database - All data stored locally in a SQLite database
- Keyboard-Driven - Fully keyboard-navigable TUI interface
- CLI Commands - Quick commands to add items without opening the TUI
- Dev/Prod Profiles - Separate development and production environments
Table of Contents
Installation
Quick Install (macOS)
# Install latest version
|
# Install specific version
|
Homebrew (macOS & Linux)
Install using Homebrew (or Linuxbrew):
# Add the tap
# Install tnj
# Update to latest version
From GitHub Releases (recommended for most users)
Download the binary for your platform from the latest release:
| Platform | Command |
|---|---|
| macOS (Intel) | curl -LO https://github.com/mikenorusis/tnj/releases/latest/download/tnj-macos-x86_64 && chmod +x tnj-macos-x86_64 && sudo mv tnj-macos-x86_64 /usr/local/bin/tnj |
| macOS (Apple Silicon) | curl -LO https://github.com/mikenorusis/tnj/releases/latest/download/tnj-macos-aarch64 && chmod +x tnj-macos-aarch64 && sudo mv tnj-macos-aarch64 /usr/local/bin/tnj |
| Windows | Download tnj-windows-x64.exe and add it to your PATH |
For Rust developers
Note: The package is named tnj-tui on crates.io, but the binary is still called tnj.
Build from Source
If you want to build from source:
# Clone the repository
# Build the project
# The binary will be in target/release/tnj
Usage
Interactive TUI Mode
Launch the interactive terminal user interface:
# or simply
CLI Commands
Add a Task
Add a Note
Add a Journal Entry
Development Mode
Use development mode to work with a separate database and configuration:
Configuration
TNJ uses configuration files stored in your system's configuration directory:
- Linux:
~/.config/tnj/ - macOS:
~/Library/Application Support/tnj/ - Windows:
%APPDATA%\tnj\
The configuration file (config.toml) is automatically created on first run.
Keyboard Shortcuts
General
qorEsc: Quit/Close?: Show helpTab: Switch between tabs (Tasks, Notes, Journal)Ctrl+S: SaveCtrl+C: Copy to clipboard
Navigation
j/↓: Move downk/↑: Move upEnter: Open/Edit itemn: New itemd: Delete itema: Archive/Unarchive item
Filtering
f: Open filter modalCtrl+F: Toggle filter sidebar
Note: Full keyboard shortcuts are available in the help menu (press ? in the TUI)
Project Structure
tnj/
├── src/
│ ├── main.rs # Entry point
│ ├── lib.rs # Library root
│ ├── cli.rs # CLI command handling
│ ├── config.rs # Configuration management
│ ├── database.rs # SQLite database operations
│ ├── models.rs # Data models (Task, Note, JournalEntry, Notebook)
│ ├── utils.rs # Utility functions
│ └── tui/ # TUI components
│ ├── app.rs # Main application state
│ ├── events.rs # Event handling
│ ├── layout.rs # Layout management
│ ├── render.rs # Rendering logic
│ └── widgets/ # UI widgets
├── Cargo.toml # Rust project configuration
└── README.md # This file
Development
Running in Development Mode
# Run with development profile
# Or build and run
Running Tests
Code Formatting
Linting
Contributing
Contributions are welcome and greatly appreciated! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
How to Contribute
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Please make sure your code follows the existing style and passes all tests (cargo test).
Dependencies
- ratatui - Terminal UI library
- crossterm - Cross-platform terminal manipulation
- rusqlite - SQLite database driver
- chrono - Date and time handling
- clap - Command-line argument parser
- serde - Serialization framework
- termimad - Markdown rendering in terminal
License
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.