Skip to main content

No project description provided

Project description

Universal Initializer

A versatile tool for initializing software projects from templates. Create React, Python, C++, Node.js, iOS, Android, and more projects with a single command.

Features

  • Configurable template-based project creation
  • Support for multiple project types (React, Vue, Flutter, and many more)
  • Parameter-based customization
  • Variable replacement in template files
  • Post-processing support for additional setup tasks
  • JSON output for integration with other tools

Installation

# Install with pip
pip install universalinit

# Or install directly from source
git clone https://github.com/Kavia-ai/universalinit.git
cd universalinit
pip install -e .

Usage

Create a new project using the command-line interface:

uniinit --name my-app --type react --output ./my-app --author "Your Name" --parameters typescript=true,styling_solution=styled-components

Command Options

Option Description Example
--author Project author (Required) --author "Your Name"
--config Path to JSON config file --config ./my-config.json
--description Project description --description "An awesome app"
--name Project name (Required) --name my-awesome-app
--output Output directory path (Required) --output ./my-app
--parameters Additional parameters as key=value pairs --parameters typescript=true,styling_solution=styled-components
--type Project type (Required) --type react
--version Project version --version 0.1.0

Available Project Types

  • android: Android application
  • androidtv: Android TV (Kotlin) application
  • angular: Angular application
  • astro: Astro website
  • django: Django backend
  • dotnet: .NET application
  • express: Express backend
  • fastapi: FastAPI backend
  • flask: Flask backend
  • flutter: Flutter application
  • kotlin: Kotlin application
  • lightningjs: LightningJS Blits application
  • mongodb: MongoDB database
  • mysql: MySQL database
  • native: C++ native application
  • nativescript: NativeScript application
  • nextjs: Next.js application
  • nuxt: Nuxt.js application
  • postgresql: PostgreSQL database
  • qwik: Qwik application
  • react: React application
  • reactnative: React Native application
  • remix: Remix application
  • remotion: Remotion video project
  • slidev: Slidev presentation
  • solananextjs: Solana Next.js application
  • springboot: Spring Boot backend
  • sqlite: SQLite database
  • svelte: Svelte application
  • tizen: Samsung Tizen TV (React) application
  • typescript: TypeScript application
  • vite: Vite application
  • vue: Vue application

Parameter Examples

React Project

uniinit --name my-react-app --type react --output ./my-react-app --author "Your Name" --parameters typescript=true,styling_solution=styled-components

Vue Project

uniinit --name myservice --type vue --output ./myservice --author "Your Name"

Flutter Project

uniinit --name my-flutter-app --type flutter --output ./my-flutter-app --author "Your Name"

Android Project

uniinit --name my-android-app --type android --output ./my-android-app --author "Your Name" --parameters min_sdk=24,target_sdk=34,gradle_version=8.12

Android TV Project

uniinit --name my-android-tv-app --type androidtv --output ./my-android-tv-app --author "Your Name" --parameters min_sdk=24,target_sdk=35

Tizen TV Project

uniinit --name my-tizen-tv-app --type tizen --output ./my-tizen-tv-app --author "Your Name"

Astro Project

uniinit --name my-astro-site --type astro --output ./my-astro-site --author "Your Name" --parameters typescript=true

Next.js Project

uniinit --name my-nextjs-app --type nextjs --output ./my-nextjs-app --author "Your Name" --parameters typescript=true,styling_solution=tailwind

Solana Next.js Project

uniinit --name my-solana-nextjs-app --type solananextjs --output ./my-solana-nextjs-app --author "Your Name" --parameters typescript=true,styling_solution=tailwind

Nuxt Project

uniinit --name my-nuxt-app --type nuxt --output ./my-nuxt-app --author "Your Name"

NativeScript Project

uniinit --name my-ns-app --type nativescript --output ./my-ns-app --author "Your Name" --parameters typescript=true

Slidev Project

uniinit --name my-slides --type slidev --output ./my-slides --author "Your Name"

Svelte Project

uniinit --name my-svelte-app --type svelte --output ./my-svelte-app --author "Your Name" --parameters typescript=true,styling_solution=css

Remix Project

uniinit --name my-remix-app --type remix --output ./my-remix-app --author "Your Name" --parameters typescript=true,styling_solution=tailwind

TypeScript Project

uniinit --name my-ts-app --type typescript --output ./my-ts-app --author "Your Name"

Remotion Project

uniinit --name my-remotion-app --type remotion --output ./my-remotion-app --author "Your Name"

Angular Project

uniinit --name my-angular-app --type angular --output ./my-angular-app --author "Your Name"

Qwik Project

uniinit --name my-qwik-app --type qwik --output ./my-qwik-app --author "Your Name"

Vite Project

uniinit --name my-vite-app --type vite --output ./my-vite-app --author "Your Name" --parameters typescript=true,framework=react

Django Project

uniinit --name my-django-app --type django --output ./my-django-app --author "Your Name"

Express Project

uniinit --name my-express-app --type express --output ./my-express-app --author "Your Name" --parameters typescript=true

FastAPI Project

