Lenguaje de programación moderno con enfoque en seguridad, inspirado en PHP, Python, Java y Go.
- Smart Numerics: Promoción automática de int a float (división siempre retorna float)
- Maps Nativos: Sintaxis
{ key: value }con soporte completo - Tipos Dinámicos: Sistema flexible con optimización automática
- Operadores Ternarios: Reemplazo de if/else con sintaxis concisa
- async/await: Ejecución asíncrona aprovechando Goroutines de Go
- Futures: Manejo de valores asíncronos con canales de Go
- Auth Module: Autenticación con JWT y Bcrypt (12 rondas)
- GranMySQL: ORM seguro con protección contra SQL injection
- Entorno Encriptado: Variables de entorno con AES-256
- CSRF Protection: Protección nativa contra ataques CSRF
- Rate Limiting: Limitación de peticiones por IP
- Router: Sistema de rutas con middleware
- View: Motor de plantillas HTML
- SMTP: Cliente de correo con SSL/TLS
- Cron: Tareas programadas
- Redis: Cache y sesiones
- WebSocket: Comunicación en tiempo real
- Hot Reload: Recarga automática en desarrollo
- SCSS Compilation: Compilación automática de estilos
- Static Files: Servidor de archivos estáticos
- Security Headers: Cabeceras de seguridad automáticas
Windows (PowerShell como Administrador):
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process; iwr -useb https://raw.githubusercontent.com/josprox/JosSecurity-language/main/install/remote-install.ps1 | iexLinux/macOS:
curl -fsSL https://raw.githubusercontent.com/josprox/JosSecurity-language/main/install/remote-install.sh | bash# Clonar repositorio
git clone https://github.com/josprox/JosSecurity-language.git
cd JosSecurity-language/install
# Ejecutar menú de acciones (Instalar, Actualizar, Desinstalar)
bash remote-install.sh # Linux/macOS
# o
.\remote-install.ps1 # WindowsPara actualizar o desinstalar, simplemente ejecuta el mismo comando de instalación (One-Liner o Manual). El script detectará si ya está instalado y te mostrará un menú interactivo:
Select an action:
[1] Install (JosSecurity Binary + Extension)
[2] Update (Check and Reinstall)
[3] Uninstall (Remove Binary + Extension)
[0] Exit
Simplemente selecciona la opción deseada (2 para actualizar, 3 para desinstalar).
Ver más comandos: ONE_LINER_COMMANDS.md
# Proyecto web completo (default)
joss new mi_proyecto
cd mi_proyecto
joss server start# Proyecto backend-only (sin UI)
joss new console mi_app_consola
cd mi_app_consola
joss run main.joss# Gestión de Proyectos
joss new [ruta] # Crea proyecto web
joss new console [ruta] # Crea proyecto de consola
joss new web [ruta] # Crea proyecto web (explícito)
# Desarrollo
joss server start # Inicia servidor HTTP (puerto 8000)
joss run [archivo] # Ejecuta un script .joss
joss build # Compila para producción
# Base de Datos
joss migrate # Ejecuta migraciones pendientes
joss change db [mysql|sqlite] # Cambia motor de base de datos
# Generadores
joss make:controller [Nombre] # Crea controlador
joss make:model [Nombre] # Crea modelo
# Utilidades
joss version # Muestra versión
joss help # Muestra ayudami_proyecto/
├── main.joss # Entry Point
├── env.joss # Variables de Entorno
├── api.joss # Rutas API (JSON)
├── routes.joss # Rutas Web (HTML)
├── config/
│ ├── reglas.joss # Constantes Globales
│ └── cron.joss # Tareas Programadas
├── app/
│ ├── controllers/ # Lógica de Negocio
│ ├── models/ # Acceso a Datos
│ ├── views/ # Plantillas HTML
│ ├── libs/ # Extensiones
│ └── database/
│ └── migrations/ # Migraciones
├── assets/
│ ├── css/ # Estilos (SCSS)
│ ├── js/ # JavaScript
│ └── images/ # Imágenes
└── public/ # Archivos públicos compilados
mi_app_consola/
├── main.joss # Entry Point
├── env.joss # Variables de Entorno
├── config/
│ └── reglas.joss # Constantes Globales
└── app/
├── controllers/ # Lógica de Negocio
├── models/ # Acceso a Datos
├── libs/ # Extensiones
└── database/
└── migrations/ # Migraciones
// Tipos primitivos
int $edad = 25
float $precio = 99.99
string $nombre = "Jose"
bool $activo = true
// Arrays
array $lista = ["A", "B", "C"]
$mapa = {"key": "value"}
// Ternario simple
$estado = ($edad >= 18) ? "Mayor" : "Menor"
// Ternario con bloques
($usuario->esValido()) ? {
DB::save($usuario)
print("Usuario guardado")
} : {
print("Usuario inválido")
}
// Escalera lógica
$nivel = ($puntos > 1000) ? "Oro"
($puntos > 500) ? "Plata" :
"Bronce"
class Animal {
string $nombre
Init constructor($n) {
$this->nombre = $n
}
function hablar() {
print("...")
}
}
class Perro extends Animal {
function hablar() {
print("Guau!")
}
}
$perro = new Perro("Rex")
$perro->hablar() // "Guau!"
// Foreach (principal)
foreach ($usuarios as $u) {
print($u->nombre)
}
// Foreach con índice
foreach ($items as $i => $item) {
print("$i: $item")
}
try {
$resultado = operacionRiesgosa()
print($resultado)
} catch ($error) {
print("Error: " . $error)
}
// Registro con hash automático
Auth::create(["user@example.com", "password123", "Juan Pérez"])
// Login
$success = Auth::attempt("user@example.com", "password123")
// Verificar sesión
($Auth::check()) ? {
$nombre = Auth::user()
print("Hola " . $nombre)
} : {
print("No autenticado")
}
// Logout
Auth::logout()
// API Fluida
$db = new GranMySQL()
$usuarios = $db->table("users")
->where("edad", ">", 18)
->get()
// Inserción
$db->table("users")
->insert(["nombre", "email"], ["Juan", "juan@example.com"])
// Primera coincidencia
$usuario = $db->table("users")
->where("email", "juan@example.com")
->first()
// routes.joss
Router::get("/", "HomeController@index")
Router::post("/login", "AuthController@login")
// Middleware
Router::middleware("auth")
Router::get("/dashboard", "DashboardController@index")
Router::end()
// Múltiples métodos
Router::match("GET|POST", "/contact", "ContactController@show@submit")
// Renderizar vista
return View::render("welcome", {"nombre": "Juan"})
// En la vista (app/views/welcome.joss.html)
<h1>Hola {{nombre}}</h1>
$mail = new SmtpClient()
$mail->auth(env("MAIL_USER"), env("MAIL_PASS"))
$mail->send("destino@example.com", "Asunto", "Cuerpo del mensaje")
// config/cron.joss
Cron::schedule("backup", "00:00", {
System::backupDatabase()
})
// Crear Future
$future = async(operacionLenta())
// Esperar resultado
$resultado = await($future)
// Múltiples operaciones
$f1 = async(consulta1())
$f2 = async(consulta2())
$r1 = await($f1)
$r2 = await($f2)
APP_ENV="development"
PORT="8000"
# Base de datos
DB="sqlite"
DB_PATH="database.sqlite"
# MySQL (alternativa)
# DB="mysql"
# DB_HOST="localhost"
# DB_NAME="mi_db"
# DB_USER="root"
# DB_PASS=""
# Prefijo de tablas
DB_PREFIX="js_"
# JWT
JWT_SECRET="tu_secreto_aqui"// app/database/migrations/001_create_users.joss
$schema = new Schema()
$schema->create("users", {
"id": "INT AUTO_INCREMENT PRIMARY KEY",
"name": "VARCHAR(255)",
"email": "VARCHAR(255) UNIQUE",
"password": "VARCHAR(255)",
"created_at": "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"
})
joss migrateVer el directorio examples/ para ejemplos completos:
final_test.joss: Test comprehensivo de todas las característicasjwt_test.joss: Autenticación con JWTjwt_refresh_test.joss: Refresh tokens
📚 Ver la carpeta docs/ para documentación detallada:
- Sintaxis - Operadores, variables, clases, loops
- CLI - Todos los comandos disponibles
- Módulos Nativos - Auth, GranMySQL, Router, etc.
- Estructura de Proyecto - Web y consola
- Configuración - env.joss, reglas.joss
- Migraciones - Sistema de base de datos
- Servidor - Hot reload, SCSS, WebSocket
- Ejemplos - CRUD, Auth, API REST
El proyecto está en desarrollo activo:
- ✅ Fase 1: Smart Numerics y Maps
- ✅ Fase 2: Autoloading
- ✅ Fase 3: Concurrencia (async/await)
- ✅ Fase 4: Proyectos de Consola
Para preparar una nueva versión de JosSecurity para su distribución (GitHub Releases), utiliza el script de construcción automática. Este script compilará los binarios para todas las plataformas soportadas (Windows, Linux, macOS) y empaquetará la extensión de VS Code en un archivo jossecurity-binaries.zip listo para el instalador remoto.
.\build_all.bat./build_all.shEl archivo resultante se generará en la carpeta installer/jossecurity-binaries.zip.
Software cerrado fuente, derechos reservados.