Crates.io | ferrisup |
lib.rs | ferrisup |
version | 0.2.4 |
created_at | 2025-03-28 17:51:28.10532+00 |
updated_at | 2025-09-25 04:09:09.71202+00 |
description | A versatile Rust project bootstrapping tool - start anywhere, scale anywhere |
homepage | https://github.com/Jitpomi/ferrisup |
repository | https://github.com/Jitpomi/ferrisup |
max_upload_size | |
id | 1609926 |
size | 2,789,840 |
A powerful Rust project bootstrapping tool - Start Anywhere, Scale Anywhere
Note: FerrisUp is under active development. While the core templates are fully functional, some advanced features are still in development.
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.
new
): Create new Rust projects with interactive configurationtransform
): Convert existing projects with interactive configurationlist
, preview
): List and preview available componentscomponent
): Add and remove project componentsconfig
): Export and import configurationsworkspace
): Manage Cargo workspacesdependency
, unused-features
): Manage dependencies and optimize feature usageFerrisUp is organized as a Cargo workspace with the following components:
Commands:
new Create a new Rust project with interactive configuration
transform Transform an existing project with interactive configuration
list List available component types
preview Preview a component without actually creating files
component Manage project components (add/remove/list) with consistent component types
config Manage configurations (export/import)
workspace Manage Cargo workspaces
dependency Manage project dependencies
unused-features Find unused features in Cargo dependencies
# Install from crates.io
cargo install ferrisup
# Or install from source
git clone https://github.com/Jitpomi/ferrisup.git
cd ferrisup
cargo install --path ferrisup
FerrisUp provides a simple and intuitive command-line interface for creating and managing Rust projects. Here's how to use it:
# Get help information
ferrisup --help
# Create a new project (interactive mode)
ferrisup new
# List available component types
ferrisup list
# Preview a component type (work in progress)
ferrisup preview --component-type server --framework axum
# Preview a client component with specific framework
ferrisup preview --component-type client --framework dioxus
# Transform an existing project
ferrisup transform
# Manage dependencies
ferrisup dependency add tokio serde
See the Commands section below for more detailed usage instructions.
# Create a new project
ferrisup new my_project
# Create a new minimal project
ferrisup new my_project --component-type minimal
# Create a leptos client project
ferrisup new my_client --component-type client --framework leptos
# Create a data science project
ferrisup new my_data_app --component-type data-science --framework polars
# Create a server with Axum
ferrisup new my_server --component-type server --framework axum
# Create an edge computing project for Cloudflare
ferrisup new my_edge_app --component-type edge --provider cloudflare
View all available component types:
ferrisup list
Current component types include:
minimal
- Simple binary with a single main.rs filebinary
- Command-line application with CLI featureslibrary
- Rust library crate with a lib.rs fileembedded
- Embedded systems firmware for microcontrollersserver
- Web server with API endpoints (Axum, Actix, or Poem)client
- Frontend web application (Leptos, Yew, or Dioxus)serverless
- Serverless function (AWS Lambda, Cloudflare Workers, etc.)data-science
- Data science and machine learning projectsedge
- Edge computing applications (Cloudflare, Vercel, Fastly, AWS, etc.)shared
- Shared code libraries for workspace componentsnew
Create a new Rust project with a predefined structure.
ferrisup new [PROJECT_NAME] [--git] [--build]
# Component-specific options (use one of these combinations):
ferrisup new [PROJECT_NAME] [--component-type TYPE] [--framework FRAMEWORK]
ferrisup new [PROJECT_NAME] [--component-type TYPE] [--provider PROVIDER]
ferrisup new [PROJECT_NAME] [--component-type TYPE] [--application-type APPLICATION_TYPE]
PROJECT_NAME
: Optional name for your project--component-type
: Specify a component type (server, client, data-science, edge, binary, etc.)--framework
: Specify a framework for the selected component type (e.g., polars, linfa for data-science; axum, actix, poem for server)--provider
: Specify a cloud provider for serverless or edge components (e.g., cloudflare, vercel, aws)--application-type
: Specify an application type for certain components--git
: Initialize a git repository--build
: Run cargo build after creationpreview
(Work in Progress)Preview a component type without actually creating files. This command shows what files and features would be included in a project of the specified component type.
ferrisup preview [--component-type TYPE] [--framework FRAMEWORK] [--provider PROVIDER] [--application-type APPLICATION_TYPE]
--component-type
: Specify a component type to preview (server, client, data-science, edge, binary, etc.)--framework
: Specify a framework for client, server, or embedded components--provider
: Specify a cloud provider for serverless or edge components--application-type
: Specify an application type for edge componentsNote: The preview command is currently a work in progress with several known limitations:
Future improvements will address these limitations to provide a more accurate preview experience.
transform
Transform an existing project into a different structure or add components. This command enables the "Start Anywhere, Scale Anywhere" philosophy by allowing you to evolve your project structure as your needs grow.
ferrisup transform [--project PATH] [--test-mode]
The transform command provides an interactive menu with the following capabilities:
Convert to Workspace: Transform a single-crate project into a Rust workspace
projectname_componentname
)--test-mode
flag or FERRISUP_TEST_MODE
environment variableAdd Components: Add new components to an existing workspace
new
commandshared::*
new
command functionality for consistent component creationAdd Components Without Workspace: Add related components without converting to a workspace
Update Metadata: Manage project configuration stored in .ferrisup/metadata.toml
Next Steps Guide: Provides clear instructions after transformation
list
List available component types and frameworks.
ferrisup list
preview
Preview a component without creating any files.
ferrisup preview [--component-type TYPE] [--framework FRAMEWORK]
dependency
Manage dependencies in your Rust project with interactive features.
# Add dependencies with interactive feature suggestions
ferrisup dependency add [DEPENDENCIES...] [OPTIONS]
# Remove dependencies
ferrisup dependency remove [DEPENDENCIES...] [OPTIONS]
# Update dependencies
ferrisup dependency update [DEPENDENCIES...] [OPTIONS]
Options for dependency add
:
--version, -v
: Specify a version constraint (defaults to "*")--features, -f
: Specify features to enable (comma separated)--dev, -d
: Add as a development dependency--path, -p
: Specify project path (defaults to current directory)Smart Dependency Management:
--dev
that already exists in main dependencies, it will be automatically moved to dev-dependencies--dev
that already exists in dev-dependencies, it will be automatically moved to main dependenciescomponent
Manage project components (add/remove/list) with the same component types available in the new
and transform
commands.
# Add a component to your project (interactive)
ferrisup component --action add
# Add a specific component type
ferrisup component --action add --component-type client
# List components in a project
ferrisup component --action list
# Remove a component (interactive)
ferrisup component --action remove
Options:
--action, -a
: Specify action to perform (add, remove, list)--component-type, -c
: Specify component type (client, server, shared, edge, data-science, embedded)--project, -p
: Specify project path (defaults to current directory)The component command uses the same component creation logic as the transform command, ensuring consistency across FerrisUp. When adding components, it provides the same interactive menus and framework selection options as the new
and transform
commands.
Workspace vs. Non-Workspace Projects:
The add
command provides interactive feature suggestions for common crates:
tokio
, serde
, or reqwest
, FerrisUp will suggest commonly used features--features
flagunused-features
Find and remove unused features in your Cargo dependencies to optimize your project.
ferrisup unused-features [--path PATH]
The command will:
unused-features
tool is installed (and install it if needed)FerrisUp supports various component types, each with specialized frameworks or providers:
ferrisup new my_server --component-type server --framework axum
ferrisup new my_client --component-type client --framework leptos
ferrisup new my_data_app --component-type data-science --framework polars
ferrisup new my_edge_app --component-type edge --provider cloudflare
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
For automated testing and CI/CD pipelines, the transform
command supports a --test-mode
flag (or the FERRISUP_TEST_MODE
environment variable) that allows for non-interactive execution of workspace transformations.
We welcome and encourage contributions from the community! If you believe in the project and would like to help make FerrisUp even better, please consider contributing.
How to Contribute:
git checkout -b feature/amazing-feature
git commit -m 'Add some amazing feature'
git push origin feature/amazing-feature
Priority Areas for Contribution:
transform
command to fully support project transformation between templatesscale
functionality for enterprise deploymentscomponent
and workspace
management featuresFor major contributions or if you'd like to discuss implementation details before starting work, please email us at dev@jitpomi.com.
FerrisUp is currently in active development. Here's the current status of various features:
new
commandlist
commandpreview
commandThe following features are prioritized for the next releases as we work toward version 1.0:
The following features and improvements are planned for future releases of FerrisUp:
The existing configuration system (ferrisup config
) has the foundation for powerful user preference management but needs further integration:
This project is licensed under the MIT License - see the LICENSE file for details.