Voltar ao ranking

GenieFramework/Genie.jl

Juliagenieframework.com

🧞The highly productive Julia web framework

webframeworkwebmvcfull-stackreactiveormvuejslow-codejuliaframework
Crescimento de estrelas
Estrelas
2.4k
Forks
188
Crescimento semanal
Issues
115
1k2k
mar. de 2016ago. de 2019fev. de 2023jul. de 2026
README
Genie Logo

Genie.jl

🧞 The highly productive Julia web framework

Docs current status Website Tests Genie Downloads Tweet

Built with ❤︎ by contributors

Genie.jl is the backbone of the Genie Framework, which provides a streamlined and efficient workflow for developing modern web applications. It builds on Julia's strengths (high-level, high-performance, dynamic, JIT compiled), exposing a rich API and a powerful toolset for productive web development.

Genie Framework is composed of four main components:

  • Genie.jl: the server backend, providing features for routing, templating, authentication, and much more.
  • Stipple.jl: a package for building reactive UIs with a simple and powerful low-code API in pure Julia.
  • Genie Builder: a VSCode plugin for building UIs visually in a drag-and-drop editor.
  • SearchLight.jl: a complete ORM solution, enabling easy database integration without writing SQL queries.

To learn more about Genie, visit the documentation, and the app gallery.

If you need help with anything, you can find us on Discord.

https://github.com/GenieFramework/Genie.jl/assets/5058397/627dcda0-bb13-49f9-8827-2bfb581a9bb7

Julia data dashboard powered by Genie. App gallery



Features of Genie.jl

🛠Genie Router: Genie has a really powerful 💪 Router. Matching web requests to functions, extracting and setting up the request's variables and the execution environment, and invoking the response methods. Features include:

  • Static, Dynamic, Named routing
  • Routing parameters
  • Linking routes
  • Route management (Listing, Deleting, Modifying) support
  • Routing methods (GET, POST, PUT, PATCH, DELETE, OPTIONS)
  • and more ...
# 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)

🔌 WebSocket: Genie provides a powerful workflow for client-server communication over websockets

julia> using Genie, Genie.Router

julia> channel("/foo/bar") do
         # process request
       end
[WS] /foo/bar => #1 | :foo_bar

📃 Templating: Built-in templates support for HTML, JSON, Markdown, JavaScript views.

🔐 Authentication: Easy to add database backed authentication for restricted area of a website.

julia> using Pkg

julia> Pkg.add("GenieAuthentication") # adding authentication plugin

julia> using GenieAuthentication

julia> GenieAuthentication.install(@__DIR__)

Tasks: Tasks allow you to perform various operations and hook them with crons jobs for automation

module S3DBTask
# ... hidden code

  """
  Downloads S3 files to local disk.
  Populate the database from CSV file
  """
  function runtask()
    mktempdir() do directory
      @info "Path of directory" directory
      # download record file
      download(RECORD_URL)

      # unzip file
      unzip(directory)

      # dump to database
      dbdump(directory)
    end
  end

# ... more hidden code
end
$ bin/runtask S3DBTask

📦 Plugin Ecosystem: Explore plugins built by the community such as GenieAuthentication, GenieAutoreload, GenieAuthorisation, and more

🗃️ ORM Support: Explore SearchLight a complete ORM solution for Genie, supporting Postgres, MySQL, SQLite and other adapters


function search(user_names, regions, startdate, enddate)
# ... hidden code

  where_filters = SQLWhereEntity[
      SQLWhereExpression("lower(user_name) IN ( $(repeat("?,", length(user_names))[1:end-1] ) )", user_names),
      SQLWhereExpression("date >= ? AND date <= ?", startdate, enddate)
  ]

  SearchLight.find(UserRecord, where_filters, order=["record.date"])

# ... more hidden code
end
  • Database Migrations
module CreateTableRecord

import SearchLight.Migrations: create_table, column, primary_key, add_index, drop_table

