Genie Framework
Genie Framework is a powerful, open source full-stack web framework for the Julia programming language, made for building interactive UIs, backends, APIs, and production-grade web apps.
Genie.jl
High-performance web server
Build full-stack web apps and backends in Julia.
- High-performance web server
- Powerful router
- Flexible template engine (Julia, HTML, Markdown, JSON, JavaScript)
- Encrypted cookies & sessions
- WebSockets & SSE support
# Genie Hello World! # As simple as Hello using Genie route("/hello") do "Welcome to Genie!" end # Powerful high-performance HTML view templates using Genie.Renderer.Html route("/html") do h1("Welcome to Genie!") |> html end # JSON rendering built in using Genie.Renderer.Json route("/json") do (:greeting => "Welcome to Genie!") |> json end # Start the app! up(8888)
Stipple.jl
Low-Code Web App Development
Build reactive, data-centric web apps and GUIs in low-code Julia.
- Easy to learn
- Build web apps with few lines of Julia code (no HTML, CSS or JS required)
- Build rich GUIs
- Use 30+ web UI components
- Visualize any data
- Choose from over 40 Plotly charts
# Reactive web app template module App using GenieFramework @genietools # add reactive code to make the UI interactive @app begin # reactive variables are tagged with @in and @out @in N = 0 @out msg = "The average is 0." # watch a variable and exe code when its value changes @onchange N begin # the message in the UI will update automatically result = sum(rand(N))/N msg = "The average is $result." end end # register a new route and the page to load on access @page("/", "app.jl.html") end
SearchLight.jl
Databases
ORM solution for Julia making it easy to work with relational databases.
- Postgres
- MySQL
- SQLite
Base.@kwdef mutable struct User <: AbstractModel id::DbId = DbId() username::String = "" password::String = "" end Validation.validator(::Type{User}) = ModelValidator([ ValidationRule(:username, UsersValidator.not_empty), ValidationRule(:username, UsersValidator.unique), ValidationRule(:password, UsersValidator.not_empty) ]) function register() User(username = params(:username), password = params(:password) |> hash_password, name = params(:name), email = params(:email) ) |> save! end
Production capabilities
First Party Plugins
Genie Framework provides a plugin system that allows you to extend the functionality of your apps.
- Authentication
- SwagUI for building APIs
- Autoreload
- Authorization
using SwagUI, SwaggerMarkdown @swagger """ /api/predict/{id}: get: description: Predict the MEDV of a house. parameters: - in: path name: N required: true description: Length of the random number vector. schema: type: integer responses: '200': description: OK """ route("/numbers/:N::Int", AnalysisController.api_numbers, method=GET)