Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Textualize/textual-serve
Serve Textual apps locally
https://github.com/Textualize/textual-serve
Last synced: 2 months ago
JSON representation
Serve Textual apps locally
- Host: GitHub
- URL: https://github.com/Textualize/textual-serve
- Owner: Textualize
- License: mit
- Created: 2024-06-10T15:21:54.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2024-08-29T14:39:37.000Z (5 months ago)
- Last Synced: 2024-08-29T16:53:26.890Z (4 months ago)
- Language: Python
- Size: 623 KB
- Stars: 154
- Watchers: 3
- Forks: 6
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- my-awesome-github-stars - Textualize/textual-serve - Serve Textual apps locally (Python)
README
# textual-serve
Every [Textual](https://github.com/textualize/textual) application is now a web application.
With 3 lines of code, any Textual app can run in the browser.
This is Posting running in the terminal.
This is Posting running in the browser.
---
## Getting Started
First, [install (or upgrade) Textual](https://textual.textualize.io/getting_started/#installation).
Then install `textual-serve` from PyPI:
```
pip install textual-serve
```## Creating a server
First import the Server class:
```python
from textual_serve.server import Server
```Then create a `Server` instance and pass the command that launches your Textual app:
```python
server = Server("python -m textual")
```The command can be anything you would enter in the shell, as long as it results in a Textual app running.
Finally, call the `serve` method:
```python
server.serve()
```You will now be able to click on the link in the terminal to run your app in a browser.
### Summary
Run this code, visit http://localhost:8000
```python
from textual_serve.server import Serverserver = Server("python -m textual")
server.serve()
```## Configuration
The `Server` class has the following parameters:
| parameter | description |
| -------------- | ---------------------------------------------------------------------------------- |
| command | A shell command to launch a Textual app. |
| host | The host of the web application (defaults to "localhost"). |
| port | The port for the web application (defaults to 8000). |
| title | The title show in the web app on load, leave as `None` to use the command. |
| public_url | The public URL, if the server is behind a proxy. `None` for the local URL. |
| statics_path | Path to statics folder, relative to server.py. Default uses directory in module. |
| templates_path | Path to templates folder, relative to server.py. Default uses directory in module. |The `Server.serve` method accepts a `debug` parameter.
When set to `True`, this will enable [textual devtools](https://textual.textualize.io/guide/devtools/).## How does it work?
When you visit the app URL, the server launches an instance of your app in a subprocess, and communicates with it via a websocket.
This means that you can serve multiple Textual apps across all the CPUs on your system.
Note that Textual-serve uses a custom protocol to communicate with Textual apps.
It *does not* simply expose a shell in your browser.
There is no way for a malicious user to do anything the app-author didn't intend.## See also
See also [textual-web](https://github.com/Textualize/textual-web) which serves Textual apps on a public URL.
You can consider this project to essentially be a self-hosted equivalent of Textual-web.