You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Rain Mark a32943be95 Streamline open source documentation 3 months ago
alembic Initial Iron product MVP candidate 3 months ago
app Initial Iron product MVP candidate 3 months ago
docs Streamline open source documentation 3 months ago
frontend Initial Iron product MVP candidate 3 months ago
scripts Initial Iron product MVP candidate 3 months ago
tests Initial Iron product MVP candidate 3 months ago
.gitignore Initial Iron product MVP candidate 3 months ago
AGENTS.md Streamline open source documentation 3 months ago
CONTRIBUTING.md Streamline open source documentation 3 months ago
LICENSE Initial commit 3 months ago
README.md Streamline open source documentation 3 months ago
alembic.ini Initial Iron product MVP candidate 3 months ago
package-lock.json Initial Iron product MVP candidate 3 months ago
package.json Initial Iron product MVP candidate 3 months ago
pyproject.toml Initial Iron product MVP candidate 3 months ago
tsconfig.json Initial Iron product MVP candidate 3 months ago

README.md

Iron

Iron is a self-hosted personal cloud drive gateway. It provides one logical file namespace over local storage and pluggable backends, with a browser UI for daily file management and operational visibility.

The project is currently a Product MVP Candidate: the core backend and Web app exist, but the release still needs hardening, broader browser regression coverage, and more real-world usage.

Features

  • FastAPI backend with SQLite, SQLAlchemy, and Alembic migrations
  • Local authentication with persisted bearer-token sessions
  • Directory and file operations: browse, create folder, rename, move, delete, restore, download, and preview
  • tus upload flow with local object persistence
  • Desktop-first React Web app at /app
  • Storage backend management for local storage and S3 runtime paths
  • Placement policies, reconcile jobs, health checks, and retryable background jobs
  • Metadata export, validation, integrity checks, restore plans, and guarded import
  • Python Playwright end-to-end coverage for core browser flows

Quick Start

Iron uses uv for local Python environment setup.

UV_CACHE_DIR=.uv-cache uv venv .venv
UV_CACHE_DIR=.uv-cache uv pip install --python .venv/bin/python -e '.[dev]'
npm install
npm run build
.venv/bin/python -m uvicorn app.main:app --reload

Open the Web app:

http://127.0.0.1:8000/app

Default local bootstrap credentials:

username: admin
password: changeme-iron

Configuration

Common environment variables:

  • IRON_DATABASE_URL
  • IRON_BOOTSTRAP_USERNAME
  • IRON_BOOTSTRAP_PASSWORD
  • IRON_AUTH_SESSION_TTL_HOURS
  • IRON_UPLOAD_TEMP_DIR
  • IRON_LOCAL_STORAGE_DIR
  • IRON_CACHE_DIR
  • IRON_JOB_POLL_INTERVAL_SECONDS
  • IRON_JOB_BATCH_SIZE

Runtime data is intentionally ignored by Git. By default, local development may create .iron-storage/, .iron-temp/, iron.db, and output/.

Development

Build the frontend:

npm run build

Run the full test suite:

.venv/bin/python -m pytest

Current expected result:

66 passed

Run the browser E2E flow directly:

.venv/bin/python scripts/ui_playwright_smoke.py

Or through pytest:

.venv/bin/python -m pytest tests/e2e/test_web_ui_playwright.py

Playwright screenshots and runtime artifacts are written to output/playwright/.

Repository Layout

app/                 FastAPI application, services, repositories, schemas
alembic/             Database migrations
frontend/            Vite + React + TypeScript source
app/web/dist/        Built frontend assets served by FastAPI
scripts/             Local automation and E2E scripts
tests/               Backend, API, and browser E2E tests
docs/                Product, architecture, API, and maintenance docs

Documentation

Start with:

For contribution workflow, see CONTRIBUTING.md. For AI/coding-agent guidance, see AGENTS.md.

Security Notes

Iron is not yet a hardened public Internet service. Treat the current credentials and local bearer-token session model as development-oriented defaults. Change the bootstrap password and review deployment boundaries before exposing the service.

Metadata import is guarded and requires both:

  • confirm_replace=true
  • a fresh validation token from POST /api/exports/metadata/restore-plan

License

No open source license has been selected yet. Add a LICENSE file before publishing or accepting external contributions.