๐ SilverChain
August 1, 2025 ยท View on GitHub
A Universal Import Model for C that makes organizing your code SUPER EASY! โจ
No more messy includes! Organize your C project like a pro! ๐
๐ฏ What is SilverChain? (Super Simple Explanation!)
Imagine your C project is like a messy room with clothes scattered everywhere. ๐
SilverChain is like a magic organizer that:
- Sorts your clothes by type (shirts, pants, socks) ๐ฆ
- Puts them in the right drawers (dependencies, functions, types) ๐๏ธ
- Makes everything easy to find โจ
๐ In Programming Terms:
If you have a C project with scattered files like:
math_functions.c,string_helpers.c,file_io.cconstants.h,types.h,globals.h- Headers and implementations all mixed up ๐ตโ๐ซ
SilverChain organizes ALL of these by TAGS in a logical order! ๐
๐ค Why is this AMAZING for beginners?
โ SUPER EASY to Understand Your Project
- Before: "Where is this function defined? Which file has the constants?"
- After: "Everything is organized by logical tags - dependencies first, then types, then functions!" ๐
โ NO More Include Hell
- Before: Endless
#includestatements and dependency nightmares ๐ฐ - After: SilverChain handles all includes automatically in the right order! โจ
โ Perfect for Learning
- See your project structure clearly
- Understand how different parts connect
- No mysterious "where does this come from?" moments
โ Builds Like Magic
- Automatic dependency resolution
- No complex build systems needed
- Just organize by tags and compile!
๐ฅ Download & Installation (Choose Your Adventure!)
๐จ Total Beginner? Start with the "๐ฎ Super Easy Download" section below!
๐ฎ Super Easy Download (No Compilation Needed!)
Just want to use it RIGHT NOW? Download the ready-to-run version for your computer:
| ๐ฅ๏ธ Your Computer | ๐ Download This | ๐โโ๏ธ How to Use |
|---|---|---|
| ๐ง Linux | SilverChain.out | Download โ Make executable โ Run! |
| ๐ช Windows (64-bit) | SilverChain64.exe | Download โ Double-click โ Use! |
| ๐ช Windows (32-bit) | SilverChaini32.exe | Download โ Double-click โ Use! |
๐ Super Quick Installation (Copy & Paste!)
๐ง Linux Users (Easiest Way Ever!):
# Just copy and paste this into your terminal!
curl -L https://github.com/OUIsolutions/SilverChain/releases/download/0.3.0/SilverChain.out -o SilverChain
chmod +x SilverChain
# Now you can use it like this:
./SilverChain --help
๐ง Ubuntu/Debian Users (Even Easier!):
# Download the package
wget https://github.com/OUIsolutions/SilverChain/releases/download/0.3.0/SilverChain.deb
# Install it (you'll need to enter your password)
sudo dpkg -i SilverChain.deb
# Now it's installed system-wide! Use it anywhere:
SilverChain --help
๐งโ๐ป Advanced Downloads (For Developers)
| ๐ File | ๐ฏ Best For | ๐ Description |
|---|---|---|
| โก๏ธ SilverChain.c | Developers who want to compile | Complete source code |
| ๐ SilverChainApiOne.h | Use in your C programs | Full API library |
| ๐ฆ SilverChainApiNoDependenciesIncluded.h | Minimal integration | Lightweight version |
| ๐ฆ SilverChain.rpm | Fedora/RHEL/CentOS | RPM package |
๐โโ๏ธ Quick Start Guide (For Total Beginners!)
Don't panic! This is easier than making instant noodles! ๐
๐ฌ Step 1: Your First SilverChain Project (The Basics)
Let's start with the simplest possible example:
# This is THE most basic command you'll ever need!
./SilverChain --src my_project --tags dependencies functions
๐ค What just happened?
--src my_projectโ "Hey SilverChain, look at this folder!"--tags dependencies functionsโ "Organize by dependencies first, then functions!"
That's it! SilverChain will:
- ๐ Look at your
my_projectfolder - ๐ท๏ธ Find all files with
dependencies.in their names - ๐ท๏ธ Then find all files with
functions.in their names - ๐ Create an organized
importsfolder with everything!
๐ฌ Step 2: Real-World Example (Let's Do This Together!)
Imagine you have these files in your project:
my_awesome_calculator/
โโโ src/
โ โโโ dependencies.headers.h โ All your #includes
โ โโโ types.calculator.h โ Data types
โ โโโ functions.math.h โ Function declarations
โ โโโ functions.math.c โ Function implementations
โ โโโ functions.display.h โ Display function declarations
โ โโโ functions.display.c โ Display implementations
โ โโโ main.c โ Your main program
๐งโ๐ป What's in each file:
dependencies.headers.h:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
types.calculator.h:
#ifndef CALCULATOR_TYPES_H
#define CALCULATOR_TYPES_H
typedef struct {
double result;
char operation;
} Calculator;
#endif
functions.math.h:
#ifndef MATH_FUNCTIONS_H
#define MATH_FUNCTIONS_H
double add(double a, double b);
double subtract(double a, double b);
#endif
functions.math.c:
double add(double a, double b) { return a + b; }
double subtract(double a, double b) { return a - b; }
๐ Now, let's organize everything with SilverChain:
./SilverChain --src my_awesome_calculator/src --tags dependencies types functions
๐ BOOM! Now you have an organized imports folder that looks like:
imports/
โโโ imports.dependencies.h โ All dependencies in one place
โโโ imports.types.h โ All types organized
โโโ imports.functions.h โ All function declarations
โโโ imports.functions.c โ All function implementations
โโโ ...other organized files
๐ And in your main.c, you just need:
#include "imports/imports.dependencies.h"
#include "imports/imports.types.h"
#include "imports/imports.functions.h"
int main() {
printf("My calculator is organized!\n");
double result = add(5.0, 3.0);
printf("5 + 3 = %.2f\n", result);
return 0;
}
๐ฌ Step 3: Test It Yourself!
Create a simple test project:
- Create the folder structure:
mkdir test_silverchain
mkdir test_silverchain/src
cd test_silverchain
- Create dependencies.system.h:
#include <stdio.h>
#include <string.h>
- Create types.person.h:
#ifndef PERSON_TYPES_H
#define PERSON_TYPES_H
typedef struct {
char name[50];
int age;
} Person;
#endif
- Create functions.person.h:
#ifndef PERSON_FUNCTIONS_H
#define PERSON_FUNCTIONS_H
void print_person(Person p);
Person create_person(const char* name, int age);
#endif
- Create functions.person.c:
void print_person(Person p) {
printf("Name: %s, Age: %d\n", p.name, p.age);
}
Person create_person(const char* name, int age) {
Person p;
strcpy(p.name, name);
p.age = age;
return p;
}
- Run SilverChain:
../SilverChain --src src --tags dependencies types functions
- Create main.c and compile:
#include "imports/imports.dependencies.h"
#include "imports/imports.types.h"
#include "imports/imports.functions.h"
int main() {
Person john = create_person("John", 25);
print_person(john);
return 0;
}
gcc main.c imports/imports.functions.c -o test_program
./test_program
Expected output:
Name: John, Age: 25
๐ Congratulations! You just used SilverChain successfully!
โ๏ธ Command-Line Options (All the Cool Features!)
๐ฏ Beginner Tip: Start with just
--srcand--tags. Learn the other options later!
๐ฅ Essential Options (You NEED These!)
| ๐ท๏ธ Flag | ๐ What It Does | ๐จ Required? | ๐ก Example |
|---|---|---|---|
--src or -s | The project folder to organize | โ YES | --src my_project |
--tags or -t | Tags to organize by (in order!) | โ YES | --tags dependencies types functions |
๐๏ธ Useful Options (Make Your Life Easier!)
| ๐ท๏ธ Flag | ๐ What It Does | ๐ง Default | ๐ก When to Use |
|---|---|---|---|
--importdir or -i | Where to save organized files | imports | --importdir organized_code |
--project_short_cut or -p | Project name for #ifndef guards | silverchain | --project_short_cut MYCALC |
--implement_main or -m | Create a main.c file | false | --implement_main true |
--main_name or -n | Name of the main file | main.c | --main_name calculator.c |
--main_path | Path to the main file (if not in src) | null | --main_path src/cli/main.c |
๐ Advanced Options (For Power Users!)
| ๐ท๏ธ Flag | ๐ What It Does | ๐ฏ Perfect For | ๐ก Example |
|---|---|---|---|
--watch or -w | Auto-rebuild when files change | Development mode | --watch |
--sleep_time or -s | Time between watch checks | Controlling watch speed | --sleep_time 2 |
--remove or -r | Delete the imports folder | Cleaning up | --remove |
--help or -h | Show help message | When you're lost! | --help |
--version or -v | Show SilverChain version | Check your version | --version |
๐ Real-World Examples:
๐ฅ Beginner Example:
# Just organize everything - simple!
./SilverChain --src src --tags dependencies types functions
๐ฅ Intermediate Example:
# Custom import directory and project name
./SilverChain --src my_project --tags deps consts types funcs \
--importdir organized --project_short_cut MYPROJ
๐ฅ Advanced Example:
# Watch mode with custom main file
./SilverChain --src src --tags dependencies consts types globals func_declaration func_definition \
--implement_main true --main_name my_app.c --watch
๐จ Common Beginner Mistakes (And How to Avoid Them!)
โ DON'T DO THIS:
# Missing required flags - this will fail!
./SilverChain my_project
โ DO THIS INSTEAD:
# Always include both --src and --tags
./SilverChain --src my_project --tags dependencies functions
โ DON'T DO THIS:
# Wrong tag order - dependencies should be first!
./SilverChain --src src --tags functions dependencies
โ DO THIS INSTEAD:
# Dependencies first, then other tags in logical order
./SilverChain --src src --tags dependencies types functions
๐ง How SilverChain Works (The Magic Explained!)
๐ฏ Simple Version: SilverChain looks at your files, sorts them by tags, and creates organized imports! โจ
๐ท๏ธ The Tag System (Super Important!)
Think of tags like organizing your closet:
dependenciesโ All your socks go in the sock drawer first ๐งฆtypesโ Then your shirts go in the shirt drawer ๐functionsโ Finally your pants go in the pants drawer ๐
SilverChain works the same way!
๐ Tag Processing Order:
./SilverChain --src src --tags dependencies consts types globals func_declaration func_definition
dependenciesโ Files starting withdependencies.get processed firstconstsโ Then files starting withconsts.typesโ Then files starting withtypes.globalsโ Then files starting withglobals.func_declarationโ Then files starting withfunc_declaration.func_definitionโ Finally files starting withfunc_definition.
๐ File Naming Convention (The Secret!)
SilverChain looks for files that start with your tag name:
| ๐ท๏ธ Tag | ๐ Files It Will Find | ๐ก Examples |
|---|---|---|
dependencies | dependencies.* | dependencies.system.h, dependencies.libs.h |
types | types.* | types.person.h, types.calculator.h |
functions | functions.* | functions.math.c, functions.io.h |
๐ Tag Vision (How Tags See Each Other)
This is the COOLEST part! Each tag can "see" all the previous tags:
./SilverChain --src src --tags dependencies types functions
dependenciescan see: Nothing (it's first)typescan see:dependenciesโfunctionscan see:dependencies+typesโ
๐ This means: Your function files can use types and dependencies automatically!
๐ฌ Step-by-Step Example:
Your project:
src/
โโโ dependencies.system.h โ #include <stdio.h>, <stdlib.h>
โโโ types.math.h โ typedef struct Calculator {...}
โโโ functions.add.h โ double add(double a, double b);
โโโ functions.add.c โ Implementation using Calculator type
โโโ main.c
When you run:
./SilverChain --src src --tags dependencies types functions
SilverChain creates:
imports/
โโโ imports.dependencies.h โ All your #includes
โโโ imports.types.h โ All your typedefs (can see dependencies)
โโโ imports.functions.h โ All declarations (can see dependencies + types)
โโโ imports.functions.c โ All implementations (can see everything)
๐ Result: Perfect organization with automatic dependency resolution!
๐งโ๐ป API Usage (For Programmers Who Want to Integrate!)
๐ฏ Beginner Note: This section is for people who want to use SilverChain inside their own C programs. If you just want to use the command-line tool, you can skip this section!
๐ Quick Setup (Get the API Library)
Download the API header file:
# Get the complete API (easiest way)
curl -L https://github.com/OUIsolutions/SilverChain/releases/download/0.3.0/SilverChainApiOne.h -o SilverChainApiOne.h
๐ฌ Simple Example (Your First API Program!)
Create a file called my_silverchain.c:
#include <stdio.h>
#include "SilverChainApiOne.h"
int main() {
// Initialize SilverChain
SilverChainNamespace sc = newSilverChainNamespace();
// Create tag list (like command-line tags)
SilverChainStringArray *tags = sc.string_array.create();
sc.string_array.append(tags, "dependencies");
sc.string_array.append(tags, "types");
sc.string_array.append(tags, "functions");
// Settings (you can change these!)
const char *src = "src"; // Source folder
const char *import_dir = "imports"; // Where to save organized files
const char *project_short_cut = "MYPROJ"; // Project prefix
bool implement_main = false; // Don't create main.c
const char *main_name = "main.c"; // Main file name (if needed)
const char *main_path = NULL; // Auto-detect main file
// Do the magic! โจ
SilverChainError *possible_error = sc.generator.generate_code(
src,
import_dir,
project_short_cut,
tags,
implement_main,
main_name,
main_path
);
// Check if it worked
if(possible_error) {
printf("โ Oops! Something went wrong: %s\n", possible_error->error_msg);
sc.error.free(possible_error);
sc.string_array.free(tags);
return 1;
}
printf("โ
Success! Your project has been organized!\n");
printf("๐ Check the '%s' folder for organized files.\n", import_dir);
// Clean up memory (important!)
sc.string_array.free(tags);
printf("๐ All done!\n");
return 0;
}
Compile and run:
gcc my_silverchain.c -o my_silverchain
./my_silverchain
๐๏ธ Advanced Example (With Custom Build Integration!)
Perfect for build systems and automation:
#include <stdio.h>
#include "SilverChainApiOne.h"
int main() {
SilverChainNamespace sc = newSilverChainNamespace();
// Create a comprehensive tag list for a complete project
SilverChainStringArray *tags = sc.string_array.create();
sc.string_array.append(tags, "api_dependencies"); // External dependencies
sc.string_array.append(tags, "api_consts"); // Constants
sc.string_array.append(tags, "api_types"); // Data types
sc.string_array.append(tags, "api_declare"); // Function declarations
sc.string_array.append(tags, "api_define"); // Function definitions
sc.string_array.append(tags, "cli_dependencies"); // CLI dependencies
sc.string_array.append(tags, "cli_consts"); // CLI constants
sc.string_array.append(tags, "cli_globals"); // Global variables
sc.string_array.append(tags, "cli_declare"); // CLI declarations
sc.string_array.append(tags, "cli_define"); // CLI definitions
// Advanced settings
const char *src = "src";
const char *import_dir = "src/imports";
const char *project_short_cut = "SilverChain";
bool implement_main = true; // Create main.c
const char *main_name = "main.c";
const char *main_path = "src/cli/main.c"; // Specific main file
printf("๐ Starting SilverChain organization...\n");
printf("๐ Source: %s\n", src);
printf("๐ Output: %s\n", import_dir);
SilverChainError *possible_error = sc.generator.generate_code(
src,
import_dir,
project_short_cut,
tags,
implement_main,
main_name,
main_path
);
if(possible_error) {
printf("โ Error during organization: %s\n", possible_error->error_msg);
sc.error.free(possible_error);
sc.string_array.free(tags);
return 1;
}
printf("โ
Project organized successfully!\n");
printf("๐ Tags processed: %d\n", sc.string_array.size(tags));
printf("๐ฏ Main file: %s (implemented: %s)\n", main_name, implement_main ? "YES" : "NO");
// Clean up
sc.string_array.free(tags);
printf("๐ Build system integration complete!\n");
return 0;
}
๐จ Important Notes for Beginners:
- Always check for errors! The API can fail if folders don't exist or files are malformed.
- Don't forget to free memory! Always call
sc.string_array.free()andsc.error.free()when done. - Start simple! Use basic tags first, then add more complex organization later.
- Test locally! Make sure your file naming convention matches your tags.
๐ก Integration Tips:
- Makefiles: Call your SilverChain program before compilation
- Build Scripts: Integrate into shell scripts for automated builds
- IDEs: Create custom build tasks that run SilverChain first
- CI/CD: Add to your pipeline for automatic code organization
๐จ Building from Scratch (For Advanced Users!)
๐ฏ Beginner Note: You don't need this section if you just downloaded the ready-made executables above! This is only for people who want to compile SilverChain themselves.
๐ Prerequisites (What You Need First)
You'll need these tools installed:
- ๐ฆ Darwin Build System (Version 0.020+)
- ๐ณ Docker OR ๐ซ Podman (for containerized builds)
- ๐ง Linux Environment (recommended)
๐ One-Line Darwin Installation (Linux Only!)
# Install Darwin build system in one command
curl -L https://github.com/OUIsolutions/Darwin/releases/download/0.7.0/darwin.out -o darwin.out && sudo chmod +x darwin.out && sudo mv darwin.out /usr/bin/darwin
๐ Clone and Build
# 1. Clone the repository
git clone https://github.com/OUIsolutions/SilverChain.git
cd SilverChain
# 2. Build all variants (this will take a while!)
darwin run_blueprint build/ --mode folder amalgamation_build alpine_static_build windowsi32_build windowsi64_build rpm_static_build debian_static_build
๐ Success Stories & Use Cases
๐ Perfect For:
- ๐ Students: Organize complex class projects with clear structure
- ๐ข Professional Development: Maintain large C codebases with ease
- ๐ Library Creation: Build well-organized, reusable code libraries
- ๐ Embedded Systems: Manage firmware projects with clear dependencies
- ๐ฎ Game Development: Organize game engines and logic modules
๐ฌ What Users Say:
"SilverChain turned my messy C project into something I could actually understand!" - CS Student
"Finally, a way to organize C code that makes sense. No more include hell!" - Senior Developer
"Perfect for our embedded firmware. Dependencies are crystal clear now." - Embedded Engineer
๐ Need Help? (We've Got You Covered!)
๐ค Community Support
- ๐ Found a Bug? Create an Issue
- ๐ก Have a Feature Idea? Suggest It Here
- โญ Like the Project? Give us a star on GitHub!
๐ Common Questions
Q: "What's the best tag order for beginners?"
A: Start with dependencies types functions - it works for most projects!
Q: "Can my files have multiple dots in their names?"
A: Yes! dependencies.system.headers.h will be found by the dependencies tag.
Q: "What if I don't have any dependencies?"
A: Skip the dependencies tag! Use just --tags types functions for simpler projects.
Q: "Can I use this with C++?" A: SilverChain is designed for C, but it might work with simple C++ code. Try it and see!
Q: "What happens if I have circular dependencies?" A: SilverChain's tag system prevents most circular dependencies by processing in order!
๐ Ready to Organize Your C Code Like a Pro?
โฌ๏ธ Download Now | โญ Star on GitHub | ๐ Report Issues
Made with โค๏ธ by OUIsolutions
Organizing C code, one tag at a time! โจ