uniinit --name my-fastapi-app --type fastapi --output ./my-fastapi-app --author "Your Name"

Flask Project

uniinit --name my-flask-app --type flask --output ./my-flask-app --author "Your Name"

Springboot Project

uniinit --name my-springboot-app --type springboot --output ./my-springboot-app --author "Your Name"

JSON Configuration

Instead of command-line parameters, you can use a JSON configuration file:

{
  "name": "my-app",
  "version": "1.0.0",
  "description": "My awesome application",
  "author": "Your Name",
  "project_type": "react",
  "output_path": "./my-app",
  "parameters": {
    "typescript": true,
    "styling_solution": "styled-components"
  }
}

Then use:

uniinit --config ./my-config.json

Environment Variable Mapping (env.template Syntax)

Framework templates can define how environment variables are mapped using an env.template file. This allows you to control how your common environment variables are translated to framework-specific ones.

Syntax

There are two supported mapping syntaxes:

1. Direct Mapping

Map a specific framework environment variable to a common variable:

FRAMEWORK_SPECIFIC_VAR = COMMON_VAR

Example:

REACT_CUSTOM_PREFIX_SAMPLE_ENV_FOR_UNIINIT = SAMPLE_ENV_FOR_UNIINIT

2. Wildcard Mapping (Prefix)

Map all common environment variables to a framework-specific prefix using a wildcard:

FRAMEWORK_PREFIX_* = *

Example:

REACT_APP_* = *

This will map any common environment variable (e.g. DATABASE_URL) to a framework variable with the prefix (e.g. REACT_APP_DATABASE_URL).

3. Wildcard Mapping (Complex)

You can also use wildcards in both the framework and common variable names for more advanced mapping:

FRAMEWORK_PATTERN_*_SUFFIX = *_COMMON_PATTERN

Example:

API_*_KEY = *_API_KEY

This will map USER_API_KEY to API_USER_KEY.

Example env.template

# Direct mapping
REACT_CUSTOM_PREFIX_SAMPLE_ENV_FOR_UNIINIT = SAMPLE_ENV_FOR_UNIINIT

# Wildcard mapping (prefix)
REACT_APP_* = *

Notes

  • You can combine direct and wildcard mappings in the same file.
  • Only prefix and complex wildcard patterns are supported (not suffix-only patterns).
  • Unknown variables not covered by any mapping will be ignored.

FAQ

How is Android TV different from Tizen?

Android TV apps target the Android ecosystem and use standard Android tooling with TV-specific APIs, such as Leanback and Jetpack TV libraries. The androidtv template initializes a Kotlin-based Android project configured for TV with the correct launcher category and SDK levels. Tizen is a separate Samsung TV operating system with different tooling and packaging. The new tizen template creates a minimal React-based Tizen web app scaffold, suitable as a base for generating a .wgt package.

Development

Running Tests

# Install dev dependencies
pip install pytest

# Run tests
pytest

Adding New Templates

  1. Create a new directory in src/universalinit/templates/ for your template
  2. Add a config.yml file with template configuration
  3. Add new template type in ProjectType enum in src/universalinit/templateconfig.py
  4. Add new replaceable parameters if necessary in the function ProjectConfig.get_replaceable_parameters in src/universalinit/templateconfig.py
  5. Add new environment parameters if necessary in the function TemplateConfigProvider.get_init_info in src/universalinit/templateconfig.py
  6. Add new template at TEMPLATE_MAP in src/universalinit/templates.py
  7. Register the template class in the ProjectInitializer constructor in src/universalinit/universalinit.py
  8. Create a new template class in src/universalinit/universalinit.py
  9. Update the epilog in main in src/universalinit/cli.py

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

universalinit-0.1.99.tar.gz (1.6 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

universalinit-0.1.99-py3-none-any.whl (1.7 MB view details)

Uploaded Python 3

File details

Details for the file universalinit-0.1.99.tar.gz.

File metadata

  • Download URL: universalinit-0.1.99.tar.gz
  • Upload date:
  • Size: 1.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.13.7 Darwin/25.0.0

File hashes

Hashes for universalinit-0.1.99.tar.gz
Algorithm Hash digest
SHA256 1767028af6e77b0d325175a4f4cdf072f2ae11a83cfb978f146b7ab3d81476de
MD5 a0e6ef56e72c0a33ff527e3d393c9fae
BLAKE2b-256 30a23b4a65f79582278169bf2b0a8201642c6e9ac6e590a51cc866786c27207d

See more details on using hashes here.

File details

Details for the file universalinit-0.1.99-py3-none-any.whl.

File metadata

  • Download URL: universalinit-0.1.99-py3-none-any.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.13.7 Darwin/25.0.0

File hashes

Hashes for universalinit-0.1.99-py3-none-any.whl
Algorithm Hash digest
SHA256 fa3dfb4b43a8bd6ebf38207c44f8d1ed030605e5a0e938647d0727c81f43afc1
MD5 fd353239e2cfcc7b299050ae8923002a
BLAKE2b-256 f4556845988c77d5cc5ce057024eff726415b2bab99d8b77b0975c262da83a01

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page