function up()
  create_table(:record) do
    [
      primary_key()
      column(:user_uuid, :string, limit = 100)
      column(:user_name, :string, limit = 100)
      column(:status, :integer, limit = 4)
      column(:region, :string, limit = 20)
      column(:date_of_birth, :string, limit = 100)
    ]
  end

  add_index(:record, :user_uuid)
  add_index(:record, :user_name)
  add_index(:record, :region)
  add_index(:record, :date_of_birth)
end

function down()
  drop_table(:record)
end

end
  • Model Validations

📝 More Genie features like:

  • Files Uploads
route("/", method = POST) do
  if infilespayload(:yourfile)
    write(filespayload(:yourfile))

    stat(filename(filespayload(:yourfile)))
  else
    "No file uploaded"
  end
end
  • Logging | Caching | Cookies and Sessions | Docker, Heroku, JuliaHub, etc Integrations | Genie Deploy
  • To explore more features check Genie Documentation 🏃‍♂️🏃‍♀️

Contributing

Please contribute using GitHub Flow. Create a branch, add commits, and open a pull request.

Please read CONTRIBUTING for details on our CODE OF CONDUCT, and the process for submitting pull requests to us.

Special Credits

  • The awesome Genie logo was designed by Alvaro Casanova

  • Hoppscoth for readme structure template

  • Genie uses a multitude of packages that have been kindly contributed by the Julia community

License

This project is licensed under the MIT License - see the LICENSE file for details.

⭐ If you enjoy this project please consider starring the 🧞 Genie.jl GitHub repo. It will help us fund our open source projects.

Repositórios relacionados
fastify/fastify

Fast and low overhead web framework, for Node.js

JavaScriptnpmMIT Licensewebframeworkperformance
fastify.dev
36.8k2.8k
oatpp/oatpp

🌱Light and powerful C++ web framework for highly scalable and resource-efficient web application. It's zero-dependency and easy-portable.

C++Apache License 2.0c-plus-pluswebframework
oatpp.io
8.6k1.4k
gobuffalo/buffalo

Rapid Web Development w/ Go

GoGo ModulesMIT Licensegobuffalo
gobuffalo.io
8.4k583
tinyhttp/tinyhttp

🦄 0-legacy, tiny & fast web framework as a replacement of Express

TypeScriptnpmMIT Licensewebwebframework
tinyhttp.v1rtl.site
2.9k151
MasoniteFramework/masonite

The Modern And Developer Centric Python Web Framework. Be sure to read the documentation and join the Discord channel for questions: https://discord.gg/TwKeFahmPZ

PythonPyPIMIT Licensepythonwebframework
docs.masoniteproject.com
2.4k137
gotham-rs/gotham

A flexible web framework that promotes stability, safety, security and speed.

Rustcrates.ioOtherrustwebframework
gotham.rs
2.3k128
smallnest/go-web-framework-benchmark

:zap: Go web framework benchmark

GoGo ModulesApache License 2.0benchmarkconcurrency
2.1k227
ninjaframework/ninja

Ninja is a full stack web framework for Java. Rock solid, fast and super productive.

JavaMavenApache License 2.0javawebframework
ninjaframework.org
1.9k509
jooby-project/jooby

The modular web framework for Java and Kotlin

JavaMavenApache License 2.0micro-frameworkweb-framework
jooby.io
1.8k201
rabbibotton/clog

CLOG - The Common Lisp Omnificent GUI

Common LispOthercommon-lisphtml-bindings
1.7k118
matt-42/silicon

A high performance, middleware oriented C++14 http web framework please use matt-42/lithium instead

C++MIT Licensec-plus-pluswebframework
siliconframework.org
1.7k137
rapidoid/rapidoid

Rapidoid - Extremely Fast, Simple and Powerful Java Web Framework and HTTP Server!

JavaMavenApache License 2.0rapidoidjava
rapidoid.org
1.6k162