• Stars
    star
    2,159
  • Rank 20,536 (Top 0.5 %)
  • Language
    Julia
  • License
    MIT License
  • Created about 8 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

🧞The highly productive Julia web framework
Genie Logo

Genie.jl

🧞 The highly productive Julia web framework

Docs current status Website Tests Genie Downloads Tweet

Built with ❀︎ by contributors


Screenshot

Julia data dashboards powered by Genie

Genie is a full-stack web framework that 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.

Need Help? Reach out on our social media channels.

Chat on Discord Chat on Gitter Discuss on GitHub


Table of contents

Features

πŸ› 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 πŸƒβ€β™‚οΈπŸƒβ€β™€οΈ

Made With Genie

Community Curated Resources

  • Awesome Genie Awesome Genie: A curated list of awesome things related to Julia's Web framework Genie.

Community Mentions

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.

More Repositories

1

Stipple.jl

The reactive UI library for interactive data applications with pure Julia.
JavaScript
306
star
2

SearchLight.jl

ORM layer for Genie.jl, the highly productive Julia web framework
Julia
133
star
3

StippleUI.jl

StippleUI is a library of reactive UI elements for Stipple.jl.
Julia
82
star
4

StippleDemos

Demo apps for Stipple
HTML
48
star
5

StippleCharts.jl

StippleCharts is a library of reactive charts for Stipple.jl.
Julia
29
star
6

genie-awesome

πŸŽ‰ A list of awesome things related to Julia's Genie Framework
24
star
7

StipplePlotly.jl

Plotly integration for Stipple.jl
Julia
21
star
8

GenieFramework.jl

Meta package for Genie reactive apps
Julia
21
star
9

GenieAuthentication.jl

Authentication plugin for Genie framework
Julia
21
star
10

CodeAI.jl

AI code generator based on OpenAI
Julia
20
star
11

GenieFrameworkDemos

Demos for new reactive API
Julia
19
star
12

SwagUI.jl

A simple way to add Swagger UI to your web application.
Julia
19
star
13

PkgVizBoard

πŸ“¦ Package download stats visualisation app based on [Stipple Ecosystem] Genie.jl, Stipple.jl, StippleUI.jl, StipplePlotly.jl etc
Julia
17
star
14

GenieBuilder.jl

JavaScript
15
star
15

Stipple-Demo-IrisClustering

JavaScript
14
star
16

GenieAutoreload.jl

AutoReload plugin for the Genie web framework
Julia
13
star
17

SwaggerMarkdown.jl

Julia
9
star
18

OscarsExplorer

Genie demo data dashboard for JuliaCon 2022
JavaScript
9
star
19

SearchLightPostgreSQL.jl

Postgres adapter for SearchLight
Julia
8
star
20

MultiRoute

JavaScript
5
star
21

GenieDevTools.jl

Julia
5
star
22

GeniePlugins.jl

Genie plugin providing functionality for creating and working with Genie plugins.
Julia
5
star
23

GenieAuthorisation.jl

Role based authorisation (RBA) plugin for Genie.jl
Julia
5
star
24

genie-website

Official website of Genie, the highly productive Julia web framework.
CSS
5
star
25

StipplePlotlyExport.jl

Julia
5
star
26

Stipple-Demo-GermanCredits

JavaScript
4
star
27

HelloPlugin.jl

Hello World example plugin for Genie Framework
Julia
4
star
28

GenieCache.jl

Abstract package for Genie caching
Julia
3
star
29

WhatsYourNumber

JavaScript
3
star
30

SearchLightOracle.jl

Julia
3
star
31

GenieDeployJuliaHub.jl

Julia
3
star
32

GenieSessionFileSession.jl

File system based session adapter for GenieSession.jl
Julia
3
star
33

GenieFrameworkDocs

CSS
3
star
34

SearchLightSQLite.jl

SQLite adapter for SearchLight
Julia
3
star
35

GeniePackageManager.jl

GUI based package manager for GenieFramework
HTML
3
star
36

Inflector.jl

Utility module for working with grammatical rules (singular, plural, underscores, etc).
Julia
3
star
37

SearchLightMySQL.jl

MySQL adapter for SearchLight
Julia
3
star
38

GenieDeploy.jl

Julia
3
star
39

VersionCheck.jl

Utility package that helps with checking and notifying users of package updates
Julia
2
star
40

GenieSession.jl

Abstract/core package for working with sessions in Genie
Julia
2
star
41

StippleLatex.jl

JavaScript
2
star
42

GenieBuilder_GenieCloud_Issues

Repo for collecting Genie Builder and Genie Cloud bugs and features requests
2
star
43

ScoringEngineApp

Julia
2
star
44

StippleMathjs.jl

Support of mathjs and complex numbers in Stipple
Julia
2
star
45

CodeExamples

Julia
2
star
46

SearchLightSerializerJSON.jl

JSON data serializer for SearchLight
Julia
1
star
47

GenieDeployDocker.jl

Julia
1
star
48

GenieUI.jl

Higher level UI elements for Genie apps
Julia
1
star
49

GenieSessionRedisSession.jl

Redis backend for GenieSession
Julia
1
star
50

DockerizedGBApp

Genie πŸ§žβ€β™‚οΈ on Docker 🐳
Julia
1
star
51

StippleDownloads.jl

Donwload dynamically generated files with Stipple apps
Julia
1
star