{"id":28047855,"url":"https://github.com/StructuredLabs/preswald","last_synced_at":"2025-05-11T21:04:50.445Z","repository":{"id":268099977,"uuid":"903304373","full_name":"StructuredLabs/preswald","owner":"StructuredLabs","description":"Preswald is a WASM packager for Python-based interactive data apps: bundle full complex data workflows, particularly visualizations, into single files, runnable completely in-browser, using Pyodide, DuckDB, Pandas, and Plotly, Matplotlib, etc. Build dashboards, reports, and notebooks that run offline, load fast, and share like a document.","archived":false,"fork":false,"pushed_at":"2025-05-08T19:27:29.000Z","size":94104,"stargazers_count":3430,"open_issues_count":321,"forks_count":644,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-05-08T20:28:49.578Z","etag":null,"topics":["ai","analytics","analytics-engineering","copilot","data","data-applications","data-infrastructure","data-pipelines","data-sdk","data-visualization","gpt","llm","open-source","python","schema-management","vscode"],"latest_commit_sha":null,"homepage":"https://www.preswald.com/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/StructuredLabs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-12-14T08:56:02.000Z","updated_at":"2025-05-08T20:21:38.000Z","dependencies_parsed_at":"2024-12-31T10:24:32.226Z","dependency_job_id":"9011aebc-63d2-4d48-b324-85f805ba3c35","html_url":"https://github.com/StructuredLabs/preswald","commit_stats":null,"previous_names":["structuredlabs/preswald"],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StructuredLabs%2Fpreswald","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StructuredLabs%2Fpreswald/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StructuredLabs%2Fpreswald/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StructuredLabs%2Fpreswald/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/StructuredLabs","download_url":"https://codeload.github.com/StructuredLabs/preswald/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253633116,"owners_count":21939389,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","analytics","analytics-engineering","copilot","data","data-applications","data-infrastructure","data-pipelines","data-sdk","data-visualization","gpt","llm","open-source","python","schema-management","vscode"],"created_at":"2025-05-11T21:04:47.483Z","updated_at":"2025-05-11T21:04:50.424Z","avatar_url":"https://github.com/StructuredLabs.png","language":"Python","readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/PreswaldBanner.png\" alt=\"Banner\"\u003e\n\u003c/p\u003e\n\n\n\u003cp align=\"center\"\u003e\n    \u003cem\u003eCreate interactive data apps with a full data stack that runs in the browser (no local dependencies!),runs offline, and is shareable in a single file.\n    \u003c/em\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"LICENSE\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/license-Apache%202.0-blue.svg\" alt=\"Apache 2.0 License\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://www.python.org/downloads/\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/python-3.7%2B-blue.svg\" alt=\"Python Version\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://join.slack.com/t/structuredlabs-users/shared_invite/zt-33zwhyv3l-6Xu4bHL6b6~bI3z9fvlUig\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/Slack-Join%20Community-orange\" alt=\"Slack Community\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://pypi.org/project/preswald/\"\u003e\n        \u003cimg src=\"https://img.shields.io/pypi/v/preswald\" alt=\"PyPI Version\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://preswald.com\" target=\"_blank\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/Landing%20Page-Visit-blue?style=for-the-badge\" alt=\"Website\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://docs.preswald.com\" target=\"_blank\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/Documentation-Read-green?style=for-the-badge\" alt=\"Documentation\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://preswald.com/dashboard\" target=\"_blank\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/Studio-Get Started-orange?style=for-the-badge\" alt=\"Studio\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://cal.com/amruthagujjar\" target=\"_blank\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/Book%20a%20Demo-Schedule-red?style=for-the-badge\" alt=\"Book a Demo\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n## **What is Preswald?**\n\nPreswald is a static-site generator for building interactive data apps in Python. It packages compute, data access, and UI into self-contained data apps that run locally in the browser. Built on a WASM runtime with Pyodide and DuckDB, Preswald enables portable, file-based apps that are fast, reactive, and shareable.\n\nYou can think of Preswald as a lightweight alternative to heavier web app platforms. It provides built-in UI components and reactive state tracking, so you can use it to build dashboards, reports, prototypes, workflows, and notebooks that are reactive, portable, and secure by default.\n\nPreswald is especially useful when:\n\n- You want to bundle logic, UI, and data into a shareable file\n- You need to ship a tool to a stakeholder who shouldn't need to install anything\n- You're working with sensitive data and want full local control\n- You want to give AI systems structured, modifiable tools\n\n## **Key Features**\n\n- Code-based. Write apps in Python, not in notebooks or JS frameworks\n- File-first. One command creates a fully-packaged `.html` app\n- Built for computation. Use Pyodide + DuckDB directly in-browser\n- Composable UI. Use prebuilt components like tables, charts, forms\n- Reactive engine. Only re-run what's needed, powered by a DAG of dependencies\n- Local execution. No server. Runs offline, even with large data\n- AI-ready. Apps are fully inspectable and modifiable by agents\n\n## Export as a Static App\n\n```bash\npreswald export\n```\n\nThis command builds your app into a static site inside `dist/`. The folder contains all the files needed to run your app locally or share it.\n\n* Works offline in any modern browser\n* Bundles your Python code (via Pyodide), data, and DuckDB queries\n* Preserves app UI, logic, and reactive state\n* Shareable as a file folder or embeddable in hosting platforms\n\n\n## **Installation**\n\nhttps://pypi.org/project/preswald/\n\n```bash\npip install preswald\n\nor \n\nuv pip install preswald\n```\n\n![Demo GIF](assets/demo1.gif)\n\n## **Quick Start**\n\n```bash\npip install preswald\npreswald init my_app\ncd my_app\npreswald run\n```\n\nThis will create a folder called `my_app`:\n\n```\nmy_app/\n├── hello.py           # Your app logic\n├── preswald.toml      # App metadata and config\n├── secrets.toml       # Secrets (e.g. API keys)\n├── data/sample.csv    # Input data files\n├── images/logo.png    # Custom branding\n```\n\nEdit `hello.py` to build your app.\n\n```python\nfrom preswald import text, table, get_df\n\ntext(\"# Hello Preswald\")\ndf = get_df(\"sample.csv\")\ntable(df)\n...\n```\n\nNow run your app locally with:\n\n```bash\npreswald run\n```\n\nThis command launches a development server, and Preswald will let you know where your app is hosted. Typically, it’s here:\n\n```\n🌐 App running at: http://localhost:8501\n```\n\nOpen your browser, and voilà—your first Preswald app is live!\n\n\n## **Configuration**\n\nPreswald uses a simple `preswald.toml` file for configuration. This defines the app's metadata, runtime settings, UI branding, and data sources. Here's a sample:\n\n```\n[project]\ntitle = \"Preswald Project\"\nversion = \"0.1.0\"\nport = 8501\nslug = \"preswald-project\"\nentrypoint = \"hello.py\"\n\n[branding]\nname = \"Preswald Project\"\nlogo = \"images/logo.png\"\nfavicon = \"images/favicon.ico\"\nprimaryColor = \"#F89613\"\n\n[logging]\nlevel = \"INFO\"  # Options: DEBUG, INFO, WARNING, ERROR, CRITICAL\nformat = \"%(asctime)s - %(name)s - %(levelname)s - %(message)s\"\n```\n\n## **Use Cases**\n\n- Analyst dashboards. Build data summaries and visualizations. Share as static sites. [Example 1]() [Example 2]() [Example 3]()  \n- Interactive reports. Deliver notebooks and reports that update live based on user input. [Example 1]() [Example 2]() [Example 3]()  \n- Data inspection tools. Explore files, logs, or snapshots with quick, purpose-built UIs.[Example 1]() [Example 2]() [Example 3]()  \n- Offline kits. Package apps for fieldwork or secure / airgap settings. [Example 1]() [Example 2]() [Example 3]()  \n- Experiment panels. Compare runs, track metrics, and present results in standalone interactive apps. [Example 1]() [Example 2]() [Example 3]()  \n\n\u003cbr\u003e\n\n## **📚 Documentation**\n\nWe’re here to help! Check out our full documentation at [Preswald Docs](https://docs.preswald.com/).\n\n\u003cbr\u003e\n\n## **🤝 Contributing**\n\nCheck out [CONTRIBUTING.md](CONTRIBUTING.md).\n\n\u003cbr\u003e\n\n## **🎉 Join the Community**\n\n- **GitHub Issues**: Found a bug? Let us know [here](https://github.com/StructuredLabs/preswald/issues).\n- **Community Forum**: Reach out [here](https://join.slack.com/t/structuredlabs-users/shared_invite/zt-33zwhyv3l-6Xu4bHL6b6~bI3z9fvlUig)\n- **Discussions**: Share your ideas and ask questions in our [discussion forum](https://github.com/StructuredLabs/preswald/discussions).\n- **Contributors**: Meet the awesome people who make Preswald better [here](https://github.com/StructuredLabs/preswald/graphs/contributors).\n\n\u003cbr\u003e\n\n## **📢 Stay Connected**\n\n\u003cp\u003e\n    \u003ca href=\"https://www.linkedin.com/company/structuredlabs/\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/Follow%20Us-LinkedIn-blue?style=for-the-badge\u0026logo=linkedin\" alt=\"Follow us on LinkedIn\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://x.com/StructuredLabs\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/Follow%20Us-Twitter-1DA1F2?style=for-the-badge\u0026logo=twitter\" alt=\"Follow us on Twitter\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n## **📄 License**\n\nPreswald is licensed under the [Apache 2.0 License](LICENSE).\n\n## ✨ Contributors\n\nThanks to everyone who has contributed to Preswald 💜\n\n[![](https://contrib.rocks/image?repo=StructuredLabs/preswald)](https://github.com/StructuredLabs/preswald/graphs/contributors)\n\n","funding_links":[],"categories":["Python","DuckDB Clients and UIs"],"sub_categories":["Web Clients (WebAssembly)"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FStructuredLabs%2Fpreswald","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FStructuredLabs%2Fpreswald","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FStructuredLabs%2Fpreswald/lists"}