Full Documentation · uv pip install scitex-app[all]
| # | Problem | Solution |
|---|---|---|
| 1 | Every lab reinvents its Django "lab tools" webapp -- three months of plumbing before the first domain feature ships | App scaffold -- scitex-app init <name> produces a working Django app with auth, file browser, session logging, routes, manifest |
| 2 | Apps don't compose -- each lab's app is a snowflake; can't install B into A's workspace | FilesBackend plugin registry -- apps declare a manifest.json; scitex-app dev-install registers them into any SciTeX Cloud workspace |
| 3 | Local-vs-cloud storage fork -- pathlib everywhere; cloud integration means rewriting every app |
Auto-backend get_files(root) -- returns a FilesBackend that transparently uses local disk or cloud storage; same read/write API |
| Environment | Backend | How it works |
|---|---|---|
| Local | FileSystemBackend |
pathlib-based, zero dependencies |
| Cloud | CloudFilesBackend |
HTTP REST via SCITEX_API_TOKEN (injected at runtime) |
| Custom | register_backend() |
S3, GCS, or any storage you need |
Table 1. Three deployment modes. The SDK auto-detects cloud when SCITEX_API_TOKEN is set; otherwise defaults to local filesystem.
Every backend implements the same 7-method protocol:
| Method | Description |
|---|---|
read(path) |
Read file content (text or binary) |
write(path, content) |
Write content, creating parent dirs |
list(directory) |
List files with optional extension filter |
exists(path) |
Check if a file exists |
delete(path) |
Delete a file |
rename(old, new) |
Rename/move a file |
copy(src, dest) |
Copy a file |
Table 2. The FilesBackend protocol. Uses typing.Protocol for structural subtyping — backends just implement the methods, no inheritance required.
Requires Python >= 3.10. Zero dependencies — pure stdlib.
pip install scitex-appsrc/scitex_app/
├── appmaker/ # scaffold, validate, publish helpers
├── sdk/ # FilesBackend protocol + implementations
├── _cli/ # `scitex-app` Click CLI
├── _mcp/ # MCP server entry
├── _chat/ # AI backend interface
├── _django.py # ScitexAppConfig base class
├── paths.py # project path resolution
├── validator.py # AppValidator (security/privilege)
└── _standalone.py # umbrella↔standalone bridge
flowchart LR
App[User App] --> SDK[scitex_app.sdk.get_files]
SDK -->|local| FS[FilesBackend - filesystem]
SDK -->|SCITEX_API_TOKEN| Cloud[FilesBackend - cloud REST]
SDK -->|custom| Plugin[FilesBackend - plugin]
CLI[scitex-app appmaker] --> Init[init / validate / submit]
from scitex_app.sdk import get_files
# Local filesystem (default)
files = get_files("./my_project")
content = files.read("config/settings.yaml")
files.write("output/result.csv", csv_text)
# List files with filter
yaml_files = files.list("config", extensions=[".yaml"])
# Cloud mode (auto-detected via SCITEX_API_TOKEN)
import os
os.environ["SCITEX_API_TOKEN"] = "your-token"
cloud_files = get_files() # routes through cloud REST APIPython API
from scitex_app.sdk import get_files, register_backend, FilesBackend
files = get_files("./project") # auto-detect backend
files.read("data.csv") # read file
files.write("out.txt", "hello") # write file
files.list(extensions=[".yaml"]) # list with filter
files.exists("config.yaml") # check existence
files.delete("temp.txt") # delete file
files.rename("old.txt", "new.txt") # rename/move
files.copy("src.txt", "dst.txt") # copy fileCLI Commands
scitex-app --help-recursive # Show all commands
scitex-app read <path> # Read a file
scitex-app write <path> "content" # Write to a file
scitex-app list [directory] # List files
scitex-app exists <path> # Check existence
scitex-app delete <path> # Delete a file
scitex-app rename <old> <new> # Rename/move a file
scitex-app copy <src> <dest> # Copy a file
scitex-app list-python-apis # List Python API tree
scitex-app mcp list-tools # List MCP toolsAll file commands support --json output. Destructive commands support --dry-run.
MCP Server — for AI Agents
AI agents can read, write, and manage files through the unified SDK.
| Tool | Description |
|---|---|
app_read_file |
Read a file through the SDK backend |
app_write_file |
Write content to a file |
app_list_files |
List files in a directory |
app_file_exists |
Check if a file exists |
app_delete_file |
Delete a file |
app_copy_file |
Copy a file |
app_rename_file |
Rename/move a file |
Table 3. Seven MCP tools mirroring the FilesBackend protocol. All tools accept JSON parameters and return JSON results.
scitex-app mcp startCreate, validate, and publish SciTeX apps — no platform installation required.
# Scaffold a new app
scitex-app app init . --name my_cool_app
# Validate before submission
scitex-app app validate .
# Dev-install on your SciTeX Cloud server
scitex-app app dev-install . --server http://127.0.0.1:8000
# Submit for public review
scitex-app app submit .Also available via the main CLI: scitex app init, scitex app validate, etc.
scitex-app is the complete toolkit for app developers — runtime SDK + development CLI. It provides backend-agnostic interfaces that let apps work locally, on the cloud, or self-hosted without code changes.
scitex (orchestrator, core compute, CLI, MCP)
|-- scitex-app (this package) -- app SDK + development CLI
| |-- appmaker -- scaffold, validate, publish
| |-- ScitexAppConfig -- Django base class for app integration
| |-- AppValidator -- security/privilege checking
| |-- FilesBackend -- unified file I/O protocol
| |-- paths -- project path resolution
| +-- chat -- AI backend interface
|-- scitex-ui -- React/TS component library
+-- figrecipe -- reference app (figures)
What this package owns:
- App scaffolding, validation, and submission (
scitex-app app init/validate/submit) - Dev-install workflow (
scitex-app app dev-install) FilesBackendprotocol and implementations (filesystem, cloud, custom)ScitexAppConfigDjango base class (from scitex_app._django import ScitexAppConfig)AppValidatorfor security and privilege checking- Path resolution utilities for project/workspace discovery
What this package does NOT own:
- Frontend components -- see scitex-ui
- Platform server APIs -- see scitex-hub
- Core compute (io, stats, plt) -- see scitex
scitex-app is part of SciTeX. Install via
the umbrella with pip install scitex[app] to use as
scitex.app (Python) or scitex app ... (CLI).
import scitex
# Access files through the unified SDK
files = scitex.app.get_files("./project")
content = files.read("recipes/scatter.yaml")
files.write("output/figure.png", png_bytes)Apps built with scitex-app work in all three modes:
- Standalone:
pip install figreciperuns locally with filesystem backend - Cloud: Deploy to scitex.ai — cloud backend injected automatically
- Self-hosted: Run your own instance with custom backends
The SciTeX system follows the Four Freedoms for Research below, inspired by the Free Software Definition:
Four Freedoms for Research
- The freedom to run your research anywhere — your machine, your terms.
- The freedom to study how every step works — from raw data to final manuscript.
- The freedom to redistribute your workflows, not just your papers.
- The freedom to modify any module and share improvements with the community.
AGPL-3.0 — because we believe research infrastructure deserves the same freedoms as the software it runs on.