@byfungsi/funforge
v0.5.0
Published
Deploy without git, without leaving your editor
Maintainers
Readme
@byfungsi/funforge
Deploy without git. Without leaving your editor.
FunForge CLI lets you deploy directly from your local machine to FunForge - no commits, no pushes, no CI/CD pipelines. Just run funforge deploy and you're live.
Features
- Git-Free Deployment - Deploy without committing. Perfect for rapid iteration.
- Local-First Workflow - Work locally, deploy directly. Skip the CI/CD dance.
- Editor Integration - MCP server for Claude Desktop, Cursor, and other AI assistants.
- Full Control - Manage environment variables, custom domains, and deployments from CLI.
Installation
# npm
npm install -g @byfungsi/funforge
# pnpm
pnpm add -g @byfungsi/funforge
# bun
bun add -g @byfungsi/funforgeQuick Start
# 1. Authenticate (opens browser)
funforge login
# 2. Create an app (or link to existing)
funforge apps create my-app
# 3. Link your project
funforge link
# 4. Deploy
funforge deployThat's it. Your app is live at https://your-app.funforge.app.
Commands
Authentication
funforge login # Authenticate via browser (device flow)
funforge logout # Clear stored credentials
funforge whoami # Show current authenticated userApps
funforge apps list # List all your apps
funforge apps create <name> # Create a new app
funforge apps create <name> -s <slug> # Create with custom subdomain
funforge link # Link current directory to an app (interactive)
funforge link <appId> # Link to specific appDeploy
funforge deploy # Deploy current directory
funforge deploy -y # Skip confirmation prompt
funforge deploy --no-watch # Don't watch deployment logsEnvironment Variables
funforge env list # List all env vars
funforge env set KEY=VALUE # Set single variable
funforge env set KEY1=V1 KEY2=V2 # Set multiple variables
funforge env unset KEY # Remove variable
funforge env unset KEY1 KEY2 # Remove multipleCustom Domains
funforge domains list # List custom domains
funforge domains add example.com # Add domain (shows DNS instructions)
funforge domains add example.com -m txt # Use TXT verification
funforge domains remove example.com # Remove domain
funforge domains verify example.com # Verify DNS and provision SSLConfig (Build Settings)
Manage build settings stored on the server:
funforge config show # Compare local vs server settings
funforge config push # Push local settings to server
funforge config pull # Pull server settings to local fileNote: The config commands sync settings to the database. However, during deployment, funforge.json in your project is automatically read and takes priority over database settings.
Configuration
funforge.json
When you run funforge link, a funforge.json file is created in your project root:
{
"appId": "your-app-uuid",
"appName": "My App",
"appSlug": "my-app",
"build": {
"buildCommand": "npm run build",
"installCommand": "npm ci",
"startCommand": "npm start",
"nodeVersion": "20"
},
"port": 3000
}Fields:
| Field | Description |
|-------|-------------|
| appId | (Required) The app UUID this project is linked to |
| appName | Display name of the app |
| appSlug | Subdomain slug (e.g., my-app for my-app.funforge.app) |
| build.buildCommand | Custom build command (overrides auto-detection) |
| build.installCommand | Custom install command (e.g., npm ci or pnpm install) |
| build.startCommand | Custom start command (e.g., node server.js) |
| build.nodeVersion | Node.js version: "18", "20", or "22" |
| port | Port your app listens on (default: 3000) |
Build Settings Priority:
During deployment, build settings are resolved in this order:
- funforge.json (in your project) - highest priority
- Database settings (set via web UI or
funforge config push) - Railpack auto-detection - fallback
This means you can commit funforge.json to your Git repo and it will automatically be used during builds - no need to configure anything in the web UI or run funforge config push.
Git Users: Just add funforge.json to your repo. The builder will automatically read it during deployment.
CLI Users: Your funforge.json is included in the upload and used during builds.
.funforgeignore
Control which files are included in the deployment tarball. Uses .gitignore syntax:
# Ignore test files
__tests__/
*.test.ts
# Ignore local config
.env.local
config.local.jsonBy default, FunForge respects your .gitignore file. Use .funforgeignore to add additional exclusions.
Size Limits
- Maximum tarball size: 50 MB
- Use
.funforgeignoreto exclude large files (node_modules is automatically excluded)
MCP Server
FunForge includes an MCP (Model Context Protocol) server for AI assistant integration. Deploy directly from Claude Desktop, Cursor, or any MCP-compatible client.
Setup for Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"funforge": {
"command": "npx",
"args": ["@byfungsi/funforge-mcp"]
}
}
}Setup for Cursor
Add to your MCP settings:
{
"funforge": {
"command": "npx",
"args": ["@byfungsi/funforge-mcp"]
}
}Available Tools
| Tool | Description |
|------|-------------|
| funforge_whoami | Check authentication status |
| funforge_apps_list | List all your apps |
| funforge_apps_create | Create a new app |
| funforge_status | Get deployment status |
| funforge_deploy | Deploy a directory |
| funforge_env_list | List environment variables |
| funforge_env_set | Set environment variables |
| funforge_env_unset | Remove environment variables |
| funforge_domains_list | List custom domains |
| funforge_domains_add | Add a custom domain |
Example Conversations
Once configured, you can use natural language:
- "Deploy my current project to FunForge"
- "Set the DATABASE_URL environment variable to postgres://..."
- "Add api.myapp.com as a custom domain"
- "What's the status of my deployment?"
Environment Variables
The CLI can be configured via environment variables:
| Variable | Description | Default |
|----------|-------------|---------|
| FUNFORGE_API_URL | API endpoint | https://funforge.fungsi.app |
| FUNFORGE_API_KEY | API key (skips device auth) | - |
Authentication
FunForge uses device authentication flow:
- Run
funforge login - Browser opens to FunForge login page
- Sign in with GitHub
- CLI automatically receives credentials
- Credentials stored locally in
~/.config/funforge/
For CI/CD environments, set FUNFORGE_API_KEY instead.
How It Works
- Tarball Creation - CLI creates a
.tar.gzof your project (respecting.gitignoreand.funforgeignore) - Upload - Tarball is uploaded to R2 storage
- Build - FunForge downloads and builds your app using Railpack (auto-detects framework)
- Deploy - Blue-green deployment with health checks
- Live - Your app is available at
https://your-app.funforge.app
Links
- Website: funforge.app
- Documentation: docs.fungsi.app/docs/funforge/guides/cli
- CLI Marketing: funforge.app/cli
- MCP Integration: funforge.app/mcp
Requirements
- Node.js 18+
- FunForge account (sign up at funforge.app)
License
MIT
