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)