The web framework for writing faster sites, faster

Overview

Gondola

Build Status

The web framework for writing faster sites, faster. Written in Go. View documentation at http://gondolaweb.com.

Unless indicated otherwise at the top of file, all the source code for Gondola is released under the MPL-2 license.

Contributors, either individuals or companies, will be credited by alphabetical order in the CONTRIBUTORS file. If you're submitting your first pull request, please add yourself to the file in a separate commit.

Please note that all contributions to Gondola require a copyright assignment of the code to Rainy Cape S.L.. In order to simplify contributions, we'll understand you agree to these terms if you submit a pull request.

Issues
  • Enable Sourcegraph

    Enable Sourcegraph

    I want to use Sourcegraph code search and code review with gondola. A project maintainer needs to enable it to set up a webhook so the code is up-to-date there.

    Could you please enable gondola on @Sourcegraph by going to https://sourcegraph.com/github.com/rainycape/gondola and clicking on Settings? (It should only take 15 seconds.)

    Thank you!

    enhancement 
    opened by louis-paul 5
  • A few problems with the AppEngine build

    A few problems with the AppEngine build

    • [x] The generated application has two main()
    • [x] I cannot run the tests. Gondola calls goapp with -L flag here which not defined.

    It would be also interesting to see some metrics, but I do really like the idea of a portable application between GAE and bare metal.

    [email protected] ~/code/src/github.com/eMxyzptlk/gondola_app   % goapp version
    go version go1.2.1 (appengine-1.9.14) linux/amd64
    [email protected] ~/code/src/github.com/eMxyzptlk   % gondola new -gae gondola_app
    [D] 2014/11/05 12:54:47 writing file gondola_app/app.go
    [D] 2014/11/05 12:54:47 writing file gondola_app/app_test.go
    [D] 2014/11/05 12:54:47 creating directory gondola_app/assets
    [D] 2014/11/05 12:54:47 writing file gondola_app/handlers.go
    [D] 2014/11/05 12:54:47 creating directory gondola_app/tmpl
    [D] 2014/11/05 12:54:47 writing file gondola_app/app.conf
    [D] 2014/11/05 12:54:47 writing file gondola_app/app.yaml
    [D] 2014/11/05 12:54:47 writing file gondola_app/cron.yaml
    [D] 2014/11/05 12:54:47 writing file gondola_app/dev.conf
    [D] 2014/11/05 12:54:47 writing file gondola_app/main.go
    [D] 2014/11/05 12:54:47 writing file gondola_app/main_appengine.go
    [D] 2014/11/05 12:54:47 writing file gondola_app/app.conf
    [D] 2014/11/05 12:54:47 writing file gondola_app/dev.conf
    [D] 2014/11/05 12:54:47 writing file gondola_app/main.go
    [email protected] ~/code/src/github.com/eMxyzptlk   % cd gondola_app
    [email protected] ~/code/src/github.com/eMxyzptlk/gondola_app   % gondola gae-dev
    [D] 2014/11/05 12:54:59 starting App Engine development server - press Control+C to stop
    [D] 2014/11/05 12:54:59 compiling app assets
    # github.com/eMxyzptlk/gondola_app
    ./main_appengine.go:36: main redeclared in this block
            previous declaration at ./main.go:3
    error running command gae-dev: exit status 2
    [email protected] ~/code/src/github.com/eMxyzptlk/gondola_app   % rm main.go
    [email protected] ~/code/src/github.com/eMxyzptlk/gondola_app   % gondola gae-test
    [D] 2014/11/05 12:55:10 starting App Engine tests
    INFO     2014-11-05 20:55:11,578 devappserver2.py:741] Skipping SDK update check.
    INFO     2014-11-05 20:55:11,600 api_server.py:172] Starting API server at: http://localhost:41295
    INFO     2014-11-05 20:55:12,401 dispatcher.py:186] Starting module "default" running at: http://localhost:8080
    INFO     2014-11-05 20:55:12,402 admin_server.py:118] Starting admin server at: http://localhost:8000
    2014/11/05 12:55:14 appengine: not running under devappserver2; using some default configuration
    flag provided but not defined: -L
    Usage of /tmp/go-build290760009/github.com/eMxyzptlk/gondola_app/_test/gondola_app.test:
      -H="": Host to run the test against
      -addr_api="": deprecated
      -addr_http="": deprecated
      -admin-email="": When running in non-debug mode, any error messages will be emailed to this adddress
      -blobstore="": Default blobstore, returned by Context.Blobstore()
      -cache="": Default cache, returned by Context.Cache()
      -config="/home/wmn/code/src/github.com/eMxyzptlk/gondola_app/app.conf": Config file name
      -database="": Default database to use, used by Context.Orm()
      -debug=false: Enable app debug mode. This causes runtime errors to generate a detailed error page
      -default-from="": Default From address when sending emails
      -encryption-key="": Key used for encryption (e.g. encrypted cookies)
      -language="": Set the default language for translating strings
      -log-debug=false:
      -mail-server="localhost:25": Default mail server used by gnd.la/net/mail
      -port=8888: Port to listen on
      -secret="": Secret used for, among other things, hashing cookies
      -template-debug=false: Enable template debug mode. This disables asset bundling and template caching
      -test.bench="": regular expression to select benchmarks to run
      -test.benchmem=false: print memory allocations for benchmarks
      -test.benchtime=1s: approximate run time for each benchmark
      -test.blockprofile="": write a goroutine blocking profile to the named file after execution
      -test.blockprofilerate=1: if >= 0, calls runtime.SetBlockProfileRate()
      -test.coverprofile="": write a coverage profile to the named file after execution
      -test.cpu="": comma-separated list of number of CPUs to use for each test
      -test.cpuprofile="": write a cpu profile to the named file during execution
      -test.memprofile="": write a memory profile to the named file after execution
      -test.memprofilerate=0: if >=0, sets runtime.MemProfileRate
      -test.outputdir="": directory in which to write profiles
      -test.parallel=1: maximum test parallelism
      -test.run="": regular expression to select tests and examples to run
      -test.short=false: run smaller test suite to save time
      -test.timeout=0: if positive, sets an aggregate time limit for all tests
      -test.v=false: verbose: print additional output
    
    Available commands:
      cat-file
      make-assets
    
    Type /tmp/go-build290760009/github.com/eMxyzptlk/gondola_app/_test/gondola_app.test help for details.
    exit status 2
    FAIL    github.com/eMxyzptlk/gondola_app        0.081s
    goapp: caught SIGINT, waiting for dev_appserver.py to shut down
    INFO     2014-11-05 20:55:14,192 shutdown.py:45] Shutting down.
    INFO     2014-11-05 20:55:14,192 api_server.py:588] Applying all pending transactions and saving the datastore
    INFO     2014-11-05 20:55:14,193 api_server.py:591] Saving search indexes
    
    opened by kalbasit 1
  • Asset Management and Templates

    Asset Management and Templates

    Hi, I really like this framework. I've been combing through the api and source code now for a 1-2 days and definitely impressed with it. Nice work! :+1:

    I want to dive right in and just had a few questions about the asset management system and templates. I've seen includes and extends, etc.

    • What features are included? Fingerprinted assets are a part of this?
    • How does the template system work? (specifically features)
    • What is vfs and how is it used? For eg. the bake command.
    • What's the workflow involved when one wants to deploy?

    Thanks

    opened by dre1080 0
  • randomString infinite loop

    randomString infinite loop

    opened by dchest 0
  • Fix function comments based on best practices from Effective Go

    Fix function comments based on best practices from Effective Go

    Every exported function in a program should have a doc comment. The first sentence should be a summary that starts with the name being declared. From effective go.

    I generated this with CodeLingo and I'm keen to get some feedback, but this is automated so feel free to close it and just say "opt out" to opt out of future CodeLingo outreach PRs.

    opened by BlakeMScurr 2
  • Unable to install gondola

    Unable to install gondola

    I'm using Archlinux. If I follow the guide http://gondolaweb.com/tutorials/installing-gondola/, the installation fails as the connection is refused:

    > go get -v gnd.la/cmd/gondola
    
    Fetching https://gnd.la/cmd/gondola?go-get=1
    
    https fetch failed: Get https://gnd.la/cmd/gondola?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused
    
    package gnd.la/cmd/gondola: unrecognized import path "gnd.la/cmd/gondola" (https fetch: Get https://gnd.la/cmd/gondola?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    

    Unfortunately it is also not possible to do: go get github.com/rainycape/gondola/cmd/gondola as it tries to import from gnd.la:

    package gnd.la/app: unrecognized import path "gnd.la/app" (https fetch: Get https://gnd.la/app?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    package gnd.la/app/profile: unrecognized import path "gnd.la/app/profile" (https fetch: Get https://gnd.la/app/profile?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    package gnd.la/config: unrecognized import path "gnd.la/config" (https fetch: Get https://gnd.la/config?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    package gnd.la/crypto/cryptoutil: unrecognized import path "gnd.la/crypto/cryptoutil" (https fetch: Get https://gnd.la/crypto/cryptoutil?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    package gnd.la/encoding/base64: unrecognized import path "gnd.la/encoding/base64" (https fetch: Get https://gnd.la/encoding/base64?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    package gnd.la/i18n/messages: unrecognized import path "gnd.la/i18n/messages" (https fetch: Get https://gnd.la/i18n/messages?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    package gnd.la/i18n/po: unrecognized import path "gnd.la/i18n/po" (https fetch: Get https://gnd.la/i18n/po?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    package gnd.la/internal/gen: unrecognized import path "gnd.la/internal/gen" (https fetch: Get https://gnd.la/internal/gen?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    package gnd.la/internal/gen/app: unrecognized import path "gnd.la/internal/gen/app" (https fetch: Get https://gnd.la/internal/gen/app?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    package gnd.la/internal/gen/genutil: unrecognized import path "gnd.la/internal/gen/genutil" (https fetch: Get https://gnd.la/internal/gen/genutil?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    package gnd.la/internal/project: unrecognized import path "gnd.la/internal/project" (https fetch: Get https://gnd.la/internal/project?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    package gnd.la/internal/runtimeutil: unrecognized import path "gnd.la/internal/runtimeutil" (https fetch: Get https://gnd.la/internal/runtimeutil?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    package gnd.la/internal/vfsutil: unrecognized import path "gnd.la/internal/vfsutil" (https fetch: Get https://gnd.la/internal/vfsutil?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    package gnd.la/log: unrecognized import path "gnd.la/log" (https fetch: Get https://gnd.la/log?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    package gnd.la/net/urlutil: unrecognized import path "gnd.la/net/urlutil" (https fetch: Get https://gnd.la/net/urlutil?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    package gnd.la/util/fileutil: unrecognized import path "gnd.la/util/fileutil" (https fetch: Get https://gnd.la/util/fileutil?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    package gnd.la/util/generic: unrecognized import path "gnd.la/util/generic" (https fetch: Get https://gnd.la/util/generic?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    package gnd.la/util/stringutil: unrecognized import path "gnd.la/util/stringutil" (https fetch: Get https://gnd.la/util/stringutil?go-get=1: dial tcp 192.99.45.224:443: getsockopt: connection refused)
    
    

    I tried to do solve it by :

    > ln -s $GOPATH/src/github.com/rainycape/gondola $GOPATH/src/gnd.la
    > go get -v gnd.la/cm/gondola
    

    And install the dependencies manually reported by goinstall from $GOPATH/src/gnd.la/cmd/gondola:

    go get github.com/howeyc/gopass
    go get github.com/rainycape/browser
    go get github.com/rainycape/command
    go get github.com/dchest/uniuri
    go get github.com/naoina/toml
    go get github.com/rainycape/unidecode
    go get github.com/rainycape/vfs
    go get golang.org/x/tools/go/gcimporter
    

    I'm almost there, but the last command fails:

    > go get golang.org/x/tools/go/gcimporter
    package golang.org/x/tools/go/gcimporter: cannot find package "golang.org/x/tools/go/gcimporter" 
            /usr/lib/go/src/golang.org/x/tools/go/gcimporter (from $GOROOT)
            ~/go/src/golang.org/x/tools/go/gcimporter (from $GOPATH)
    

    I'd love to try Gondola. Do you plan to fix this to make gondola go gettable again? Otherwise this makes adoption impossible.

    opened by stanim 2
  • Dependent package unidecode.v1 doesn't exist anymore

    Dependent package unidecode.v1 doesn't exist anymore

    The stringutil imports "gopkgs.com/unidecode.v1"

    https://github.com/rainycape/gondola/blob/master/util/stringutil/slug.go#L7

    but that no longer exists and gives a 404 when trying to go get.

    That in turn makes the stringutil package uninstallable.

    opened by victorquinn 0
  • Fix build error in windows app engine

    Fix build error in windows app engine

    When running app engine on windows, the build fails with error: "isatty redeclared in this block" because log/tty_windows.go and log/tty_safe.go are both being built. Since log/tty_safe.go defaults to the windows return value, this seems sufficient.

    opened by dre1080 0
  • Great project but lack of documentation

    Great project but lack of documentation

    This is a great project but it was released too early without a proper documentation. Don't get me wrong, I like people contribute to open source. But without a proper documentation, it is useless.

    Ever heard about Laravel? Yes, almost all PHP web developers knows about it. The author is Taylor Otwell, a very disciplined programmer. Here is a quote from his blog:

    I promised myself never to release Laravel until I had great documentation, and I never release a new version until the documentation is totally up to date. Any PHP programmer can pick up Laravel and start using it in a matter of minutes. The expressiveness of the code itself and the great documentation truly make coding enjoyable.

    http://taylorotwell.tumblr.com/post/21038245018/why-laravel

    But in the end, this is your code. It is up to you to do anything with it. Just my two cents.

    Cheers. :)

    enhancement 
    opened by blackrosezy 2
go-zero is a web and rpc framework written in Go. It's born to ensure the stability of the busy sites with resilient design. Builtin goctl greatly improves the development productivity.

go-zero English | 简体中文 0. what is go-zero go-zero is a web and rpc framework that with lots of engineering practices builtin. It’s born to ensure the

好未来技术 19.7k Aug 8, 2022
Flamingo Framework and Core Library. Flamingo is a go based framework for pluggable web projects. It is used to build scalable and maintainable (web)applications.

Flamingo Framework Flamingo is a web framework based on Go. It is designed to build pluggable and maintainable web projects. It is production ready, f

Flamingo 305 Aug 4, 2022
The jin is a simplified version of the gin web framework that can help you quickly understand the core principles of a web framework.

jin About The jin is a simplified version of the gin web framework that can help you quickly understand the core principles of a web framework. If thi

null 8 Jul 14, 2022
A REST framework for quickly writing resource based services in Golang.

What is Resoursea? A high productivity web framework for quickly writing resource based services fully implementing the REST architectural style. This

Resoursea 32 Jan 24, 2022
⚡ Rux is an simple and fast web framework. support middleware, compatible http.Handler interface. 简单且快速的 Go web 框架,支持中间件,兼容 http.Handler 接口

Rux Simple and fast web framework for build golang HTTP applications. NOTICE: v1.3.x is not fully compatible with v1.2.x version Fast route match, sup

Gookit 81 Jul 20, 2022
Roche is a Code Generator and Web Framework, makes web development super concise with Go, CleanArch

It is still under development, so please do not use it. We plan to release v.1.0.0 in the summer. roche is a web framework optimized for microservice

Riita 15 May 21, 2022
A powerful go web framework for highly scalable and resource efficient web application

webfr A powerful go web framework for highly scalable and resource efficient web application Installation: go get -u github.com/krishpranav/webfr Exa

Krisna Pranav 13 Nov 28, 2021
A powerful go web framework for highly scalable and resource efficient web application

A powerful go web framework for highly scalable and resource efficient web application

null 21 May 25, 2022
A web app built using Go Buffalo web framework

Welcome to Buffalo Thank you for choosing Buffalo for your web development needs. Database Setup It looks like you chose to set up your application us

Mike Okoth 0 Feb 7, 2022
laravel for golang,goal,fullstack framework,api framework

laravel for golang,goal,fullstack framework,api framework

桥边红药 17 Feb 24, 2022
Gin is a HTTP web framework written in Go (Golang).

Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance -- up to 40 times faster. If you need smashing performance, get yourself some Gin.

Gin-Gonic 61.7k Aug 7, 2022
An ideally refined web framework for Go.

Air An ideally refined web framework for Go. High-performance? Fastest? Almost all web frameworks are using these words to tell people that they are t

Aofei Sheng 417 Jul 3, 2022
An opinionated productive web framework that helps scaling business easier.

appy An opinionated productive web framework that helps scaling business easier, i.e. focus on monolith first, only move to microservices with GRPC la

appist 124 Aug 3, 2022
BANjO is a simple web framework written in Go (golang)

BANjO banjo it's a simple web framework for building simple web applications Install $ go get github.com/nsheremet/banjo Example Usage Simple Web App

Nazarii Sheremet 19 Jan 24, 2022
beego is an open-source, high-performance web framework for the Go programming language.

Beego Beego is used for rapid development of enterprise application in Go, including RESTful APIs, web apps and backend services. It is inspired by To

astaxie 498 Aug 2, 2022
High performance, minimalist Go web framework

Supported Go versions As of version 4.0.0, Echo is available as a Go module. Therefore a Go version capable of understanding /vN suffixed imports is r

LabStack LLC 23k Aug 4, 2022
⚡️ Express inspired web framework written in Go

Fiber is an Express inspired web framework built on top of Fasthttp, the fastest HTTP engine for Go. Designed to ease things up for fast development w

Fiber 21.3k Aug 8, 2022
Go web framework with a natural feel

Fireball Overview Fireball is a package for Go web applications. The primary goal of this package is to make routing, response writing, and error hand

Zack Patrick 58 Jul 22, 2022