| Crates.io | jitpomi-ferrisup |
| lib.rs | jitpomi-ferrisup |
| version | 0.1.0 |
| created_at | 2025-03-28 18:01:37.837163+00 |
| updated_at | 2025-03-28 18:01:37.837163+00 |
| description | A versatile Rust project bootstrapping tool - start anywhere, scale anywhere |
| homepage | |
| repository | https://github.com/Jitpomi/ferrisup |
| max_upload_size | |
| id | 1609936 |
| size | 403,944 |
A powerful Rust project bootstrapping tool - Start Anywhere, Scale Anywhere
FerrisUp CLI is a versatile command-line tool for creating and managing Rust projects with flexible templates. Like Create React App for React, FerrisUp makes it easy to start new Rust projects with the right structure and dependencies.
# Install from crates.io
cargo install jitpomi-ferrisup
# Or install from source
git clone https://github.com/Jitpomi/ferrisup.git
cd ferrisup
cargo install --path .
# Create a new minimal project
jitpomi-ferrisup new my_project
# Create a full-stack project
jitpomi-ferrisup new my_fullstack --template=full-stack
# Create an AI project
jitpomi-ferrisup new my_ai_app --template=gen-ai
# Create an edge computing project
jitpomi-ferrisup new my_edge_app --template=edge-app
# Create an embedded systems project
jitpomi-ferrisup new my_embedded --template=embedded
View all available templates:
jitpomi-ferrisup list
Current templates include:
minimal - Simple binary with a single main.rs filelibrary - Rust library crate with a lib.rs filefull-stack - Complete application with client, server, and shared librariesgen-ai - AI-focused project with inference and model componentsedge-app - WebAssembly-based application for edge computingembedded - Embedded systems firmware for microcontrollersserverless - Serverless functions for cloud deploymentiot-device - IoT device firmware with connectivity featuresml-pipeline - Machine learning data processing pipelinedata-science - Data science project with analysis toolsjitpomi-ferrisup [OPTIONS]
FerrisUp offers a variety of commands to help you bootstrap, transform, and manage your Rust projects:
newCreate a new Rust project with a predefined structure.
jitpomi-ferrisup new [PROJECT_NAME] [--template TEMPLATE_NAME] [--git] [--build] [--no-interactive]
PROJECT_NAME: Optional name for your project--template: Specify a template (web, api, full-stack, etc.)--git: Initialize a git repository--build: Run cargo build after creation--no-interactive: Create project without prompting, using default valuestransformTransform an existing project into a FerrisUp template structure.
jitpomi-ferrisup transform [--project PATH] [--template TEMPLATE_NAME]
--project: Path to existing project--template: Template to transform tolistList available templates.
jitpomi-ferrisup list
scaleInteractively scale a project with custom components.
jitpomi-ferrisup scale
previewPreview a template without creating any files.
jitpomi-ferrisup preview [--template TEMPLATE_NAME]
--template: Template to previewcomponentManage project components (add/remove).
jitpomi-ferrisup component [--action ACTION] [--component-type TYPE] [--project PATH]
--action: Action to perform: add, remove, or list--component-type: Component type: client, server, database, ai, edge, embedded, etc.--project: Path to the projectconfigManage configurations (export/import).
jitpomi-ferrisup config [--export] [--import FILE] [--path PATH]
--export: Export current configuration to a file--import: Import configuration from a file--path: Path to export/import configurationworkspaceManage a Cargo workspace structure for your Rust projects. This command helps you create and maintain modular projects with multiple crates organized in a workspace.
jitpomi-ferrisup workspace <SUBCOMMAND> [OPTIONS]
Subcommands:
init [PATH]: Initialize a new workspace with standard directory structure (bin, libs, services, apps)add <CRATE> [PATH]: Add a new crate to the workspaceremove <CRATE> [PATH]: Remove a crate from the workspacelist [PATH]: List all workspace membersoptimize [PATH]: Find common dependencies and move them to workspace-levelExamples:
# Initialize a new workspace
jitpomi-ferrisup workspace init my_workspace
# Add a library crate to the workspace
jitpomi-ferrisup workspace add libs/core my_workspace
# Add a binary crate
jitpomi-ferrisup workspace add bin/cli my_workspace
# Add a service
jitpomi-ferrisup workspace add services/api my_workspace
# List all workspace members
jitpomi-ferrisup workspace list my_workspace
# Remove a crate from the workspace
jitpomi-ferrisup workspace remove libs/core my_workspace
# Optimize workspace dependencies
jitpomi-ferrisup workspace optimize my_workspace
This command supports the "Start Anywhere, Scale Anywhere" philosophy by allowing you to:
FerrisUp provides comprehensive workspace management capabilities through the workspace command:
jitpomi-ferrisup workspace --action init
This command will:
jitpomi-ferrisup workspace --action add
Add a new crate to your workspace:
jitpomi-ferrisup workspace --action remove
Remove a crate from your workspace with the option to:
jitpomi-ferrisup workspace --action list
Show all workspace members and discovered crates.
jitpomi-ferrisup workspace --action optimize
Optimize your workspace by:
FerrisUp includes a comprehensive test suite to ensure functionality and compatibility. You can run the tests with:
# Run all tests
cargo test
# Run specific test
cargo test test_name
# Run tests in specific file
cargo test --test file_name
The --no-interactive flag is especially useful for automated testing and CI/CD pipelines, allowing for the creation of projects without requiring user input.
FerrisUp supports both new and old template formats, ensuring backward compatibility with existing templates. The system automatically converts older templates to the newer format.
Contributions are welcome! Please feel free to submit a Pull Request.
git checkout -b feature/amazing-featuregit commit -m 'Add some amazing feature'git push origin feature/amazing-featureFerrisUp follows a simple workflow:
┌─────────────────────┐
│ Command Selection │
│ new, transform, │
│ scale, list │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Project Location │
│ Current dir or │
│ specified path │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Template Selection │
│ Choose template or │
│ customize │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Component Selection │
│ Client, Server, │
│ Database, etc. │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Technology Stack │
│ Framework, language │
│ and tools │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Configuration │
│ Git, CI/CD, │
│ Dependencies │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Project Created │
│ or Transformed │
└─────────────────────┘
Each step is optional and can be skipped if you provide the information via command-line parameters. FerrisUp only prompts for what it needs to complete your task.
Configure through JSON or environment variables:
{
"project_name": "my_rust_app",
"template": "full-stack",
"components": {
"client": {
"apps": ["web", "mobile"],
"frameworks": ["dioxus", "tauri"]
},
"server": {
"services": ["api", "auth"],
"frameworks": ["poem", "axum"]
},
"database": {
"enabled": true,
"engines": ["postgres", "redis", "neo4j", "milvus"],
"migration_tool": "sqlx"
},
"libs": {
"modules": ["core", "models", "auth"]
},
"binaries": {
"apps": ["cli", "server", "worker"],
"types": ["app", "service", "utility"]
},
"ai": {
"models": ["llama", "whisper"],
"backends": ["candle"],
"features": ["text-generation", "speech-to-text"]
},
"edge": {
"targets": ["wasm", "cloudflare-workers"],
"features": ["serverless", "cdn-integration"]
},
"embedded": {
"targets": ["rp2040", "esp32"],
"features": ["no-std", "real-time", "low-power"]
}
},
"dependencies": {
"dioxus": { "version": "0.4", "features": ["web"] },
"poem": { "version": "1.3" },
"sqlx": { "version": "0.7", "features": ["postgres"] }
},
"templates": {
"full-stack": ["client", "server", "database", "libs"],
"backend-only": ["server", "database", "libs"],
"frontend-only": ["client", "libs"],
"api-service": ["server", "database", "libs"],
"library": ["libs"],
"minimal": ["binaries"],
"hello-world": ["binaries", "libs"],
"cli-app": ["binaries"],
"gen-ai": ["ai", "server", "libs"],
"edge-app": ["edge", "libs"],
"iot-device": ["embedded", "libs"],
"ml-pipeline": ["ai", "server", "database", "libs"],
"serverless": ["server", "database", "libs"],
"data-science": ["ai", "server", "database", "libs"]
}
}
FerrisUp is designed with maximum flexibility in mind, allowing you to:
Use the --minimal flag to create a bare-bones Rust project:
jitpomi-ferrisup new my_project --minimal
This creates a simple "Hello, World!" application with a clean workspace structure that's ready to expand.
FerrisUp supports standalone binary applications with the binaries component:
"binaries": {
"apps": ["cli", "server", "worker"],
"types": ["app", "service", "utility"]
}
Perfect for command-line tools, background workers, or microservices.
FerrisUp offers a variety of templates to match your project needs:
gen-ai - AI-focused project with inference and model components
edge-app - WebAssembly-based application for edge computing
embedded - Embedded systems firmware for microcontrollers
serverless - Serverless functions for cloud deployment
iot-device - IoT device firmware with connectivity features
ml-pipeline - Machine learning data processing pipeline
data-science - Data science project with analysis tools
All templates can be fully customized during the interactive setup process. You're never locked into any specific technology stack or architecture.
When you're ready to scale, use the --scale flag to generate deployment configurations:
jitpomi-ferrisup new my_enterprise_app --scale
This adds:
FerrisUp truly embodies the "start anywhere, scale anywhere" philosophy with its transformation capability. You can begin with the simplest project and evolve it as your needs grow:
# Start with a minimal project
jitpomi-ferrisup new my_project
# Later transform it to a library
jitpomi-ferrisup transform --project=my_project --template=library
# Add AI capabilities when needed
jitpomi-ferrisup transform --project=my_project --template=gen-ai
# Eventually scale to a full-stack application
jitpomi-ferrisup transform --project=my_project --template=full-stack
# Add enterprise scaling when ready for production
jitpomi-ferrisup scale --project=my_project
This transformation feature intelligently:
project_name/
├── Cargo.toml
├── client/
│ ├── app1/
│ ├── app2/
│ └── common/
├── server/
│ ├── service1/
│ ├── service2/
│ └── common/
├── database/
│ ├── migrations/
│ ├── schema/
│ ├── seeds/
│ └── src/
├── libs/
│ ├── core/
│ ├── models/
│ └── auth/
├── binaries/
│ ├── cli/
│ ├── server/
│ └── worker/
├── ai/
│ ├── models/
│ ├── backends/
│ └── features/
├── edge/
│ ├── targets/
│ └── features/
├── embedded/
│ ├── targets/
│ └── features/
└── deploy/
├── docker/
├── kubernetes/
├── github-actions/
└── cloud-deployments/
FerrisUp supports a comprehensive range of database technologies:
Each integration includes:
Configure your database engines in the config.json file:
"database": {
"enabled": true,
"engines": ["postgres", "redis", "neo4j", "milvus"],
"migration_tool": "sqlx"
}
FerrisUp will automatically generate the appropriate code and connections for each selected engine.
FerrisUp allows your project to evolve naturally:
Your app can remain as simple as needed or grow to any scale imaginable, all without changing tools or frameworks.
This project is licensed under the MIT License - see the LICENSE file for details.