fyra

Push any directory. Get a live URL.

Getting started

Installing Fyra

The CLI is a single self-contained binary. Install it globally once — you're done. Works on macOS, Linux, and Windows.

Install the CLI
terminal
$ curl -fsSL https://fyra.sh/install.sh | sh

Installs fyra to /usr/local/bin.

Create an account
terminal
$ fyra register Email: you@example.com Password: ········ Confirm password: ········ Account created. Check your email to verify your address.
Log in
terminal
$ fyra login Email: you@example.com Password: ········ Logged in successfully.

Your token is saved to ~/.fyra/config.yaml.

Already have an account? Skip registration and run fyra login directly.

Getting started

Your first deploy

Two commands: fyra create registers the app, fyra push sends it to the network.

Go to your project directory
terminal
$ cd my-site/dist
Create the app
terminal
$ fyra create --appname my-site Created app: my-site Run 'fyra push' to deploy this directory.

Writes .deploy.yaml to your project. Omit --appname to get a random slug like quiet-river.

Push it live
terminal
$ fyra push Scanning my-site... Packing 24 files (840.0 KB) Uploading... 840.0 KB sent Deploying on server... Done: https://my-site.apps.fyra.sh

Files are tarballed in memory, sent over gRPC, and the CDN updates automatically.

Subsequent deploys? Just fyra push again. That's the whole loop.

Domains

Custom domains

Three steps: register the domain with Fyra, add a CNAME at your registrar, then verify.

Register the domain
terminal
$ fyra set-domain shop.example.com Custom domain set to shop.example.com. Point your CNAME for shop.example.com → shop-example-com.ignite.fyra.sh Run 'fyra check-domains' to verify once DNS propagates.
Add the CNAME record

At your registrar / DNS provider, add:

dns record
Type Host Value CNAME shop.example.com shop-example-com.ignite.fyra.sh

Apex domains are also supported. Cloudflare users should enable Proxied mode.

Verify and activate
terminal
$ fyra check-domains Have you added a CNAME for shop.example.com → shop-example-com.ignite.fyra.sh? [y/N] y ✓ CNAME verified. Certificate status: provisioning… ✓ Custom domain is live at https://shop.example.com

To revert to slug.apps.fyra.sh, run fyra remove-domain.

Domains

SSL & HTTPS

Every Fyra site is HTTPS-only. Certificates are issued and renewed automatically.

Free subdomain certificates

*.apps.fyra.sh uses a wildcard certificate managed by Fyra. Nothing for you to do.

Custom domain certificates

Let's Encrypt issues a certificate automatically when the CNAME is detected. fyra check-domains waits for the cert to land (about 2 minutes).

certificate lifecycle
CNAME verified → cert requested → cert issued → HTTPS live
Automatic renewal

Certificates auto-renew before expiry. HTTP traffic is redirected to HTTPS.

Cert not issued? Usually a bad CNAME. Run fyra check-domains and read the diagnostic.

Customization

Custom 404 page

Drop a 404.html in your project root and Fyra serves it for not-found URLs instead of the default plain-text response.

Create a 404.html file
project structure
my-site/ ├── index.html ├── about.html ├── 404.html ← your custom error page └── styles/ └── main.css
Write your page
404.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Page not found</title> </head> <body> <h1>404</h1> <p>Nothing here — try the <a href="/">home page</a>.</p> </body> </html>
Deploy it
terminal
$ fyra push Scanning my-site... Packing 25 files (842.3 KB) Custom 404 page detected — will be served for not-found URLs. Uploading... 842.3 KB sent Done: https://my-site.apps.fyra.sh

No 404.html? Visitors see a plain 404 Not Found text. Optional but recommended.

Customization

Excluding files from upload

Create a .fyraignore file using .gitignore syntax.

Create a .fyraignore file
.fyraignore
# Dependencies and build output node_modules/ .cache/ # Private config .env .env.local # Source files not needed at runtime src/ *.sketch *.psd
Verify what will be uploaded

fyra push prints the file count and total size on every push — there's no separate dry-run command.

terminal
$ fyra push Scanning my-site... Packing 18 files (210.4 KB) Uploading... 210.4 KB sent Done: https://my-site.apps.fyra.sh
What's always excluded
always excluded
.git/ version control history node_modules/ npm / yarn packages .deploy.yaml fyra app metadata

.fyraignore is often a subset of .gitignore — start by copying and trimming.