Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/GenieFramework/Genie.jl
π§The highly productive Julia web framework
https://github.com/GenieFramework/Genie.jl
framework full-stack julia low-code mvc orm reactive vuejs web webframework
Last synced: 9 days ago
JSON representation
π§The highly productive Julia web framework
- Host: GitHub
- URL: https://github.com/GenieFramework/Genie.jl
- Owner: GenieFramework
- License: mit
- Created: 2016-02-19T09:23:20.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2024-10-23T17:08:49.000Z (17 days ago)
- Last Synced: 2024-10-23T19:11:14.683Z (17 days ago)
- Topics: framework, full-stack, julia, low-code, mvc, orm, reactive, vuejs, web, webframework
- Language: Julia
- Homepage: https://genieframework.com
- Size: 50.8 MB
- Stars: 2,269
- Watchers: 61
- Forks: 191
- Open Issues: 105
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.html
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
- Code of conduct: CODE_OF_CONDUCT.md
- Security: Security.md
Awesome Lists containing this project
- awesome-generative-ai-meets-julia-language - Genie.jl's
README
Genie.jl
π§ The highly productive Julia web framework
[![Docs](https://img.shields.io/badge/genie-docs-greenyellow)](https://www.genieframework.com/docs/) [![current status](https://img.shields.io/badge/julia%20support-v1.6%20and%20up-dark%20green)](https://github.com/GenieFramework/Genie.jl/blob/173d8e3deb47f20b3f8b4e5b12da6bf4c59f3370/Project.toml#L53) [![Website](https://img.shields.io/website?url=https%3A%2F%2Fgenieframework.com&logo=genie)](https://www.genieframework.com/) [![Tests](https://img.shields.io/badge/build-passing-green)](https://github.com/GenieFramework/Genie.jl/actions) [![Genie Downloads](https://shields.io/endpoint?url=https://pkgs.genieframework.com/api/v1/badge/Genie)](https://pkgs.genieframework.com?packages=Genie) [![Tweet](https://img.shields.io/twitter/url?url=https%3A%2F%2Fgithub.com%2FGenieFramework%2FGenie.jl)](https://twitter.com/GenieMVC)
Built with β€οΈ by
contributors
Genie.jl is the backbone of the [Genie Framework](https://genieframework.com), 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](https://github.com/GenieFramework/Genie.jl)**: the server backend, providing features for routing, templating, authentication, and much more.
- **[Stipple.jl](https://github.com/GenieFramework/Stipple.jl)**: a package for building reactive UIs with a simple and powerful low-code API in pure Julia.
- **[Genie Builder](https://learn.genieframework.com/docs/genie-builder/quick-start)**: a VSCode plugin for building UIs visually in a drag-and-drop editor.
- **[SearchLight.jl](https://github.com/GenieFramework/SearchLight.jl)**: a complete ORM solution, enabling easy database integration without writing SQL queries.To learn more about Genie, visit the [documentation](https://learn.genieframework.com/docs/guides), and the [app gallery](https://learn.genieframework.com/app-gallery).
If you need help with anything, you can find us on [Discord](https://discord.com/invite/9zyZbD6J7H).
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**](#features-of-genie.jl)
- [**Contributing**](#contributing)
- [**Special Credits**](#special-credits)
- [**License**](#license)---
### **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 ...```julia
# 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-repl
julia> using Genie, Genie.Routerjulia> 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-repl
julia> using Pkgjulia> 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
```julia
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
``````shell
$ bin/runtask S3DBTask
```π¦ **Plugin Ecosystem:** Explore plugins built by the community such as [GenieAuthentication](https://github.com/GenieFramework/GenieAuthentication.jl), [GenieAutoreload](https://github.com/GenieFramework/GenieAutoreload.jl), [GenieAuthorisation](https://github.com/GenieFramework/GenieAuthorisation.jl), and more
ποΈ **ORM Support:** Explore [SearchLight](https://github.com/GenieFramework/SearchLight.jl) a complete ORM solution for Genie, supporting Postgres, MySQL, SQLite and other adapters
```julia
function search(user_names, regions, startdate, enddate)
# ... hidden codewhere_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`
```julia
module CreateTableRecordimport 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)
]
endadd_index(:record, :user_uuid)
add_index(:record, :user_name)
add_index(:record, :region)
add_index(:record, :date_of_birth)
endfunction down()
drop_table(:record)
endend
```* `Model Validations`
π More Genie features like:
* `Files Uploads````julia
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](https://www.genieframework.com/docs/genie/tutorials/Overview.html) πββοΈπββοΈ## **Contributing**
Please contribute using [GitHub Flow](https://guides.github.com/introduction/flow). Create a branch, add commits, and [open a pull request](https://github.com/genieframework/genie.jl/compare).
Please read [`CONTRIBUTING`](CONTRIBUTING.md) for details on our [`CODE OF CONDUCT`](CODE_OF_CONDUCT.md), 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](https://opensource.org/licenses/MIT) - see the [`LICENSE`](https://github.com/GenieFramework/Genie.jl/blob/master/LICENSE.md) 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.