A terminal user interface for browsing and creating blog content via render-engine ContentManager backends. Built with Textual.
Integrates directly with render-engine projects and works with any ContentManager backend (PostgreSQL, FileSystem, custom).
- Browse Posts: View all posts from your render-engine collections
- Create: Add new posts via render-engine's ContentManager
- Multi-Collection Support: Browse and create across different content collections
- Backend-Agnostic: Works with PostgreSQL, FileSystem, or custom ContentManager backends
- Live Preview: Async content preview with no UI blocking
- Collection Switching: Switch between collections at runtime
- Install the package:
uv pip install git+https://github.com/yourusername/render-engine-tuiOr clone and install locally:
git clone https://github.com/yourusername/render-engine-tui
cd render-engine-tui
uv syncRun from within a render-engine project directory:
uv run render-engine-tuiThe application will automatically load collections from your render-engine pyproject.toml.
If you don't have one yet:
pip install render-engine
render-engine create my-site
cd my-siteAdd your collections to [tool.render-engine.collections]:
[tool.render-engine.collections.blog]
parser = "render_engine.parsers.YAMLParser"
content_manager = "render_engine.content_managers.PostgreSQLManager"
# or FileSystemManager, or your custom ContentManager
[tool.render-engine.collections.pages]
parser = "render_engine.parsers.YAMLParser"
content_manager = "render_engine.content_managers.FileSystemManager"uv run render-engine-tui- c: Change collection
- n: Create a new post
- m: Show post metadata
- ?: Show about screen
- Arrow keys: Navigate through posts
- Enter or click: Select post and view content
- q: Quit application
- Ctrl+S: Save the post
- Escape: Cancel without saving
- Arrow keys: Navigate collections
- Enter: Select collection
- Escape: Cancel
render_engine_tui/
├── __init__.py # Package initialization
├── main.py # Main TUI app and layout
├── db.py # ContentManagerWrapper
├── ui.py # Modal screens and forms
├── collections_config.py # Collection configuration
└── render_engine_integration.py # ContentManager integration
pyproject.toml # Project metadata
README.md # This file
CLAUDE.md # Developer documentation
The TUI uses a render-engine-only architecture:
- No database dependencies: All data access goes through render-engine's ContentManager
- Backend-agnostic: Works with PostgreSQL, FileSystem, or any custom ContentManager
- Schema-aware: Adapts UI to collection schema automatically
- Async operations: Content fetching doesn't block the UI
For detailed architecture information, see CLAUDE.md.
- Python 3.11+
- render-engine (at runtime)
- Textual
- python-frontmatter
Install development dependencies:
uv syncCurrently manual testing only. To test:
- Create a render-engine project with test data
- Run the TUI:
uv run render-engine-tui - Test collection switching and post creation
Ensure you're running the TUI from within a render-engine project directory that has a pyproject.toml with [tool.render-engine] configured.
Check that your collection in pyproject.toml has a valid content_manager configured. Example:
[tool.render-engine.collections.blog]
content_manager = "render_engine.content_managers.PostgreSQLManager"- Verify your ContentManager backend is running (PostgreSQL, etc.)
- Check that your render-engine collection configuration is correct
- Try creating a test post with
render-engine createto verify the backend works
Contributions welcome! Please:
- Fork the repo
- Create a feature branch
- Make your changes
- Test with multiple collections and backends
- Submit a PR
See LICENSE file for details.