Skip to main content

Starfyre Logo

Discord Downloads

Starfyre ⭐🔥

Introduction:

Starfyre is a library that allows you to build reactive frontends using only Python. With Starfyre, you can create interactive, real-time applications with minimal effort. Simply define your frontend as a collection of observables and reactive functions, and let Starfyre handle the rest. Starfyre is based on Pyscript for client side functions and uses the concept of pyxides when structuring code.

  • pyxide - translates to a container. Every component is a container. It can contain other components or HTML elements.

📦 Installation:

pip install starfyre

A sample project is hosted on GitHub.

🚀 Sample App

To create an application

starfyre --create="my-app"

It will use the create-starfyre-app as the template to create a new project.

IDE/Editor Plugins

  • vim-starfyre : A Vim plugin for syntax highlighting Starfyre files.
  • vscode-starfyre : A VSCode extension for syntax highlighting Starfyre files.

A simple component

my-app/pages/__init__.fyre

import "../styles/index.css"

def message():
  return "World"

---client
from starfyre import js

def handle_click():
  js.console.log("Hello World")
---

<pyxide>
  <div onclick={handle_click()}>
    Hello, {message()}
  </div>
</pyxide>

Using Components

Click to expand

my-app/pages/__init__.fyre

import "../styles/index.css"
from @.components.custom_component import custom_component
# @ is the alias for the source directory. e.g. my-app in our case

<pyxide>
 <custom_component></custom_component>
</pyxide>

my-app/src/components/custom_component.fyre

<pyxide>
  <div> This is a custom component </div>
</pyxide>

State Management

Click to expand

Signals are super early at this moment. You need to have the word "signal" when declaring a variable. e.g. get_signal, set_signal, use_signal. And use_signal and get_signal can't be evaluated on the client, i.e. can't have {use_signal()+1}. This will be fixed with a better serialization.

my-app/pages/__init__.fyre

---client

[get_signal, set_signal, use_signal] = create_signal("Hello World")

def handle_click():
  set_signal("Goodbye World")
---

<pyxide>
  <div onclick={handle_click}>
    {use_signal()}
  </div>
</pyxide>

Routing

File based Routing

Starfyre supports file based routing.

my-app
├── pages
│   ├── __init__.fyre
│   ├── about.fyre
│   └── nav.fyre

Styling

Click to expand

Starfyre supports CSS and file based css.

import "../styles/index.css"

<style>
.component {
/* CSS here */
}

</style>

<pyxide>
  <div class="component"> Hello World </div>
</pyxide>

Dependencies

You need to have a starfyre_config.toml file in your project root directory. This file is used to specify the dependencies for your project. The dependencies are specified in the following format:

pyxide_packages = [] # for client side packages
server_packages = [] # for server side packages

[js_modules]
is_odd = "https://cdn.jsdelivr.net/npm/is-odd@3.0.1/+esm"
Fireworks = "https://cdn.jsdelivr.net/npm/fireworks-js@2.10.7/+esm"

You can specify the dependencies using the following commands:

starfyre --add-pyxide-package="package-name"
starfyre --add-server-package="package-name"
starfyre --add-js-module="module-name" --as="alias"

🚀 Sample CLI usage

Usage: python -m starfyre [OPTIONS]

  Command-line interface to compile and build a Starfyre project.

  Args:

      path (str): Path to the project directory.

      build (bool): Whether to start the build package.

      create (str): Name of the project to create.

      serve (bool): Whether to serve the project.

Options:
  --path TEXT    Path to the project. Requires --build.
  --build        Compile and build package. Requires --path.
  --create TEXT  Create a new project. Requires a project name.
  --serve        Serve the project. Requires --path.
  --help         Show this message and exit.

🗒️ How to contribute

🏁 Get started

Please read the code of conduct and go through CONTRIBUTING.md before contributing to Starfyre. Feel free to open an issue for any clarifications or suggestions.

If you're feeling curious. You can take a look at a more detailed architecture here.

If you still need help to get started, feel free to reach out on our community discord.

⚙️ Developing Locally

  1. Fork this repo
  2. Clone this repo - git clone https://github.com/sparckles/starfyre
  3. Go in to the starfyre directory - cd starfyre
  4. Download poetry curl -sSL https://install.python-poetry.org/ | python3 -
  5. Install the dependencies poetry install
  6. Activate poetry virtual environment poetry shell
  7. Run the script ./build.sh. This command will run the build process in starfyre against the test application in test-application directory.
  • The build.sh file is a simple script that runs two commands sequentially.
    • python -m starfyre --build=True --path="test_application/"
      • The path variable here is the path to our application.
      • The build directory is basically a python package that contains all the compiled files. We use the --build flag to run that package.
  1. You can find a small test application in the test_application directory.
  2. Navigate to cd test_application/dist.
  3. Open index.html in your browser to see the output.

Feedback

Feel free to open an issue and let me know what you think of it.

Metadata

Release files for starfyre 0.21.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for starfyre 0.21.0
File Size Uploaded Provenance
starfyre-0.21.0.tar.gz 22.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for starfyre 0.21.0
File Interpreter ABI Platform
starfyre-0.21.0-py3-none-any.whl Python 3 none any Details

Total release size: 47.4 kB

Release files / starfyre-0.21.0.tar.gz

Download URL starfyre-0.21.0.tar.gz
Size 22.2 kB
Tags Source
SHA-256 checksum
How to use checksums
d3f4c82fc0d43b4d13c0a7f3d41f3b39156c0b3980939d14822ac28e90712b26
BLAKE2b-256 checksum
How to use checksums
7bb0c6773d9d795231d3571db2163d26ece83523b9d0a565869869d726634ca0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.7

Release files / starfyre-0.21.0-py3-none-any.whl

Download URL starfyre-0.21.0-py3-none-any.whl
Size 25.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e0268d607bb471c7840224aaa23e0f0b55e3752f93be5004d2c8b1e8e8295712
BLAKE2b-256 checksum
How to use checksums
c7a5f144ee2097617970a82e008911d997511b37ad0c038e9bbee5107f5f9cf9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.7

Security for starfyre 0.21.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.21.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page