Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
a5dc31c
optimize mockery
hwbrzzl Aug 22, 2025
cc6e612
add divider and colored outputs (#137)
zoryamba Oct 5, 2025
52e993c
Add MongoDB package (#140)
tonidy Oct 17, 2025
c52d02c
Enhance package.md with discoverability tips via GitHub Topic (#141)
tonidy Oct 17, 2025
4859393
feat: documentation for console arguments (#132)
oprudkyi Oct 25, 2025
554b6dc
Merge branch 'master' into v1.17.x
krishankumar01 Dec 23, 2025
b9a9781
feat: [#559] Feature Comparison Table with Laravel
hwbrzzl Jan 4, 2026
8d46d81
optimize
hwbrzzl Jan 4, 2026
65ce02a
add introduction to process facade
krishankumar01 Jan 11, 2026
cbbe9bb
add docs for process Pipelining
krishankumar01 Jan 11, 2026
7f7433f
add warning in process Pipeline configuration
krishankumar01 Jan 11, 2026
4daf386
add doc for async processes
krishankumar01 Jan 11, 2026
36a6a8f
add doc for concurrent processes
krishankumar01 Jan 11, 2026
109d75c
add docs for pluralization
krishankumar01 Jan 11, 2026
8b9111d
add pluralization supported languages
krishankumar01 Jan 11, 2026
c3ae6a4
optimize mockery
hwbrzzl Aug 22, 2025
bd2c1f0
add divider and colored outputs (#137)
zoryamba Oct 5, 2025
de04fd4
Add MongoDB package (#140)
tonidy Oct 17, 2025
91d975d
Enhance package.md with discoverability tips via GitHub Topic (#141)
tonidy Oct 17, 2025
19cb9f3
feat: documentation for console arguments (#132)
oprudkyi Oct 25, 2025
4c5867f
feat: [#559] Feature Comparison Table with Laravel
hwbrzzl Jan 4, 2026
dbe9400
optimize
hwbrzzl Jan 4, 2026
d862883
add introduction to process facade
krishankumar01 Jan 11, 2026
e2251a1
add docs for process Pipelining
krishankumar01 Jan 11, 2026
6c27f61
add warning in process Pipeline configuration
krishankumar01 Jan 11, 2026
f1d9c16
add doc for async processes
krishankumar01 Jan 11, 2026
456e78f
add doc for concurrent processes
krishankumar01 Jan 11, 2026
a4a71fd
add docs for pluralization
krishankumar01 Jan 11, 2026
89bd81f
add pluralization supported languages
krishankumar01 Jan 11, 2026
59a4d3c
mail template
hwbrzzl Jan 14, 2026
bbfb00b
optimize
hwbrzzl Jan 14, 2026
25008aa
add some features
hwbrzzl Jan 14, 2026
aa124c7
optimize
hwbrzzl Jan 14, 2026
bf3e213
optimize
hwbrzzl Jan 15, 2026
e09aa36
optimize
hwbrzzl Jan 15, 2026
e32480a
optimize
hwbrzzl Jan 16, 2026
4c01006
optimize
hwbrzzl Jan 16, 2026
d6a0fe1
optimize
hwbrzzl Jan 16, 2026
2a74935
Merge remote-tracking branch 'origin/v1.17.x' into v1.17.x
krishankumar01 Jan 22, 2026
deb0f77
remove telemetry facade documentation
krishankumar01 Jan 22, 2026
4d2bdf3
optimise pluralization example
krishankumar01 Jan 22, 2026
aa2dac2
add documentation for http client testing
krishankumar01 Jan 22, 2026
ce6b48c
fix view.md
krishankumar01 Jan 22, 2026
5fe5bf8
optimize
hwbrzzl Jan 24, 2026
0edb416
optimize TODO
hwbrzzl Jan 24, 2026
eed932c
add navigate
hwbrzzl Jan 24, 2026
7559d4b
add versions
hwbrzzl Jan 24, 2026
c46a143
add versions
hwbrzzl Jan 24, 2026
db64df8
optimize home page
hwbrzzl Jan 25, 2026
b821ec9
Merge branch 'master' into v1.17.x
krishankumar01 Jan 26, 2026
15dbb0f
optimize code
hwbrzzl Jan 29, 2026
fa92f3d
add new providers
hwbrzzl Jan 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 46 additions & 11 deletions .vitepress/config/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,20 @@ export const config = defineConfig({
nav: nav(),
sidebar: [
{
text: 'Quickstart',
base: '/getting-started/',
items: sidebarQuickstart()
text: 'Prologue',
base: '/prologue/',
items: sidebarPrologue()
},
{
text: 'Upgrade',
base: '/upgrade/',
items: sidebarUpgrade()
},
{
text: 'Getting Started',
base: '/getting-started/',
items: sidebarGettingStarted()
},
{
text: 'Architecture Concepts',
base: '/architecture-concepts/',
Expand Down Expand Up @@ -97,14 +102,27 @@ function nav(): DefaultTheme.NavItem[] {
text: 'Video Tutorials',
link: 'https://www.youtube.com/playlist?list=PL40Xne4u-oXJ0Z5uFiPWHqIMvzZaG_BDf'
},
{
text: 'Versions',
items: [
{
text: 'v1.17 (Latest)',
link: 'https://www.goravel.dev/'
},
{
text: 'v1.16',
link: 'https://v116.goravel.dev/'
},
]
},
{
text: 'Translate',
link: '/getting-started/contributions#add-a-new-language'
link: '/prologue/contributions#add-a-new-language'
}
]
}

function sidebarQuickstart(): DefaultTheme.SidebarItem[] {
function sidebarGettingStarted(): DefaultTheme.SidebarItem[] {
return [
{
text: 'Installation',
Expand All @@ -122,6 +140,15 @@ function sidebarQuickstart(): DefaultTheme.SidebarItem[] {
text: 'Compile',
link: 'compile'
},
{
text: 'Excellent Packages',
link: 'packages'
}
]
}

function sidebarPrologue(): DefaultTheme.SidebarItem[] {
return [
{
text: 'Release Notes',
link: 'releases'
Expand All @@ -131,8 +158,8 @@ function sidebarQuickstart(): DefaultTheme.SidebarItem[] {
link: 'contributions'
},
{
text: 'Excellent Packages',
link: 'packages'
text: 'Compare With Laravel',
link: 'compare-with-laravel'
},
{
text: 'Privacy Policy',
Expand All @@ -144,12 +171,12 @@ function sidebarQuickstart(): DefaultTheme.SidebarItem[] {
function sidebarUpgrade(): DefaultTheme.SidebarItem[] {
return [
{
text: 'Upgrading To v1.16 From v1.15',
link: 'v1.16'
text: 'Upgrading To v1.17 From v1.16',
link: 'v1.17'
},
{
text: 'Upgrading To v1.15 From v1.14',
link: 'v1.15'
text: 'Upgrading To v1.16 From v1.15',
link: 'v1.16'
},
{
text: 'History',
Expand Down Expand Up @@ -266,6 +293,10 @@ function sidebarAdvanced(): DefaultTheme.SidebarItem[] {
text: 'Color Output',
link: 'color'
},
{
text: 'Processes',
link: 'processes'
},
{
text: 'Strings',
link: 'strings'
Expand All @@ -277,6 +308,10 @@ function sidebarAdvanced(): DefaultTheme.SidebarItem[] {
{
text: 'HTTP Client',
link: 'http-client'
},
{
text: 'Pluralization',
link: 'pluralization'
}
]
}
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This is goravel official document.

## Contributing

We welcome contributions to the Goravel documentation. Please see the [contributing guide](en/getting-started/contributions.md) for more information.
We welcome contributions to the Goravel documentation. Please see the [contributing guide](en/prologue/contributions.md) for more information.

## Install

Expand Down
72 changes: 51 additions & 21 deletions en/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,41 +16,71 @@ English | [中文](/zh_CN/README.md)

## About Goravel

Goravel is a web application framework with complete functions and excellent scalability. As a starting scaffolding to help Gopher quickly build their own applications.
Goravel is a full-featured, scalable web application framework that provides a starting scaffold to help Gophers quickly build their applications.

The framework's design is consistent with [Laravel](https://github.com/laravel/laravel), simplifying the learning curve for PHPers. Kudos to Laravel!
The framework style is consistent with [Laravel](https://laravel.com/), so PHP developers don’t need to learn a new framework and can still enjoy playing around with Golang, in tribute to Laravel!

We are open to receiving stars, PRs, and issues!
We welcome stars, PRs, and issues!

## Main Function
## Documentation

Online documentation [https://www.goravel.dev](https://www.goravel.dev)

| | | | | |
| ------------------------------------------------------------- | -------------------------------------- | ----------------------------------------------- | -------------------------------------------- | ----------------------------------------------------- |
| [Config](/getting-started/configuration.md) | [Http](/the-basics/routing.md) | [Authentication](/security/authentication.md) | [Authorization](/security/authorization.md) | [Orm](/orm/getting-started.md) |
| [Migrate](/database/migrations.md) | [Logger](/the-basics/logging.md) | [Cache](/digging-deeper/cache.md) | [Grpc](/the-basics/grpc.md) | [Artisan Console](/digging-deeper/artisan-console.md) |
| [Task Scheduling](/digging-deeper/task-scheduling.md) | [Queue](/digging-deeper/queues.md) | [Event](/digging-deeper/event.md) | [FileStorage](/digging-deeper/filesystem.md) | [Mail](/digging-deeper/mail.md) |
| [Validation](/the-basics/validation.md) | [Mock](/testing/mock.md) | [Hash](/security/hashing.md) | [Crypt](/security/encryption.md) | [Carbon](/digging-deeper/helpers.md) |
| [Package Development](/digging-deeper/package-development.md) | [Testing](/testing/getting-started.md) | [Localization](/digging-deeper/localization.md) | [Session](/the-basics/session.md) | |
Example [https://github.com/goravel/example](https://github.com/goravel/example)

> To optimize the documentation, please submit a PR to the documentation
> repository [https://github.com/goravel/docs](https://github.com/goravel/docs)

## Main Features

| Module Name | Description |
|-------------|-------------|
| [Artisan Console](https://www.goravel.dev/digging-deeper/artisan-console.html) | CLI command-line interface for application management and automation |
| [Authentication](https://www.goravel.dev/security/authentication.html) | User identity verification with JWT and Session drivers |
| [Authorization](https://www.goravel.dev/security/authorization.html) | Permission-based access control using policies and gates |
| [Cache](https://www.goravel.dev/digging-deeper/cache.html) | Store and retrieve data using memory, Redis, or custom drivers |
| [Carbon](https://www.goravel.dev/digging-deeper/helpers.html) | Helper functions for date and time manipulation |
| [Config](https://www.goravel.dev/getting-started/configuration.html) | Application configuration management from files and environment |
| [Crypt](https://www.goravel.dev/security/encryption.html) | Secure data encryption and decryption utilities |
| [DB](https://www.goravel.dev/database/getting-started.html) | Database query builder |
| [Event](https://www.goravel.dev/digging-deeper/event.html) | Application event dispatching and listening system |
| [Factory](https://www.goravel.dev/orm/factories.html) | Generate fake model data for testing purposes |
| [FileStorage](https://www.goravel.dev/digging-deeper/filesystem.html) | File upload, download, and storage across multiple drivers |
| [Grpc](https://www.goravel.dev/the-basics/grpc.html) | High-performance gRPC server and client implementation |
| [Hash](https://www.goravel.dev/security/hashing.html) | Secure password hashing |
| [Http](https://www.goravel.dev/the-basics/routing.html) | HTTP routing, controllers, and middleware management |
| [Http Client](https://www.goravel.dev/digging-deeper/http-client.html) | Make HTTP requests to external APIs and services |
| [Localization](https://www.goravel.dev/digging-deeper/localization.html) | Multi-language translation and locale management |
| [Logger](https://www.goravel.dev/the-basics/logging.html) | Application logging to files, console, or external services |
| [Mail](https://www.goravel.dev/digging-deeper/mail.html) | Send emails via SMTP or queue-based delivery |
| [Mock](https://www.goravel.dev/testing/mock.html) | Create test mocks for facades and dependencies |
| [Migrate](https://www.goravel.dev/database/migrations.html) | Version control for database schema changes |
| [Orm](https://www.goravel.dev/orm/getting-started.html) | Elegant Orm implementation for database operations |
| [Package Development](https://www.goravel.dev/digging-deeper/package-development.html) | Build reusable packages to extend framework functionality |
| [Process](https://www.goravel.dev/digging-deeper/process.html) | An expressive and elegant API around Go's standard `os/exec` package |
| [Queue](https://www.goravel.dev/digging-deeper/queues.html) | Defer time-consuming tasks to background job processing |
| [Seeder](https://www.goravel.dev/database/seeding.html) | Populate database tables with test or initial data |
| [Session](https://www.goravel.dev/the-basics/session.html) | Manage user session data across HTTP requests |
| [Task Scheduling](https://www.goravel.dev/digging-deeper/task-scheduling.html) | Schedule recurring tasks using cron-like expressions |
| [Testing](https://www.goravel.dev/testing/getting-started.html) | HTTP testing, mocking, and assertion utilities |
| [Validation](https://www.goravel.dev/the-basics/validation.html) | Validate incoming request data using rules |
| [View](https://www.goravel.dev/the-basics/views.html) | Template rendering engine for HTML responses |

## Compare With Laravel

[For Detail](https://www.goravel.dev/prologue/compare-with-laravel.html)

## Roadmap

[For Detail](https://github.com/goravel/goravel/issues?q=is%3Aissue+is%3Aopen)

## Excellent Extend Packages

[For Detail](getting-started/packages.md)

## Documentation

Online documentation [https://www.goravel.dev](https://www.goravel.dev)

Example [https://github.com/goravel/example](https://github.com/goravel/example)

> To optimize the documentation, please submit a PR to the documentation repository [https://github.com/goravel/docs](https://github.com/goravel/docs)
[For Detail](https://www.goravel.dev/getting-started/packages.html)

## Contributors

This project is made possible by everyone who contributes. To contribute, please consult the [Contribution Guide](getting-started/contributions.md).
This project is made possible by everyone who contributes. To contribute, please consult the [Contribution Guide](prologue/contributions.md).

<a href="https://github.com/hwbrzzl" target="_blank"><img src="https://avatars.githubusercontent.com/u/24771476?v=4" width="48" height="48"></a>
<a href="https://github.com/DevHaoZi" target="_blank"><img src="https://avatars.githubusercontent.com/u/115467771?v=4" width="48" height="48"></a>
Expand Down
81 changes: 43 additions & 38 deletions en/architecture-concepts/facades.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,58 +4,63 @@

## Introduction

`facades` provide a "static" interface for the core functionality of the application and provide a more flexible, more elegant, and easy-to-test syntax.

All `facades` of Goravel are defined under `github.com/goravel/framework/facades`. We can easily use `facades`:
`facades` provide a "static" interface for the core functionality of the application and provide a more flexible, more elegant, and easy-to-test syntax. All `facades` of Goravel are defined under the `app/facades` folder:

```go
import "github.com/goravel/framework/facades"
import "app/facades"

facades.Route().Run(facades.Config().GetString("app.host"))
facades.Config().GetString("app.host")
```

## How Facades Work

`facades` are generally instantiated in the `Register` or `Boot` stage of each module `ServerProvider`.
Each service provider registers its corresponding bindings in the service container, then the service container providers vairous `Make*` functions to build the binding instances. The `facades` in the `app/facades` folder call these `Make*` functions to get the instances from the service container. Let's use the `Route` facade as an example:

1. The `Route` service provider registers the `binding.Route` binding in the service container:

```go
func (config *ServiceProvider) Register() {
app := Application{}
facades.Config = app.Init()
type ServiceProvider struct {}

func (r *ServiceProvider) Register(app foundation.Application) {
app.Singleton(binding.Route, func(app foundation.Application) (any, error) {
return NewRoute(app.MakeConfig())
})
}

func (r *ServiceProvider) Boot(app foundation.Application) {}
```

If the `facades` use other `facades`, then instantiate them in the `Boot` phase of the `ServerProvider`:
2. The `Route` facade calls the `MakeRoute()` function to get the `Route` instance from the service container:

```go
func (database *ServiceProvider) Boot() {
app := Application{}
facades.DB = app.Init()
// app/facades/route.go
package facades

import (
"github.com/goravel/framework/contracts/route"
)

func Route() route.Route {
return App().MakeRoute()
}
```

## Facade Class Reference

| Facade | Document |
| ----------- | ---------------------------------------------------------- |
| App | [Container](../architecture-concepts/service-container.md) |
| Artisan | [Command Console](../digging-deeper/artisan-console.md) |
| Auth | [Authentication](../security/authentication.md) |
| Cache | [Cache](../digging-deeper/cache.md) |
| Config | [Configuration](../getting-started/configuration.md) |
| Crypt | [Encryption](../security/encryption.md) |
| Event | [Event](../digging-deeper/event.md) |
| Gate | [Authorization](../security/authorization.md) |
| Grpc | [Grpc](../the-basics/grpc.md) |
| Hash | [Hashing](../security/hashing.md) |
| Log | [Log](../the-basics/logging.md) |
| Mail | [Mail](../digging-deeper/mail.md) |
| Orm | [ORM](../orm/getting-started.md) |
| Queue | [Queue](../digging-deeper/queues.md) |
| RateLimiter | [RateLimiter](../the-basics/routing.md) |
| Route | [Route](../the-basics/routing.md) |
| Seeder | [Seeder](../database/seeding.md) |
| Schedule | [Schedule](../digging-deeper/task-scheduling.md) |
| Storage | [Storage](../digging-deeper/task-scheduling.md) |
| Testing | [Testing](../testing/getting-started.md) |
| Validation | [Validation](../digging-deeper/task-scheduling.md) |
> Given that the `facades` is exposed to the application, you can also create your own `facades` or override the existing `facades` in the `app/facades` folder.

## Install/Uninstall Facades

[goravel/goravel](https://github.com/goravel/goravel) installs all `facades` by default and [goravel/goravel-lite](https://github.com/goravel/goravel-lite) only installs essential `facades` like `Artisan`, `Config`. You can install or uninstall other `facades` as needed via the `package:install` and `package:uninstall` commands.

```shell
# Install a specific facade
./artisan package:install Route

# Install all facades
./artisan package:install --all

# Install all facades with default drivers
./artisan package:install --all --default

# Uninstall a specific facade
./artisan package:uninstall Route
```
23 changes: 19 additions & 4 deletions en/architecture-concepts/request-lifecycle.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,25 @@

## Introduction

The `main.go` file serves as the entry point for all requests in the Goravel application. It utilizes the `bootstrap.Boot()` function to initialize the framework.
Using any tool in the real world feels more intuitive when you know how it works. This document aims to give you a clear, high-level look at how Goravel functions. Don’t worry if you don’t get every term right away—just aim for a basic sense of how things work, and your expertise will grow as you explore the rest of the docs.

Then a Goravel instance is created by `app := foundation.NewApplication()` in `bootstrap/app.go`.
## Lifecycle Overview

After this, use `app.Boot()` to load the [Service Provider](service-providers.md) registered, and `config.Boot()` to load the configuration files under the config directory.
1. The `main.go` is the entry point of the application, it will call the `bootstrap.Boot()` function to initialize the framework, and use `app.Wait()` to keep the application running.

Finally, start the HTTP server by using `facades.Route().Run(facades.Config().GetString("app.host"))` in `main.go`.
2. The `bootstrap.Boot()` function will initialize a new Goravel application instance by calling `foundation.Setup()`, you can set service providers, routes, and other settings like migrations, schedules via `With*` functions here. Finally, call the `Start()` method to boot the application.

3. In the `Start()` method, it will first load configuration, then register all service providers and other settings. Finally, boot all service providers, return the application instance.

4. After the application is started, the http or grpc server will be started automatically if you have configured them. They are controled by [the runners of service providers](./service-providers.md#runners). You can normally use all facades in this stage, but remember that your customize code should be placed before `app.Wait()` in the `main.go` file. Or you can add your code into the `WithCallback` function in the `bootstrap/app.go` file to make sure your code is executed after the application is started.

```go
func Boot() contractsfoundation.Application {
return foundation.Setup().
WithConfig(config.Boot).
WithCallback(func() {
// Your custom code here, all facades are available here.
}).
Start()
}
```
Loading