Skip to main content

A sleek, powerful terminal text editor built with Textual

Project description

Axiom TUI

A terminal text editor that doesn't make you feel lame.

demo

I have an ubuntu server on my rpi5 running in my room and I kept needing to edit files on it. Nano works but it looks like it's from the 90s. I tried vim but it wasn't satisfactory using it, So I thought why not make an usable, modern tui text editor for fun? I was out of ideas and I had a weekend to spare. So I built this.

It's not trying to replace anything. It's just a small editor you can open from the terminal when you need to make a quick edit and you want it to not look terrible.

Install

You need Python 3.11+

Recommended - install from PyPI:

pip install axiom-tui

That's it. Now you can open files from anywhere:

axiom main.py
axiom ~/.bashrc
axiom .  # Opens the current folder directly

Want to build it yourself? Clone and install in editable mode:

git clone https://github.com/adyanthm/axiom-tui.git
cd axiom-tui
pip install -e .

This way you get the axiom command and any changes you make to the source take effect immediately.

Don't have Python?

Grab axiom.exe (or the Linux/Mac binary) from the releases page. No Python needed, everything is bundled inside.

To use it as a global command (so you can just type axiom file.py from anywhere):

Windows:

  1. Download axiom.exe
  2. Put it somewhere like C:\tools\
  3. Add that folder to your PATH (search "environment variables" in Start, edit the Path variable, add C:\tools\)
  4. Open a new terminal and you're good to go

Linux:

chmod +x axiom-linux
sudo mv axiom-linux /usr/local/bin/axiom

Mac:

chmod +x axiom-macos
sudo mv axiom-macos /usr/local/bin/axiom

After that, just use it like any other command:

axiom server.py
axiom ~/.bashrc
axiom config.yml
axiom /var/log/  # Opens a folder instead of a file

What it does

  • Multi-Tab Support - Open multiple files at once. They'll show up as tabs at the top. Close them with ctrl+w, switch between them with ctrl+pageup/ctrl+pagedown.
  • Quick File Creation - Hit ctrl+n to pull up a floating box. Type a name to create a file, or add a / at the end to create a folder.
  • Syntax highlighting for Python, JS, TS, Rust, Go, C, Java, Ruby, and a bunch more.
  • Auto-indent - Pressing Enter keeps the current indentation level. After lines ending with :, {, [, or ( it adds an extra indent automatically. Tab inserts 4 spaces.
  • Go to Definition - Press F12 on any symbol and Axiom will jump to its definition (same file or different file). Needs an LSP server running.
  • Autocomplete (LSP) for an IDE-like experience right in the terminal.
  • File tree on the left so you can browse around without leaving the editor. Pass a folder (axiom .) to open straight into the tree.
  • Keyboard navigation - Since Tab inserts spaces in the editor, use Escape to leave the editor, ctrl+e to jump to the file explorer, and ctrl+b to toggle the sidebar.
  • Active file indicator right in the top header.
  • Search that actually jumps to the match.
  • Line numbers and a status bar with cursor position.
  • Unsaved changes indicator (little dot next to the filename).
  • Theme sync - When you switch app themes the syntax colors follow along. The default is textual-dark, but I also added a sleek custom axiom-pro theme!

Keybinds

Key Does
F1 Open Configuration File
ctrl+s Save
ctrl+n Create new file or folder
ctrl+w Close current tab
ctrl+f Search (Enter to find, Esc to close)
ctrl+b Toggle file tree
ctrl+e Focus file explorer
ctrl+pageup Previous tab
ctrl+pagedown Next tab
F12 Go to definition (needs LSP)
Tab Insert 4 spaces (in editor)
Escape Leave editor / dismiss dialogs
ctrl+q Quit

Since Tab inserts spaces inside the editor, use Escape to leave the editor and navigate to other parts of the UI. You can also switch themes through Textual's command palette.

Custom Keybinds

You can fully customize these keybindings! Press F1 inside the editor to instantly open your config.toml file. Change the keys to whatever you prefer, save, and restart the editor. The configuration is stored safely in your user directory (%APPDATA% on Windows, ~/.config on Linux).

Autocomplete (LSP)

I added Language Server Protocol (LSP) support so you get live, IDE-like autocomplete dropdowns as you type. Navigate with Up/Down and accept with Tab

Because language servers are huge, I didn't bundle them all by default. It's smart enough to just degrade gracefully to a normal editor if you don't have the server installed.

For Python: Just install the editor with the [lsp] extra and you're good to go:

pip install axiom-tui[lsp]

(This just installs python-lsp-server alongside the editor).

For other languages: It works for other languages too, you just need to have their respective language servers installed on your system. Axiom will automatically find them and connect.

  • JS/TS: needs typescript-language-server
  • Rust: needs rust-analyzer
  • Go: needs gopls
  • C / C++: needs clangd

The Theme Thing

So here's a fun rabbit hole I fell into: Textual has app themes (like Dracula, Nord, Catppuccin etc) and the TextArea widget has its own completely separate syntax highlighting themes. When you switch the app theme, only the UI chrome changes - the actual code highlighting stays the same.

I fixed this by mapping each app theme to the closest syntax theme. It's not perfect but it works. If you switch to Dracula the syntax goes Dracula, if you pick something light it switches to GitHub Light, etc.

Stuff I might add

  • Find and replace (right now it's just find)
  • Remember last open file
  • Goto line number
  • Auto-indent
  • Go to definition

No promises though. This is a weekend project that I use for myself. If it helps you too, cool.

Contributing

PRs are welcome. Just keep it simple - the whole point is that this is a small, clean codebase. If your feature doubles the line count, maybe it should be a fork instead.

License

MIT. Do whatever you want with it.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

axiom_tui-1.3.2.tar.gz (14.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

axiom_tui-1.3.2-py3-none-any.whl (14.9 kB view details)

Uploaded Python 3

File details

Details for the file axiom_tui-1.3.2.tar.gz.

File metadata

  • Download URL: axiom_tui-1.3.2.tar.gz
  • Upload date:
  • Size: 14.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for axiom_tui-1.3.2.tar.gz
Algorithm Hash digest
SHA256 02058c8fd56a37189f85e556e0b36c2fd5a2bb809022c8400ad2b5966a01cca0
MD5 7c3dbcf94e4e80413c8bcdc770baeb4a
BLAKE2b-256 9bad747093c9fdc24a1dfdd152e5ececb042f94dcc6c15b6d44367751e95a60a

See more details on using hashes here.

Provenance

The following attestation bundles were made for axiom_tui-1.3.2.tar.gz:

Publisher: release.yml on adyanthm/axiom-tui

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file axiom_tui-1.3.2-py3-none-any.whl.

File metadata

  • Download URL: axiom_tui-1.3.2-py3-none-any.whl
  • Upload date:
  • Size: 14.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for axiom_tui-1.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 31bdd693d334fba9b774e71f5f8e70e6bd1b3ebf260711a545b32e2fba0f0719
MD5 3843d86988faab87b588f20a77759979
BLAKE2b-256 ed28dc7ff4b995ddfc485ee09cbc35f1ad0a55f4120ad04bb8dcdf0ed5990202

See more details on using hashes here.

Provenance

The following attestation bundles were made for axiom_tui-1.3.2-py3-none-any.whl:

Publisher: release.yml on adyanthm/axiom-tui

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page